トップページ > 記事閲覧
SSGを投稿したり、ゲーム解析について語るスレ
投稿日 : 2016/07/09(Sat) 16:45
投稿者 amateur◆kR..xsXL6RU
ID情報 : QQhIrlXXMbpyUFmUHV2iX0
参照先
--------------------------------------------------------
お知らせ
このサイトの「ツール情報」を見てこのスレッドに来られた方へ
knさんの「SpoilerALプロセス選択ツール」と「吉里吉里解析ツール」は、
このスレッドの(No.22)の記事でアップされています。
--------------------------------------------------------

猫缶Indexが閲覧不可になった際に開設された難民用の臨時掲示板が閉鎖されることになりましたので、
上記掲示板にあったスレの続きをこちらに立てました。

基本、前のスレと同じ感じで進行できればと思います。
前のスレでお世話になった方々、こちらでもよろしくお願いいたします。

--------------------------------------
(2017.12.17 追記)
SRPG Studio製ゲーム用SSGは、
現在、リンク先のスレッドにアップしています。
今後の更新もそちらのスレッドにて行います。(いつまで更新を続けるかは分かりませんが)

---------------------
(2017.05.13 追記)
「ヴァーレントゥーガ」のSSGを添付します(1個目のファイル)。
ふりーむ!からDL可能なVerと、上記リンク先のwikiからDLできるVerの両方で動作確認済み。
(現在の対応Verは「6.85r、6.85s、6.85t、6.85u、6.85v、7.00、7.00改」です)
ヴァーレントゥーガのシステムを使用している拡張シナリオについて、
各シナリオが「Vahren.exe」最新版(6.85r - 7.00改)での動作に対応している場合は、
「Vahren.exe」をヴァーレントゥーガVer6.85rから7.00改までのものに差し替えると、一応動作するようです。
exeをヴァーレントゥーガ最新版のものに差替えるとゲームが正常動作しない作品では不可。
(詳細・修正内容等はNo.503、510、514、518、522、530、563 の記事を参照)
最終更新:2017.09.19
(※ ヴァーレントゥーガ本体の2017年8/13、同8/28更新分でも動作します)
このSSGは「Vahren.exe」ver7.00(10月1日更新分)には対応していません。
このVerを含め、今後のゲーム更新に対応する予定も一切ありませんので悪しからず。事情は(No.566)を参照

---------------------
(2017.07.17 追記)
「SMILE GAME BUILDER」で製作されたゲーム用のSSGを添付します(2個目のファイル)。
現時点で対応するのを確認済みのSMILE GAME BUILDERのVerは以下のとおり(「1.7.3.0」については未確認)。
 1.0.6.23、1.0.6.26、1.7.0.10、1.7.4.0、1.7.5.2、1.8.0.7、1.8.1.0、1.9.1.0
各ゲームでSSGが動作するかは、上記のSMILE GAME BUILDERのVerによるようです。
上記のいずれかのVerに該当するなら、おそらく動作すると思います。
なお、SMILE GAME BUILDERのVerは添付SSGで確認可能になっています。
(修正内容は、No.546,568,585の記事を参照)
最終更新:2017.12.31
---------------------

【重要】
添付のSSGが正常動作するには、
「SpoilerALの修正パッチ」のスレッドで変態紳士さんがアップされている、
SpoilerAL本体の修正パッチ適用が必要です。
(できるだけ最新版に近いパッチ。古いパッチでは動作しません)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.1)
投稿日 : 2016/07/09(Sat) 18:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : QQhIrlXXMbpyUFmUHV2iX0
参照先
早速、前の掲示板のスレ等で私がアップしていたファイルの詰め合わせを、こちらにアップします。
基本的に内容はそのままですが、ウディタ解析用SSGのみ、若干機能を追加しております(可変DBにつき数値or文字列を判定可能に)。

なお、前の掲示板のスレに他の方がアップしていただいたファイル等については、
私から勝手にアップすることはありません(当たり前ですが)。

(2016.8.30 追記)
ウディタ解析用SSGを全面的に作り直したのでアップ(2つ目の添付ファイル)
詳細は(No.129)の記事を参照。
(2016.8.31 21:30ごろ追記)
上記のウディタ解析用SSG(2つ目の添付ファイル)を修正したので差し替え
詳細は(No.132)の記事を参照。
(2016.9.1 追記)
上記のウディタ解析用SSG(2つ目の添付ファイル)を修正したので差し替え
詳細は(No.136)の記事を参照。
(2016.9.9 追記)
上記のウディタ解析用SSG(2つ目の添付ファイル)を修正したので差し替え
詳細は(No.141)の記事を参照。
(2016.9.10 追記)
添付ファイル1個目の、ファイル詰め合わせの中に入っている「ウディタ用のリスト作成用ファイル」について、
正常に文字列をリスト化できない不具合を修正したので差し替え。
(2016.9.22 追記)
上記のウディタ解析用SSG(2つ目の添付ファイル)を修正したので差し替え
詳細は(No.154)の記事を参照。
(2016.9.22 2回目追記)
上記のウディタ解析用SSG(2つ目の添付ファイル)を修正したので差し替え
詳細は(No.158)の記事を参照。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.2)
投稿日 : 2016/07/09(Sat) 22:29
投稿者 (仔猫)◆KCezBilYINU
ID情報 : G/Ez7s/YEod2T9QJAAPZB0
参照先
テスト投稿
サクラエディタ用のキーワード強調設定サンプルです。

編集しやすいですね。本家猫缶のパワーアップ版?
添付ファイルの差し替えも可能です。

更新:少し追加してみたり…。(2017/04/04)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.3)
投稿日 : 2016/07/10(Sun) 00:45
投稿者 amateur
ID情報 : QAkTp3xxCYu676ApcQmfE/
参照先
>>2
おお、早速の投稿ありがとうございます。
私もサクラエディタユーザーですので、試しに使わせていただきますね。
それと、この掲示板では添付ファイルの差し替えできるんですか。
上でアップしたファイルは、ミスしたので一度削除してから上げ直したんですよ。
書込みを削除せずに差し替えできるのは便利ですね。

ただ、成りすまし防止のトリップ機能は使えない?のですかね(特に留意事項にも書いてない)
それと、デフォルトでRICKさん宛てらしきメールアドレスが入ってるのは仕様なのでしょうか。
(・・・癖で思わず認証に5963と入力しそうになりました)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.4)
投稿日 : 2016/07/10(Sun) 03:28
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : KDuP7EyuQeFztgqQrrIzD.
参照先
SpoilerAL 6.1 修正パッチ

※2016.08.30
「SpoilerALの修正パッチ」のスレに移動
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.5)
投稿日 : 2016/07/10(Sun) 05:44
投稿者 管理人◆PIflJPH.oeY
ID情報 : lo8Z0fcbjmz2O7k5NhVJm1
参照先
>>2
本家猫缶で使われていた「Web Topic」はサイトがなくなっていて入手不可能だったので、
避難所で使われていた「Web Patio」を使用しています。

ファイルアップロード機能とBBcodeの機能はもともとなかったので
公式サポートの掲示板に依頼してサポートしてもらいながらつけました。(画像のアップロードの機能はついていました。)

自分は「EmEditor Free」派ですね。
「サクラエディタ」だと横長のSSGを作った時にスクロールバーが表示されなかったような気がします。

>>3
メールアドレスの件ご報告ありがとうございます。早速修正しました。
後、2chのようにIDを自動生成して表示する機能は現在検討中です。
(というよりはサポート要請中)

P.S.
「吉里吉里解析ツール」とか「SpoilerALプロセス選択ツール」とか
サーバー上にアップロードしたほうがいいと思いますか?
(axfcのアップローダーはいつ消えるのかわからないので)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.6)
投稿日 : 2016/07/10(Sun) 13:21
投稿者 80-20
ID情報 : Pv2Y2tsAANZ6lDzQx0jQv0
参照先
>>5
避難所の避難所(?)の設置お疲れ様です。
こちらでも機会があればまた投稿させて頂こうと思います。

>>5-P.S.
個人的な意見はURLが生きている内は入手URLを記載するだけでいいかなと…
少なくとも製作者であるknさんの許可が無い内はその方が良いかと思います。
アップする際は「入手場所が無くなったので…」といった感じの一文を付けてアップするのが良いかなと愚考します。

その場合は入手URLを注視しなければならないので手間でしょうけど…


>>4
SpoilerAL修正パッチの更新有難う御座います。
いつも使用させて頂いています。


それと無駄な近況報告ですが、最近はゲーム解析が出来なくて落ち込み気味です。
まあ、定期的に避難所は拝見していましたけど。

どうでも良い事ですが、そろそろHNの変え時かな…元々は避難所のスレ80の記事20に投稿した名無して意味ですし。
それとも開き直ってこのまま推し通すか…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.7)
投稿日 : 2016/07/10(Sun) 17:47
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>3
名前の横に#文字列でトリップも付けれます(これも投稿後に名前変更で可能ですね)
ただ彼方の避難所で使ってたトリップをそのまま入れても同じトリップ表示にはならないので成りすまし防止には
暫く投稿やらみて判断されるしかないかも。

ちなみにここで同じトリップ入れてみたのですが
呪いが掛かってたので使うの止めました…試しにトリップ表示(トリップみてもらえば分かりますが(汗)
むしろこのまま使う手も…。

>>4
更新ありがとう。
数値ロック固定で問題なく動作してます。

>>5
管理人さんお疲れ様です。
「Web Patio」ですか詳細ありがとう(使いやすくカスタマイズされてますね)
(それとリンクが埋め込まれてる…!?どうやるんですか?)

>>6
80-20さん
お久しぶりです。最近お忙しいようで残念です(センスの良いコードお待ちしてます)
僕も以前「いつもの通りすがり」で書き込んでたのですが、同じ名前の方が現れたので混乱するといけないと変更しました‥。
うーん。80-20さん、センスがいいからどんな名前になるのか気になる所…。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.8)
投稿日 : 2016/07/10(Sun) 17:52
投稿者 amateur
ID情報 : 8ULG.oxBxwQ8.tIG4PerV1
参照先
>>2
(仔猫)さん
おお、トリップ表示もできるんですね。
まあ、私に成りすましても誰得だと思うので、私がトリップ使う必要無さそうですが(苦笑)

>>4
変態紳士さん
こちらでも引き続きSpoilerAL本体修正パッチのご提供、ありがとうございます。
修正を継続していただけるのは非常に有難いです。
この掲示板でもよろしくお願いいたします。

ところで、臨時版の前スレで変態紳士さんからアドレスいただいた、Javardry(Java製)についての
>その1:
>既にメモリのどこかに別のアイテムがあるならポインタの参照先になるアドレスを変えてみる。
遅まきながらこのアドバイスの意味が漸く理解できました。
取り敢えず、装備の職業・種族制限は、全アイテムの該当ポインタを、
全職業・種族で装備可能なアイテムのポインタと一括トグルで差し替えることで解決できました。
察しが悪くてすみませんでした。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.9)
投稿日 : 2016/07/10(Sun) 18:01
投稿者 amateur
ID情報 : 8ULG.oxBxwQ8.tIG4PerV1
参照先
>>5
管理人さん
この掲示板を開設くださってありがとうございます。
臨時版の方が急遽閉鎖されることになり、RICKさんがこの掲示板を用意してくださらなければ、
またもや難民化するところでした。
掲示板の運営・管理は大変だと思いますが、こちらでお世話になろうと思っていますので、
よろしくお願いいたします。

それと、メールアドレスの件、迅速な対応ありがとうございます。
つい独り言的にここに書いてしまいましたが、「管理人への質問や削除依頼 連絡用スレ」に書くべきことでしたね。
今後は気をつけたいと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.10)
投稿日 : 2016/07/10(Sun) 18:04
投稿者 amateur
ID情報 : 8ULG.oxBxwQ8.tIG4PerV1
参照先
(コメントが600字の字数制限に抵触したので書込みを分割)
>>5
>「吉里吉里解析ツール」とか「SpoilerALプロセス選択ツール」の件について
私も最近臨時版のログを漁っていて気付いたのですが、
作者のknさんは、臨時版の方に昨年秋(?)くらいに一度書込みされていたみたいですね(仔猫さんとのやり取り拝見しました)。
ということで、一応、臨時版の方は見てくださっていた(どの程度の頻度かは不明ですが)ようなので、
もう暫く様子見しても良さそうな気がします。
もしかしたら、その内この掲示板にも書込みしてくださるかもしれませんし。
この掲示板にknさんが書込みしてくださった時に、こちらへの再アップについて相談するとか。
もしそういう機会が無いまま、knさんご本人がアップしたファイルが消えてしまったら、
80-20さんがおっしゃるように、緊急避難的意味で再アップしましたと付記してこちらにアップするとか。

本当は、ツールの再アップの件以外でも、こちらでknさんに色々フォローしていただければ心強いのですが・・・
(knさんは、本家猫缶で少なくとも08年くらいから投稿されていたみたいですね)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.11)
投稿日 : 2016/07/10(Sun) 18:14
投稿者 amateur
ID情報 : 8ULG.oxBxwQ8.tIG4PerV1
参照先
>>6
80-20さん
この掲示板に来てくださって安心しました。
特に、SSG作者の方々がどの程度移住してくださるのか不安でしたので。
勝手ながら、こちらでもご活躍期待しております。

(以下独り言)
(・・・コメントの600字制限が割とシビアですね・・・)
(・・・私の矢鱈長文書く癖を直すべきですね・・・)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.12)
投稿日 : 2016/07/10(Sun) 19:00
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : XunziRhNjJtr/.3bsheW/0
参照先
Rubyからプロセスメモリ弄るライブラリ一式をこっちにもうp

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.13)
投稿日 : 2016/07/10(Sun) 19:15
投稿者 amateur◆kR..xsXL6RU
ID情報 : 8ULG.oxBxwQ8.tIG4PerV1
参照先
>>12
NEExploiTさん
こちらにファイルを再アップくださいましてありがとうございます。
こちらでもよろしくお願いします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.14)
投稿日 : 2016/07/10(Sun) 20:07
投稿者 管理人◆PIflJPH.oeY
ID情報 : HFbB5zd/A8P8qPYnSDgYI/
参照先
>>6 80-20さん
>>10 amateurさん

  • 「吉里吉里解析ツール」
  • 「SpoilerALプロセス選択ツール」

以上の2つのツールについてはブログの「ツール情報」のページに
入手先のリンクを貼るだけにしておこうと思います。
ご意見ありがとうございました。

>>7(仔猫)さん

「BBCode」というやつですね。リンク先はWikipediaに設定してあるので興味があったら調べてみてください。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.15)
投稿日 : 2016/07/10(Sun) 22:18
投稿者 yun
ID情報 : mPoVsZjx.PiByRNANDVTw/
参照先
こちらの方にほとんどの方がうつっているようなので、
とりあえず(全部ではないですが)私が投稿していたのを
適当に見繕ってこちらに。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.16)
投稿日 : 2016/07/11(Mon) 00:10
投稿者 80-20◆LEFxdWWYR3c
ID情報 : KZvo7.mR9CiId/rCr9cXk.
参照先
>>変態紳士さん

いきなりで申し訳ありませんが、お時間がある時で構いませんので、
SpoilerALの修正をお願い出来ないでしょうか?

内容は「[adjustment]dialog,」で文字列変換の不具合で例えば私の環境ですと、
「あいうえお」は本来「82A082A282A482A682A8」になる筈ですが何故か下記の様に変換されてしまいます。


あいうえお = FFFFFF82FFFFFFA0FFFFFF82FFFFFFA2FFFFFF82FFFFFFA4FFFFFF82FFFFFFA6FFFFFF82FFFFFFA8*+0400000006


それと無断ですみませんが >>4 に添付されていたテスト用のSSGを修正した確認用のSSGを添付させて頂きました。
どうかよろしくお願いいたします。

もう一つ、伺いたいのですが、スクリプトコマンドの追加は可能なのでしょうか?
SSGを作成している時に何時もこれがあれば便利だなと思えるのがあるのですが…

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.17)
投稿日 : 2016/07/11(Mon) 00:53
投稿者 amateur◆kR..xsXL6RU
ID情報 : aFXVugfJbV1cj6xckbW4y/
参照先
>>15
yunさん、こちらにもファイルをアップしてくださってありがとうございます。
こちらでも引き続きよろしくお願いします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.18)
投稿日 : 2016/07/11(Mon) 02:04
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>14
>「BBCode」
詳細ありがとう御座います。
早速、変態紳士さんのテキスト文字をみて…このカラーの方が目に優しいですね。
[hiddent]これも使えるかな?[/hiddent]
>>19
カラー設定ありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.19)
投稿日 : 2016/07/11(Mon) 06:08
投稿者 管理人◆PIflJPH.oeY
ID情報 : p8COd9xg2DkKQKPJfVAHc1
参照先
>>11 amateurさん
投稿文字制限を1000文字にしてみました。

>>14 (仔猫)さん
全体の文字(リンク以外)のデフォルトを「目に優しい色」に設定してみました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.20)
投稿日 : 2016/07/11(Mon) 19:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : rHahZVdx/0howLad.yVSN/
参照先
>>19
管理人さん、投稿文字制限の件、ありがとうございます。
どんどん使い勝手がよくなっていて助かります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.21)
投稿日 : 2016/07/11(Mon) 20:58
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>16
80-20さん
直しました。ファイルはNo.4の差し替えです。

修正後に
82A082A282A482A682A8*+0400000006
となりますが、検索は問題無いようです。(後ろの不明な数字は・・・)

メモリの書き換えは1バイトで済みましたが検索が分からなくてパソコン教室へ行きたくなりました。

>それと無断ですみませんが >>4 に添付されていたテスト用のSSGを修正した確認用のSSGを添付させて頂きました。
テストに使えて助かりました。
少し変更したものを修正ファイルに添付させてもらってます。

>もう一つ、伺いたいのですが、スクリプトコマンドの追加は可能なのでしょうか?
>SSGを作成している時に何時もこれがあれば便利だなと思えるのがあるのですが…
内容が分からない事には検討できません。
どんなものでしょう。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.22)
投稿日 : 2016/07/11(Mon) 22:14
投稿者 kn◆YbsxOuLurQk
ID情報 : 8o.Hv76/POa4s7JjN5fJY.
参照先
ツールに関してレスがあったので、自分でアップしておきますね。
いろいろ半端なところがあるのでいずれは修正したいところですが…いつになるやらです。

掲示板については避難所の時から割とちょくちょく見てましたので
これからもちょくちょく見ていると思います。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.23)
投稿日 : 2016/07/12(Tue) 00:56
投稿者 amateur◆kR..xsXL6RU
ID情報 : 27FluesRG7bGw7zPfbLT41
参照先
>>22
knさん、書込みと、ツールのアップありがとうございます!
管理人さんたちとknさんのツールについて話してから、
こんなに早くご本人からアップしていただけるとは思っていませんでした。

吉里吉里解析ツールとSpoilerALプロセス選択ツールは日頃から重宝させていただいております。
私には吉里吉里製はツール無しには解析不可能ですし、
SpoilerALプロセス選択ツールは、DL版の他に、不正終了等によりゲームプロセスが複数起動状態になった時に活用しています。
他にも、knさんの作成されたSSGは、通常の改造に使用するのは勿論、
SSGの書き方を覚えるのに大変参考になりました。
ツールや多数のSSGを公開くださり、感謝申し上げます。

気が向かれましたら、今後も書込みいただけると幸いです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.24)
投稿日 : 2016/07/12(Tue) 17:42
投稿者 80-20◆LEFxdWWYR3c
ID情報 : KZvo7.mR9CiId/rCr9cXk.
参照先
>>21 変態紳士さん

パッチ修正の迅速な対応ありがとうございます。
修正されている事を確認できました。

それと機能追加の件検討して頂けるだけで有難いです。
お言葉に甘えて要望を出させて頂きたいと思います。


■内容:変数維持(?)

[variable](仮)で作成した変数を作成以降のアドレスに使用できるように出来ないでしょうか?

それと可能であれば、複数設置可能・チェインファイルなどにも使用可能できて、
アドレス内で同名の変数が作成された場合はアドレス内の変数を優先されるようにも出来ないでしょうか。

これが実装できれば同じポインタを使用するSSGは大分軽症化できると思うのですが…


●使用例

// 仮定
// 0x400000 = 0x1400000 = 0x2400000
// 0x500000 = 0x1500000

// ↓変数「base(0x1400000)」をセット
[variable]_[:0x400000:]=>base

// ↓変数「ad(0x500000)」をセット
[variable]0x500000=>ad

// ↓アクセスアドレス「0x1400000」
[subject]項目名[ '+' _mem,_$base,4,num,-,%d '+' ]/項目名/:calc,_$base,0,99999,unsigned

// ↓アクセスアドレス「0x2400000」
[subject]項目名[ '+' _mem,_[\:$base\:],4,num,-,%d '+' ]/項目名/:calc,_[:$base:],0,99999,unsigned

// ↓アクセスアドレス「0x1500000」// これは通常ですけど一応
[subject]項目名[ '+' _mem,_[\:0x500000\:]=>base;[\:$base\:],4,num,-,%d '+' ]/項目名/:calc,_[:0x500000:]=>base;[:$base:],0,99999,unsigned

// ↓アクセスアドレス「0x2900000」
[subject]項目名[ '+' _mem,_[\:$base\:]+$ad,4,num,-,%d '+' ]/項目名/:calc,_[:$base:]+$ad,0,99999,unsigned


[subject]項目名//:b_toggle,0x00,ssl->chn_01,offset

[group]chn_01
_$base,01,00
_[:$base:],01,00
_[:0x500000:]=>base;[:$base:],01,00
_[:$base:]+$ad,01,00
[/group]



----------------

話は変わりますけど避難所のデータ(2016/07/11/02時頃)を保存したんですが上げといた方が良いですかね?
上げるとしても避難所の閉鎖後で容量的に外部ロダ(たぶんaxfc)にアップですけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.25)
投稿日 : 2016/07/12(Tue) 21:11
投稿者 yun
ID情報 : fsfhLJziEgplXIyBsHvaa.
参照先
>>変態紳士さん

パッチに関してなのですが、
Win7 Home Premium Service Pack 1 64bit
Win7 Professional Service Pack 1 32bit

において、「base」のアドレスが反映されなくなっているようです。

amatureさんのTime Flow のSSGで分かったのですが、

全技能の閃き確率100%

Parsing「Game.exe」→[0x400000]
Parsing「0x3C」→[0x3C]
Parsing「+」→[0x40003C]
Parsing「:]」→[0x128]
Parsing「pe」→[0x128]
Parsing「Game.exe」→[0x400000]
Parsing「$pe」→[0x128]
Parsing「+」→[0x400128]
Parsing「0x154」→[0x154]
Parsing「+」→[0x40027C]
Parsing「:]」→[0x33E000]
Parsing「data」→[0x33E000]
Parsing「Game.exe」→[0x400000]
Parsing「$data」→[0x33E000]
Parsing「+」→[0x73E000]
Parsing「0x7C」→[0x7C]
Parsing「+」→[0x73E07C]
Parsing「:]」→[0x6E7930]
Parsing「0x4」→[0x4]
Parsing「+」→[0x6E7934]
Parsing「:]」→[0x789D68]
Parsing「0x18」→[0x18]
Parsing「+」→[0x789D80]
「base」の解析エラー。
アドレス[0x0]で読み込みエラー。

というようになっています。
パッチを退避させると正常に動くようになるのでSSG上での問題ではなさそうです。

Parsing「base」→[0x789D80]
Parsing「$base」→[0x789D80]
Parsing「:]」→[0xC4CAB40]
Parsing「0x14」→[0x14]
Parsing「+」→[0xC4CAB54]
Parsing「:]」→[0xD67FEF0]
Parsing「0x4」→[0x4]
Parsing「+」→[0xD67FEF4]
Parsing「0」→[0x0]
Parsing「0x20」→[0x20]
Parsing「*」→[0x0]
Parsing「+」→[0xD67FEF4]
Parsing「:]」→[0xCEE5FA0]
Parsing「0x84」→[0x84]
Parsing「+」→[0xCEE6024]
アクセスアドレス[0xCEE6024]

今の所、base以外の定義での不具合は確認してません。
よろしければ修正していただけると助かります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.26)
投稿日 : 2016/07/12(Tue) 21:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : durdf9khYWNQpX7sTk.uY/
参照先
>>24
80-20さん
>避難所のデータ(2016/07/11/02時頃)を保存したんですが上げといた方が良いですかね?
一応、自分に必要そうな分は保存したつもりですが、全部保存したわけではなく、
漏れがあるかもしれないので、アップしていただけると有難いです。

それと、機能追加要望の件ですが、SSGで一度変数定義した値(特に多重ポインタを使用した値)を、
同じSSG内で自由に使用(複数設置可能・チェインファイル内でも使用可能)できれば便利ですね。
[replace]のオフセット値だと、指定した子ファイル以降でしか使用できず、
おまけに、アドレス加算という仕様上、[replace]で指定した子ファイル以降で
さらに重ねて[replace]を使用しにくいですので。
あれば凄く便利ですけど、実装可能なのかどうかは分かりませんが・・・

>>25
yunさん
私も、作成中の別ゲームのSSGで同じエラーが出ました(「「base」の解析エラー」)
ちなみに、避難所にアップされている「176_107.zip」(7/8(金)のアップ分)
の修正パッチでは正常に機能していますので、とりあえず上記のパッチに戻してます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.27)
投稿日 : 2016/07/12(Tue) 22:49
投稿者 (仔猫)◆KCezBilYINU
ID情報 : G/Ez7s/YEod2T9QJAAPZB0
参照先
>>25-26
base変数だけ値が0になりますね。
こちらでも確認しました。

それとamateurさんに教わったゲームですが
その後の報告を「雑談スレ」に。。。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.28)
投稿日 : 2016/07/13(Wed) 03:33
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : XunziRhNjJtr/.3bsheW/0
参照先
私以外の需要が謎なProcessMemory.rbの
開発版を野良gemにして
サンプルコードもこっちにまとめてみた。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.29)
投稿日 : 2016/07/13(Wed) 03:45
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>25, >>26, >>27
yunさん、amateurさん、(仔猫)さん
報告有難うございました。
早速修正しました。単純なミスでしたが影響が大きかったです。(sを含むと発生)
確認はTimeFlowで行いました。


>>24, >>26
80-20さん、amateurさん
以前からSpoilerALの変数は極端すぎると思っていました。
変数維持の件は多少大き目ですが試してみます。(ローテート追加時より小規模だと思っています)

ナントカ言語の場合、スコープの一時変数、ローカル変数、グローバル変数、とあるのですが、
SpoilerALの場合は一時変数ばかりですね。

一時変数 → SSGなら有効範囲が一行の変数
ローカル変数 → SSGならグループ単位の$Valのようなもの
グローバル変数 → 全体で使う、SSGなら読み込み時と終了時にクリアする

ローカル変数は大変なのでグローバル変数になると思います。
変数の優先順位というかオーバーライドも大した事ではないのでそうなると思います。

まぁ、ドン・キホーテが風車と戦うような作業になりますからしばらくお待ちください。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.30)
投稿日 : 2016/07/13(Wed) 04:43
投稿者 dipper◆LEFxdWWYR3c
ID情報 : KZvo7.mR9CiId/rCr9cXk.
参照先
どうも80-20改めdipperです。
臨時板の確認したのを機にと言うのも不謹慎ですが、これを節目にHNを改めました。
これからもよろしくお願い致します。

HNは考えるの面倒になったので、昔どこかで使っていたHNにしました。


>>26 amateurさん

ご要望があったので過去板サルベージ依頼等スレのNo.6にaxfcのURLを投稿して置きました。


>>29 変態紳士さん

迅速なパッチ修正ありがとうございます。
早速ダウンロードさせて頂きました。
ただダウンロードしたさい「一般的にダウンロードされておらず、危険を及ぼす可能性があります。」と表示されビクッ!としましたけど。

追加機能の件、試して頂けて感無量です。ありがとうございます。
非常に楽しみです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.31)
投稿日 : 2016/07/13(Wed) 06:58
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>29
変態紳士さん更新ありがとうございます。

>グローバル変数
あると便利ですね、色々と応用が利きそうです。

>>30
dipperさん
改めてよろしくです(北斗七星ですか、やはりセンスいいなぁ)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.32)
投稿日 : 2016/07/13(Wed) 21:15
投稿者 yun◆k9Mg1P3V1DY
ID情報 : mPoVsZjx.PiByRNANDVTw/
参照先
>>29 変態紳士さん

パッチ修正ありがとうございます。
正常に動くようになりました。

------------------------------------------
みなさんがトリップを付けられているので私もつけてみました。
(私の場合、なりすましされても影響がほとんどないと思われますが…)

臨時版が閉じると聞いたときには、新しい場所であまりSSGを投稿しないだろうと
思ってましたが、猫缶さんのバックアップにサポート掲示板まで含んでいたことを
今更ながらに気づき、いくつかの書込みを見ていたらプログラム改造系を自分なり
にやってみたくなったのでなにか進展があったら投稿しようかと思います。
(プログラム改造系はまだいまいち理解できていないため)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.33)
投稿日 : 2016/07/13(Wed) 21:33
投稿者 amateur◆kR..xsXL6RU
ID情報 : IzIlm2ag5v77B79JQnhL.1
参照先
ついに臨時板の方が閉鎖されたのですね・・・
仕方ないこととはいえ、やはり寂しい気持ちが・・・

>>29
変態紳士さん
修正ありがとうございます。
試してみたところ正常に機能しています。

それと、変数の機能追加の件、ご検討いただけるとのことで感謝です。
いつか実装していただければと期待して気長に待たせていただきます。

>>30
dipperさん
要望に応えてくださってありがとうございます。
ファイル有難く頂戴いたしました。
SSG等の添付ファイルだけでなく、ログも閲覧できるのは有難いです。
それと、HNをお変えになられたのですね。
こちらこそよろしくお願いします。

>>31
(仔猫)さん
いつの間にか、別スレに例のゲームの改造依頼が・・・
未完成ですが取り敢えずアップさせていただこうかと。

>>32
yunさん
私に成りすましする人がいるとも思えませんが、一応トリップ使うことにしました。
プログラム改造は、割と簡単に出来るのもあれば、
処理が無茶苦茶複雑でお手上げな場合もあるって感じですね。
ウディタの場合、プログラム処理部分を色んな項目で使い回してるのがほとんどなので、
私にはプログラム改造は無理っぽいです(もっと深くまで処理を追える方なら出来るのかもですが)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.34)
投稿日 : 2016/07/14(Thu) 01:00
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>33
amateurさんありがとう御座いました。

プログラム改造、yunさんなら出来ますよ
ただamateurさんの指摘通りでゲームエンジン系(インタプリタ型やVM型)は難しいと思います。吉里吉里やUnityのプログラム改造を作ってみようかと挑戦しましたが僕では無理でした><

>ウディタの場合、プログラム処理部分を色んな項目で使い回してるのがほとんどなので
ですね…共通部分で処理してあると難しいです。

CMPなど比較命令で弾いて処理するとか方法あるのですが大抵はアドレスの隙間がなくて。。。
こういう場合はパラサイトルーチンを作って別の場所にコードを書いてそっちで処理して戻ってくるって方法が使われるようです(僕ではまだ作れませんが)
彼方の避難所で補完依頼のあった「せんすいぶ!」のプログラム改造がそれでして(RICKさんが書いたSSGです。)
このコードはスゴいなぁと。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.35)
投稿日 : 2016/07/14(Thu) 04:36
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
変態紳士さんお忙しいところ申し訳ないですが
括弧バグ修正の時に優先順位に変化があったようで過去のSSGの一部が正常に動作しなくなってます、
具体的には吉里吉里製SSGになります。

次の処理が正常に処理されません
($A0*$V0)|($A1*$V1)|($A2*$V2)+0x10
---------------------------------------
Parsing「$A0」→[0x419C218]
Parsing「$V0」→[0x1]
Parsing「*」→[0x419C218]
Parsing「$A1」→[0x0]
Parsing「$V1」→[0x0]
Parsing「*」→[0x0]
Parsing「|」→[0x419C218]
Parsing「$A2」→[0x0]
Parsing「$V2」→[0x0]
Parsing「*」→[0x0]
Parsing「|」→[0x419C218]
Parsing「$A3」→[0x0]
Parsing「$V3」→[0x0]
Parsing「*」→[0x0]
Parsing「0x10」→[0x10]
Parsing「+」→[0x10]
Parsing「|」→[0x419C218]
Parsing「B」→[0x419C218]

176_81- 176_90までの処理
------------------------------
Parsing「$A0」→[0x419C218]
Parsing「$V0」→[0x1]
Parsing「*」→[0x419C218]
Parsing「$A1」→[0x0]
Parsing「$V1」→[0x0]
Parsing「*」→[0x0]
Parsing「|」→[0x419C218]
Parsing「$A2」→[0x0]
Parsing「$V2」→[0x0]
Parsing「*」→[0x0]
Parsing「|」→[0x419C218]
Parsing「$A3」→[0x0]
Parsing「$V3」→[0x0]
Parsing「*」→[0x0]
Parsing「|」→[0x419C218]
Parsing「0x10」→[0x10]
Parsing「+」→[0x419C228]
Parsing「B」→[0x419C228]

応急処置として以下のように括弧でくくると正常になります。
(($A0*$V0)|($A1*$V1)|($A2*$V2))+0x10
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.36)
投稿日 : 2016/07/14(Thu) 05:30
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : KDuP7EyuQeFztgqQrrIzD.
参照先
ちょっと行き詰ってしまいました。

SpoilerALの値は動的に変動するように作られています。
2重ポインタがあったとして、1つ目のポインタが変更されれば2つ目も違うアドレスを参照するようになります。
ゲームを後から起動させて画面が更新されるのも同じ原理で、アドレスは追跡されなければならないので動的に処理されています。

件のグローバル変数も同様で、グローバルに宣言したものは動的に解釈しなおす事になり、
単純に実装すると1行の処理時間が、(1行+グローバル変数N行)×処理という概算になってしまいます。
グローバル変数というよりグローバル構文ですね。

これを解決するには「スコープ変数」になると思います。
たとえば、

// 属性として付加する (タグ名は再考の必要あり)
[Formula][:game.exe+0x100:]=>ptr
// 次のような解釈に変わる、[:game.exe+0x100:]=>ptr;[:$ptr+0x200:]=>ptr
[AddFormula][:$ptr+0x200:]=>ptr
// 次のような解釈に変わる、[:game.exe+0x100:]=>ptr;[:$ptr+0x200:]=>ptr;[:$ptr+0x300:]=>ptr
[AddFormula][:$ptr+0x300:]=>ptr
// $ptr と $x が定義される
[AddFormula][:$ptr+0x400:]=>x;
// ここで式の属性は消滅する
[/Formula]

こんな風に終わりを定義してやれば問題ないわけですが・・・
これが出来ないのです。
SpoilerALはBorland社の2002年製のツールで作られていますが、
属性の部分はクラスで作られています。クラスは便利ですがライブラリ依存ですので例外処理や関数ポインタが雪だるま式に増えます。
アセンブラで追加するには骨が折れます。

不可能ではなくて巨大すぎて、GUIを含め全て作り直すのが正しいでしょう。
しかし、仮にそうなると互換性に担保と呼べるものがありません。

なんだか大変だと思いつつ、使い方が限定的になるであろう「グローバル変数」をつついています。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.37)
投稿日 : 2016/07/14(Thu) 05:55
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>35
(仔猫)さん
式を見ましたが、ビット毎の論理和(|)より加算(+)が優先されるので括弧で括り、後から加算させているのだと思います。
正しい仕様だと思います。

申し訳ないのですが、それが正常動作でして・・・
みなさん今まで無理やりSpoilerAL仕様の式を書いていましたが、
一般的な優先順位を適用すると副作用も発生してしまうものかと思います。

尚、演算子の優先順位については、
添付の "HowToSSG\0A\index.htm" の後半にある優先順位か、
"source\SpoilerAL-version.dll\Parsing\Parsing.c" の40行前後のコメントか、
Google先生に「Wikipedia 演算子の優先順位」と尋ねると回答が得られます。

短くすると「正しく直したら、今まで無理にでも実装していたものに副作用が出た」。
という事で許してください。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.38)
投稿日 : 2016/07/14(Thu) 07:36
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>37
変態紳士さん、お手間とらせて申し訳ないです

ああ!本来の仕様通りの動作ですか…了解です。

過去の作品でSSG動かない場合は括弧を入れて
対応する方向で行きます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.39)
投稿日 : 2016/07/14(Thu) 08:39
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
うーん、自分で組んでるんだったら先頭の
SSG for SpoilerAL ver 6.1
部分を条件に優先順位(括弧バグも?)修正するかを選択するんだが
調べたけどここを簡単に取る方法はなさげで(´・ω・`)

[distinction]OperatorPriority=fix
[distinction]Order_of_Operations=fix
みたいなのを条件にできるといいかも
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.40)
投稿日 : 2016/07/14(Thu) 21:33
投稿者 yun◆k9Mg1P3V1DY
ID情報 : mPoVsZjx.PiByRNANDVTw/
参照先
>>33 amatureさん
>>34 仔猫さん

なんか案外できてしまいました。プログラム改造…。
ウディタの某ゲーム(SSGは作っているのですがまだ公開してないもの)で、

買い物をすると対象の持ち物が減る改造(完全に意味なし)
買い物をすると所持金が増える改造(それなりに便利)

の二つを施すことができました…。
CheatEngineをつかっているので逆アセンブルとオペコード(ニーモニック)は
たくさんでてくるので、適切であろうものを選んで改造する・・・って感じです。
今のとこは。add(加算)とsub(減算)は分かりやすいのでそれ関係で試してみました。

他のゲームでも試しに同じようにやってみても、一応改造はできるけどゲームが落ちたり、
表示がおかしくなったりしたので、これがamatureさんがおっしゃっていた「プログラム処
理部分を色んな項目で使い回してる」ことによる弊害なんでしょう。
(単に処理の仕方を間違えてるだけかもしれませんが)

あと、オペコードに対するバイトコード?と言うのでしょうか、バイト列で新たに命令する
バイト列ですが、

ウディタ上では
sub ecx,[edx]は2B 0A
add ecx,[edx]は03 0A
みたいですけど、この辺りの命令に関しては書きなおしたい命令を同じゲーム上
から引っ張ってくるしかないのでしょうか?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.41)
投稿日 : 2016/07/14(Thu) 21:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : SMaiYoJt.q5pf7Mu96G9V1
参照先
>>36
変態紳士さん
やはり、大きな仕様変更は大変なのですね・・・
SpoilerALの修正は、応急処置とおっしゃっていましたし。
一連の修正作業、本当にお疲れ様です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.42)
投稿日 : 2016/07/14(Thu) 22:00
投稿者 amateur◆kR..xsXL6RU
ID情報 : SMaiYoJt.q5pf7Mu96G9V1
参照先
>>40
私はプログラム改造を含め、いつもうさみみで作業してるので、
うさみみを使ったやり方しか分かりませんが、うさみみ使用を前提で説明しますと、
「デバッガ」→「選択範囲を逆アセンブル」→「逆アセンブル実行」すると、
選択範囲の逆アセンブルコードのリストが表示されますので、
変更したい部分をクリックして選択状態にし、
下の方の「コード修正」の欄で、「Asm」にチェックが入った状態で、
sub ecx,[edx] や、add ecx,[edx] と入力して「修正実行」をクリックしてください。
すると、自動的に該当部分の逆アセンブルコードが、
SUB ECX,[EDX] や、ADD ECX,[EDX] と書き換わり、
メモリ上の値(バイト列)も「2B 0A」や「03 0A」と書き換わります。

ただ、SUB ECX,[EDX] 等のコードの書き方は、
デバッガによって微妙に異なる?ようですので、
その辺に疎い私は、適当にネット上のアセンブリの解説サイトで各命令のバイトコード?を調べて、
上記で「Asm」のチェックを外した状態で、調べて分かったバイト列を入力、という方法を使うこともあります。

と、分かったようなこと書きましたが、もっと詳しい方の説明を聞いた方がよいと思います・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.43)
投稿日 : 2016/07/14(Thu) 23:07
投稿者 (仔猫)◆KCezBilYINU
ID情報 : G/Ez7s/YEod2T9QJAAPZB0
参照先
>>39
NEExploiTさん
この案が通れば、SSG変更手続きが楽になりますね。
デフォはOFFで(旧仕様の括弧計算)
新規に作られるSSGはONで…。

>>40
yunさん
おお!流石です。

正常な処理に戻れない原因ですが…僕の経験ではフラグ変化やスタック変化させると元の処理に影響が出る可能性があるので
この辺りの注意が必要かな?と。僕ではまだスタック変化は実際に処理をやってみないとわからないので。

>>41
amateurさん、ありがとう。
勉強になります。

(アセンブラの本ではあまり実践的な事は書かれてないです)
knさん、ナスさん、それに変態紳士さんの書き込みやアップ物で覚えました。
あとOLDGAMERさんの講義されてたスレが勉強になりました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.44)
投稿日 : 2016/07/15(Fri) 04:03
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : KDuP7EyuQeFztgqQrrIzD.
参照先
>>38, >>39
(仔猫)さん、NEExploiTさん

SSG for SpoilerAL ver 6.1

SSG for SpoilerAL ver 6.2

これが必要になる変更を加えました。
6.1と書けば影響のない修正。
6.2と書けば全て適用されます。

以下の範囲に影響します。
・演算子の優先順位の修正
・シフト演算の追加
・括弧バグの修正


>>40, >>42, >>43
yunさん、amateurさん、(仔猫)さん

バイトコードですか・・・
SpoilerALの修正にもバイトコードが多いですね。

sub ecx,[edx] というのはアセンブリ言語(通称アセンブラ)と言いまして、
2B 0A というのがバイトコードになります。

マイクロソフトだと、MASM (Microsoft Macro Assembler) というツールで
アセンブラからバイトコードに変換できます。

バイトコードからアセンブラは逆汗(逆アセンブル)と呼んだりします。
・DISPE
・DISWIN
・dumpbin
・objconv (Object file converter)
・PE Explorer
こんなツールで吐き出せます。
メモリ上の命令ならうさみみ単独で変換できて便利です。

CPU命令の技術資料はIntelかAMDにPDFで用意されています。
ただしCPU毎に命令に必要なクロック数やパイプラインが違ったり、色々と個体差があります。
最近はPentiumより前のCPUを見かけませんのでi586(Pentium)に対応していれば問題ないと思います。

辞書的に使えるサイトと言えば、
・Tips IA32(x86)汎用命令一覧
・最適化の為のアセンブラ
・アセンブラ入門 - Biglobe
・PDF IA 32 インテル アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル
こんなのがあります。


>>41
amateurさん

変数機能については再考します。
以前のシフト演算の時も単なるパッチではなくパーサーの再実装で何度か試行錯誤していました。
今回の難関はBorlandC++のクラスの追加作業で、
アセンブリ(バイトコードですね)から追加しようというアプローチで苦戦を強いられています。
なので、楽な方法はないかと考え直します。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.45)
投稿日 : 2016/07/15(Fri) 08:05
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>44
変態紳士さん
更新ありがとうございます。

僕の投稿したSSGは実数表示とUnicode表示の機能のみ使ったものだったので
全く変更なく下位互換が取れてます。ご配慮感謝。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.46)
投稿日 : 2016/07/15(Fri) 08:37
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
>>44
乙です

>>40
> 他のゲームでも試しに同じようにやってみても、一応改造はできるけどゲームが落ちたり、
> 表示がおかしくなったりした

  • 他の部分で想定外の使い方をされている (とりあえずブレークポイント設置して様子見)
  • フラグレジスタを破壊してしまって直下の条件ジャンプが正常に動作していない (書き換え箇所付近の意味を解析する)
  • 相対ジャンプ命令を単純に他の部分から持ってきてしまいジャンプ先が想定外
  • 書き換え前の命令と書き換え後の命令でサイズが違うのを調整していない

ニーモニックから機械語への変換は
ollydbg/x64dbgに内蔵されてるアセンブラを用いています

# ollydbgを昔は使ってたのですが有名になりすぎてバグを狙い撃ちにされる事も多いので最近はx64dbg

バイトコードだと、VM上の命令っぽいので
単に機械語とか命令やInstruction とかnative codeを私は使いますかね
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.47)
投稿日 : 2016/07/15(Fri) 21:22
投稿者 dipper◆LEFxdWWYR3c
ID情報 : KZvo7.mR9CiId/rCr9cXk.
参照先
時間が無かったのと避難所のバックアップの修正で、こちらのスレの返信を疎かにしていました…


>>31 (仔猫)さん

そう言えばそんな感じの単語でしたね…改めてHNを指摘されると恥ずかしいものが…
ただgoogle翻訳で翻訳すると「ひしゃく」でしたけどね。


>>33 amateurさん

避難所のバックアップをアプしたのは良いですが、中途半端なバックアップの所為か「過去板サルベージ依頼等」が混乱してた様な…
なんか、すみません…


>>36 変態紳士さん

なんか、大変な事をお願いしてしまった様で…申し訳ありません。

それとパッチの更新お疲れ様です。
今の私では到底できません…というかこの先もできる気が…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.48)
投稿日 : 2016/07/15(Fri) 22:04
投稿者 yun◆k9Mg1P3V1DY
ID情報 : fsfhLJziEgplXIyBsHvaa.
参照先
>>42 amatureさん
>適当にネット上のアセンブリの解説サイトで各命令のバイトコード?を調べて、私も調べてて、あれ?書き方複数ある?
っと思ったので変な命令をしておかしくさせたらだめだなぁと思ったので、デバッカ上では変更せず、SSG上で変更させた
方がいいとかなぁ思った次第で…。
今の所、目的とする命令が他の所にも使われているのでその辺りで対処できてますけど、なかったらどうしていいのか
わからなくなるので、詰まったら詰まったでなにか対策を考えるつもりです。

>>43 仔猫さん
>フラグ変化やスタック変化させると元の処理に影響が出る可能性があるので
これなんですよねぇ…。実験をいろいろやったり、落ちたゲームはSSG上で対象となるアドレスを
書き間違えてそこからなおさなかったような気もするので、それでおかしくなったのかも…。
プログラム改造は細心の注意を払わないといけないことを思い知らされました。

>>44 変態紳士さん
パッチ修正と詳しい説明の程、ありがとうございます。

>マイクロソフトだと、MASM (Microsoft Macro Assembler) というツールでアセンブラからバイトコードに変換できます。
やっぱりそういうソフトがあるんですね。今の所は同じ命令の部分を真似して書いてますが、他につかってる部分がなければ使ってみようと思います。

>>46 NEExploiTさん
>他の部分で想定外の使い方をされている (とりあえずブレークポイント設置して様子見)
>フラグレジスタを破壊してしまって直下の条件ジャンプが正常に動作していない (書き換え箇所付近の意味を解析する)
>相対ジャンプ命令を単純に他の部分から持ってきてしまいジャンプ先が想定外
>書き換え前の命令と書き換え後の命令でサイズが違うのを調整していない

ソフトの使い方からいろいろ試していたのでここにあげられたのはすべてありえそうな感じです。
細心の注意を払いたいと思います。

>>47 dipperさん
どうでもいい豆知識的なものですが、北斗七星はひしゃくの形をしているので(「斗」自体がひしゃくの意味)
北斗七星とひしゃくの意味の両方の意味があるのではないでしょうか。
Big Dipper=北斗七星、Milk Dipper=南斗六星、Little Dipper=小北斗七星=こぐま座・・・ らしいです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.49)
投稿日 : 2016/07/15(Fri) 22:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : KYWosI7Yn2TXRdUEb1i.e/
参照先
>>44
変態紳士さん
更新ありがとうございます。
これで、デフォルト仕様対応のSSGと、修正パッチ適用前提のSSGが問題なく両方使えるようになりました。
迅速なご対応に感謝です。
変数機能については、大変なことを理解せずに気軽に希望を書いてしまったようで恐縮です・・・

アセンブリの説明もありがとうございます。
辞書的に使えるサイトとして挙げていただいた「Tips IA32(x86)汎用命令一覧」は、
私がよく参考にしているサイトです。信頼できるところだったのですね。
紹介いただいた他のサイトも今後参考にしたいと思います。

>>46
NEExploiTさん
>ollydbgを昔は使ってたのですが有名になりすぎてバグを狙い撃ちにされる事も多いので最近はx64dbg
ollydbgって狙われてるんですか(セキュリティ上の問題?)
ollydbgは日本語化パッチがあるので使いやすいかなと思っていたのですが、
x64dbgの方も検討しないといけないかな・・・

>>47
dipperさん
いえいえ、とんでもないです。
こちらは、バックアップを提供くださって、物凄く助かっております。
あらためて、お礼申し上げます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.50)
投稿日 : 2016/07/16(Sat) 02:14
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>x64dbg
入れてみました。
起動時、強制的にフルスクリーンで起動するのは仕様なのかな?
ウィンドウモードで起動するにはどうすれば?とか色設定をダーク系にしたいのでもそもそっと設定やってます。

ollyと比べると一長一短かな?
ジャンプ系が視覚で認識できるのは良さそうですが…。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.51)
投稿日 : 2016/07/16(Sat) 12:48
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
>>49
金掛けてanti-debugしてあるようなソフトを解析した際に色々めんどくさかったんです。。。
x64dbgも全部に対応してたりする訳じゃないですが

>>50
操作系に関しては慣れ補正もあるのですがollydbgのが楽ですね
x64dbgの魅力は
- 更新頻度
- ctrl+hでハイライト選択(ollydbg2.01でのレジスタの強調表示)
- 64bit 対応
ってとこでしょうか
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.52)
投稿日 : 2016/07/19(Tue) 12:39
投稿者 大七星◆y3el2XfkmCg
ID情報 : IYf1R61jt2bttQr0Tslot.
参照先
お久しぶりです、お邪魔いたします
また御無沙汰してる間に時代の流れというか
この場を借りて両管理人にお礼申し上げます

括弧バグやらは回避のしようがあったものの
ワイド文字対応とはリスト嫌いには捗りますな

さて私の作ったものはこれくらいだったでしょうか
実装とUIに悩み作る作るとは言ったが何時出来るとは…だった
mono用デスクライバ(主にUnity向け)も試作品が出来ました
64bitアプリ対応でXP SP2以降対応のはず…確認はWin7x64だけですが

monoアプリが起動している状態でOpenProcess▼すると列挙されますので
選択するとメモリを1ページ間借りして、0xC0XXXXXXが発生したスレッドのみ殺す
例外ハンドラがインストールされ、最左のボックスに間借りアドレスを表示します
(このツールはアタッチはしません、ボタンは現状GetTickCountをテストします

SEH→アセンブラで実装したら環境依存過ぎない?
SetUnhandledExceptionFilter→デバッガと相性が悪い
⇒SEHより先にcatchしてしまうがVEHによる実装…
(しかし_endthreadexすると参照カウントが残留してしまう?

具体的な実装はILSpyやdotPeekで見て頂くとして
簡易説明をPNGファイルで同封しておきました

※この添付は過去の遺物です、PostfixALは6.1の優先順位バグを確認できますが
特に制約のない限り、SpoilerALの修正パッチを使用した方が良いでしょう
残りのユーティリティは別途用意したスレッドを参照してください

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.53)
投稿日 : 2016/07/19(Tue) 21:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : 43KEWsk1BZcWDnPf1e3Dc1
参照先
>>52
大七星さん、書込み&ツール類のアップありがとうございます。
こちらにも来て頂いて安心しました。
臨時板の閉鎖告知から削除まで4日しかありませんでしたので、
この掲示板の存在に気付かれていないのではと心配していました。
こちらでも宜しくお願いいたします。

それと、mono用のツールのご提供ありがとうございます。
説明のPNGファイル拝見しましたが、解析が捗りそうなツールですね。
早速、Unity製のゲームで使わせていただきます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.54)
投稿日 : 2016/07/20(Wed) 02:12
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
試作1回目 (試作なのでNo.4のファイルは更新していません)

疑似的な変数機能を追加しました。
なぜ疑似的なのかと言うと、ポインタやアドレスは常に変動する事を前提としているので
その都度計算しています。なので速くなる事はありません。
もし速くなるとすれば再実装されたパーサーの影響でして、疑似的な変数は少しだけ遅くなります。

動作としてはアドレスの書式の前に[variable]を解釈します。
変数として使われていなくてもアドレス書式が出現する度に動的に解釈します。
これでは使いにくいので、[variable]を開始とし[/variable]を終了とするスコープにしています。
要らない場所では終了させてください。

・[variable]
変数スコープの開始です。
後ろにアドレスの式を書くことが出来ます。式を書かなくても開始です。
[enable]と同じで円記号のエスケープシーケンスとアドレスである事を示すアンダースコアは不要です。
区切りはセミコロンでいつも通りです。
[repeat]や[subject]では親から引き継ぐはずです。たぶん。

・[/variable]
変数スコープの終了です。

・[expr]
式を追加します。単純に構文を結合しているだけです。
変数スコープの外では無視されます。

それとヘッダを6.2にしないと機能しません。
コミットやキャッシュは・・・疲れるので無理です。.Netのツールなら出来ます。
少し疲れたのでテストは不十分です。

※編集
試作のファイルは>>4に統合

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.55)
投稿日 : 2016/07/20(Wed) 21:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : 8qzHM6cMTJt2pc1wjdUcH0
参照先
>>54
変態紳士さん
要望させていただいた変数維持機能の追加ありがとうございます。
作業お疲れ様です。
追加機能を早速試してみたのですが、非常に便利な機能で大変有難いです。
ただ、基本的には動作しているようなのですが、
変数維持が特定の条件では機能していない場合等があるようです。
例として、
----------------------
[variable][:0x02000150:]=>ad
[subject]項目1/現在値/_:calc, _0x02000100+$ad, 0, 0xFFFFFFFF, unsigned
[/variable]
----------------------
(SSGデバッグモードのログ)
アクセスアドレス[0x2000100]
--------
Parsing「0x02000150」→[0x2000150]
Parsing「:]」→[0x90]
Parsing「ad」→[0x90]
Parsing「0x02000100」→[0x2000100]
Parsing「$ad」→[0x0]
Parsing「+」→[0x2000100]
アクセスアドレス[0x2000100]
----------------------

上記のとおり、「$ad」→[0x0] となっており、「ad」→[0x90] と定義した変数が維持されていません。
しかし、下記の例では変数維持が機能しています。
----------------------
[variable][:0x02000150:]+0=>ad
[subject]項目2/現在値/_:calc, _0x02000100+$ad, 0, 0xFFFFFFFF, unsigned
[/variable]
----------------------
アクセスアドレス[0x2000190]
--------
Parsing「0x02000150」→[0x2000150]
Parsing「:]」→[0x90]
Parsing「0」→[0x0]
Parsing「+」→[0x90]
Parsing「ad」→[0x90]
Parsing「0x02000100」→[0x2000100]
Parsing「$ad」→[0x90]
Parsing「+」→[0x2000190]
アクセスアドレス[0x2000190]
----------------------
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.56)
投稿日 : 2016/07/20(Wed) 21:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : 8qzHM6cMTJt2pc1wjdUcH0
参照先
(1000字の書込み制限により分割。>>55の続き)
他に、アクセスアドレス自体は正常ですが、SSGデバッグモードのログがおかしい場合があります。
---------------
[variable]0x02000100=>ad
[subject]項目4/現在値/_:calc, _0x40+$ad, 0, 0xFFFFFFFF, unsigned
[/variable]
---------------
アクセスアドレス[0x2000140]
--------
Parsing「0x02000100」→[0x2000100]
Parsing「ad」→[0x2000100]
Parsing「0x40」→[0x40]
Parsing「$ad」→[0x0]
Parsing「+」→[0x40]
アドレス[0x40]で読み込みエラー。
---------------
上記のような感じです。アクセスアドレス自体は正しく、書換えも正常です。
少し試しただけですが、取り敢えず報告させていただきます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.57)
投稿日 : 2016/07/20(Wed) 22:24
投稿者 amateur◆kR..xsXL6RU
ID情報 : 8qzHM6cMTJt2pc1wjdUcH0
参照先
>>54の追加された変数維持機能ですが、
色々便利な使い方があるようです。
特に、[repeat]と併用して、添付のテキストファイル記載のような使い方が可能ですね。
(1000字を軽くオーバーするので添付ファイルに記載します)
これは物凄く便利ですね(有難や有難や・・・)
ただ、デバッグモードのログがおかしい問題点?もありますが。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.58)
投稿日 : 2016/07/21(Thu) 06:35
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>52
大七星さん提供ありがとうございます。
unity解析に役立てたいと思います。

以前、解析をやって投げた作品(タイトルに戻るとアドレスが変動)
http://aodamatei.sakura.ne.jp/dss/
3D シューティングゲーム
DustShooters(C88試遊版)

もっかい解析やってますがなぜか
ツールを使うとフリーズしてしまう(ー'`ー;)ムムッ

>>54
変数実装ついにですか
ありがとう御座います。

パラサイトルーチンを勉強してたら…少し思い出しまして…。
アプリ側で使われてないメモリを必須コード(toggle)とか随時ファンネルライト等で書き込んでおいて、その空きメモリを変数代わりに使うと言う方法だったような(臨時管理人さんが使われてたような気が…。)

空きメモリが使えない場合は、できない技ですが。。。

>>57
amateurさん
詳細動作報告ありがとう
使い方の参考になります。これはreplace減りそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.59)
投稿日 : 2016/07/21(Thu) 21:46
投稿者 amateur◆kR..xsXL6RU
ID情報 : .O3X6iQgHsj8Pe/wTvUyO1
参照先
>>58
(仔猫)さん
大七星さんの新ツール、私もUnityのフリーゲーム2つで試しましたが、
フリーズはしないものの、それっぽいアドレスを入力・Enterしても何も反応が無かったですね。
各ゲームによって、何か仕様が違うのでしょうか・・・

>その空きメモリを変数代わりに使うと言う方法だったような(臨時管理人さんが使われてたような気が…。)
その方法は私も某ゲームで臨時板管理人さんが使ってるのを見ました。
少し前に解析した某Unity製ゲームでその手法を真似して、
空き部分のアドレスに値をcalcで書き込み、その値によって読み込むアドレスを変えるってのを書きました。
アイテムやスキル等の主にデータベースの項目数が多いと、
[repeat]の変数部分が多くなりすぎてSSG読み込みに時間かかりすぎますので、
それへの対策としてアイテム等の表示を、【書き込んだ値】*100個ずつズラすって手法でした。
思いっきり臨時板管理人さんの手法の真似ですけど。

変態紳士さんが実装してくださった変数機能ですが、
[replace]のほぼ上位互換として使えそうですね。
ある基準アドレスからのオフセットでアドレスをまとめて表現できるような単純な構造でしたら、
[replace]の方が良いかなと思いますが、
多重ポインタ使用の複雑な構造の場合、この変数機能の方が圧倒的に使い勝手が良いと思います。
[replace]だと、多段階で使うとオフセット値が全部加算されてしまう等、色々面倒な仕様ですし。
単純に別の[group]に記述を丸投げしたいとか、「置き換え」としての需要は依然あると思いますけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.60)
投稿日 : 2016/07/21(Thu) 23:01
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : KDuP7EyuQeFztgqQrrIzD.
参照先
色々やってたらSpoilerALのバグを思い出したので>>4を更新しておきました。
演算系なので6.2じゃないと対応しませんけど。

>>55-57
amateurさん

報告どぉもです。

いちおう作ったものの・・・ 気に入らないので直したりせずに仕様が変わる気がします。
今はグループ無しのreplaceみたいになってますが、コード中の何かをテキスト置換するような事にしたいなと。
C言語のdefineに似たようなものがいいなと思ってます。

それと報告いただいた内容ですが、こちらで試した限りでは再現しませんでした。
そのSSGを添付しておきます。
作り直してしまうとテストしてもらう意味は薄れますが、
今回は色々試している内に他のバグを直したので役に立ちました。

>>58
(仔猫)さん

パラサイトルーチンですか・・・
今の修正パッチだと寄生獣(パラサイトモンスター)になるんでしょうか。

>空きメモリが使えない場合は、できない技ですが。。。
ある程度コードを書けば空きメモリも作れるんですが、スクリプトレベルで実装するものではないと思います。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.61)
投稿日 : 2016/07/22(Fri) 01:24
投稿者 amateur◆kR..xsXL6RU
ID情報 : oCV3xwJR1wuug0nP5WP9F0
参照先
>>60
変態紳士さん
検証していただいてありがとうございます。
添付いただいたテキストファイルの拡張子を「ssg」に変えて、内容はそのままで試してみましたが、
いずれも、最終的に「$ad」→[0x0] となり、正常にアクセスできませんでした。
一応、SpoilerALを一度削除し、改めて公式からDLした本体ファイルを解凍して
>>54のパッチを適用してから再度試しましたが、同じ結果です。
勿論、>>60の添付ファイルを、拡張子を変える以外はそのまま使いましたので、
ヘッダは「SSG for SpoilerAL ver 6.2」です。
一応、結果のログをコピペしたファイルを添付します。
何か、別の環境要因があるのでしょうか・・・

関係ないかもしれませんが、SpoilerALは管理者権限で実行しております。
OSは、Win7x64 です。

(追記)
>>60の添付いただいたSSGの「項目2」については、
時々、正常にアクセスできる場合もあります。
(アクセスアドレス[0x400000]となり、電卓の「現在値」に[00505A4D]と表示される)
しかし、添付のファイルに記載したとおり「アドレス[0xFFEFA5B3]で読み込みエラー。」となる場合もあり(この場合の電卓の現在値は[?]です)、
項目2についてはアクセスアドレスが安定していない感じです。
なお、項目1と「りぴーと」については、常に正常にアクセスできない状態です。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.62)
投稿日 : 2016/07/22(Fri) 06:20
投稿者 大七星◆y3el2XfkmCg
ID情報 : IYf1R61jt2bttQr0Tslot.
参照先
>>52でDustShootersを触りだけ試してみましたが、Powerを吐けたので
ゲームに依って使えないことはない…はずです、環境は…ある…かも
(もちろんメモリレイアウトや参照構造はゲームによって様々です
 クラスが特定できたらAssembly-CSharp.dllを逆コンパイルしてみるのも手

 ちなみに…件のJavaも中間言語なので、ソースレベルまで逆コンパイルできます
 私が知る限りではIntelliJ IDEAにも組み込まれているfernflowerが結構な精度でした
 これで内部を調べ、Javassistでclassファイルを直接改造してまうのが私の常套手段…

ステータスバーにメモリロケーションへのアクセスが無効です等と出て
メモリレイアウトが記述されない場合はアドレスが間違っています
現状何のチェックもせずmonoにあるgdb向けの関数に働きかけるため
不正なアドレスを指定するとアクセス違反が起きます…
それを始末するために例外ハンドラを仕込むのですが
無理矢理スレッドを終了させるため、状況によっては応答なしになるようです
ぶっちゃけネイティブ開発経験に乏しくmonoも把握してないので実装が怪しいです

さしあたり次はmonoが.data+どこだかに保持しているポインターリストから
オブジェクト列挙かなと思っていますが、時間的な都合で少し掛かるかもしれません


それはともかく、ついに変数スコープが出来たんですか!YATTAということで
>>54で>>60を試す限りでは私もamateurさんと同様でしたが(先に項目アクセスが必要?
AGE汎用SSGは移植テスト出来ました[expr]が入り乱れていても実に良く動く…

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.63)
投稿日 : 2016/07/22(Fri) 07:29
投稿者 (仔猫)◆KCezBilYINU
ID情報 : ArhoNq5YdBPYfbKlW2MYW/
参照先
>>62
大七星さん
すいません!入力ミスでした(アドレス+8hで入力してました、これでフリーズ)
別のunity製で試したところ普通に表示されるので
もっかい試した所…すんなりOKでした。お手数おかけしました。

>クラスが特定できたらAssembly-CSharp.dllを逆コンパイルしてみるのも手
おお!貴重な情報ありがとう御座います。勉強になります。

>>60
変態紳士さん
vista x86とWin7 x64で試した所、amateurさんや大七星さん所と同じでNGです。

更にamateurさんの報告を元に
[:0x00400000:]+0=>adとすると一番上の項目1だけOKで
他は数値が正しく得られてない状態です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.64)
投稿日 : 2016/07/22(Fri) 20:59
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
試作2回目

前回のバグを修正しました。
仕様を変えると言っていたのですが、大七星さんのSSGが綺麗に書けていたので潰してしまうのは勿体ない気がしてきました。
残してもいい気がしてます。

考えているdefine型の機能ですが、縦書きexprの方が綺麗に書けてしまいます。
でも任意に置換できる点ではdefineの方が・・・

とりあえず、defineっぽいテキストを添付してみます。

※編集
試作のファイルは>>4に統合

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.65)
投稿日 : 2016/07/23(Sat) 01:51
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
需要あるのか、コレで本当にズレ防止できるのかは知らんが
あるアドレスを
PEヘッダからセクションヘッダ読みだして
ベースアドレス + セクション先頭へのオフセット + オフセット形式にするツールを作成中
SSG式はまじめにPEヘッダ読み込むのと手抜き方式の2タイプをとりあえず出力
(ただし、現在うさみみ式しか検証してない

monoの列挙は
この辺辿れば行けるのかな
rootドメインはここから取れる

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.66)
投稿日 : 2016/07/23(Sat) 16:53
投稿者 amateur◆kR..xsXL6RU
ID情報 : bMask9yucm5i1NN7v6x0W1
参照先
>>62
大七星さんの>>52のmono用ツールですが、
試してみたUnity製ゲーム全てで正常動作しました。
>>59で「何も反応が無かった」と書きましたが、
そうなったのは、ツールを管理者権限で実行したのが原因のようです。
管理者権限なしで通常実行すれば、メモリレイアウトが表示されました。
(管理者権限で実行すると、「この操作を正しく終了しました」と表示されてもメモリレイアウトが表示されないみたいです)
お騒がせして申し訳ありませんでした(ペコリ)
3つ試したゲーム中、2つでは詳細に情報が表示されてビックリです。これは物凄く便利ですね。
残り1つはデータ格納方法がちょっと特殊っぽい感じで1行しか表示されませんでしたが、
これは多分珍しいタイプだと思いますので。
便利なツールの提供ありがとうございます。

>件のJavaも中間言語なので、ソースレベルまで逆コンパイルできます(以下略)
Javassist使用については、臨時板の最後の方でNEExploiTさんも言及されていましたね。
やはり、スキル高い方々は色々な手法をご存知なのですね(知識やスキル習得が追いつかない・・・)

>>64
変態紳士さん
修正ありがとうございます。
試したところ、>>60で添付いただいたSSGが正常動作しました。
それと、define型とはそういう感じなんですか。
個人的には最初の[variable]の方が分かりやすい気がしますが、
define型は好きな位置に出現させられる、とのことですので実際に使ってみないと分からないですね。
「好きな位置」にテキスト置換ということは、[repeat]の変換式部分[! !]みたいに項目名部分等にも使えるってことでしょうか。

>>65
NEExploiTさん
セクション先頭のアドレスを特定する方法は、
少し前に臨時板の方で(元)管理人さんや大七星さん達に詳しく教えていただいて、
ある程度は分かったような気がしてるのですが(実際には一度作った雛形をSSGでほぼコピペしてるだけ・・・)
PEヘッダやセクション等を詳しく理解しようとすると結構難しくて・・・
ツールの完成に期待しています。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.67)
投稿日 : 2016/07/23(Sat) 19:42
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : KDuP7EyuQeFztgqQrrIzD.
参照先
>>66
amateurさん

>>個人的には最初の[variable]の方が分かりやすい気がしますが、
その通りですね。[variable]と[expr]は縦書きにした場合に可読性の高い構文が書けると思います。

[variable]の問題は、
仮に[variable]ブロックで項目1と項目2があったとして、
項目1では[variable]の変数が使われているけれど、
項目2では全く使われていない場合、項目2でも[variable]の処理を強制してしまいます。
――――――――――――――――――――――――――――――――――――――――
[variable]$A+$B=>C
[subject]項目1/現在値/_:calc, _$C, 0, 0xFFFFFFFF, unsigned
[subject]項目2/現在値/_:calc, _0x00400000, 0, 0xFFFFFFFF, unsigned
[/variable]
――――――――――――――――――――――――――――――――――――――――
上記のような場合は[variable]の外に出せばいいだけですが、
[repeat]などのグループを囲んでいる場合は無理です。

[define]にはもうひとつの強みがあります。
関数的な構文が可能になる事です。次の例では$Valを引数にして値を暗号化しています。
――――――――――――――――――――――――――――――――――――――――
[define]encrypt ($Val rol 14)^[:[:[:[:[:MName::AGERC.DLL+0x1083:]:]+0x3A:]:]+0x5EBF8:]

[group]unit_name_value
,0=$4 0=>Val;$encrypt $$
,0=$4 11=>Val;$encrypt $$
,0=$4 12=>Val;$encrypt $$
[/group]
――――――――――――――――――――――――――――――――――――――――
[variable]がアドレス書式のイニシャライザだったのに対して、
[define]は式の後方にも配置できるのでこのような事ができます。

[expr]は直感的な式が書けますが処理の無駄を防げません。
[variable]と[expr]は可読性を高める目的で残そうと思っています。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.68)
投稿日 : 2016/07/23(Sat) 21:49
投稿者 amateur◆kR..xsXL6RU
ID情報 : bMask9yucm5i1NN7v6x0W1
参照先
>>67
解説ありがとうございます。
[variable]は直感的に読みやすいけど、処理に無駄が多いってことですか。
対して、[define]の場合は、定義した変数名が使用されている箇所のみテキスト置換で無駄がない?ということですかね。

後ろの暗号化の例については、
[group]unit_name_value 内の記述は、
それぞれ、0、11、12を「Val」と定義し、
上の[define]で定義した「encrypt」の式のとおり、
「$Val」(0、11、12)を暗号化し、その暗号化後の値を「組み替え型」命令でバイト列に変換する、
ということでしょうか。
要するに、[variable]の場合は、先に「0=>Val」等と定義する必要がある、つまり、
--------------------------------------------------------
[variable]0=>Val; 11=>Val2; 12=>Val3
[expr]($Val rol 14)^[:[:[:[:[:MName::AGERC.DLL+0x1083:]:]+0x3A:]:]+0x5EBF8:]=>encrypt1
[expr]($Val2 rol 14)^[:[:[:[:[:MName::AGERC.DLL+0x1083:]:]+0x3A:]:]+0x5EBF8:]=>encrypt2
[expr]($Val3 rol 14)^[:[:[:[:[:MName::AGERC.DLL+0x1083:]:]+0x3A:]:]+0x5EBF8:]=>encrypt3

[group]unit_name_value
,0=$4 $encrypt1 $$
,0=$4 $encrypt2 $$
,0=$4 $encrypt3 $$
[/group]

[/variable]
--------------------------------------------------------
上記のように書く必要があり、記述的にも無駄が多い、と(・・・?)
[define]を使うと、個別に先に定義する必要がなく、
「テキスト置換」なので例に挙げてくださったような書き方が可能なんでしょうね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.69)
投稿日 : 2016/07/23(Sat) 22:10
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>68
[variable]に無駄があるという主な理由は>>67の後半の関数マクロではなく、
前半の[variable]の強制です。

[repeat]の前で[variable]を宣言するとグループの中でも変数は使えますが、
宣言した変数が不要な項目でも同じ処理が発生します。

ループの中で延々と必要の無い計算をしてしまうので、この[variable]仕様はどうにもならないと思います。
これがグダグダ言っていた内容でして
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.70)
投稿日 : 2016/07/23(Sat) 23:00
投稿者 大七星◆y3el2XfkmCg
ID情報 : P.HWiSmA2ft/nUoqoZLG0/
参照先
>>65
わざわざ有り難うございます、オブジェクト参照リストの
手前にサイズが配置されていたと思うので照らし合わせてみます

>>66
動作対象以上の権限があれば問題ないと思っていましたが
管理者権限で不発ですか、例外処理も含め調査してみます

…私の師はGoogle先生ですが、適切な検索ワードが鍵だと思います
Javassistを扱うにはJavaプログラミングが必要となりますが、
やっている事はJava版バイトコード編集なので、手動の比では…

>>67
[expr]が結合しているだけと仰っていたので
[variable]はやはりアドレス毎への前置ですか
ダブルリスト等では致命的な負荷になりそうですね

元々はアドレスコーディングの分割に引数を与えられたら
関数的に使えるのにと思っていたので[define]は向きますね
実装的には関数というより仰るようにマクロでしょうか

[variable]の方が綺麗に見えても、項目だけを見たとき
いきなり変数が現れると何処から来たのか?となるので
可読性もどうなんでしょう? 整形に逐一変数代入を行うと
速度低下にも繋がるでしょうし、両実装は保守的な負担も…?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.71)
投稿日 : 2016/07/25(Mon) 02:52
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
試作3回目

defineを実装しました。
サンプルっぽいSSGは以下のファイルです。
source\test\__define_test__.ssg

草案の時点でテキストを書いていましたが少し実装を変更しています。

※編集
2016.07.25 添付ファイルは単項演算子の評価順序を修正し>>4に統合しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.72)
投稿日 : 2016/07/25(Mon) 21:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : 1f4vPx6miFr1mu97mB6T7/
参照先
>>71
更新ありがとうございます。
サンプルのSSGで動作確認しましたが、全ての項目で正常に動作しています。
これから色々試して使い方に慣れていこうと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.73)
投稿日 : 2016/07/25(Mon) 21:38
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
ほとんどssg書かない人ですが提案だけ
MName::nul で一番先頭のモジュール(私の試した限りでは実行ファイルのモジュールになる)を取れると便利な気がする
ちなみにnulというファイルは基本作れない
UNCパス使えば作れるが扱いがめんどくさいので基本的にありえない

実装のオススメとしてはTProcessCtrl::LoadModuleList呼出し後にリスト末尾にTProcessCtrl::GetFirstModule呼んでモジュール名をnulに変更して追加…みたいな感じ

ちなみにコレ考えてソース読んでてたら、
[replace]module0, ssc指定
でベースアドレス一番小さい奴が取れるっぽいというASLR環境では使えない仕様?を発見

>>66
本体
アドレス解析サンプルで一応公開済みです
ドキュメント整備めんどくさい…
(「ソースがドキュメントだ。バグ も完全に記述されている」)

ProcessMemory-*.*.*.gem をダウンロードしてきて
gem install --local ProcessMemory-*.*.*.gem
ruby pe-sample.rb


gem i bundler
bundle install
bundle exec ruby pe-sample.rb

どっちが楽なんだろう
(後者はgitのインストールが必要かも?)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.74)
投稿日 : 2016/07/26(Tue) 23:51
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>73
なかなか面白かったです。

一番先頭のモジュールが実行モジュールとの事ですが、
もしこれがLDR_MODULEの順序だとしたら、ロード順、アドレス順、初期化順のいずれかで、
いずれにしても仕様ではないと思うので。
実装としてはPEBのベースアドレスと比較して追加するようにしました。

テストに使ったのは「その古城に勇者砲あり!」で、
これが
_(MName::yuusya.exe|MName::main.bin)
こんな感じになりました。
_MName::nul

ファイルは>>4に置いてます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.75)
投稿日 : 2016/07/27(Wed) 22:22
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : XunziRhNjJtr/.3bsheW/0
参照先
これでもう
_MName::浮遊都市の作り方.exe みたいな日本語混じりみて不安に思う必要もないですね
乙です

PEB話には聞いた事ありましたが、そういう手段もあったか

こっちもundocumentな仕様な気もしますが

正規?な手段だとDLL注入なりCreateRemoteThreadなりでGetModuleHandle(0)を対象プロセス内で呼び出すしかないのか?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.76)
投稿日 : 2016/07/29(Fri) 00:18
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>75
試しにGetModuleHandle(NULL)の処理をみると
mov eax, [fs:18h] ; TEB
mov eax, [eax+30h] ; PEB
mov eax, [eax+08h] ; ImageBaseAddress
という感じで非公開の内容を覗いても意味がありませんでした。

パスを比較する方法もあるけど、そもそもパスは比較するものじゃないので。
Microsoftにコードサンプルがあればそうしますが。
またはModule32Firstがアドレス順や初期化順じゃなくてロード順と書かれたドキュメントがあれば。

結局、コードインジェクションが確実な方法になってしまうのでしょうか。
なんだか奇妙ですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.77)
投稿日 : 2016/07/29(Fri) 03:44
投稿者 大七星◆y3el2XfkmCg
ID情報 : F7..R5/DmSEp1igC/8YlO.
参照先
>>52が管理者権限で機能しない理由は対象より権限が上だと
ツールが用意したリダイレクト用パイプを対象側が開けない様です
GetLastError()が64bitで妙なのでスルーしてましたが今度直します

[define]を少し試してみましたが、自由度が増した分
置換タイミングと中身には気を配る必要がありそうですね
関数的に文を書くと式中に配置できない…とか、自分で規則を決めるべきか

>>76
少しズレますが.NET Reference SourceのProcess.MainModuleはどうでしょう
バックエンドではネイティブメソッドを呼び出していて
コメントも書かれているので参考になるかと思うのですが
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.78)
投稿日 : 2016/07/29(Fri) 07:19
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
kb175030
> EnumProcessModules( hProcess, &hModule, sizeof(hModule), &cbReturned );

> この呼び出しの結果、プロセスの最初のモジュールのハンドルが hModule 変数に格納されます。実際にはプロセスには名前がありませんが、プロセス内の最初のモジュールはそのプロセスの実行可能モジュールになることを覚えておいてください。

Module32Firstにもコレが適用されるか否か…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.79)
投稿日 : 2016/07/29(Fri) 18:56
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
VXのシンボルテーブルをダンプしてみた。

07/31
- XP/VXAceに対応
- 出力フォーマットを少し変更しキー文字列でソートしてみた
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.80)
投稿日 : 2016/07/29(Fri) 20:05
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>77, >>78
丸投げしてすみません。

>>77
大七星さん
Process.MainModuleは思いついたのですが脳が拒否してました。

[define]ですが、どこまで使えるか分かってなかったりします。
たぶん高水準言語と同じ感覚では使えないと思うけど何かに使えたらいいな。

>>78
NEExploiTさん
GetModuleInformation+VirtualQueryExでもベースアドレスが取れたのですが、
WindowsXP以上(XP発売以前のドキュメントではNT4だったので新しいドキュメントが間違っている?)だったりモジュールハンドルをNULLにしてもいいと書かれてなかったり、
それで、
kb175030が有用だったのでEnumProcessModulesに変えてみました。
それとスイカを食べました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.81)
投稿日 : 2016/07/30(Sat) 00:55
投稿者 amateur◆kR..xsXL6RU
ID情報 : CgfYz/k0ke01TadA3cSHW0
参照先
>>77
大七星さん
私が確認不足のまま「反応しない」とか書いてしまったせいで・・
余計な手間をおかけすることになったようで申し訳ないです。
管理者権限なしで実行すれば>>52のツールは普通に使えますので、私の環境では特に支障はないのですが・・・

>>79
NEExploiTさん
以前アップされた、ウディタのSSGを自動生成するのも凄かったですが、今度はツクールVXですか・・・
ツクール製をまともに解析したことのない私には有効活用できませんが、
ツクール製の解析経験のある方々には有用そうですね。
(ツクール製については、RICKさんの汎用SSGを使用するか、定番ツールorバイナリエディタでセーブデータ改造するかで済ませ、自力で解析はほとんどしない私・・・)

それと、変態紳士さんが実装してくださった[define]を使って、
試しに某フリーゲームの簡単なSSGを書いてみました。
諸事情によりゲーム名等は伏せますが、テキストファイルを添付します(一応動作確認済みです)
基本的な使い方の確認程度ですが、
こう書いた方が良いとかのご指摘等があればお願いします。

変態紳士さんのサンプルSSGに書いてくださってますが、
[repeat]の[!!]部分を[define]の式の中に使った場合は、後ろを [undef]で閉じる必要があることに注意ですね。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.82)
投稿日 : 2016/07/30(Sat) 06:47
投稿者 管理人◆PIflJPH.oeY
ID情報 : CNod52aYeanHXYFiqBoAT/
参照先
>>79 NEExploiTさん

便利そうなツールの提供ありがとうございます。
しかし、使い方がいまいちわからないのでご教授いただけたら幸いです。
「Ruby」と「ProcessMemory-0.2.0.gem」は導入済みです。
「Ruby」は「RubyInstaller」を用いてインストールしました。

RPGツクールXPもデータ構造がかなり似ているので
このツールで解析出来たりするのでしょうか?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.83)
投稿日 : 2016/07/30(Sat) 12:16
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : XunziRhNjJtr/.3bsheW/0
参照先
>>80
……スイカ?

>>82
デバッグ用コード入れっぱなしだったので修正しました。
(require 'pry' 消しただけ)

使い方ですか……
単純にGame.exeを起動して、プロセスIDをタスクマネージャーやうさみみで調べて
dump.rb入ってるフォルダをコマンドプロンプトから開いて
ruby dump.rb {プロセスID}
って入れるだけ

もしファイルに保存するなら
ruby dump.rb {プロセスID} > {ファイル名}

ちなみにプロセスIDはある程度推測するので
1000でも0x3e8でも可です


RPGツクールXPとVXは同じRuby1.8.3エンジンなので
- sym_tbl = ptr(0x1018A23C)
+ sym_tbl = ptr(0x101836BC)

と書き換えるだけで
RGSS104J.dllが同梱されてるものはダンプできました。

壁|<今回も自動書き換え作ろうと思ったがスクリプト素材全く使ってないフリゲ探すのがめんどくさい
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.84)
投稿日 : 2016/07/30(Sat) 14:02
投稿者 大七星◆y3el2XfkmCg
ID情報 : F7..R5/DmSEp1igC/8YlO.
参照先
確かにzipで固めておいても見つけにくい悪寒はありましたが…
私としてはAGEとRPGツクールMVは暇が出来れば纏められそうかな?

>>80
C#アレルギーですかッ、確かPSAPIはNT専用でしたよね
するとAPIというより結局出所は同じでOS次第に見えますが

モジュールIDの方は廃止されたので、今は比較しても無意味ですし
当代のプラットフォームツールセットだと9x系では動かないかな…?

>>81
いえ管理者として実行が確認不足だったのは私の方でして
本来「アクセスが拒否されました」と出るべき所です
エラーチェック一応は組んであるのですが、そのままでは
64bitで少し問題があったので採用していませんでした
解析対象と同等権限で実行する分には機能すると思います

一番の問題は不正なアドレスを指定した時ですけど…
レジスタとスタックを巻き戻せば正常終了できるのかなァ?
事前にチェックするべきか、構造体は確認しようがないような…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.85)
投稿日 : 2016/07/30(Sat) 23:56
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : sqsclH3WYVYCnxp259SPg0
参照先
>>84
大七星さん

>APIというより結局出所は同じでOS次第に見えますが
マイクロソフトのドキュメントによる言質が必要でした。
マイクロソフトのアップデートで「仕様ではない(またはドキュメントと考えていない)ので変更した」という事になれば、
それを追従して修正の修正を行う事になります。
たとえば>>76は3クロックでベースアドレスを取得しているOS内部の動作ですがドキュメント化されていない構造体メンバを参照をしています。
OSを作っている会社なのでそういった事が可能です。
.NET自体もアップデートに含む事が出来るのでドキュメントと同じ扱いはしませんでした。

>当代のプラットフォームツールセットだと9x系では動かないかな…?
修正パッチはシステム要件をWindows2000とPentiumIIIに設定しています。
まずコンパイラがXPより前のOSに対応していません。
これに対しては、C標準ライブラリを使わず、
source\SpoilerAL-version.dll\EditBinEx\Release\EditBinEx.exeのプログラムを用意してバイナリを書き換えています。
コンパイラもどうにかなりますが、
それよりも検証など手間がかかるのに対象の環境も少ないと思うので必要になった時点で考えると思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.86)
投稿日 : 2016/07/31(Sun) 02:01
投稿者 大七星◆y3el2XfkmCg
ID情報 : NTLOJPV4qaOmliJkspSDz0
参照先
>>85
なるほど、確かにNTの現状がfirst=mainであっても
明文化されてないと変わらない保証はないですか
ドライバ作る場合とか更に死活問題ですかね

2000への配慮もそこまでとは脱帽です、読んで勉強します
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.87)
投稿日 : 2016/07/31(Sun) 20:41
投稿者 管理人◆PIflJPH.oeY
ID情報 : z5DW5NdLt80OuLB8Db61U1
参照先
>>83 NEExploiTさん

指定された通りに実行してみましたが、らんだむダンジョンで試した所、

ENT:19 / BINS:11826

の部分は表示されましたが、
肝心の部分である取得したkeyの部分が表示されません。

「RubyInstaller」のファイル名は
「rubyinstaller-2.3.1-x64.exe」です。

もしかして32bit版でないと正常動作しないというオチですか?

あと、OSはWindows 10 Pro 64bitです。

>壁|<今回も自動書き換え作ろうと思ったがスクリプト素材全く使ってないフリゲ探すのがめんどくさい

解析用のゲームを作るだけなら体験版落として
適当にプロジェクトを作成するだけで完了するので、
数分でできると思います。
(ダウンロードとインストールの時間は除く)

サンプルのゲームも付属しているので中にはスクリプト素材を
使っていないゲームもあるかもしれませんね。

ちなみに汎用(笑)SSGは体験版を落として
超適当に作ったものをベースに作っていたりします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.88)
投稿日 : 2016/07/31(Sun) 22:50
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 1sHi/mLvStixai1.h8T9d/
参照先
XP/VXAce対応してみました。

>>87
コレだけなんですけどねぇ…
私も64bit版使用してるのでRuby 2.1以上ならばx86/x64問わないはずです
そのために自動テストしてるので

ENTの数が登録されてるシンボルの数になるので明らかになんか変ですね
(なお、VXAce対応しようとしたらENTの数出すのがめんどくさくなってたのでENT表示はバッサリ削除)
もしかしたら0x10000000 を他のDLLが占有してるのかも?
もう一度新バージョンで試してみてください

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.89)
投稿日 : 2016/08/01(Mon) 05:02
投稿者 管理人◆PIflJPH.oeY
ID情報 : hMqyWLxMwDSFMQLl2q7oM/
参照先
>>88 NEExploiTさん

>もしかしたら0x10000000 を他のDLLが占有してるのかも?

まさにそれが原因でした。

ウィルス対策ソフトに「Kingsoft Internet Security」を
使用しているのですがこのソフトを使用中の場合、
このソフトのモジュール(?)が0x10000000を占有するようで、
「RGSS*.dll」が毎度へんてこな場所で読み込まれます。

対応ありがとうございました。

要望

出力ファイル名もPIDと同じように問うように設定出来ないでしょうか?
空白の場合はコマンドプロンプトに表示というように。
これなら.bat作成すれば簡単に実行できると思うので。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.90)
投稿日 : 2016/08/01(Mon) 16:01
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : tcKuMZhHV5bLs8Qb0OprB0
参照先
イメージベース決め打ちはこれだから…
(実証段階の自分用スクリプトだったから……と言い訳しとく)

検討しましたが、それはバッチスクリプト側で対処すべきと判断しました。

tasklistとpercol(もしくはpecoやcho)使えばPID選択も楽になりそう

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.91)
投稿日 : 2016/08/02(Tue) 00:48
投稿者 dipper◆LEFxdWWYR3c
ID情報 : nncKnfSC5XFq/M8x8J9Yv0
参照先
どうもご無沙汰しております。


>>変態紳士さん

機能追加を依頼した手前、真っ先に使用してお礼や動作確認などを行わなければならなかったのですが、
今頃の返信となってしまい申し訳ありません。

機能追加の件、本当にありがとうございます。
感謝の言葉しか出てきません。


ただ、現状は動作確認すら出来ていない状況だったり…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.92)
投稿日 : 2016/08/02(Tue) 02:19
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
>>91
こんばんはです。
私自身はSSGを書く事が少なくて、修正パッチを植えてSSGの収穫を待つ感じです。
こんな感じですので感謝というほどでもないかと。

ところで機能を酷使するようなゲームは何が次に来るんでしょう。
(期待したけど使えないという事も・・・)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.93)
投稿日 : 2016/08/03(Wed) 00:56
投稿者 (仔猫)◆KCezBilYINU
ID情報 : le594BgKSdope2CZDlf8H/
参照先
遅くなりましたが動作報告です、変態紳士さんのパッチ問題なく使えてます。
amateurさんがサンプルSSGを公開して下さったので理解しやすく助かります。
変数は[/involve]の外でも有効なのかな?とか外だと一回しか書き換えが行われない?となるとゲームを再起動した際の動作はどうなるのかな?とか、まだ色々試してるところです。

そにしても一番のお気に入りは
MName::nul
これです。メチャ簡単で便利ですね@@;

>ところで機能を酷使するようなゲームは何が次に来るんでしょう。
>(期待したけど使えないという事も・・・)
今年?出るかどうか微妙ですがランス10で大活躍の予感が…。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.94)
投稿日 : 2016/08/03(Wed) 09:52
投稿者 Take◆z2zOLLMPyz2
ID情報 : kTW7PeVdf1yEM2QpabXpX/
参照先
暫く見ない内に避難所は閉鎖されてたんですね…
何はともあれ新たな活動の場を提供してくれた管理人さんには感謝です。
またパッチやツール等の制作者の方々はお疲れ様です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.95)
投稿日 : 2016/08/03(Wed) 21:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : icAtXvkPxCETL9crUglbL0
参照先
>>94
Takeさん、お久しぶりです。
この掲示板に書き込んでくださって安心しました。
避難所ではお世話になりましたが、こちらでもよろしくお願いします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.96)
投稿日 : 2016/08/06(Sat) 19:52
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 9JIWdo7gnlibNadFRk3H00
参照先
RPGVXの半自動SSG生成テスト

>>71と、使い方は一緒
現在は所持金のみ

所持金以外に対応したいなら
ERB.new(<<EOS.encode('cp932'), nil, '%-').run
以降を読めばなんとなく分かる筈

あとはメモリ上の文字列の配列をリストに変換できればいいのかな
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.97)
投稿日 : 2016/08/07(Sun) 20:38
投稿者 RICK◆PIflJPH.oeY
ID情報 : w.WTwgFMe1AU0qSshfMIU/
参照先
>>96

随分と面白そうなプログラムですね。

例のプログラムと自作のSSGの雛形を参考に例のプログラムを拡張(?)してみました。

しかし、現状以下のエラーが出てSSGが生成されません。

RPGVX_SSG.rb:141: invalid multibyte char (UTF-8)
RPGVX_SSG.rb:132: syntax error, unexpected end-of-input
ERB.new(<<EOS.encode('cp932'), nil, '%-').run

追記:
UTF-8で保存した所以下のエラーが出ました。

D:\Program_Files\Tool\Game_Utility\RPG Maker\RPGVX_SSG>rpgvx_ssg 11252 > test.ssg
D:/Program_Files/Tool/Game_Utility/RPG Maker/RPGVX_SSG/RPGVX_SSG.rb:104:in `format': can't convert nil into Integer (TypeError)
from D:/Program_Files/Tool/Game_Utility/RPG Maker/RPGVX_SSG/RPGVX_SSG.rb:104:in `make_expr_xp'
from (erb):370:in `<main>'
from D:/Program_Files/Tool/Development/Ruby/lib/ruby/2.3.0/erb.rb:864:in `eval'
from D:/Program_Files/Tool/Development/Ruby/lib/ruby/2.3.0/erb.rb:864:in `result'
from D:/Program_Files/Tool/Development/Ruby/lib/ruby/2.3.0/erb.rb:846:in `run'
from D:/Program_Files/Tool/Game_Utility/RPG Maker/RPGVX_SSG/RPGVX_SSG.rb:132:in `<main>'

【更新1】2016/08/08 03:40

  • 上記エラーのバグの原因を修正

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.98)
投稿日 : 2016/08/07(Sun) 21:32
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : 9JIWdo7gnlibNadFRk3H00
参照先
> //セーブ回数
> [group]address_save_count
> <%= make_expr_xp keys['$game_system'], :global %>
> <%= make_expr_xp keys['@save_save_count'] %>

'@save_save_count'じゃなくて '@save_count'ですね

バグ発生箇所の特定方法としては
from (erb):370:in `<main>'
ここに注目してERB.newを0行目としてカウントすることで370行目
> <%= make_expr_xp keys['@save_save_count'] %>
が得られます


色々改造してたらライセンス的に真っ黒になってきた……
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.99)
投稿日 : 2016/08/08(Mon) 03:43
投稿者 RICK◆PIflJPH.oeY
ID情報 : UyNx32D3jq8fa1AGkI0Od0
参照先
>>98

言われてみればかなりおかしなことを書いていましたね。
その部分を修正すると無事SSGが生成されました。

もっとも、リストは自分で補う形式ですが・・・
これでRPGツクールVXのSSGを作る際に多少楽ができそうな気がします。

バグを修正した更新分は>>97にあります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.100)
投稿日 : 2016/08/09(Tue) 02:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : YZ4F/LijCJShlpktUtf.a.
参照先
これからは、SSGの自動生成の時代なんですかね・・・凄いです。
そのうち、AIが勝手にゲームを解析してSSGを作ってくれるようにならないかな・・・(妄想)

・・・とあまりの暑さでついタワゴト書いてしまいましたが、
[define]は滅茶苦茶便利ですね。
長ったらしいアドレスコーディングを繰返し書く必要がなくなり、
SSGが簡潔に読みやすく書けるようになりました。
慣れると以前には戻れないって感じです。

[define]を使って色々試してみましたので、
参考までにファイルを添付します。諸事情によりゲーム名等は伏せてます(最近こればっかりだな・・・)
[/script]の後ろにグダグタと書いてますので、興味ある方はどうぞ。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.101)
投稿日 : 2016/08/09(Tue) 15:37
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : tcKuMZhHV5bLs8Qb0OprB0
参照先
アイテム・防具・武器の自動リストに対応してみた

make_expr_xpの第2引数に文字列を渡した際の仕様が変化したのに注意が必要かも?

TODO:
XP/VXAceへの対応
SSGテンプレートをXP/VX/VXAceで振り分ける

# [:[:[:[base+8:]+0:]+4:]+8:]がグローバル変数のみで
# インスタンス変数にオブジェクト突っ込まれてた場合は
# [:base+8:]+8:]だと気付いて頭抱えてる

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.102)
投稿日 : 2016/08/09(Tue) 18:56
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
>>100
amateurさん

朝に急いで返事したのですがドヤ顔で間違えたような(消しました)

・検証の前に再ダウンロードのお願い

どうやらバグっぽい事が書かれているので、一度No.4の添付ファイルをダウンロードし直して試してもらえないでしょうか。
最終的にNo.4の日付は当てにせず再度ダウンロードして確認をお願いします。

・不具合が再現しない件
・再現用のファイルの添付のお願い

それと'$'から始まる置き換え型命令($4 ... $$ など)の中での減算ですが、こちらでは不具合は再現していません。
確かめたいのでゲームタイトルとSSG(再現すれば別のものでも何でも)を添付して頂けると有難いのですが。
とりあえず動かせる状態でないと修正は難しいです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.103)
投稿日 : 2016/08/09(Tue) 22:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : HZh00X.oJCXE.51uWVDiA0
参照先
>>102
変態紳士さん
私がグダグダ書いたものを読んでくださり有難うございます。
ただ、バグ(仕様?)修正を希望する意図で書いたわけではないのですが・・・(自力で回避方法は複数見つけましたので)
同様の症状で悩んでいる方がもしいらっしゃれば、こんな回避方法もあるよ的な意図でした。

>・検証の前に再ダウンロードのお願い
早速、>>4のファイルを再度DLして、パッチを再適用しました。
その上で動作確認しましたが、やはり「置き換え型」命令の動作は全く同じで、
「$4 $$」内のアドレスコーディング中に減算演算子を使用すると、
SSGの読込みに失敗、または、「$4(または1-3) $$」内のアドレスコーディングの演算が出鱈目、のいずれかです。

>・不具合が再現しない件
上記のバグ(仕様?)は、下記の「Gears of Dragoon」(シリーズ1作目)のSSGを作成中に初めて遭遇しました。
https://necocan-index.rick-addison.com/necocan2/mtpt.cgi&room=nekokan&mode=view&no=138
この時に使用していたPCは、私のメインPCで、最近(>>100のSSGを作成した際も含む)使っているサブPCとは別のPCでした。
上記の2つのPCは、OSは両方ともWin7x64ですが、それ以外はスペックも違いますし、
それぞれ別のショップブランドPCで、マザボ等も違っていて結構挙動に差がありますので、
現在使用中のPC固有の症状ではないと思います。
上記の「Gears of Dragoon」は>>100のSSGのゲームとは別ですし、
他の色んなツール類(ゲーム以外でも試しました)でも同様の症状が、数十回は再現されています。
勿論、何度もOSを再起動しても再現してますので、一時的な症状でもないと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.104)
投稿日 : 2016/08/09(Tue) 22:37
投稿者 amateur◆kR..xsXL6RU
ID情報 : HZh00X.oJCXE.51uWVDiA0
参照先
(書込みが1000字オーバーにつき、分割)
>・再現用のファイルの添付のお願い
>>100では修正を希望したわけではなかったのですが(勿論修正していただけるなら有難いです)
一応、SpoilerALを対象プロセスとしたSSGを添付します。
それと、添付したSSGを使用した際のデバッグモードのログも添付します。

なお、添付のSSGについて、当方ではSSGの記述上、上から2番目の項目「動作確認2(減算演算子使用。当方ではこの項目が原因でSSG読込時にエラー)」が原因で、
下記のエラー表示が出て、SSGの読込みに失敗します。
この項目をコメントアウト(頭に//)すると、正常にSSGが読み込まれます(当方では)。
---------------------------
外部例外 EEFFACE.
---------------------------

(追記)
「組み替え型」ではなく、「置き換え型」ですね。勘違いしてました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.105)
投稿日 : 2016/08/10(Wed) 01:06
投稿者 amateur◆kR..xsXL6RU
ID情報 : w2ebbAmW9RJZ0gydWn1I0/
参照先
>>100の添付ファイルについて補足。
末尾に記載した、「バイト列の「置き換え型」の命令の仕様についての補足」について更に補足ですが、
---------------
[subject]項目3/ON/_: toggle, 0x02000100, $2 (0x100)=>hp; 0x4000 < $hp =>s1; $hp < 0x8000 =>s2; $hp < 0xC000 =>s3; $hp -0x4000*$s1*$s2 -0x8000*($s2^1)*$s3 -0xC000*($s3^1)=>hp2; $hp2+$hp2 $$
---------------
については、添付ファイル中の項目4のように書く他に、下記のように>>67で変態紳士さんが説明してくださった[define]の関数的構文(?)を使用すると、
「置き換え型」の命令中のアドレスコーディングで減算演算子を使えない仕様を回避できるようです。
---------------
[define A1]0x4000 < $hp =>s1; $hp < 0x8000 =>s2; $hp < 0xC000 =>s3; $hp -0x4000*$s1*$s2 -0x8000*($s2^1)*$s3 -0xC000*($s3^1)=>hp2
[subject]項目3/ON/_: toggle, 0x02000100, $2 (0x100)=>hp;{A1}; $hp2+$hp2 $$
---------------

それと、>>100に添付のSSGを修正したので添付。
一括トグルの記述は、関係演算子を使う方法より、
下記のようにビット毎の論理積を使用する方が簡潔で分かりやすいことに気付きました(気付くのが遅い・・・)
なお、上記と同様に、[define]の関数的構文を使用して記述を簡略化しました。
---------------
[define C1]{A1};$a1+0x3925=>c1
[define C2]{C1};[:$c1+0x11:1]==0x1=>co; [:$c1+0xC:1]+0x100*$co=>nu
[define C3]{C2};$hp -($hp&0x4000)-($hp&0x8000)=>hp2; $hp2+$hp2*$nu/500 +$nu/10 +($hp&0x4000)+($hp&0x8000)
[subject]全ての敵の最大HPを主人公の「力」の値に応じて増加/ON/_: b_toggle, 0x0, ssl->MAXHP_CHN, real
---------------
[group]MAXHP_CHN
_[.0x25*0x1.], $2 [:[.0x25*0x1.]:2]=>hp; {C3} $$
   (中略)
_[.0x25*0xDE.], $2 [:[.0x25*0xDE.]:2]=>hp; {C3} $$
[/group]
---------------

なお、「各モンスターの最大HP」についても、添付SSGのとおりビット毎の論理積を使用して記述簡略化。

(追記 8/13)
添付SSGの記述を若干変更(詳細は添付ファイル末尾を参照)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.106)
投稿日 : 2016/08/10(Wed) 02:14
投稿者 dipper◆LEFxdWWYR3c
ID情報 : nncKnfSC5XFq/M8x8J9Yv0
参照先
>>変態紳士さん

パッチの機能defineを使用してみました。
とても便利で使い勝手がよく、これからSSGを書く上でとても重宝する機能に仕上げていると思います。
こんな便利な機能を追加して下さった変態紳士さんに改めて感謝を。

依頼する切っ掛けとなったSSGをdefineを使用して修正してみた所、サイズが20KBも削ることができました。
まあもともと私が下手な書き方をしてたのが原因で削れた容量な気もしますが。

それと仕様かも知れませんが、defineを使用する上で気をつける所は、undefを処理する順番でしょうか。
例1だと正常に機能しましたが、例2だとうまく機能しなかったように思えます。
一応テストで使用したSSGも添付しておきます。

■例1
[define A]0x00400000=>ad1
[define B]0x00401000=>ad2
[define C]0x00402000=>ad3

[undef C]
[undef B]
[undef A]

[define A]0x00403000=>ad1
[define B]0x00404000=>ad2
[define C]0x00405000=>ad3

[undef C]
[undef B]
[undef A]

■例2
[define A]0x00400000=>ad1
[define B]0x00401000=>ad2
[define C]0x00402000=>ad3

// ↓が違う。この順番だと↑の$ad1が「0x00400000」ではなく「0x00403000」になってしまいます。
[undef B]
[undef C]
[undef A]

[define A]0x00403000=>ad1
[define B]0x00404000=>ad2
[define C]0x00405000=>ad3

[undef C]
[undef B]
[undef A]

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.107)
投稿日 : 2016/08/10(Wed) 19:58
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
>>103
amateurさん

資料を提供していただき有難うございました。
アドレスコーディングの問題だと些細な事でも影響範囲が大きいのでどうなるかと思っていましたが、
トグル項目のバグでした。

HowToSSGの「2.1-calc toggle」にある「トグル項目」は以下のように書式が記載されています。

[subject]項目名: toggle, アドレス, ONのバイト列, OFFのバイト列
[subject]項目名: toggle, 開始アドレス, 終了アドレス-ONのバイト列, OFFのバイト列

この「終了アドレス-ONのバイト列」の部分ですね。
2つの書式をハイフンの検索で分岐していたようです。
ドキュメントを読んでバグが見つかるとキツイです。

修正方法としては「$? ... $$」を検索の対象外にしました。
ご協力ありがとうございました。

>>106
dipperさん

undefが正しく機能してないですか・・・
後で調べてみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.108)
投稿日 : 2016/08/10(Wed) 21:30
投稿者 amateur◆kR..xsXL6RU
ID情報 : bEGEHYRzcLqreYm9fGn3I1
参照先
>>107
修正ありがとうございます。
トグル項目(一括トグルを含む)で、バイト列(「$? $$」中)に減算演算子を使用しても正常動作するようになりました。
需要の少なそうな修正にまで対応していただきまして恐縮です。
「終了アドレス-ONのバイト列」の「-」(ハイフン)と、
バイト列(「$? $$」)中の「-」(減算演算子)を混同していたのが原因ということですか・・・
こんなに早く修正していただいてお礼申し上げます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.109)
投稿日 : 2016/08/13(Sat) 01:06
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : vietmtpsN0rkoK0qyNvjm.
参照先
>>106
dipperさん

修正完了です。
テスト用のSSGありがとうでした。
問題の場所は簡単に分かったのですがアセンブラで編集するには大きかったです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.110)
投稿日 : 2016/08/13(Sat) 08:30
投稿者 悠木
ID情報 : iHFGEC9KHBHgjli4LEDQ9/
参照先
すみません、
天狐の
英雄*戦姫GOLDを
中古で安かったので購入したのですが、
ssgファイルってどこかに無いですが!?

探してるのですが、どこにも無いみたいで・・・、
猫缶インデックスの方は、まだありますでしょうか!?

なんか、探しても無いみたいなので困ってしまって、
情報がありましたら教えてくださいますようお願いします。

もしかして元から無いですか!?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.111)
投稿日 : 2016/08/13(Sat) 11:23
投稿者 悠木
ID情報 : Fq61yemY5eNPzvMsGMnkd1
参照先
>>110の者です
すみません、自己解決しました。
猫缶Indexにて根気よく探してみたらありました。

今から組み込みます、すみませんn
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.112)
投稿日 : 2016/08/13(Sat) 19:41
投稿者 dipper◆LEFxdWWYR3c
ID情報 : nncKnfSC5XFq/M8x8J9Yv0
参照先
>>109 変態紳士さん

迅速な対応ありがとうございます。
確認した限りですが、問題なく機能していると思います。

パッチのファイルサイズが前回に比べ大分大きくなっているので、変態紳士さんの苦労が目に見えるようです。
改めましてパッチの修正ありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.113)
投稿日 : 2016/08/22(Mon) 04:16
投稿者 久遠
ID情報 : idI8gsc6goDxAeapQnaJa0
参照先
No.04のdllを導入してみたのですが、起動に失敗します。

version.dllを単純導入しての起動では、dllが削除できてしまったため、readmeにあるバイナリ改変を行いました。
その結果spoilerALを起動すると
  プロシージャエントリポイント K32EnumProcessModules がダイナミックリンクライブラリ KERNEL32.dll から見つかりませんでした。
とエラーが出ます。
レジストリのAtsu\spoilerALを削除しspoilerALの導入から試してみましたが同様でした。

OSは32bit XP SP3 home です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.114)
投稿日 : 2016/08/22(Mon) 20:34
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
SpoilerAL 6.1 修正パッチは、version.dll から winmm.dll へ変更しました。
※以前の version.dll は削除する必要があります。(どちらかが優先されてしまうので)

>>113 久遠さん

報告ありがとうございました。修正しました。

>プロシージャエントリポイント K32EnumProcessModules がダイナミックリンクライブラリ KERNEL32.dll から見つかりませんでした。

OSに依存してしまうバグでした。
PSAPI というものがあるのですが、
V1 は PSAPI.DLL の EnumProcessModules を、
V2 は KERNEL32.DLL の K32EnumProcessModules を使う仕様で、
デフォルトの V2 を使っていました。

>version.dllを単純導入しての起動では、dllが削除できてしまったため、readmeにあるバイナリ改変を行いました。
>OSは32bit XP SP3 home です。

2000とXPはバイナリの書き換えだったのですが、思ったより簡単に対応できたので書き換え不要にしました。

修正2件
・PSAPI-V1対応
・2000とXPのバイナリ書き換え不要な読み込み
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.115)
投稿日 : 2016/08/23(Tue) 00:30
投稿者 久遠
ID情報 : idI8gsc6goDxAeapQnaJa0
参照先
>>114 変態紳士さん

無事導入でき、6.2用に作られたSSGも動作しました。
こんなに迅速に対応いただけるとは、本当にありがとうございます。

>PSAPI.dll
まさかXP以前とvista以降でdll自体が違うとは。
同じdll内で関数名や引数の違いでバージョンを分けてると思っていました。勉強になります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.116)
投稿日 : 2016/08/23(Tue) 02:14
投稿者 dipper◆LEFxdWWYR3c
ID情報 : nncKnfSC5XFq/M8x8J9Yv0
参照先
>>114 変態紳士さん

SpoilerAL 6.1 修正パッチは更新ありがとうござます。

早速で申し訳ないのですが不具合の報告を…
「winmm.dll」に変更前の「version.dll」なら問題なく使用できたSSGが「winmm.dll」に変更すると一部のSSGがまったく展開されなかったり、
展開処理中に強制終了されるようです。

「version.dll」なら問題なく「winmm.dll」なら強制終了の症状が起きた、SpoilerAL6.2用に修正途中の雷神7パワーアップキットのSSGを添付しておきます。
ただ、224行目の[undef A]をコメントアウトすると強制終了されませんでした。
その事から察するにundefの不具合でしょうか?
それとSSGはプロセスはゲーム本体が無くても起動できるように「SpoilerAL.exe」に変更してあります。

とりあえず私の環境はWindows7 64bitです。


※添付ファイル削除(2016/08/24)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.117)
投稿日 : 2016/08/23(Tue) 22:47
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
>>116 dipperさん

ご指摘の通りundefのバグです。添付して頂いたSSGがとても役に立ったので短期間で修正できました。

>>109の時点で大雑把に実装していたのですが、
BCB6から出力したコードが汚すぎたので手動で直していました。
(コンパイラが出力してるのにライブラリにバグがあるという・・・)
アセンブラのクセに巨大だったので気が付いたら壊れちゃいました。

出来るだけ小さく細切れにしてundefのコード作り直しました。
今回のバグは winmm.dll だからというわけではなく巨大なアセンブラさんと戦ってコケた感じです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.118)
投稿日 : 2016/08/24(Wed) 00:42
投稿者 久遠
ID情報 : idI8gsc6goDxAeapQnaJa0
参照先
>>117 変態紳士さん

履歴の日時が23日になっていたので再DLしてみました。

winmm.dllを上書きした所、作成日時が22日の同時刻で変わっていませんでした。
ソースフォルダの容量が変わっているので、コンパイルしたwinmm.dllだけ入れ替え忘れていると思われます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.119)
投稿日 : 2016/08/24(Wed) 01:15
投稿者 dipper◆LEFxdWWYR3c
ID情報 : nncKnfSC5XFq/M8x8J9Yv0
参照先
>>117 変態紳士さん

早速の対応ありがとうございます。
途中強制終了していた添付SSGや強制終了されないまでも中々展開されなかったSSGも問題なく起動できました。

>>116の添付ファイルは修正途中ですし、それに需要も無いでしょうからファイルは削除しておきます。


>>118 久遠さん

上記でも記載しましたけど機能の修正を確認できましたから、作成日時が同じでもwinmm.dllは更新されていると思いますよ。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.120)
投稿日 : 2016/08/24(Wed) 01:45
投稿者 久遠
ID情報 : idI8gsc6goDxAeapQnaJa0
参照先
>>119 dipperさん

更新されていたのですね、早とちりしました。
こちらでは諸症状が確認できるSSGを持っていないので、日付が同じ時点で不安になり、dipperさんの報告を待とうかとも思ったのですが先走りました。
お騒がせしました。m(_ _)m
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.121)
投稿日 : 2016/08/25(Thu) 06:41
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
64bit演算の試作 (1回目)

需要があるか分かりませんが、64bit演算の実装です。
64bitの除算をソフトウェア演算で書くと面倒なことになると思ったので、
なんとなく実装してみました。

別に32bitCPUでも動きます。昔からあるハードウェア演算です。

サンプル的なSSGは以下です。
source\test\__large_integer_test__.ssg

※2016.08.27 試作品なのでNo.4に統合

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.122)
投稿日 : 2016/08/25(Thu) 22:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : ol1tvu0SyTcmpa/8vyv0x/
参照先
>>121
更新ありがとうございます。
サンプルSSGで試したところ正常に動作しています。

今まで解析した中で64bit演算の必要な場合があったかなと考えたところ、
以前解析したゲームで、IMUL命令の1オペランド形式で、
4バイトサイズのオペランドとEAXの乗算結果(8バイト)の、
上位4バイトはEDXに、下位4バイトはEAXに格納されるっていう
逆アセンブルコードがあったのを思い出しました。

こういう場合は、元の値を「n0」とすると、
-------------------
[0, n0] => n1
-------------------
のように値を64bitに拡張してから、
-------------------
$n1 * eax => n2
[$n2 >> 32] => edx
[$n2 & 0xFFFFFFFF] => eax2
-------------------
のように書けば良い、のかな
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.123)
投稿日 : 2016/08/26(Fri) 02:37
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
64bit演算の試作 (2回目)

・定数を[1, 0]などと上位ワードと下位ワードに分離していたのを
 0xFFFFFFFFFFFFFFFFと書けば自動で64bitになるようにした。
 (キャストは継続して有効)

・デバッグログの出力を上位ワードと下位ワードに分けていたのを
 64bit値そのものを出力するようにした。

・64bit定数に対応したのでサンプル的なSSGを修正


>>122 amateurさん

レスどぉもです。
除算が困るので64bit値を扱えるようにしてますが・・・
需要は低い?

乗算の方はこんな感じですかね。(imulじゃなくてmulにしてますが)
――――――――――――――――――――――――――――――
オペランド1 × オペランド2 = リザルト (edx:eax)
――――――――――――――――――――――――――――――
mov eax, [esp + 4]
mov edx, [esp + 8]
mul edx
――――――――――――――――――――――――――――――
0x11111111 => op1
0x22222222 => op2
[0, $op1] * $op2 => result
[$result >> 32] => edx
[$result] => eax
――――――――――――――――――――――――――――――
キャスト ([]の中が1つなら32bit) なので "& 0xFFFFFFFF" は不要です。

※2016.08.27 試作品なのでNo.4に統合

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.124)
投稿日 : 2016/08/26(Fri) 20:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : WQ9.58xFIOHLCOQPGe9JB1
参照先
>>123 変態紳士さん
更新と、乗算(imulだけでなくてmulでも同様ですね)のフォローありがとうございます。
>キャスト ([]の中が1つなら32bit) なので "& 0xFFFFFFFF" は不要です。
よく考えると、64bit → 32bit にダウンキャストすると、上位32bitは切り捨てされる(と思う)ので、
下位32bitを取り出すのに"& 0xFFFFFFFF" は不要ですよね・・・

64bitの除算ですか・・・
今のところ必要になったケースは私には無かったと思いますが、
それは私の解析経験が浅すぎる(若葉マークの初心者)だけで、
解析経験豊富な方々には需要があるのではないでしょうか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.125)
投稿日 : 2016/08/27(Sat) 16:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : O80PP0hq/IIQjtGfM6Wx70
参照先
とっくに気付いてる方もいらっしゃるかと思いますが、
ウディタ製ゲームは、[define]の関数的構文を使用することで、物凄く楽にSSGが書けますね。
臨時板のウディタのスレNo.70でyunさんがアップしてくださったポインタの書式を[define]の定義式に先に書いておけば、
後は、「タイプのID」「データのID」「項目の番号(ID)」等をSSGの各項目のアドレスに書いていくだけでほぼOKという・・・
(上記の各ID等は、>>1に添付した2個目のファイルに入っているウディタ解析用SSGで表示されます)

下記はウディタVer2.01製ゲームでのSSG記載例ですが、こんな感じで書けますね。
--------------------------------------------------------
//可変データベースの関数的構文(項目の値。変数「typ」「da」「nu」は各々、「タイプのID」「データのID」「項目の番号(ID)」を指す)
[define CN][:[:[:0x6A6218:]+0x14+$typ*0x28:]+0x4+$da*0x20:]+$nu*0x4
[subject]灯(ダンジョン内)残り歩数【 '+' _mem, _1=>typ; 0=>da; 9=>nu;{CN}, 4,num ,??,%d '+' 】/灯残り歩数/_:calc, _1=>typ; 0=>da; 9=>nu;{CN}, 0, 999999, unsigned
[subject]透視(ダンジョン内)残り歩数【 '+' _mem, _1=>typ; 0=>da; 10=>nu;{CN}, 4,num ,??,%d '+' 】/透視残り歩数/_:calc, _1=>typ; 0=>da; 10=>nu;{CN}, 0, 999999, unsigned
--------------------------------------------------------

触り程度しか書いてないですが、上記の手法で書いた実際のゲームのSSGを添付しておきます。
対象ゲームは、ウディタVer2.01製の「イグニッシアサーガ第十四幕-穢れし神に捧ぐ詠-」(フリーゲーム)です。

(追記)
↓がウディタVer2.10製の可変DB(セーブされるデータ)の各項目の値の定義式で、
[define CN] [:[:[:0x78B6F4:]+0x14+$typ*0x28:]+0x04+$da*0x20:]+$nu*0x4

上記の定義式を先に書いてから、各項目の「アドレス」部分に、下記のように書くだけです。
_(タイプのID)=>typ; (データのID)=>da; (項目のID)=>nu;{CN}

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.126)
投稿日 : 2016/08/28(Sun) 04:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : beyciiVDtE4onwr4nDYCg1
参照先
従来のSSGでは、先に[repeat]や[replace]を書いて、最後にそれらを反映させたアドレスコーディングを記述するのが定石(?)だったと思いますが、
逆に、最終的に書きたいアドレスコーディングを[define]の関数的構文で先に記述した方が分かりやすい場合もあるのではないかと
>>125のSSGを書いていて思ったので、試しにこの方法で簡単なSSGを書いてみました。

ゲームは、以前に別スレでSSGをアップした「Javardry THE KING」です。
動作環境はSSGの情報欄に書いてるとおりですが、
JavaのVer:32bit版の【 8 Update 101 (8.0.1010.13) 】、
Javardry本体のVer:0.362 (このVerの本体入手はJavardry公式から)
として書いてますので、別スレにアップした同ゲームのSSGと同じ環境では動作しません。

「ダンジョンマップ踏破フラグ」のアドレスでは変数部分([repeat]の$Val)を4箇所使ってますが、
こういう書き方で問題なく動作しています。

(追記)
添付のSSGを修正。
「ダンジョンの名称のアドレス」と「各パーティのデータ領域先頭アドレス」を先に定義して、
後から変数部分にループ変数「$Val」等を代入する書き方に変更。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.127)
投稿日 : 2016/08/29(Mon) 20:20
投稿者 管理人◆PIflJPH.oeY
ID情報 : bgT8fRhR3laLJ2YP/RHiO1
参照先
【管理人からの提案】

「SpoilerAL」の修正パッチのに関する話題は専用スレを作ってそちらで語りませんか?

閲覧者からすれば、このスレは非常に煩雑で情報の整理がしにくいと思うので。
Wiki作ろうと言い出したのもそのためです。

掲示板の特徴上4番の記事を探すのも面倒かなとも思ったりもしていたり・・・。

また、0番の記事(常に上に表示される記事)の添付ファイルの更新も可能になっています。

つきましては変態紳士さんにスレ立てをお願いしたいのですがいかがでしょうか?

【質問】

・現在の設定では「1スレッド当りの「表示」記事数」を20、
「1スレッド当りの「最大」記事数」を1000に設定していますが、
どれくらいがいいと思いますか?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.128)
投稿日 : 2016/08/30(Tue) 04:14
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : vietmtpsN0rkoK0qyNvjm.
参照先
>>127 管理人さん
お世話になっています。

>「SpoilerAL」の修正パッチのに関する話題は専用スレを作ってそちらで語りませんか?
>閲覧者からすれば、このスレは非常に煩雑で情報の整理がしにくいと思うので。
(中略)
>つきましては変態紳士さんにスレ立てをお願いしたいのですがいかがでしょうか?
いつか話題性も更新も終わると思い用意しませんでした。特別な意味もありませんので移動しました。
確かにスレッドのトップにファイルは無いですし捜索願が後を絶たないですね。

>Wiki
残念ながらドキュメントも追いついていない状態でして、ドキュメントよりコードの変更が多く、
それとWikiは経験が無いので放置していました。
最終的にドキュメントさえ放置するかも・・・

>・現在の設定では「1スレッド当りの「表示」記事数」を20、
>「1スレッド当りの「最大」記事数」を1000に設定していますが、
>どれくらいがいいと思いますか?
記事数が1000ですか、超える事も少ないですし超えても続きのスレ立てですよね。
問題にならないと思います。(いっきに超える時って騒動か何かですよね?)

表示記事数20は不自由では無いのですが、時々少ないとは思います。
web patioのコードを書いたことはありますが内容を覚えていませんし、こんなものかなと。
他の人の意見も必要だと思います。

以前あった機能と言えばスレッド内の記事番号へのリンク機能ですが、
たぶんCGIの変更が大きいと予想してみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.129)
投稿日 : 2016/08/30(Tue) 22:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5PWheszh4ck14Q6IIH22d.
参照先
>>125でアップしたウディタのSSGを書いていて、解析用SSGも以前と比べて簡潔に書けそうだと思ったので、
>>1でアップした詰め合わせの中の、ウディタ解析用SSGについて、
使いにくい部分を改良して全面的に作り直しましたので、追加で>>1にアップしておきます。

項目の値が「数値」か「文字列」かで格納されるアドレス領域が別になっているため、
以前のSSGでは表示される項目IDと実際のID(アドレス)がズレてしまう仕様だったのですが、
上記のズレに対応し、表示される項目IDと実際のID(アドレス)が一致するように修正しました。
他に、項目の値部分に名称も表示するようにしましたので、分かりやすくなったと思います。
また、ウディタVer2.10とVer2.01の両方に対応するようになりました。
動作確認したのは上記2つのVerのみで他のVerで動くかは未検証ですが、
Ver2.01以降なら動作するのでは、と思います(検証は人任せ・・・)。

あと、重要なことですが、
 [define]の関数的構文でアドレス定義 → 後から変数部分にループ変数「$Val」を順次代入
という書き方をしたせいで(?)、メモリ使用量が異常に大きくなってしまうようです。
デフォルト設定でSSGを読み込むと、SpoilerALのみで1.2GBくらい使用してしまいます。
SSGファイルの[repeat]の終了値を増やして、表示数をデフォルトから増やしたりすると、
メモリ使用量が大きくなり過ぎてSpoilerAL起動に失敗する可能性があります。
なお、3つのDBのデータIDを全てデフォルトの30個から100個に増やすと、当方の環境ではSpoilerAL起動に失敗しました。

解析対象のゲームに応じて、[repeat]の終了値が大きすぎる部分は値を少なくしたり、
[group]main の中の、不要な[repeat]部分をコメントアウトして
DBを1個だけ表示するようにする等、必要に応じて調節してください。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.130)
投稿日 : 2016/08/31(Wed) 20:21
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 2hT12tRTQ0Cl2D443IEiA.
参照先
>>129
少し修正しました。
結構メモリ食べてますね。

完全に直すにはファイルからSSGの全文をフィルタリングする方法がありますが、
互換性がどうなるか分からないし面倒なので保留してます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.131)
投稿日 : 2016/08/31(Wed) 21:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9M.3m41oRe2kaGZjll3TU0
参照先
>>130 変態紳士さん
パッチ更新ありがとうございます。
早速試したところ、解析用SSG読み込み時のSpoilerALのメモリ使用量が、1.5GB → 430MB と劇的に減りました!
この程度のメモリ使用量なら大きな問題にはならないと思いますので、
これだけでも非常に助かります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.132)
投稿日 : 2016/08/31(Wed) 21:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9M.3m41oRe2kaGZjll3TU0
参照先
>>129に書いた、作り直したウディタ解析用SSGですが、
表示項目(ID)数が限られてしまって使い勝手が悪いので、
[repeat]の終了値(ループ回数)は増やさず、表示項目(ID)をずらせるように仕様変更しました。
空きアドレス(と思われる)箇所に、任意の値を書き込み、その書込み値によって表示項目(読み書きするアドレス)をずらすという手法です。
臨時板の(元)管理人さんが使用されていた手法を真似しただけですけど。
多分、勝手に値を書き込んでも大丈夫な空きアドレスだとは思うのですが、
不具合が出ないか十分に検証したわけではないので、不具合が生じるかもしれませんが・・・

>>131に書いたとおり、メモリ使用量が劇的に減ったこともあり、
当方の環境では起動に問題はない(時間はかかるけど)ですが、
PCスペックによってはメモリ使用量の問題で使えない場合もあるかと思い、
メモリ使用量を大幅に減らせる「軽量版」を作成しました。
SpoilerALのメモリ使用量が110MB程度と、「通常版」の1/4程度で済み、起動も早いです。
ただし、一度に表示される項目(ID)が30個(通常版は50個)ですので、ID数の多い場合は面倒かも。
表示項目数以外の機能は全く同じです(表示項目(ID)をずらす機能も付いてます)。

というわけで、「通常版」と「軽量版」を同梱したファイルを>>1 (の2つ目の添付ファイル)に差し替えでアップしました。
ウディタ解析用SSGについては、私のスキルではこれが限界だと思うので、
SSGの記述ミス修正を除き、これで更新終了とします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.133)
投稿日 : 2016/09/01(Thu) 02:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : lWL/GmO.0OCecHu52wpEb1
参照先
>>127 管理人さん
【質問】についてですが、
「1スレッド当りの「最大」記事数」は、現在の1000で少ないということはないと思います。
むしろ、1000も記事があると、スレ内で記事を探すのが大変ですし、
1スレッドの表示ページが最大で50(1000/20)にもなるので、そちらの方が問題かもしれないですね。
確か、以前の臨時板では1スレッド当りの最大記事数は500だったと思いますが、
それくらいが妥当なのかも、と個人的には思います。
1スレッド当りの「表示」記事数は、現状の20くらいで良いのではないかと思います。
私のように無駄に長文書くと記事数20でも結構な長さになりますし・・・

次に、ご提案についてですが、
とりあえず、SpoilerAL修正パッチの話題は、出来るだけ変態紳士さんが立てられたスレの方で行うことにします。
Wikiについては、SSG作成と解析でほぼ手一杯で、そこまで手が回らないですね・・・
現状では、解析とゲームプレイにかける時間比が「9:1」くらいになっていて、
何のために解析してるのやら、という感じでして・・・(解析自体が下手にゲームするより面白いので不満ではないですが)
また、情報の整理といっても情報が多すぎて何から手を付けたら良いものやら、という感じです・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.134)
投稿日 : 2016/09/01(Thu) 02:49
投稿者 amateur◆kR..xsXL6RU
ID情報 : lWL/GmO.0OCecHu52wpEb1
参照先
それと、Wiki等で情報整理するなら、まず解析の基本知識的な事項から始めた方が良さそうな気がするのですが。
うさみみ等のメモリエディタを使った実践的な検索方法(これが分かるだけで基本的な改造は大抵出来ますし)とか、
SSGの書き方のコツ(HowToSSGには、重要かつ基本的なことなのに記載が漏れてる事項が結構多いせいで初心者にとって無駄にハードルが高くなってる)とか、
ポインタの探し方のコツ(私もお世話になったこのページでアセンブリの読めない素人にも可能な方法が解説されてますが、そこに書いてる情報だけでは対処できないゲームが大半)とか、
このあたりの情報をまとめた方が良いのではないかと以前から思いつつも放置してたのですけど。
(検索方法はうさみみのヘルプをちゃんと読めばよいし、外部の解説サイトも色々あるのでその紹介だけで良いかもですが)

このスレの書き込み内容は難度が高いものが多く(プログラミング関係中心に私も理解不能なことが多いです)、
それ以前の基本、つまり、検索やポインタ探し等の解析をしてその結果をSSGに書くという、
基本的なことが出来る人を増やす(掲示板利用者全体のスキル底上げ)方が優先順位高いと個人的には思いますので。
現状では、お馴染みの数人程度の解析者の方々にSSG作成の負担が集中してるような気がして、
あまり望ましい状況ではないと愚考する次第です。(本家猫缶Indexでは結構多くの方がSSG公開されてた気がします)
ネットワーク対応のゲームが増えたせいで、SSGをアップ出来ない(=各自が自己責任・自助努力で対処するしかない)場合が多くなってきたという事情も・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.135)
投稿日 : 2016/09/01(Thu) 04:54
投稿者 管理人◆PIflJPH.oeY
ID情報 : M/.5uHQO0w5d905dWV60g0
参照先
>>128 変態紳士さん
>>133-134 amateurさん

参考になる意見ありがとうございます。
やはりWikiは先走りすぎたかなぁといった気がします。
やはり基本から書かないとダメですよね。
掲示板のみで上手く情報整理を行う方法を模索しようと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.136)
投稿日 : 2016/09/01(Thu) 22:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9JykpQSUB5ZKVOsF5iw3X/
参照先
>>132で書いた、修正したウディタ解析用SSGですが、
案の定、ミスがあったので修正して>>1の2つ目の添付ファイルを差し替えします。

表示項目(ID)をずらす機能を付けたことに伴い、
領域の先頭・終端アドレスの表示と、項目の値のアクセスアドレスも修正する必要があったのに、
修正するのを忘れてました。
一応、これでミス修正は出来た、と思います。多分。・・・段々自信無くなってきた・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.137)
投稿日 : 2016/09/02(Fri) 20:30
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : uKmEnxi5LPuitOsfBx1bQ/
参照先
>>136 amateurさん
差し替え前のSSGを対象に何故メモリを圧迫するのか調べてみました。

現状はパッチが大量消費しているわけではないようです。

差し替え前のSSGを見てみると、
[ユーザーデータベース]の[タイプの名称]で[repeat]100件×下位項目([repeat]100件+[repeat]30件)
という感じで、それ以外にも全体を通して何万件も項目があるのではないでしょうか。

SpoilerALのコードを見てみると、[repeat]は、あらかじめ解析し、件数分のメモリ(クラスなので大きい)を確保しています。
ちなみにこれは修正できません。
これはクラスのデザイン(設計の部分)で広範囲に及びますのでアセンブリ言語で書き換えるようなものではありません。

回避方法はNo.132の方法でいいと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.138)
投稿日 : 2016/09/02(Fri) 22:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : vMHEjxIfx0wHu1O6D019l1
参照先
>>137 変態紳士さん
お手数をおかけしまして恐縮です。また、解説ありがとうございます。
確かに、現在の仕様では[repeat](終了値が全て50)を各DBごとに3段階で使用しており、
50の3乗で125000項目→(これが3つのDB分)→375000項目+α となりますので、
メモリ使用量が多くなるのも当たり前ですね・・・
[repeat]は「静的展開」だとHowToSSGにも書いてますので、
メモリ使用量増大に加えて起動に時間がかかるのも致し方なし、というわけですね。

ただ、>>131にも書いたとおり、変態紳士さんがパッチを更新してくださった結果、
同じSSGでメモリ使用量が1/3以下に減りましたので、
メモリ使用量の問題に関しては随分改善されたのではと思います(これは大変有難いです)。
それでも400MB以上もメモリ食ってますので、[repeat]の使いすぎには注意、ですね。
[variable]や[define]の実装により、同じ[group]の系列で[repeat]が何回でも使えるようになったので尚更。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.139)
投稿日 : 2016/09/06(Tue) 22:11
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : uKmEnxi5LPuitOsfBx1bQ/
参照先
対象のプロセスにメモリを確保する機能を追加してみました。
サンプル的なSSGは、source\test\__allocate_test__.ssg です。

SSGの中に色々とコメントを書いてますが、
ビミョーな所があるので変更の可能性もあります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.140)
投稿日 : 2016/09/07(Wed) 01:11
投稿者 amateur◆kR..xsXL6RU
ID情報 : edUE.CuSuZb5tQ38B0Kua.
参照先
>>139 変態紳士さん
おお、便利な機能追加ありがとうございます。
サンプルSSG等で試したところ、正常に機能しております。
>>132に書いた、表示項目をずらす手法は、空きアドレスを見つけられないと使えませんので、
空きメモリ(アドレス)を確保できるこの機能は大変有難いです。
今後、表示項目をずらす手法を使いやすくなり、SSGを書きやすくなりそうです。
感謝!
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.141)
投稿日 : 2016/09/09(Fri) 21:24
投稿者 amateur◆kR..xsXL6RU
ID情報 : OBAgv2wyQRtmKXDA1uzqX1
参照先
>>1の2番目の添付ファイルに入ってるウディタ解析用SSGですが、
名称や文字列を表示させる部分に不適切な箇所があったので、修正して差し替えました。
これで文字列を正常に表示できる、と思います

それに付随して、>>1の1個目に添付した詰め合わせの中の「ウディタ用のリスト作成用ファイル」(表計算ソフトのファイル)も、
正常にリストが作成できない場合を発見したのですが、
これは、時間と気力のあるときに修正したいと思います(私に修正できるのか不明ですが・・・)。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.142)
投稿日 : 2016/09/10(Sat) 21:13
投稿者 amateur◆kR..xsXL6RU
ID情報 : MJwUhji9JrBPszKJCihgF.
参照先
>>141に書いた「ウディタ用のリスト作成用ファイル」の不具合を修正したので、
>>1の1個目の添付ファイルを差し替えました。
ついでに同梱のウディタ解析用SSGを最新版(2個目の添付ファイルと同じものです)に差し替えた以外、他のファイルは変わってません。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.143)
投稿日 : 2016/09/20(Tue) 02:39
投稿者 amateur◆kR..xsXL6RU
ID情報 : PxiNtQ8EPIMPVUSTTafgD0
参照先
ウディタ公式ページから、各VerのパッケージファイルをDLしてサンプルゲームで試したところ、
>>1にアップしたウディタ解析用SSGは、Ver2.00以降から最新の2.10まで動作するようです。

それと、一応、ウディタでの座標とプレイ時間についての仕様が分かりましたのでSSGを添付します。
添付SSGの座標機能は、Ver2.02a以降から動作(つまり、Ver2.02aと2.10のみ)し、
プレイ時間機能は、Ver2.10でのみ動作するようです。(他のVerについてはあまり需要が無さそう&面倒なのでスルー・・・)

なお、最新のVer2.10でしか使わない場合は、下記のような記述でOKのようです。
--------------------------
// (半マス移動が出来ない場合はここを有効にする) [io_fep] $Val<<1, $Val>>1
[subject]X座標【 '+' _mem, 0x78978C, 4,fep_num ,??,%d '+' 】(マップ左上が座標0.0)/X座標/_:calc, 0x78978C, 0, 255, unsigned
[subject]Y座標【 '+' _mem, 0x789790, 4,fep_num ,??,%d '+' 】/Y座標/_:calc, 0x789790, 0, 255, unsigned
// (半マス移動が出来ない場合はここを有効にする) [/io_fep]

[subject]プレイ時間:dir
[enabled][:0x431660:]==0x787A0C
[subject]プレイ時間増えない/ON/_: toggle, 0x431664, 909090, 83C101
[/enabled]

[subject]プレイ時間(秒単位)【  '+' _mem, 0x787A0C, 4,num ,??,%d '+' 秒】/現在値/_:calc, 0x787A0C, 0,0x7FFFFFFF, unsigned
[io_fep] [:0x787A0C:] =>time; $time%3600=>mod; $mod +$Val*3600, $Val/3600
[subject]【時間】単位で変更【 '+' _mem, 0x787A0C, 4,fep_num ,??,%d '+' 時間】(分以下はそのまま)/【時間】/_:calc, 0x787A0C, 0,100000, unsigned
[/io_fep]

[io_fep] [:0x787A0C:] =>time; $time%3600=>mod; $mod%60=>秒; $time -$mod +$Val*60 +$秒, $Val%3600=>mod; $mod/60
[subject]【分】単位で変更【 '+' _mem, 0x787A0C, 4,fep_num ,??,%d '+' 分】(時間・秒はそのまま)/【分】/_:calc, 0x787A0C, 0,59, unsigned
[/io_fep]
[back]
------------------------------
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.144)
投稿日 : 2016/09/20(Tue) 21:54
投稿者 amateur◆kR..xsXL6RU
ID情報 : IYJT4i2WFPEMcSQyqVxsT/
参照先
>>143の添付SSGに「現在MAPのID・名称」を追加したのでアップします。
サンプルゲーム等で試したところ、この項目はVer2.00以降、最新のVer2.10まで動作することを一応確認済み。
該当Verの全てのゲームで動くかまでは分かりませんが。
なお、「現在MAPのID」を書き換えても、現在のマップがそれだけで変わるわけではないようです(多分、コモンイベントの処理が必要)。

また、「現在MAPの名称」については、システムDBのタイプID【0】の各「データの名称」がMAP名であることを前提にしてます。
一応、サンプルゲーム等、Ver2.00以降の幾つかのウディタ製ゲームで試したら全てこれで動いてるので、
暫定的にVer2.00以降の汎用っぽい機能ということにしておきます。

なお、最新のVer2.10でしか使わない場合は、下記のような記述でOKです。
------------------------
 //「システムDB」のタイプID:0 【マップ設定】のデータの名称(マップ名)のアドレスを定義
[define α] [:[:0x789DF0+0x10:]+0x3C:]+0x4+$da*0x1C=>name; [:$name +0x14:1] > 0xF =>num; ($num^1)*$name +[:$name:]*$num
[define β] [:0x78BFF0:]=>da; {α}
[subject]現在MAPのID・名称【 '+' _mem, 0x78BFF0, 4,num ,??,%d '+' 】【 '+' _mem, _{β}, 100, 00,?? '+' 】/MAPのID/_:calc, 0x78BFF0, 0, 255, unsigned
------------------------

なお、「座標」については、ウディタのVerが2.02aまたは2.10であっても、
このSSGでは表示・変更ができないゲームがあります。
その場合は、可変DB(または通常変数・予備変数?)に座標の項目があると思われますので、
>>1の「ウディタ解析用SSG」等で確認してください。

添付SSGの、現在MAPのID・座標・プレイ時間の各アドレスは全て「Game.exe」の.dataセクション内にあるので、
ウディタのVerが同じならどのゲームでもアドレスは共通です。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.145)
投稿日 : 2016/09/21(Wed) 00:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : sngBmTFujPOUi8DhReguK1
参照先
>>143と>>144の添付SSGの
[enabled]の条件式の記述が間違っていた(条件判定がされてなかった)ので、修正しました。
ついでに、>>143の添付SSGは>>144の分と重複してるので削除しました。

(追記)
「現在MAPのID・名称」「座標」「プレイ時間」の全てを、
ウディタVer2.00からVer2.10で汎用的に動作するよう修正しましたので添付します。
各Verのサンプルゲームと幾つかのゲームで試して全部正常動作した(座標については下記参照)ので、多分大丈夫、と思います。
ただし、「プレイ時間増えない」(プログラム改造)は、Ver2.10でしか動作しません(他のVerではエラー表示)。

なお、>>144に書いたように、「座標」についてはウディタのVerが2.00から2.10であっても、
このSSGでは表示・変更ができないゲームがあるのは同様。

まあ、だからどうした、という感じのオマケ的機能ばかりかもですが(座標書換えだけは有用かも・・・)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.146)
投稿日 : 2016/09/21(Wed) 21:19
投稿者 yun◆6As0zdMqREo
ID情報 : 2IZF2kogJLz0tA8goUCcF0
参照先
どうもお久しぶりです。
変態紳士さんのパッチがけっこうすごいことになっていてパッチで容量をへらせれる分は
へらしてみようとamateurさんのウディタの記述を元に私の分のものも少し変えてみました。
今回はアクリウムスのやつです。

私の設定の仕方が悪いのか、併用できないような使い方をしているのか分からないのでちょっと質問を。

追記:無事解決して修正しました。
-------------
b_toggleで最大値を現在値にまとめて書き込むときに、defineで設定すると読み込み元のアドレスの値が
異常値になってしまうようです
以下のように、普通のアドレス設定では正常な値が入り、defineで設定したものを入れると正常でない
巨大な値が入いります。これをdefineで正常に動かすためにはどうしたらいいでしょうか?
ちなみにデバッグモードで確認したところ読み取り元のアドレスに誤りはなさそうです。

//値正常
//_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 [.[:[:[:[:0x75A8D4:]+0x14+17*0x28:]+0x04+0*0x20:]+0x00:].] $$

//巨大な数値が入る
//_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 17=>type; 0=>data; 0=>chap;{cdb_value} $$
//_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 [.17=>type; 0=>data; 0=>chap;{cdb_value}.] $$
//_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 [.(17=>type; 0=>data; 0=>chap;{cdb_value}).] $$
-----------------

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.147)
投稿日 : 2016/09/21(Wed) 21:51
投稿者 dipper◆LEFxdWWYR3c
ID情報 : FyiyLXgYH8rBIZARmkWI10
参照先
>>146 yunさん

おそらく[: :]が抜けているためだと思います。
下記で動作を確認しました。

//_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 [:17=>type; 0=>data; 0=>chap;{cdb_value}:] $$
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.148)
投稿日 : 2016/09/21(Wed) 22:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : 2YWMxGPwyI.B.LuBCwsf1.
参照先
>>146 yunさん
こちらこそ、お久しぶりです。
お尋ねの件ですが、
//巨大な数値が入る
の箇所は、多分、以下のように記述すれば大丈夫ではないかと思います。
------------------
_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 17=>type; 0=>data; 0=>chap;{cdb_value}=>ad; [.[:$ad:].] $$
もしくは、
_ 0=>type; 0=>data; 2=>chap;{cdb_value},$4 17=>type; 0=>data; 0=>chap;[.[:{cdb_value}:].] $$
------------------
どういう意味かというと、
「$4 $$」内は、アドレスコーディングを記述し、その演算結果を「$4 $$」でバイト列に変換するわけですが、
>>146の場合、{cdb_value}に各IDを代入後のアドレスの「格納値」に、
オフセット演算子([. .])で加算した値をバイト列に変換するのだと思いますが、
そうすると、[define]で定義したアドレス式である「{cdb_value}」を、
{cdb_value}=>ad と変数定義し、その格納値は、[:$ad:]、これにオフセット演算子で加算するので、
最終的な値(バイト列に変換前)は、
[.[:$ad:].]
となると思います。この値を、「$4 $$」でバイト列に変換するということではないかと。

上で挙げた下の方の例は、
{cdb_value} = [:[:[:0x75A8D4:]+0x14+$type*0x28:]+0x04+$data*0x20:]+0x00+$chap*0x4
ですので(各IDの代入前)、
[define]の「テキスト置換」という性質から考えると、
[.[:{cdb_value}:].] = [.[: [:[:[:0x75A8D4:]+0x14+$type*0x28:]+0x04+$data*0x20:]+0x00+$chap*0x4 :].]
となるので、これでも動作するのではないかと思います(分かりやすいように、敢えて全角スペースを入れてます)。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.149)
投稿日 : 2016/09/21(Wed) 22:25
投稿者 yun◆6As0zdMqREo
ID情報 : 5zLC8SAYhEYM.pjAtcWOI.
参照先
>>147 dipperさん
>>148 amateurさん

早速のお返事おふたりともありがとうございます。
両方動作しました。
(こんな単純な間違えで長い間悩んでいたなんて言えない・・・)

書き方としてはamarureさんの上のほうが個人的に見やすいので今度からはその書き方を参考に
しようと思います。

なにはともあれ146は正常動作版に変更しておきます。
ありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.150)
投稿日 : 2016/09/21(Wed) 22:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : BshwTBbsyAlT8iEBOVLn8.
参照先
>>147 dipperさん
私は実際に動作確認はしていないので断定はできないですけど、
$4 [:17=>type; 0=>data; 0=>chap;{cdb_value}:] $$
の部分の、[:17=>type; 0=>data; 0=>chap;{cdb_value}:] についてですが、
「;」で分割されたアドレスコーディングの最後の、{cdb_value}のアドレスに対して、
ポインタ変換演算子とオフセット演算子を使用する、というのが>>146の趣旨だと思いますので、
{cdb_value}=>ad; [.[:$ad:].]
または、
[.[:{cdb_value}:].]
と書くのが正しいのではと思うのですが・・・

ただし、ポインタ変換演算子[::]については、
後ろの「 :] 」の数と記述場所が合っていれば、実際には動作するようですので(前の「 [: 」は無視される?)、
オフセット演算子が抜けているのを除けば、>>147の記述でも動作したのでは、と思います。

例)
[:[:[:0x75A8D4:]+0x14+$type*0x28:]+0x04+$data*0x20:]+0x00+$chap*0x4
は、
[:0x75A8D4:]+0x14+$type*0x28:]+0x04+$data*0x20:]+0x00+$chap*0x4
でも、多分動作します(前の [: の数が合ってなくても構わない、というSpoilerALの仕様みたいです?)。

>>149 yunさん
動作したのなら何よりです。私は動作確認せずに書いてしまったので、実は不安でした・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.151)
投稿日 : 2016/09/21(Wed) 23:53
投稿者 dipper◆LEFxdWWYR3c
ID情報 : FyiyLXgYH8rBIZARmkWI10
参照先
>>150 amateur

>>146のSSGを拝見して該当の処理を追っていくと[replace]を2回使ってましたが、結局は格納値が0なので、
オフセット演算子はいらないなと判断して省いてしまいました。

書き方については、>>147の処理で試してみたら動作したので横着して勇み足で投稿しただけです。
{cdb_value}=>ad; [.[:$ad:].]や[.[:{cdb_value}:].]と書くのが綺麗にまとまりますね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.152)
投稿日 : 2016/09/22(Thu) 01:03
投稿者 amateur◆kR..xsXL6RU
ID情報 : 3hhUgdUICXstPamgXJe9S.
参照先
>>151 dipperさん
確かに、ご指摘のとおりこの箇所の[replace]のオフセット値は、>>146のSSGをよく読むと0ですね。
確認せずに余計なことを書いてすみませんでした。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.153)
投稿日 : 2016/09/22(Thu) 01:29
投稿者 amateur◆kR..xsXL6RU
ID情報 : ./n4Vy3HMCjvUrnj/vokr/
参照先
>>149 yunさん
お尋ねの件と直接関係はないのですが、>>146のSSGの、[group]main にある、
[define cdb_string] [:[:[:0x75A8D4:]+0x14+$type*0x28:]+0x14+$data*0x20:]+0x04+$chap*0x1C=>name; [:$name +0x14:1] == 0x1F =>tmp; ($tmp^1)*$name +[:$name:]*$tmp
の箇所ですが、[:$name +0x14:1] == 0x1F については、
[:$name +0x14:2] > 0xF
または、
[:$name +0x14:2] == 0xF =>tmp; $name*$tmp +[:$name:]*($tmp^1)
等とした方がよいと思います。(※[:$name +0x14:1]から[:$name +0x14:2]に訂正)

実は、私も修正前の解析用SSGや、>>125に添付したSSG等では [:$name +0x14:1] == 0x1F と書いていたのですが、
[:$name +0x14:] の値は、「0xF」と「0x1F」だけでなく、「0x2F」や「0x3F」の場合もある(この場合も0x1Fと同様にポインタで飛んだ先に文字列格納)ようなので、
[:$name +0x14:1] == 0x1F と書いてしまうと、「0x2F」や「0x3F」の場合に文字列を正常に表示できないことに最近気付きまして・・・(ウディタで他に名称等を表示させる箇所も同様)
>>141に書いた「名称や文字列を表示させる部分に不適切な箇所があった」というのは正に上記のことでした。
一応、解析用SSGは>>141に書いたとおり修正したのですが、>>125に添付したSSGは修正するのを忘れていたので、
つい先程修正しました(汗・・・)
余計なことかもしれませんが、SSGを読んでいて気になりましたので・・・
・・・実際には、可変DBのキャラ名等で、「0x2F」等になる長い文字列はまず無いと思うので、実害は無さそうですが(だからこそ私は長い間気付かなかったのですが)。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.154)
投稿日 : 2016/09/22(Thu) 03:08
投稿者 amateur◆kR..xsXL6RU
ID情報 : 3hhUgdUICXstPamgXJe9S.
参照先
>>1のウディタ解析用SSGを更新したので、差し替え(2個目の添付ファイル)。
「タイプのメモ」を表示するよう修正しました。
解析に役立つ情報が書いてあることが結構多いので、あった方がよいかと。
これについてもyunさんが公開くださった情報を有難く利用させていただきました。yunさんにお礼申し上げます。

それと、>>145でアップした、「現在MAPのID・名称」「座標」「プレイ時間」の確認用SSGをオマケとして同梱しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.155)
投稿日 : 2016/09/22(Thu) 04:05
投稿者 dipper◆LEFxdWWYR3c
ID情報 : SXaTwJHb.fxUUzGit7MNV.
参照先
>>153 amateur

おそらく「 [:$name +0x14:1] == 0xF 」だと「 0xF 」の時だけしか機能しないと思います。
たとえば参照するバイト列が「 11223344 」とある場合「 [:〜〜:1] = 0x11 」「 [:〜〜:2] = 0x2211 」と返るはずです。
そのため「 [:$name +0x14:1]%0x10 == 0xF 」とすればおそらく機能すると思います。
もっとも「 [:$name +0x14:1] > 0xF 」と設定すれば済む話なんですけど、あくまで参考までに。

■追記
「 [:$name +0x14:1] > 0xF 」は末尾が0のアドレスの場合機能してしまう恐れがありますね。
「 [:$name +0x14:]=>ad;($ad%0x10)*($ad/0x100==0) == 0xF 」参考までに左記の処理なら4バイト「 0xF〜0xFF 」なら機能すると思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.156)
投稿日 : 2016/09/22(Thu) 07:38
投稿者 (仔猫)◆KCezBilYINU
ID情報 : igMbiif6SuGvdJWXVnNbQ0
参照先
(yunさんの書き込み…同じような所で躓いてまして‥。勉強になりました、ありがとう。)
(しかしamateurさんやdipperさん…すんなり6.2へ移行出来たことといい。才能の差を感じる今日この頃です)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.157)
投稿日 : 2016/09/22(Thu) 07:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : ./n4Vy3HMCjvUrnj/vokr/
参照先
>>155 dipperさん
色々フォローありがとうございます。
そもそも論になりますが、[:$name +0x14:] の値については、私のウディタ解析経験上、
「0xF」「0x1F」「0x2F」「0x3F」等、末尾1桁(16進数で)が「F」となる値以外(「10」や「25」)は存在しない、と思います(だから>>153のような条件式を書いたわけです)。
ウディタ製ゲームは10個くらいしか解析してませんが、それでもざっと計算して数千個の文字列をチェックしてきた経験上、
上記のとおり、[:$name +0x14:] の値について、末尾1桁(16進数で)が「F」ではなかった例は一度も見たことがありません。

百聞は一見にしかず、ということで参考に、私がウディタ製ゲーム(2つ)から抽出した文字列のリストを添付します。
 ・・・シート2個目の文字列がアレな内容ですが・・・[:$name +0x14:] の値が「0x2F」「0x3F」の例です(改造依頼を受けて最近SSGのリスト作ったので)・・・
LibreOffice(フリーソフト)で作成したファイルですので、エクセルでは読めないかもしれませんが。
添付ファイルの一番左の列(A列)はMDXで抽出したデータ(>>1の添付ファイル1個目に抽出用設定ファイルが入ってます)で、
 [:$name +0x14:]の値 = 文字列(直接格納) = [:$name +0x14:]の値 = 文字列(ポインタで飛んだ先に格納)
という形式ですが、[:$name +0x14:]の値 が、「0xF」「0x1F」「0x2F」「0x3F」等、末尾が「F」以外は存在しないのが分かっていただけるかと(D列を参照)。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.158)
投稿日 : 2016/09/22(Thu) 07:54
投稿者 amateur◆kR..xsXL6RU
ID情報 : ./n4Vy3HMCjvUrnj/vokr/
参照先
(1000文字制限に抵触したので分割して>>157の続き)
一応、C列で各文字列のバイト数も確認可能にしましたが、
文字列のバイト数はバラバラの値でも、[:$name +0x14:]の値は、必ず末尾1桁が「F」となってます(空の文字列の場合は「0xF」です)。
といっても、相関関係が無いわけではなく、
各文字列のバイト数+1(末尾付加のNULL文字分)が0x10(16)を超えると、
[:$name +0x14:]の値が「0x1F」に(0x1F以上だとポインタで飛んだ先に文字列格納。直接文字列を格納するのは「0xF」の場合のみ)、
0x20(32)を超えると、「0x2F」に・・・(以下同様)、という法則?っぽいものが帰納的に見えてくると思います。

補足ですが、文字列のバイト数は [:$name +0x10:]の値となります。

なお、私も改めて検証して気付いたのですが、[:$name +0x14:]の値が「0x10F」と2バイトの例(全角128文字以上)を発見しました。
ですので、>>1の2個目に添付したウディタ解析用SSGを修正・差し替えしました。
文字列表示の箇所を「 [:$name +0x14:2] 」とし、1バイトではなく2バイト読み取りにしました。
一つの文字列だけで全角3万文字以上は非現実的なので、3バイト以上は流石に有り得ないかと。

ちなみに、[:$name +0x14:]の値が「0x10F」となってる例では、
文字列のバイト数が「0x10D」でしたので、上記の法則?に合致しています。
参考までに、上記の[:$name +0x14:]の値が「0x10F」なのは、
イグニッシアサーガ第六幕-それなりダンジョン-の、可変DBのタイプID【15】の「計算用tmp.キャラ」の「タイプのメモ」です(>>1のSSGで確認可能)。
アドレスは、 [:0x78B6F4+0x10:]+0x20+15*0xA8 =>name; [:$name:] ですので、うさみみ等で確認可能です。
 ※ [:0x78B6F4+0x10:]+0x20+15*0xA8 =>name; [:$name +0x14:] の値が「0x10F」
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.159)
投稿日 : 2016/09/22(Thu) 08:58
投稿者 amateur◆kR..xsXL6RU
ID情報 : ./n4Vy3HMCjvUrnj/vokr/
参照先
>>156
むしろ、(仔猫)さんが最近、高度なプログラム改造を書かれていて、凄いなあと思っていたところですけど。
私にはまだあんなレベルのは無理です・・・(いつまで経っても無理っぽい気が)
以前にも書いた気がしますが、私はその場凌ぎ・付け焼刃なので、すぐにボロが出ます・・・
基本的に面倒くさがりなので、楽するために自分なりに工夫してるだけという、身も蓋もない話ですし。
最近アップした某作品のSSGも、酷い手抜きで・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.160)
投稿日 : 2016/09/22(Thu) 18:18
投稿者 dipper◆LEFxdWWYR3c
ID情報 : FyiyLXgYH8rBIZARmkWI10
参照先
>>157 amateurさん

あ、申し訳ない勘違いしてました。
最たるものは下記の様に勘違いしてました。見当違いな指摘で申し訳ありません。

[:$name +0x14:2] == 0xF =>tmp; $name*$tmp +[:$name:]*($tmp^1)

[:$name +0x14:2] == 0xF =>tmp; $name*($tmp^1) +[:$name:]*$tmp
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.161)
投稿日 : 2016/09/22(Thu) 22:37
投稿者 (仔猫)◆KCezBilYINU
ID情報 : rEJID857HEZobEaiEqljC/
参照先
(>>159・・・まだまだ苦闘してます汗)
(やはり感謝すべきはナスさんや先輩の方々が残してくれた資料のお陰です・・・)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.162)
投稿日 : 2016/09/23(Fri) 01:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : SITV/IorT.QAAGBhmX0kl1
参照先
>>125に書いた、ウディタでのSSGの書き方ですが、
一つ、ミスしやすい点がありますので一応書いておきます(というか、私がやらかした間違いというだけですが・・・)。
例)
------------------
 //可変DBのアドレスを定義
[define CN][:[:[:0x6A6218:]+0x14+$typ*0x28:]+0x04+$da*0x20:]+$nu*0x4
[define CS][:[:[:0x6A6218:]+0x14+$typ*0x28:]+0x14+$da*0x20:]+0x4+$nu*0x1C=>name; [:$name +0x14:2] > 0xF =>tmp; ($tmp^1)*$name +[:$name:]*$tmp
[subject]パーティメンバー:dir
[repeat]ssl->member_SSR,0,5,1
[back]
-------
[group]member_SSR
[define PA] 1=>typ; 0=>da; 0x[! 4+$Val !]=>nu
[define C1] {PA};[:{CN}:]
[subject]【 '+' _mem, _{C1}=>da; 5=>typ; 0=>nu;{CS}, 40, 00,-- '+' 】:dir
 (省略)
[back]
[/group]
------------------
この場合、{C1}={PA};[:{CN}:] が、「{C1}=>da」として、
最初に定義した、可変DBの項目の文字列のアドレス(={CS})の「データのID」として代入する値ですが、
文字列表示のアドレスネーミングの「アドレス」部分の、
 _{C1}=>da; 5=>typ; 0=>nu;{CS}
を書く際、
 _5=>typ; {C1}=>da; 0=>nu;{CS}
と書いては駄目です。何故なら、下の例では、{CN}と{CS}以外を置換せずに書くと、
 _5=>typ; 1=>typ; 0=>da; 0x[! 4+$Val !]=>nu;[:{CN}:]=>da; 0=>nu;{CS}
となりますが、「_5=>typ; 1=>typ; 」という順番での記述になるので、
{CS}に代入される変数「typ」(タイプのID)は、「1」になってしまう(「5」を代入するのが正しい)からです。
「タイプのID」や「データのID」を代入する際には、順番に気をつけないと間違えてしまう場合がある、ということで・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.163)
投稿日 : 2016/09/23(Fri) 17:38
投稿者 (仔猫)◆KCezBilYINU
ID情報 : igMbiif6SuGvdJWXVnNbQ0
参照先
情報資料ありがとうございます。

ウディタ製ではないですが
動かなかった作りかけのコードで思い当たりました。
もしかして…それが原因だったのかもと。展開して最終確認が必要な訳ですね。

追伸:できました!原因は別にあって恥ずかしながら括弧バグが直ったので6.1と挙動が違うんでした。
もしかして@sslと直接アドレスを指定していたのですが全部defineへ置き換えることができるような気も…。
amateurさんのように共通の項をうまく纏めるようにできないかなぁ。と宿題が残りました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.164)
投稿日 : 2016/09/23(Fri) 21:49
投稿者 amateur◆kR..xsXL6RU
ID情報 : kw7WAKHJkI5dR6nZN1V/.0
参照先
>>163 (仔猫)さん
添付のSSG拝見いたしました。
相変わらず、吉里吉里のアドレスは長ったらしいですね・・・
knさんの解析ツールが無ければ、私はとても書く気になれないです・・・(ハッシュ値云々の仕組みを理解してないのでツール無しには書けないのですが)

以前に同じ吉里吉里製のギアドラのSSGを書いていて思ったのですが、
ハッシュ値(吉里吉里解析ツールで表示される)以外は、ツールで出力されるアドレスが同じ項目が多かった記憶があります。
添付いただいたSSGでいうと、
[group]gpn_bank と、[group]g_t_HaremCount、[group]g_t_PrinceCount、[group]g_childrenCount あたり(他多数)は、
ハッシュ値以外は全く同じですね。ですので、例えば、
----------
[define Ad1] [:[.0x00.]:]=>B;$hash01=>H;[:$B+0x10:]=>T1;[:$B+0x18:]=>T2;($T1&$H)*0x20=>T1;$T2+$T1=>A0;[:$A0+0x1C:]=>A1;[:$A1+0x1C:]=>A2;[:$A0+0x04:]==$H=>V0;[:$A1+0x04:]==$H=>V1;[:$A2+0x04:]==$H=>V2;(($A0*$V0)|($A1*$V1)|($A2*$V2))+0x10
----------
と予め定義し(「$hash01」がハッシュ値となる)、その上で、各項目のアドレス部分に、
----------
_(各ハッシュ値)=>hash01; {Ad1}
----------
のように書いていくと、省力化できるような気がします。
ちなみに、テキスト中の異なる部分を簡単に特定するには、
テキスト差分比較サイト difff《デュフフ》を活用するのが便利かと(他に便利なツールがあるかもですが)
ギアドラのSSGを書く際に、上記サイトが大活躍でした。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.165)
投稿日 : 2016/09/23(Fri) 22:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9NipKN0//yE05amsCxA3a.
参照先
>>164の続きですが、例えば、[repeat]を使用して、
項目名部分には、[! @項目名リスト, $Val !] と書き、(「項目名リスト」作成は、解析ツールで抽出できれば簡単ですが・・・)
アドレス部分には、下記のように記述すれば、より省力化できる、ような気もします(項目種別やオプション部分が同じでよいなら、という条件つきですけど)
_[! @ssl->ハッシュ値リスト, $Val !]=>hash01; {Ad1}
 ※「ハッシュ値リスト」には、各項目名に対応するハッシュ値を各行に書いていく(これも解析ツールで抽出できれば簡単ですが・・・)

例)
[subject][! @ssl->項目名リスト, $Val !][  '+' _mem,_[! @ssl->ハッシュ値リスト, $Val !]=>hash01; {Ad1},4,num,-,%d '+'  ]/[! @ssl->項目名リスト, $Val !]/:calc,_[! @ssl->ハッシュ値リスト, $Val !]=>hash01; {Ad1},0,999999999

(追記)
「@項目名リスト」等に、「ssl->」等のファイル名指定を忘れていたので、下記のように訂正
[! @ssl->項目名リスト, $Val !] や、[! @ssl->ハッシュ値リスト, $Val !]
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.166)
投稿日 : 2016/09/23(Fri) 22:45
投稿者 (仔猫)◆KCezBilYINU
ID情報 : igMbiif6SuGvdJWXVnNbQ0
参照先
amateurさんありがとう御座います。
素晴らしい回答です。目から鱗です!

6.1のコードと比べて全く同じ機能で、ここまでコードが縮まるとは思いませんでした。
感謝です。

添付:もうちょっと手直しする予定ですがとりあえず纏めてみました。

>>165
>※「ハッシュ値リスト」
以前考えたことがあったのですが、そのときは出来そうで出来ないような気がしたのですが6.2では可能なんですね。

>[subject][! @項目名リスト, $Val !]
これは項目もリスト化で表示ですね。まだ纏めることが出来るとは…超ダイエットに成功しそうな感じです。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.167)
投稿日 : 2016/09/24(Sat) 04:20
投稿者 amateur◆kR..xsXL6RU
ID情報 : kw7WAKHJkI5dR6nZN1V/.0
参照先
>>166 (仔猫)さん
お役に立てたなら幸いです。
あれから色々考えて、さらに省力化(になるかは?)が可能なことに気付きました。
>>165で、(項目種別やオプション部分が同じでよいなら、という条件つきですけど) と書きましたが、
下記のように、[repeat]の [! @ssl->xxxリスト, $Val !] を使えば、項目種別やオプション等も項目毎に変えられることに気付きました(こんなことが可能とは知らなかった・・・)ので、
サンプル的なSSGを添付します(体験版2.10用です)

なお、各リストを書くのが面倒そうに思えますが、表計算ソフトを使えば意外に楽、かもしれません
-----------
[subject][! @ssl->項目名リスト, $Val !] [  '+'_mem,_[! @ssl->ハッシュ値リスト, $Val !]=>hash01; {Ad1},[! @ssl->namingリスト, $Val !] '+'  ]/[! @ssl->項目名リスト, $Val !]/[! @ssl->項目種別リスト, $Val !]_[! @ssl->ハッシュ値リスト, $Val !]=>hash01; {Ad1}[! @ssl->項目オプションリスト, $Val !]
[/group]
-----------
[group]項目名リスト
名前(uni)
職業(uni)
Lv   
経験値  
給与   
[/group]
-----------
[group]ハッシュ値リスト
0xE6E17F14
0x2CFB01B7
0xF66D3B99
0xE2313450
0xDDB7CB37
[/group]
-----------
[group]namingリスト
0x20,unicode,-
0x20,unicode,-
4,num,-,%d
4,num,-,%d
4,num,-,%d
[/group]
-----------
[group]項目種別リスト
_:string,
_:string,
:calc,
:calc,
:calc,
[/group]
-----------
[group]項目オプションリスト
,16,00
,16,00
,0,99
,0,99999999
,0,99999
[/group]
-----------

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.168)
投稿日 : 2016/09/24(Sat) 09:54
投稿者 (仔猫)◆KCezBilYINU
ID情報 : igMbiif6SuGvdJWXVnNbQ0
参照先
amateurさん、ご助力ありがとうございます。

各項目をリスト化できるんですね。
こんなにコンパクトに書けるとは大変勉強になりました。
(UnDefの使い方…成る程、こう使うのかぁ・・・メモメモ)

リスト化すると
保守も簡単になりますね、お手本にさせて頂きます(こんな綺麗なコードになるとは…)

追伸:そろそろ表計算ソフトも使いこなせるようにならないと…。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.169)
投稿日 : 2016/09/24(Sat) 12:08
投稿者 amateur◆kR..xsXL6RU
ID情報 : 538P2onrm1vobs9NTdpmQ/
参照先
>>168
>>167に書いた例は、かえって面倒で省力化になってないかもですね・・・
あらためて見るとやり過ぎだった気がします。あくまで書式の実験ということで・・・
同じcalc項目でも、オプション部分(最大値等)を変えられる、程度の使い方でよいかもしれません。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.170)
投稿日 : 2016/09/24(Sat) 12:49
投稿者 (仔猫)◆KCezBilYINU
ID情報 : igMbiif6SuGvdJWXVnNbQ0
参照先
>>169
了解です。これで僕も6.2の仲間入り出来そうです、ありがたや〜。
(最初の躓きがあって2週間ぐらい考えても分からなかったのが、方々のお陰で解決できました。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.171)
投稿日 : 2016/09/24(Sat) 13:24
投稿者 amateur◆kR..xsXL6RU
ID情報 : s9iC6o/u/9hk6a/a1rFau1
参照先
そういえば、以前にSSGを書いたHSP製も、[define]の関数的構文で書くのに向いてる気が。
[define Ad] [:[:[:(ベースアドレス):]+0x2C:]+0x1C +$num*0x30:]
のように定義して、($numの部分がいわゆる「n値」)
_(各項目のn値)=>num; {Ad}
と各項目のアドレス部分に書くと楽かも。
 ※ 「$num*0x30」の箇所をまとめて「$num」とした方がよいかも?
特定のゲームエンジンを使うゲームは、[define]の関数的構文と相性が良いのでしょうか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.172)
投稿日 : 2016/09/24(Sat) 17:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : woJMBY0l/s6yuKDrCKy7S.
参照先
(仔猫)さんとお話していた「魔剣士リーネ2」(吉里吉里製)の件ですが、
吉里吉里解析ツールのアドレス出力機能を使って、色々考えたところ、
吉里吉里のアドレスは物凄く長いのですが、構造自体は意外に単純みたいですね。
基本的に、解析ツールの上位ノードから、順番にハッシュ値をチェックし、
ハッシュ値ごとに共通の記述が繰り返されるという構造です。

このゲームでは、最初のハッシュ値は「0xB427DD3B」で、ノード名「game」以下(改造対象の項目は全てこのノード以下にある)の全項目共通、
2個目以降のハッシュ値で分岐していくという感じです。
添付SSGの末尾、[/script]の後ろに書いたように、[define]で定義する必要のあるのは、3つだけだと思います。
なお、各キャラやアイテム等、同階層のノードが各キャラ等で分岐している場合は、
添付SSGに記載の[define AD2]で定義した式が、{AD1}の前に入るようです
この場合、[repeat]を使って、[define AD2]の「$num」の箇所に 0x[! $Val !] を代入することが多いと思います。

基本形は、
 _{AD};(ハッシュ値)=>Ha;{AD1};(ハッシュ値)=>Ha;{AD1} (以下、;(ハッシュ値)=>Ha;{AD1}を必要分だけ繰返し)
場合によって、;(ハッシュ値)=>Ha;{AD1} の前に、 (キャラID等)=>num;{AD2}; が入る、という感じかと。

(補足)
同じ吉里吉里のギアドラで確認したところ、
[define AD]に書いたモジュール名(ゲーム実行ファイル名)と最初のハッシュ値以外、
添付SSGの、[define AD]、[define AD1]、[define AD2] は、全く同じ(上記の基本形も同じ)でしたので、
吉里吉里のVerが同じなら、モジュール名と最初のハッシュ値だけ変えれば、他のゲームにも流用できそうです。

(さらに補足)
モジュール名は「MName::nul」と書けばゲーム毎に修正しなくて済みますね。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.173)
投稿日 : 2016/09/24(Sat) 19:47
投稿者 (仔猫)◆KCezBilYINU
ID情報 : igMbiif6SuGvdJWXVnNbQ0
参照先
amateurさん
吉里吉里の解析ありがとう御座います。
繰り返しが多いような感じではありましたけど…
本当に3つで出来そうですね。

変数の発想は誰が出したのだろうと思ったらdipperさんでしたか!?
うーん…流石としか言いようがないです。

それを実装させた変態紳士さんにも大感謝です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.174)
投稿日 : 2016/10/01(Sat) 22:49
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先
Alice Soft system3.9 で作られたフリーゲームうさ耳で数値検索>出た数値変更で数値変化なしだったんですが改造する方法って何かありますでしょうか?もしくはAlice Soft system3.9ゲーム全般的なSSGはあるんでしょうか?何処で聞くのがいいのか新規建てる方がよかったのかわからないのでここに書き込ませてもらいます
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.175)
投稿日 : 2016/10/02(Sun) 00:58
投稿者 (仔猫)◆KCezBilYINU
ID情報 : pFOWhC7c3/WlFSlPI9r390
参照先
system3.9 を使ったゲームと言うことは
古いアリスのゲームかな?

鬼畜王ランスを解析したとき各パラメーターのデータが2Byte(max65535)で処理されてました。
うさみみのデフォルトのサーチは4bytes(Dword)なのでプルダウンで2bytes(Word)へ変更すると
検索に掛かるかもです。あとは検索範囲を広げてみるとか。。。


(amateurさんと時間が被ってしまった!)
(と言うわけで、差し支えなかったらゲームタイトルを書いておいてください。)

>>176
amateurさんの遭遇した、値が3バイトで格納されていてるのが気になります。
依頼のゲームを解析してみると所持金が分離してまして…おやっと。
昔のゲームなどでは00を末尾へ加えて桁数を水増しする技とかあったみたいですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.176)
投稿日 : 2016/10/02(Sun) 00:58
投稿者 amateur◆kR..xsXL6RU
ID情報 : C4GUNsOSJ.hca6iRZKber0
参照先
>>174
フリーゲームなら、ゲーム名と入手先のリンクを書いていただけないでしょうか。
実際にそのゲームで試してみないと、はっきりしたアドバイス等は出来ませんので。
どうしてもゲーム名を書けない理由でもあるのでしょうか?

それだけの情報では一般的・抽象的な返答しかできませんし、
無駄に遠回りな話で時間を無駄遣いすることになります。

>>175
(仔猫)さん、フォローありがとうございます。
検索自体ができていないのか、書換え時点で何か問題があるのか・・・
書き換えた後、画面表示を更新していないだけって可能性もありますし、何とも言えませんね。
ステータス関係だと、書換え後、装備し直す等でステータスの再計算処理がされないと反映されないって場合もありますし。

そういえば、以前、値が3バイトで格納されていて、
バイト列に変換(エンディアン反転)してバイト列検索しないとヒットしない例がありました。(うさみみでは3バイト単位の数値検索は不可)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.177)
投稿日 : 2016/10/02(Sun) 01:26
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先 http://hk.xii.jp/hagi/games/graymerca/
こちらのゲームですこんな感じでいいんですかね
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.178)
投稿日 : 2016/10/02(Sun) 02:04
投稿者 (仔猫)◆KCezBilYINU
ID情報 : pFOWhC7c3/WlFSlPI9r390
参照先
2byteで格納されてますね。うさみみなら2bytesで検索&サーチ範囲を40000000ぐらいにしてみてください。

LEA EAX,[EAX+EAX*2]
MOV EDX,[ECX+EAX*4+4]
MOV [EDX+ESI*2],AX

system3.9のポインタの形ですが
上のアセンブラを変換するとこんな感じです(戦闘中HPのアドレスです)
ptr(ptr(ptr(495A90)+14)+18D*4)+2n

SSGの下の方にコメントアウトで解析部分を書いておきました。

>>174
>Alice Soft system3.9ゲーム全般的なSSGはあるんでしょうか
Takeさんの作られたアリスソフト解析用SSGと言うのがありまして
それを使うと色々と解析ができるかもしれません。ただ、system3.9では使ったことがないので手直しすれば使えるようになると思いますが…(入手先は何処だったかなぁ。臨時板のAlice関係の依頼でTakeさんが公開してくださってるSSGに含まれてるような記憶が。)

添付1:参考になれば(修正10/02 22:00)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.179)
投稿日 : 2016/10/02(Sun) 15:06
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先 http://hk.xii.jp/hagi/games/graymerca/
178さんありがとうございます、おかげで楽にストーリー進めて見ることができます
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.180)
投稿日 : 2016/10/03(Mon) 01:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : 7o6eMrHAFZefHw1QasErk1
参照先
>>178 (仔猫)さん、SSGありがとうございます。
私は、アリス系(エンジン)のゲーム解析は初めてなので、大変参考になりました。
一応、私もSSGを作ってみたのですが、何故かベースアドレスが(仔猫)さんのSSGとは違ってしまいました・・・
私の環境ではどちらでも動作してますので、多分どちらでもよいと思います・・・おそらく。

念のため、ズレ対策の経路を使ったものの、必要かどうかは分からない上に、そもそもズレ対策に効果あるのか不明ですが、
私にはこれ以外の経路は見つけられませんでした。一応、経路は2つ見つけたのですが、どちらが良いかは?です。
詳しくは添付SSGの末尾を参照。

SSGにはアイテムやスキル関係、行動済みキャラを未行動に戻す等、色々入れましたが、
各項目→各キャラという表示になってるので、使いにくいかも・・・
なお、ゲーム開始後最初のマップしかプレイしてないので、キャラ名のリストがこれで正しいのかは未検証です。

(追記)
SSGを更新。
ステータス等を、各キャラごとに表示できるようにしました。
更新前の「各項目→各キャラ」の分も残してます。
どちらでも書換え内容自体は同じです。

(10.04 追記)
SSGを更新。難易度変更を追加。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.181)
投稿日 : 2016/10/03(Mon) 02:09
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
おお!amateurさん解析ありがとう御座います。
これは完成度が高い。しかも6.2で作られていて勉強になります。

ゲームも結構おもしろいし
これ別スレを立ててamateurさんのSSGを再投稿してもらった方がよさそうですね?

>私にはこれ以外の経路は見つけられませんでした。一応、経路は2つ見つけたのですが、どちらが良いかは?です。
あー。メインのポインタはあまり検証してなかったです。僕の方がミスってるぽい。
ひょっとして動いてるのが奇跡じゃないかと(汗
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.182)
投稿日 : 2016/10/03(Mon) 03:35
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先
WIN10だと180さんのSSG中に書かれてるとうり更新パッチ落として
更新パッチフォルダーに書いてあるとうりにして起動すると
00416743でD0458920に対する読み込み違反てエラーが
ちゃんと更新出来てないってことですかね
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.183)
投稿日 : 2016/10/03(Mon) 04:20
投稿者 amateur◆kR..xsXL6RU
ID情報 : 7o6eMrHAFZefHw1QasErk1
参照先
>>182
そのエラー表示は、SpoilerAL起動時のエラーっぽい気がしますが、原因は分からないですね・・・
最新の修正パッチを当てても駄目でしょうか。私の環境では「2016.10.01」更新分の最新パッチで問題なく動作するのですが。

最新パッチを当てても同じエラーが出るなら、「SpoilerALの修正パッチ」のスレでパッチ作者の変態紳士さんにご報告していただくしかないと思います。
なお、上記スレで不具合報告する際は、同スレの(No.36) で変態紳士さんが書かれている内容をよく読んだ上でお願いします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.184)
投稿日 : 2016/10/03(Mon) 10:07
投稿者 Take◆z2zOLLMPyz2
ID情報 : qtyJ/C0/kWnshYUUTWW6A/
参照先
(仔猫)さんにamateurさんが凄いぞと言われて覗きにきましたがホントに凄いですね。
6.2仕様を十全に使いこなしている様で勉強させて頂きます。
自分の方は最近はずっと移植品しか作って無いのでパッチも1度導入したきりですので。

>>178
>Takeさんの作られたアリスソフト解析用SSGと言うのがありまして
確かイブニクルかランス3辺りだった気がしますね。
ベースと基本形さえ把握していればsystem3.9仕様にも出来るとは思いますがあくまであれは解析補助なので改造を主目的にするなら余り役には立たないかと。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.185)
投稿日 : 2016/10/03(Mon) 13:24
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先
SpoilerALとパッチ落としなおして別途更新入れたら起動出来ました
解凍時か落とすときに一部ファイル破損等が起きてたのかも?
PC詳しくないのでよくわかりませんが
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.186)
投稿日 : 2016/10/03(Mon) 21:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : p/ELK5kD8gt1h6cjZmeK2/
参照先
>>185 匿名さん
動作するようになったようで良かったです。
ファイル破損という可能性もあるので、一応何度か再DL等を試してみるのも大事ですね。

>>181 (仔猫)さん
私がSSGに書いたベースはブレーク設定しても反応が無く、これでいいのか?と思いつつ書いたので・・・
自分の環境では結果的に動作してるのでそのまま使ってるだけだったりします。
それと、このゲームの専用スレ立てた方がいいですかね。フリゲとしては評価高そうですし。
気になる点が少し残ってるので、それが解決したら改造投稿でスレ立てしようかと思います。

>>184 Takeさん
[define]による置換はSSG作成を省力化する強力な武器になりますので、
面倒臭がりの私には 願ったり叶ったりで即座に飛びついただけ、という気がします・・・(楽できる気配を察すると急にやる気が出る情けない習性)

[define]の関数的構文は>>67で変態紳士さんが私宛に解説くださったので([define]の書式が若干変わったようですが)、
印象に残っていて試しにウディタで使ったら非常に便利なことに気付いて、以降他のゲーム(エンジン)で試してる段階です。
6.2仕様ついては他の方々がその内もっと洗練された書き方でSSG作ってくださるのではと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.187)
投稿日 : 2016/10/04(Tue) 17:42
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
amateurさん
>気になる点が少し残ってるので、それが解決したら改造投稿でスレ立てしようかと思います。
気になります!

しかし。。。
これは、お勧め出来るゲームだなぁと(雑談板にゲームの感想を…)
昨日は寝落ちしてしまってレスできませんでした。久々にうとうと…。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.188)
投稿日 : 2016/10/04(Tue) 21:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : IgQ2QfTm5h7LA/RA.6qb0/
参照先
>>187 (仔猫)さん
モード(難易度)のことではなかったのですが、
難易度のアドレスは割りとあっさり見つかったので、SSGに追加しました。(>>180の添付SSGを更新)
(各難易度の値は、イージーが「0xA」、以下、公差1で、マスターが「0xD」でした)

気になる点というのは、味方ユニットと敵ユニットのステータス関係のアドレスの区別がどうなってるのか、
なのですが、一応大体は分かりました。
>>178で(仔猫)さんが書いてくださった下記の例でいうと、
ptr(ptr(ptr(495A90)+14)+18D*4)+2n
「n」が1から100までが味方ユニットの分で、通常ユニットは「n=68」の「ケケル」まで、
召喚ユニット(?)は、「流浪の衛生兵」:n=98、「ロフォ君」:n=99、「ヒュー」:n=100、のようで、
味方ユニットについては、「n」= ユニットID、という順番で固定のようです。
そして、「n=101」以降は、敵ユニットのデータとなるようですが、
ID順で固定というわけではなく、そのマップごとに異なるようです。
例えば、ゲーム開始後最初のマップでは、「n=101」は、マップボスの「プラント」(ID=129)となります。

敵ユニットについては、メモリ上のユニット名の並び順と、IDが結構バラバラで、全部調べるのが面倒そうなので
SSGに実装は見送りにします。
情報だけ書いておくと、下記が各ユニットのユニットIDのアドレスです。(n=1がハルカ。101以降は敵でマップごとに変わるよう)
_[:[:[:[:0x40114F:]+0x150:]+0x4:]+0x171*0x4+0x4:]+2n
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.189)
投稿日 : 2016/10/04(Tue) 22:26
投稿者 amateur◆kR..xsXL6RU
ID情報 : aQjR6ysXytLKHk3mQkSdD/
参照先
ご存知の方も多いかもしれませんが、
アドレス補正属性[adjustment]の「search」の仕様について幾つか気付いたことがありますので一応書いておきます。(search以外は使ったことがないので分かりません)
まず、
[adjustment]search,オプション
[/adjustment]
で括った項目(補正値適用対象項目)に、アドレスネーミングを使うと正常にサーチされない(サーチ範囲が「0x00400000 から 0x00400000」になる)

ただし、下記のように階層項目を使用すると、補正値適用対象項目にアドレスネーミングを使っても正常にサーチが可能。下記で(クリックでサーチ開始)を選択して下位項目を開くとサーチが開始する。
--------------------
[subject](クリックでサーチ開始):dir
[adjustment]search,オプション
 (省略)
[/adjustment]
[back]
--------------------
なお、階層項目を使用すると正常にサーチが可能になることには、
臨時板管理人さん作のSSG「SRPG Studio 汎用 サーチ版」を読んでいて気付きました。

また、[adjustment]のオプション(基準アドレス等)に、[define]での置換は機能しないようです。
(サーチ開始のタイミングでSpoilerALが不正終了する)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.190)
投稿日 : 2016/10/05(Wed) 00:02
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>188
amateurさん、詳細ありがとうございます。
ユニットでしたか…確かに。。。同じユニット名があるので、n値が網羅されてるアドレス(ポインタ)もありそう?な気はしますが労力と見合うメリットは…(僕もそこまでは無理ッス)

あと更新ありがとうございます。
難易度変更ありがたや。(マスター系の追加ユニットは仲間になるときにフラグも必要ある模様?)

追記:
マスターでのみ参加するキャラ
途中で難易度をマスターへ変更しても過去話を経てないと無理ぽい?そんな感じですね。
とりあえず全イベント網羅は無理な作りなのでハードモード終わらせてから2周目で確認します。

>>188,191
スポット参戦、確認しました(海MAPでの戦いで…。となるとカーソルを合わせた状態でのユニットのステータとか必要かな?)
_[:[:[:[:0x40114F:]+0x150:]+0x4:]+0x4:]+2*0x3B
でカーソル選択中のユニットIDです。

>>184
Takeさんありがとうございます。
また、技をお借りしました。選択中のユニット変更などを・・・。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.191)
投稿日 : 2016/10/05(Wed) 02:10
投稿者 amateur◆kR..xsXL6RU
ID情報 : aQjR6ysXytLKHk3mQkSdD/
参照先
>>188で「n=101」以降は、敵ユニットのデータ、と書きましたが、
敵ユニットとは限らず、スポット的に仲間になる「Helper」ユニット(1章第2話最初のマップで加わる「セバス」等)の場合もあるようです。

>>190
加入フラグ的なデータがあるのかと思い調べてみましたが、今のところ見つからないですね・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.192)
投稿日 : 2016/10/05(Wed) 08:21
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先
特定のステージで会話や特定のキャラで撃墜>仲間面があるんでフラグありそうですね、あとリスト名前で出てるキャラ敵限定ポイ人も味方の所に数人紛れ込んでるっぽい?マスターだと入るのかな?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.193)
投稿日 : 2016/10/05(Wed) 09:56
投稿者 Take◆z2zOLLMPyz2
ID情報 : fIiQYbvUYJcUT0OW2rVHJ/
参照先
どなたかtraceの仕様について詳しい方いますか?
色々と試してみたのですがtraceで条件式ファンネルが機能しないのって仕様ですかね?
trace自体を使うのが初めてで判断に困ってるので教えて頂けると有難いです。
単純に自分の記述ミスなら良いのですが…


>>186
amateurさん情報有り難うございます。
一応はパッチ導入時にはdefineを軽くは触っているので有用性は理解しるのですが、
SSGを作り直す気が起きなかったので今の所活用出来て無いですが新規で作る時にでも試してみます。
とは言え自分なりのSSGテンプレートがあるのでそちらを活かしつつと言った所ですかね。
自分の購入パターンで行くとアリスソフト辺りまでお預けかな?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.194)
投稿日 : 2016/10/05(Wed) 18:08
投稿者 (仔猫)◆KCezBilYINU
ID情報 : pFOWhC7c3/WlFSlPI9r390
参照先
>>192
匿名さん
情報ありがとう。特定のキャラで倒すとかあったんですね。魔法使いは仲間になったのですが。そのとき選択肢がでたので
なにかフラグ?この場合はアイテムでしたか必要でした。

>>193
Takeさん
>trace
Takeさんの仰る通りで本来の動作では機能してないような気がします。
うーん。僕もTakeさんと同じくでファンネルファイル名の書き方が間違ってるのかなーと悩んで…挫折。

別の使い方として値の確認用でたまに使ってます(アドレスネーミング部は機能してるのでdirやcalcの代わりにと)
誤爆しても安全ですし(あと見た目、グレーで目立たないし)

[subject]CharID  [  '+' _mem,0x04,4,num,-,%u '+'  ]:trace
-----------------------------
本来は・・・
[group]funnel_file1
use,_0x04,01
[/group]

[subject]CharID  [  '+' _mem,0x04,4,num,-,%u '+'  ]:trace,0x00,ssl->funnel_file1
の用に使うのかな?

あ、そういえば
amateurさんの臨時板の投稿でSSRファイルの使い方が書かれてました。

trace,0x00,file::ssl->funnel_file1
これでも駄目かぁ
--------------------
追記
>>195
amateurさんありがとうー。
repeatの時だけだったんですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.195)
投稿日 : 2016/10/05(Wed) 19:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : nsIRRgVQTDKnda8wYU7JF.
参照先
>>190 (仔猫)さん
カーソル選択中のユニットID、そんなデータもあるんですね。
これでユニットIDの確認がしやすくなりそうです。情報ありがとうございます。

>>193 Takeさん
traceについてですが、(仔猫)さんが>>194で書かれているように、
そもそもtrace項目自体が機能してない気がするのですが。
以前確認したら「trace」と「copy」項目は両方機能していないっぽい感じでした・・・
「copy」項目が機能したら、現在HPを最大値まで回復とかが簡単に書けそうなのですが。

一応、SpoilerAL.exeを対象プロセスにした確認用SSGを添付しました。
やはり、「trace」と「copy」両方とも機能してないような・・・

「 File::ssl->ファイル名 」という指定方法は、
[repeat]のループ値リストファイルを指定する時だけ(?)だと思いますが、
添付SSGの「trace 動作確認3」で一応試しても駄目でした。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.196)
投稿日 : 2016/10/06(Thu) 20:45
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>193-195 Takeさん, (仔猫)さん, amateurさん
修正パッチの案内です。
traceとcopyをHowToSSGの記述に従いロック項目として修正しました。
動作サンプルはamateurさんのSSGを基に変更しています。

>「copy」項目が機能したら、現在HPを最大値まで回復とかが簡単に書けそうなのですが。
たぶんdipperさんが書かれた部分だと思いますが、
「その古城に勇者砲あり!」の「mana/魔力炉回復」で最大値を現在値に代入するコードがあります。
traceとcopyはSSGファイルを閉じるまで無条件にロックしますので使い方は限られるかもしれません。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.197)
投稿日 : 2016/10/06(Thu) 22:24
投稿者 amateur◆kR..xsXL6RU
ID情報 : mgj3sQGTE0B7X1NLcNXds.
参照先
>>196 変態紳士さん
こちらをご覧くださった上に、パッチ更新で対応までしてくださり有難うございます。
早速、最新パッチを適用して添付していただいたSSGを試したのですが、
copy項目については、正常動作するようになりました。
ただ、trace項目については、
  [subject]trace 動作確認【 '+' _mem, _Memory\:\:0, 4,num ,??, %08X '+' 】:trace, ssl->trace_fnl
について、
【 trace, ssl->trace_fnl 】の部分を、【 trace, _Memory::0, ssl->trace_fnl 】のように何らかのアドレスを書かないと、
ロック周期で書込みが行われるタイミングでSpoilerALが落ちてしまうようです。
※エラー表示は「SpoilerAL.exe は動作を停止しました」

そこで、下記のように添付SSGの項目を修正しましたが、SpoilerALが落ちることはないものの、
ファンネルファイルに記載した内容どおりに書込まれないようです(ファンネルファイルに書いたアドレスに何も書き込まれない)。
  [subject]trace 動作確認【 '+' _mem, _Memory\:\:0, 4,num ,??, %08X '+' 】:trace, _Memory::0, ssl->trace_fnl
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.198)
投稿日 : 2016/10/07(Fri) 01:18
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>197 amateurさん
SpoilerALのソースコードにはアドレスの部分はありません。
10/06の分は何度か修正していますが最新?でしょうか。

元のソースコードのままだと周期タイマー中に初期値設定をしていたりして、
何かを作りかけた形跡がある感じでした。
HowToSSGも何故かアドレスを含む書式と含まない書式があったりします。

後から見つけた記述には「ロックを切り替えるチェックボックス」などと書かれていますが、
実際はソースコードにはGUIなんて無かったりします。
本当は画面でチェックボックスを操作するようなものだったのか、常時ロックするものだったのか、
作ろうとした時点の構想すら掴めなくなってきました。

仕様より前に何を作ろうとしていたのかハッキリしていない気がします。
これは放置するべきかも・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.199)
投稿日 : 2016/10/07(Fri) 18:56
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>196
変態紳士さん
パッチ更新ありがとうございます。

また
trace及びcopyの動作仕様解析ありがとう御座います。

もしかして
[funnel]が実装されたときに
traceは利便性から…廃止されたのかなぁ?
っという気もします。

追記:
パッチ試す前に書き込んだのですが
現在の最新パッチは…
amateurさんのところと同じ現象?(タイトルセレクトで選択後、ALが落ちてしまう)…というわけで確認が出来てません。
一部のSSGは読み込めるみたいです。amateurさんの最新投稿"グレイメルカ"はALが落ちることなく起動、動作もOKでした。
うーん謎です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.200)
投稿日 : 2016/10/07(Fri) 19:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : bwM.PNxy5MRpLSTsAzk6//
参照先
念のためその後、再DLしてパッチ再適用、を何回か試したのですが、
やはり>>197と同じ結果でした・・・
私の環境自体に問題があるのかもしれませんし、一応トレース項目と同じような効果を得られる手法はありますので、
今後はトレース項目は触らないようにします・・・

一応書いておきますと、下記のような感じでトレース項目と同様の結果になると思います(強制ロックではないですが)。
項目本体のトグルは意味のない処理(項目本体のアドレスにそのアドレスの格納値を書き込む。NOPと同じような感じ)なので、
結局ファンネルライトによる書込みのみされるのと同じ、ということで。
------------------------------
[allocate]0, 100, RW
[funnel]ssl->funnel
[subject]ファンネルライト【 '+' _mem, _Memory\:\:0, 4,num ,??, %08X '+' 】/ON/: toggle, _Memory::0 +0x10, $4 [:Memory::0 +0x10:] $$
[/funnel]
------------
[group]funnel
use, _Memory::0, 11111111
[/group]
------------------------------
SSGにしましたので添付しておきます。
ただ、先程試した最新パッチを適用すると、何故か添付したSSGも動かないのですが(昨日まで問題なく動いていた他の複数のゲームのSSGも動かない、というかSpoilerAL起動直後に落ちるor起動すらしない)、
保存していた「2016.10.01」の分のパッチに戻すと、添付SSGも含めて問題なく動作します。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.201)
投稿日 : 2016/10/07(Fri) 21:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : bwM.PNxy5MRpLSTsAzk6//
参照先
>>199 (仔猫)さん
修正パッチのスレでdipperさんが書かれている「MName::」のエラーかもしれません。
私が書いたグレイメルカのSSGでは、「MName::」が機能してる箇所はありませんので。([define]の定義部分に1箇所使ってますが、SSGで実際には{}で呼び出してません)
一方、「MName::」を使ってる「Javardry THE KING」のSSGはエラーで使えないです(SpoilerALが落ちる)。

(追記)
ただ、>>196や>>200のSSGには「MName::」は使ってませんので、何故かと考えたら、
「MName::」と、>>196や>>200のSSGに共通するのは、
「MName::」と「Memory::0」の、「::」かな?という気がするのですが・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.202)
投稿日 : 2016/10/08(Sat) 00:27
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>199-201 (仔猫)さん, amateurさん
皆さんと挙動が違うのですが、似たような不具合を修正しておきました。
恐縮ですが確認をお願いします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.203)
投稿日 : 2016/10/08(Sat) 00:34
投稿者 ラヴィナス
ID情報 : 9a.L.hZWMhICXJVRtPxE6/
参照先 http://wp.gensoukyou.org/genmuex/
初めまして

現在、苺坊主の東方玄夢妖譚乱の持ち技を変更して敵の技が使えるようにしたいと思い、技アドレスをうさみみハリケーンを使ってサーチしているのですが、中々うまくいかない状況です・・・。
(名称リストのピックアップまでは文字検索を利用してできましたが、肝心のアドレスの記載場所を特定する方法が見出せない状態です)

何かサーチをする上でのコツなどがあればお伺いしたいのですが、よろしいでしょうか?

(リリースから大分経った作品関係の質問になってしまい、申しわけございません・・・)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.204)
投稿日 : 2016/10/08(Sat) 01:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : bwM.PNxy5MRpLSTsAzk6//
参照先
>>202 変態紳士さん、度々パッチ更新していただいてありがとうございます。本当にお疲れ様です。
早速最新パッチを適用して試したところ、
>>200のSSG、>>145のSSG(ウディタVer2.00-2.10対応)、>>1(2個目の添付ファイル)のウディタ解析用SSG(ウディタVer2.00-2.10対応)、Javardry THE KINGのSSG(No.31のもの)、
で試しましたが、いずれもタイトル選択後、SpoilerALが落ちてしまいますね(全項目に階層項目を使ってる>>1の「ウディタ解析用SSG」の場合は、下位項目を表示させた瞬間に落ちる)。
一方、グレイメルカのSSGは正常に動作します。
結論としては、最終更新の一つ前のパッチ(10/7午後7時ごろDL)適用時と挙動は同じでした。
念のため何回かDLし直して試しましたが、同じ結果でした・・・
とりあえずご報告させていただきます。

(追記)
「SpoilerALの修正パッチ」のスレ(No.56)でdipperさんがアップされているSSGは正常動作しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.205)
投稿日 : 2016/10/08(Sat) 04:29
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>202
変態紳士さん更新ありがとうございます。
やはり改善はなくALが落ちる現象が直ってない状況です。

SSGの中身をいじったりとしてみたのですが…。
原因は別にありそうな気がしてきたので、もしやとVista(32bit)で試した所、全く問題なく起動、動作もOKでした。
と言うことでx86 x64あたりの互換性問題かなぁーと?

Win7(64bit)ではSSG読み込みでALが落ちる現象が続いてます(落ちるSSGの方が多いです。)

追記:
今、確認したところ4:30頃の更新で直りました。
ありがとうございます。

追記2:
trace機能の正常化を確認しました。
項目がロック中の白い枠で囲まれてます…ファンネルファイルも正常に読み込んで該当アドレスの書き換えが機能してます。
完璧動作!です。ありがたや。

思いつく使い方ですが、改造対策されてる書き換えないと駄目な必須コードとか、キャラのパラメーター上限を拡張とかで使えそうですね。条件判定は[enabled]でON/OFFが出来ますね。これはいいかも。例えば自分のターンだけ無限行動とかでも使えそう。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.206)
投稿日 : 2016/10/08(Sat) 05:14
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>203
ラヴィナスさん

苺坊主様は
体験版がなく、過去に依頼されたSSGも…無い?
さらにパッチも公開されてないと完全に目隠し状態なんですよね。うーん。

体験版でもあればアドバイスが出来るのですが…。

追記:
該当のタイトルですが南夢さんのブログでSSGが公開されてるようです。
あー。変態紳士さんの書き込みまで待てばよかった(汗
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.207)
投稿日 : 2016/10/08(Sat) 06:03
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 1FEI0U3d1/9ixStXY/B9l1
参照先
>>206 (仔猫)さん
SSGだけならGoogle先生に「東方玄夢妖譚乱 SSG」と尋ねると教えてくれました。
でも体験版が無いですよね。

それと皆さん修正パッチの修正?にご協力ありがとうございました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.208)
投稿日 : 2016/10/08(Sat) 09:43
投稿者 Take◆z2zOLLMPyz2
ID情報 : oXiNCefkkllcmbGqh.XuP.
参照先
>>(仔猫)さん、amateurさん
traceの件情報有り難うございます。
copyが機能しないと言うのは以前何処かで見た気がしてたのですがtraceもでしたか。

>>変態紳士さん
仕様上機能しない事が分かり次第一度要望を出してみようと思っていたのですが既に対応済みとは仕事が早いです。
まだ動作確認などはしていませんがパッチ対応有り難うございました。

>>195 amateurさん
>「copy」項目が機能したら、現在HPを最大値まで回復とかが簡単に書けそうなのですが。
変態紳士さんが書かれているので既にご存知かと思われますがが一応書くとこれはtoggleで代用可能です。

[subject]+04を+00へ代入//:toggle,0x00,$4 [:[.0x04.]:] $$,??

自分が作ったやつでもちょくちょく利用しているのでそちらを参考にして下さい。
最近ですと<正しい性奴隷の使い方>にて少し応用してアドレスAの値をアドレスB1、B2、B3……へコピーして
必要に応じてアドレスAへコピーし直すと言うのを作ってあるので興味があれば参考にでも。(ユニットの座標)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.209)
投稿日 : 2016/10/08(Sat) 17:41
投稿者 amateur◆kR..xsXL6RU
ID情報 : v5yiRypJm1WxnpXDRGkYE.
参照先
>>207 変態紳士さん
パッチ修正ありがとうございます。
>>204で挙げたSSGは全て正常動作することを確認しました。
それと>>196のSSGも正常動作し、トレース項目がHowToSSGの記述どおりに動作することも確認できました。
ご対応お疲れ様でした。

>>208 Takeさん
情報ありがとうございます。
copy項目についてはトグルで代用できることは知っていたのですが、
$4 [:(最大HPのアドレス):] $$ と、$4 [: :] $$で括らずに済むし、
値の固定しなくても定期的に最大値に戻してくれるので便利かなと思ってたのですが、
よく考えると大して手間は変わらないし、値の固定を外せる分、トグルで代用の方がよいかもですね。一括トグルだと全キャラ一括処理できますし。
変態紳士さんがパッチで対応してくださり、copy項目も正常動作するようになりましたので、今後は好きな方が使えますね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.210)
投稿日 : 2016/10/09(Sun) 19:07
投稿者 ラヴィナス
ID情報 : 9a.L.hZWMhICXJVRtPxE6/
参照先 http://wp.gensoukyou.org/genmuex/
>>206 (仔猫)さん
確かに苺坊主さんの作品は体験版もパッチも公開してないですね・・・。
何か参考になるものがあればよかったんですが、本当に申し訳ございません(涙)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.211)
投稿日 : 2016/10/11(Tue) 01:28
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>187
>アドレス補正属性[adjustment]の「search」の仕様について幾つか気付いたことがありますので一応書いておきます。(search以外は使ったことがないので分かりません)

というわけで、amateurさんの書き込みは本当に参考になります。
朝方から[adjustment]を勉強してました。

今までサーチタイプのSSGは作ったことがなかったので(理由はLinux環境ではALのサーチ動作が全く動かないからという単純な理由でして)Win環境なら必要な時もあるだろうと。

初歩的な所から
[adjustment]search,0x400000,????????E7030000,0x400000,0x410000,1

で、アジャストされたアドレスはこんな感じで書ける訳ですね。
[_0x400000_]

ただ、これだとアドレスネーミングは使えない。。。
------------------------------
サーチ:dir
[adjustment]search,_MName::nul+0x1000,????????E7030000,_MName::nul+0x1000,_MName::nul=>base;[:$base+0x3C:]=>pl;[:$base+$pl+0x12C:]=>rdata;$base+$rdata,1

[back]
とすると可能ですね。なるほど勉強になりました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.212)
投稿日 : 2016/10/11(Tue) 21:26
投稿者 yun◆6As0zdMqREo
ID情報 : uALBCA01GFo4uGozH7xL2/
参照先
amateurさん
遅くなりましたが、ウディタの件、勉強になりました。
たまーに、文字化けするものがあるかと思えばそういうことでしたか。
146はそのうち差し替えておきます。

今回は少し時間がとれたので、ウディタの解析情報について少し。

数値変更に関しては各種データベースや通常変数でだいたいのことができますが、
たまにコモンイベントに関わる部分がでてきます。(悠遠物語で少しつかってます)

コモンイベントの名称に関わる部分が臨時掲示板のときのアドレスでは不十分であったことが分かったので、
その修正と補助用SSGを作ったので何かの足しにしてください。

コモンイベントの値は固定化必須っぽいですけど、なかには変更できない場合があるので変更できるものと
できないものについての違いがわかればまた報告します。
(いつになるかわかりませんが。)

ちなみにSSGの中身をいじるのは骨が折れるのでそのままにしています。
この補助SSGも6.2に対応できるのはいつになることやら…。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.213)
投稿日 : 2016/10/12(Wed) 00:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : LCnZteioSls6ippjJwJtC0
参照先
>>212
yunさん、情報提供ありがとうございます。
早速添付いただいたSSGを使ってみましたが、某ゲームで座標のアドレスを書き換えてもゲーム上で反映されない理由が分かりました。
コモンイベントで「移動判定」なるものが表示されましたので、やはりコモンイベントの処理を通す必要があったようです。
他にも「マップ移動処理」というのもあり、マップIDを書換えだけでは反映されない理由も大体分かりました。

コモンイベントやコモンセルフについては、サンプルゲーム+エディターで少し覗いた程度で詳しく理解してないですが、
ウディタで残った課題はこれだと思うので(一番厄介そうですが・・・)、
私も時間あるときにもう少し詳しく勉強してみようかと思います。(と言いつつまたもやyunさん頼みになりそう・・・)

>この補助SSGも6.2に対応できるのはいつになることやら…。
既に使ったSSGを6.2用に作り直すのは骨が折れますよね・・・
>>1の解析用SSGは元々杜撰なものだったので、6.2対応とは関わりなく作り直す必要ありと思ってたから6.2用に作り直しましたが、
個別ゲームのSSGを6.2用に作り直す気力は中々湧いてこないです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.214)
投稿日 : 2016/10/13(Thu) 02:36
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先
グレイメルカではお世話になりました、探せば雑談系スレもあったのかもですが外国の方の作ったフリーゲームでAM2R(Another Metroid 2 Remake)という現在公開停止されたゲームの時間でENDING後の1枚絵変わるゲームあるんですがうさ耳かスポイルでサーチ調べるとすればどのようにするのがいいんでしょうか?セーブデーター添付すれば何かいじれたりします?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.215)
投稿日 : 2016/10/13(Thu) 04:56
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>214
匿名さん

うーん。同じVerの物が手に入ればわかるかもですが
すでに公開停止ということなので難しいかなぁ…。

追伸:
ミラーサイトを探して見つかった
AM2R (Another Metroid 2 Remake) 1.1をダウンロードして調べてみたのですが…。
ミサイルの数値はdoubleで格納されてますね。

他のパラメーターもdouble型で格納されてる可能が高いと思います。
経過時間ですが…これはちょっと難しいかもです。。。

セーブデーターですが
同じゲーム(同じVerで互換性がある)を持っている場合においてセーブデーターは有効かもしれませんが、今回のように配布されたゲームの手に入らない状態ではお手上げです。物が手に入らない状態ではアドバイスも不可能なのですよ。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.216)
投稿日 : 2016/10/13(Thu) 16:09
投稿者 匿名
ID情報 : 6b2UI6aUdjrQ4A.kD8xpg/
参照先
(仔猫)◆KCezBilYINUさんそうですか、自分の入手出来たのも公開停止前に1.1入手ですがHP、弾薬固定等は可能そうでした?
2バイト検索でやばいときに書き換えで行くのが楽ですかねアクション好きな部類ですが苦手気味なので
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.217)
投稿日 : 2016/10/13(Thu) 23:57
投稿者 (仔猫)◆KCezBilYINU
ID情報 : SzycEX2TAWquIqbhGWdJV.
参照先
>>216
匿名さん

>HP、弾薬固定
うさみみで変更は可能です(…Double型の範囲サーチで場所を調べます)
Double型の範囲サーチですが、amateurさんの書き込み臨時板の…記事No.2が参考になると思います。

追記:
Ver1.1と言うことでVer互換がありそうなのでセーブデーターの解析…+8Ch〜+98hが経過時間かと思われます。
なんとなく暗号化されてますが暗号鍵は固定&改竄チェック(サム)は無い?ようなので…。
単純に開始早々のセーブデーターを用意して該当箇所をコピー、クリア直前の方へペーストすれば時間を巻き戻せます(セーブデーターのバックアップ等を忘れずに)

(このアイデアは別スレのTakeさんのアドバイスで思いつきました。ありがたや。)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.218)
投稿日 : 2016/10/15(Sat) 03:28
投稿者 (仔猫)◆KCezBilYINU
ID情報 : pFOWhC7c3/WlFSlPI9r390
参照先
>>212
yunさん提供ありがとう。

何かおもしろいゲームはないかなと探してたら…
第8回WOLF RPGエディターコンテスト作品の『箱庭フロンティア』を見つけましてプレイ中です。
解析の参考にさせてもらってます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.219)
投稿日 : 2016/10/15(Sat) 11:28
投稿者 yun◆6As0zdMqREo
ID情報 : uALBCA01GFo4uGozH7xL2/
参照先
>>213 amatureさん
コモンイベントに関しては5から9が文字列で、その他が数値っぽい感じです。
とりあえずその仮定を元にSSGに組み込んでみたのでいろいろ試してみてください。
(私がいろいろ試すにはまだ少し時間がとれない…)

ただし、いろんな意味で危険物な故、今日の23:30〜24:00ぐらいまでの短期間の間にアップしようと思います。

>>218 (仔猫)さん
以前ちょろっとあげたものにコモンイベントの表示を加えたものだけですけど、何かの参考になれれば・・・。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.220)
投稿日 : 2016/10/15(Sat) 23:34
投稿者 yun◆6As0zdMqREo
ID情報 : uALBCA01GFo4uGozH7xL2/
参照先
>>219で言ってたSSGを24:00過ぎぐらいまでアップしようと思いますが、
amateurさんと(仔猫)さんが受け取ったあたりぐらいで削除しようかと思っています。

データは219にあります

消しました
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.221)
投稿日 : 2016/10/16(Sun) 06:26
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
>>219-220
yunさん

取り逃がしました(涙
昨日は修理に出した無線LANルーターが戻ってきたので、なにやら大掃除してたら体調崩しまして寝てました。
もしよかったら再度アップしていただけると…。今日午前中と深夜は張り付いていようかと思います。
あと、amateurさんがここしばらく見えないので心配です。

>>222-224
了解です。じゃあ午前中は出かけてきます。
yunさん頂きました。再アップありがとうございます。

amateurさん復活ですね。暑かったり寒かったり…ほんときついですね。
お体大事になさって下さい。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.222)
投稿日 : 2016/10/16(Sun) 08:31
投稿者 yun◆6As0zdMqREo
ID情報 : uALBCA01GFo4uGozH7xL2/
参照先
>>221(仔猫)さん

>再度アップ
再UPいいですよー。
ただ今からお昼まで出かける用事があるので、昨日と同じ23:30〜24:00ぐらいにしようと思います。
その時間で都合がわるければ、言ってもらえれば前後1時間ぐらいならいけます。


>あと、amateurさんがここしばらく見えないので
あ、そうだったのですね。急に冷えこんできたので体調を崩されてなければいいのですが。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.223)
投稿日 : 2016/10/16(Sun) 17:08
投稿者 amateur◆kR..xsXL6RU
ID情報 : ZihL/L7nX0y.6r3Kxuwnv.
参照先
数日振りに復活・・・急に涼しく(というか肌寒く)なって、ここ数日体調崩して雲隠れしてました。(鬱陶しいから消えて良かったという声が聞こえそうな・・・)
というわけで、昨日yunさんがアップしてくださった分、私も取り逃がしてしまいました。
折角アップしてくださったのに御免なさい。
今日こそ逃さずに頂くために起きておきます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.224)
投稿日 : 2016/10/16(Sun) 23:32
投稿者 yun◆6As0zdMqREo
ID情報 : uALBCA01GFo4uGozH7xL2/
参照先
時間になりましたので、219にまたアップしましたのでどうぞ。

SSGのなかにも書きましたが、コモンセルフに関しては前から見つけているベースアドレス
と違うものが存在する可能性があるので、より良い経路が見つけれたらいいのですけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.225)
投稿日 : 2016/10/16(Sun) 23:54
投稿者 amateur◆kR..xsXL6RU
ID情報 : JGcioqXALG3Zt17VFzCGR0
参照先
>>224
yunさん、>>219のファイルをDLさせていただきました。ありがとうございます。
何度もお手数をおかけしてすみません。
有難く使わせていただきます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.226)
投稿日 : 2016/10/17(Mon) 00:19
投稿者 yun◆6As0zdMqREo
ID情報 : .5ROV/Vidp1CU0J.IDCb00
参照先
>>(仔猫)さん
>>amatureさん

無事うけとられたようなので良かったです。
でも前の212に少し追加しただけの代物ですのであまり変わり映えはしないですけど、
どれがコモンセルフになるかがわかるようになっただけでもましかと思ってます。

というわけで219は再度消しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.227)
投稿日 : 2016/10/22(Sat) 14:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5jymHwTpp.Amc6dzD57y1/
参照先
吉里吉里解析ツールの右クリックメニューの「SSGのコピー」(SSG用のアドレスコーディング出力機能)について、
変態紳士さんのSpoilerAL修正パッチを適用した場合に、
SpoilerALでのアクセスアドレスが正確でなくなる場合がありますので、ご存知の方も多いかと思いますが一応書いておきます。

>>163で(仔猫)さんが書かれている「括弧バグが直ったので6.1と挙動が違う」というのはこのことを指すのだと思いますが、
簡単に言うと、
修正パッチ無しのデフォルトのSpoilerAL_ver6.1(変態紳士さんの修正パッチを適用してもSSGファイルのヘッダに「SSG for SpoilerAL ver 6.1」と書いた場合を含む)と、
変態紳士さんの修正パッチを適用してSSGファイルのヘッダに「SSG for SpoilerAL ver 6.2」と書いた場合では、
ビットごとのOR演算子( | )と、加算演算子( + )の優先順序が異なるのが原因です。
HowToSSGに記載してある演算子の優先順位では、加算演算子の方がビットごとのOR演算子より優先順位が高いはずですが、
デフォルトのSpoilerAL_ver6.1では、バグのせいで本来の優先順位とは違ってしまうようです。

変態紳士さんの修正パッチを適用すると、HowToSSGに記載してあるとおりに演算子の優先順序が正しく修正されるのですが、
吉里吉里解析ツールの「SSGのコピー」で出力されるのは、上記の演算子の優先順位バグの存在を前提としたアドレスコーディングですので、
変態紳士さんの修正パッチを適用してSSGファイルのヘッダに「SSG for SpoilerAL ver 6.2」と書いた場合、
SpoilerALでのアクセスアドレスが正確でなくなる場合がある、ということです。
(knさんが吉里吉里解析ツールを作成された時点では、変態紳士さんのSpoilerAL修正パッチが存在しなかったので、これは致し方ない仕様だと思います)

一応、参考のために動作確認用のSSG(演算子の優先順位にバグがある6.1用と、優先順位が修正された6.2用)を添付します。
対象プロセスは、「SpoilerAL.exe」ですので、SpoilerALを起動するだけでOKです。
なお、動作確認の際には、変態紳士さんのSpoilerAL修正パッチを適用してください。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.228)
投稿日 : 2016/10/22(Sat) 15:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5jymHwTpp.Amc6dzD57y1/
参照先
>>227で長々と書きましたが、結局何が問題になるかというと、
例えば、吉里吉里解析ツールの右クリックメニューの「SSGのコピー」で出力した下記のアドレスコーディングについて、
---------------
[:MName::uroboros.exe+0x0030EA04:]+0x30=>base;0x48058FEE=>hash;[:$base:]=>base;[:$base+0x10:]=>tmp1;[:$base+0x18:]=>tmp2;($tmp1&$hash)*0x20=>tmp1;$tmp2+$tmp1=>ad0;[:$ad0+0x1C:]=>ad1;[:$ad1+0x1C:]=>ad2;[:$ad2+0x1C:]=>ad3;[:$ad0+0x04:]==$hash=>valid0;[:$ad1+0x04:]==$hash=>valid1;[:$ad2+0x04:]==$hash=>valid2;[:$ad3+0x04:]==$hash=>valid3;($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)|($ad3*$valid3)+0x10=>base;0xC8EC7D06=>hash;[:$base:]=>base;[:$base+0x10:]=>tmp1;[:$base+0x18:]=>tmp2;($tmp1&$hash)*0x20=>tmp1;$tmp2+$tmp1=>ad0;[:$ad0+0x1C:]=>ad1;[:$ad1+0x1C:]=>ad2;[:$ad0+0x04:]==$hash=>valid0;[:$ad1+0x04:]==$hash=>valid1;[:$ad2+0x04:]==$hash=>valid2;($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)+0x10=>base;
---------------
上記のうち、
---------------
($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)|($ad3*$valid3)+0x10
($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)+0x10
---------------
ビットごとのOR演算子を使用している2箇所については、
変態紳士さんのSpoilerAL修正パッチを適用してSSGファイルのヘッダに「SSG for SpoilerAL ver 6.2」と書いた場合、
---------------
(($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)|($ad3*$valid3))+0x10
(($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2))+0x10
---------------
と、「+0x10」の前の部分全体を括弧で括るように修正する必要がある、ということです。
修正せずにそのままSSGのアドレス部分に書くと、正常に動作しない場合があります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.229)
投稿日 : 2016/10/22(Sat) 19:45
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>228 amateurさん
それっぽい変更をしてみました。
ただ、吉里吉里のゲームが入ってなかったのでテストしていません。(まったく未検証)
それと・・・ ここを変更すればいいのかな? という程度の考えでして、問題があれば削除します。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.230)
投稿日 : 2016/10/22(Sat) 22:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5jymHwTpp.Amc6dzD57y1/
参照先
>>229 変態紳士さん
おお、対応ありがとうございます!
早速、吉里吉里製ゲーム(GEARS of DRAGOON 〜迷宮のウロボロス)で試したところ、
>>228に書いたとおり修正されたアドレスコーディングが出力され、そのまま(ヘッダを6.2にして)SSGに書いてもアクセスアドレスが正しくなりました。
とりあえず、これでヘッダを6.2にしてSSGを書いても、アドレスコーディングの修正なしで大丈夫そうです。
 (私が試した項目では、デフォルトのツールで出力されたアドレスコーディングだと、正しいアクセスアドレスから -0x10 のアドレスになってしまいます)

一応、出力されたアドレスコーディングが、デフォルトの吉里吉里解析ツールと、>>229の変態紳士さんが修正してくださったものとで、どう違うか、
比較画像を添付します。画像の左がデフォルトのツール、右が変態紳士さんが修正してくださったツールで出力したものです。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.231)
投稿日 : 2016/10/23(Sun) 12:32
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
knさんの吉里吉里解析ツール、本当に便利ですよね。

吉里吉里の改造からこっち(SSGの改造)へ足を踏み入れたような感じでして…
最初の改造はソースを直接変更だったわけですよ。

しかし・・・ソースを直接変更すると
一般公開が出来ないんですよね。(中には魔改造して本来のゲームではなくなってしまったり…。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.232)
投稿日 : 2016/10/23(Sun) 14:58
投稿者 amateur◆kR..xsXL6RU
ID情報 : XhHJzK7SGdBuXYpgkssxr0
参照先
以前、吉里吉里は解析難度の高いエンジンの代表格でしたが、
knさんが吉里吉里解析ツールを公開してくださったお陰で、吉里吉里なら何とかなるって感じに変わりましたよね。

ところで、吉里吉里解析ツールを複数のゲームで試していて気付いたのですが、
同じノード名(キー名?)なら、ゲームが違っても(吉里吉里のバージョンが違っても)ハッシュ値は同じよう?ですね。
例えば、「f」は「0x48058FEE」、「gf」は「0x3D4E8695」、「used」は「0x518E5C1C」、「kag」は「0x5123B680」等となるようです。
特に「f」以下に改造する項目が集中してるゲームが多いので、自力で解析するなら少し参考になるかも。

他にも、吉里吉里解析ツールで色々試してみたら、ハッシュ値等、データの構造が少しだけ分かってきたような気がします。
各項目の値を格納するアドレス -0x10が「キー名(項目名)」へのポインタになっていて、その+0x4の格納値がハッシュ値。
値を格納するアドレス+0x8の格納値がそのデータの型(01がオブジェクト型=各ノードを指す?、02が文字列型、04が整数型、05が実数型)など。
オブジェクト型の場合は、格納値がポインタになっていて、飛んだ先に下位項目のアドレスを特定するための値やポインタが格納・・・という感じで。

話が変わりますが、以前少し話題になっていた11月発売予定のDualTail新作「VenusBlood -RAGNAROK-」ですが、
ADV体験版をDLしてファイルを見たら「mono.dll」があったので、unityのようですね。
やはりギアドラ2と同様、吉里吉里からエンジン変えたみたいです。
ということで、大七星さんが>>52でアップしてくださったmono用の解析ツールが大活躍しそうですね。
(私は買わずにSLGパートの体験版を少し解析するだけで済ませると思いますが・・・私はギアドラみたいなRPGの方が好きでして)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.233)
投稿日 : 2016/10/23(Sun) 16:26
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
amateurさん詳細解析ありがとう。

>同じノード名(キー名?)なら、ゲームが違っても(吉里吉里のバージョンが違っても)ハッシュ値は同じよう?ですね。
>例えば、「f」は「0x48058FEE」、「gf」は「0x3D4E8695」、「kag」は「0x5123B680」、となるようです。
ハッシュ値をメモリー内で検索とか…やったことあったのですが…。
そのときはハッシュって…変数名が化けてる!?(固定値で割ったもの余り。つまりは暗号化したものかな?)
で。。。思考が停止しました。うーん、その先は考えなかったです。

>+0x8(01がオブジェクト型=各ノードを指す?、02が文字列型、04が整数型、05が実数型)など。
>オブジェクト型の場合は、格納値がポインタになっていて
ほむほむ。型も書かれてたのですか…しかもオブジェクト型ですか(確かにポインタになってますよね)


>DualTail新作「VenusBlood -RAGNAROK-」
Unityですかー。最新PC&OSに対応されてますし無難な選択かなぁ…解析が大変かもしれませんが。
吉里吉里は更新止まってますし(いくつか不具合もありますし。描画がプチフリーズするとか)

>(私は買わずにSLGパートの体験版を少し解析するだけで済ませると思いますが・・・
>私はギアドラみたいなRPGの方が好きでして)
amateurさんと同じく体験版やってみて考えようかなぁ(大七星さんのツール…まだ完璧に使いこなせてなかったのです)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.234)
投稿日 : 2016/10/23(Sun) 19:33
投稿者 amateur◆kR..xsXL6RU
ID情報 : XhHJzK7SGdBuXYpgkssxr0
参照先
>>233
>そのときはハッシュって…変数名が化けてる!?(固定値で割ったもの余り。つまりは暗号化したものかな?)
名前(文字列)を特定の暗号鍵(固定値)で処理した値ってのはありそうな感じですね。
だから同じ名前なら同じハッシュになるのかな・・・?

オブジェクト型についてですが、添付ファイルのアドレスコーディング(ツールで出力したもの。分かりやすいように改行入れてます)だと、
途中にあるハッシュ:0x48058FEE(f)、0x518E5C1C(used)、0x2315B01C(chars)
については、全てオブジェクト型のものですね。
(ツール上で「名前」欄に(既定)と表示される項目で、ツール左で+マークがあってクリックすると下位項目が表示されるもの)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.235)
投稿日 : 2016/10/23(Sun) 21:35
投稿者 yun◆6As0zdMqREo
ID情報 : uALBCA01GFo4uGozH7xL2/
参照先
悠遠物語のSSGでショートカット登録がうまく動いていなかったようなので修正しました。
ついでに、ショートカット登録での装備系の扱いについても分かったので追加しておきました。
(添付1)

変態紳士さんのパッチ適応のウディタサンプルゲーム見本もいれておきます。
(添付2)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.236)
投稿日 : 2016/10/23(Sun) 21:56
投稿者 amateur◆kR..xsXL6RU
ID情報 : XhHJzK7SGdBuXYpgkssxr0
参照先
>>235
yunさん、投稿ありがとうございます。
(添付2)のサンプルゲーム用のSSGを早速「Time Flow」(ウディタver2.10)で試したところ、
「ステータス(メニュー)」の装備(リスト)以外、全部使えています。(リストは使えなくて当たり前ですね)
同じver2.10のもう一つゲームではズレが大きかったですが、そのゲームはかなり特殊っぽい作りのようですので(ほとんどのゲームで動く>>145の座標機能も動作しない)、
ver2.10のゲームならそのままでも結構動きそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.237)
投稿日 : 2016/10/25(Tue) 17:23
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
>>234
amateurさん情報ありがとう。

;($tmp1&$hash)*0x20=>tmp1;
ん!??今まで深く考えなかったのですがコレって…ハッシュをデコードしてるのでは!?
えーっと変数名ではなく?アドレスを暗号化したもの?(そのアドレスは変数を順番に割り当てたもの?)

追伸:オブジェクト指向は…挫折経験があるのです。
変数が名刺みたいに飛び交うのは難しいです(汗
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.238)
投稿日 : 2016/10/25(Tue) 20:17
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>232, >>233 amateurさん、(仔猫)さん
>DualTail新作「VenusBlood -RAGNAROK-」
GEARS of DRAGOON 2 と共通ですが基準アドレスの部分は、
――――――――――――――――――――
MName::mono.dll+0x1F30AC

[:MName::mono.dll::mono_runtime_init + 0x104 => callInstruction; \
$callInstruction + 1 => callOperand; \
$callOperand + [:$callOperand:] + 4 => procedure; \
$procedure + 0x2F:]

[:MName::mono.dll::mono_runtime_init+0x105=>Val;$Val+[:$Val:]+0x33:]
――――――――――――――――――――
こんな風に変更できます。

違いは、変数アドレスを参照するバイトコードを辿りエクスポート関数を基準にしただけです。
現在の体験版は同じアドレスに変数があるので変更する必要もありませんが、
バージョンの更新が著しい場合や、基準アドレスを見失うような場合、
汎用性が優先される事もあるかと思います。

ついでに、Eushully の AGERC.DLL の基準アドレスは
――――――――――――――――――――
MName::AGERC.DLL+0x1083

MName::AGERC.DLL::OperateMenu+0x13
――――――――――――――――――――
こんな感じです。(こちらは未検証)

滅多にライブラリが更新されない場合は必要ありませんが、
何かの備えというか、こういう方法もあります。

エクスポート関数の調べ方については、
プロセスなら、うさみみの[デバッグ]−[モジュール別参照関数表示]−実行ファイルを選択、
バイナリなら、Dependency Walkerを使うか、PE Explorerを使うか、
色々方法があります。(実際はモジュールファイルごと逆汗してテキスト検索する方が楽かも)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.239)
投稿日 : 2016/10/25(Tue) 21:14
投稿者 (仔猫)◆KCezBilYINU
ID情報 : BaxmJFnvaIKeW4IYTUBQ//
参照先
>>238
変態紳士さん詳細解析ありがとう!

スゴい!これは何度も読んで完全に頭に叩き込みたいです。
(一瞬、なんだか震えが来ました…綺麗な式です。)
ありがたや。

追記:
amateurさんの追記>>240を見て…。そういえばギアドラ2の解析で…
MName::mono.dll=>base;[:$base+0x3C:]=>pl;[:$base+$pl+0x154:]=>data;[:$base+$data+0xAC:]

臨時板管理人さんの方法をdllでもやってしまった!でも後悔してない(オイ
unityのversionでも変わるので…流石に全部では使えないですよね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.240)
投稿日 : 2016/10/25(Tue) 22:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : ESztLrmx283HJ2u5nmr4v0
参照先
>>238 変態紳士さん
凄すぎて鼻血出そうです・・・!
今までエクスポート関数を基準にするという発想自体が無かったです。
解説いただいたうさみみ使った方法で該当のエクスポート関数を調べて、
>>238に書いてくださったとおりにアドレスを追っていくと、確かに「MName::mono.dll+0x1F30AC」に辿り着きました。
「mono_runtime_init」を基準にするというのは、mono(unity)で汎用で使える手法なのでしょうか。
(後で他のunity製ゲームでも調べてみます)

(追記)
とりあえず、2つほどUnityのゲームで試しました(いずれもDualTailとは全く関係ないメーカーと同人サークルのゲーム)

結果、某同人サークルのUnityのゲームでは、>>238で変態紳士さんが書いてくださったのと全く同じ経路でベースアドレスを記述できました。
元々、ベースアドレスが「MName::mono.dll+0x1F30AC」で、「GEARS of DRAGOON 2」や「VenusBlood -RAGNAROK-」と同じようなのですが。

もう一つ、某メーカー製のゲームでは、ベースアドレスは「MName::mono.dll+0x1F42C4」で、
エクスポート関数を基準にすると、
 MName::mono.dll::mono_runtime_quit+0xC=>ad; [:$ad+[:$ad:]+0x5:]
となり、「mono_runtime_quit」を基準にして書けました(「mono_runtime_init」では無理っぽかったです)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.241)
投稿日 : 2016/10/26(Wed) 02:48
投稿者 amateur◆kR..xsXL6RU
ID情報 : ESztLrmx283HJ2u5nmr4v0
参照先
>>237 (仔猫)さん
「 ;($tmp1&$hash)*0x20=>tmp1; 」の、右辺の「tmp1」は、
その直前の「 [:$base+0x18:]=>tmp2 」の「tmp2」(下位項目の基準アドレス=オフセット0)からの相対アドレスです(「$tmp2+$tmp1=>ad0」でアドレスを示す)。
「($tmp1&$hash)*0x20」は、ハッシュの値によって(「$tmp1」とビットごとの&をとる)、上記の相対アドレスが変わるという感じですね。
 ※各項目のデータ格納アドレスは、基本的に0x20毎に並んでます(空白の箇所も多いですが)。
  なので、SSGで無理やり0x20ごとにデータ(各項目の名前、値、ハッシュ等)を表示させることも一応可能です。
 「$tmp2+$tmp1=>ad0;[:$ad0+0x1C:]=>ad1」以下、【[:$ad?+0x1C:]=>ad(?+1);】という記述が繰り返されますが、
  0x20毎のデータの最後(+0x1C)の部分がポインタになっている場合があり(無い場合もありますがSSG用のアドレスコーディングでは一応チェックしてる)、
  ポインタがある場合は、飛んだ先にもデータがある、という構造が繰り返されます。
  (言葉では説明しにくいですが、実際にうさみみ等で確認されればよく分かると思います)

それはそれとして、上記の「tmp1」がハッシュをデコードしてるのかどうかは分かりませんが、何か他に意味があるのかな・・・?
暗号化なら、ビットごとの排他的論理和(XOR)を使うことが多いとうさみみのヘルプにも書いてたような。
(XORで暗号化すれば同じ鍵で元の値に復号化できるそうで。エウシュリー製ゲームでも、暗号化・復号化にビットごとのXOR(とローテート)を使ってますね)

それと、「オブジェクト型」と書いたのは、吉里吉里解析ツール上でそう表示されるのでそう書いただけです。(他に文字列型とか整数型など)
私は、「オブジェクト指向」が何たるかも全く分かってません・・・挫折以前に勉強したこともないです(汗)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.242)
投稿日 : 2016/10/26(Wed) 22:01
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
>>241
amateurさん情報ありがとう。

>ポインタがある場合は、飛んだ先にもデータがある、という構造が繰り返されます。
>(言葉では説明しにくいですが、実際にうさみみ等で確認されればよく分かると思います)
改めて解析してみるとやはり吉里吉里は難しいと思いました。
knさんの吉里吉里解析ツールがないとお手上げです。

>私は、「オブジェクト指向」が何たるかも全く分かってません・・・挫折以前に勉強したこともないです(汗)
amateurさんなら速攻で攻略しそうな感じですが(汗
C++,C#あたりからオブジェクト指向が関わってるようなー。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.243)
投稿日 : 2016/10/26(Wed) 22:55
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5PweWpTNpIUqZlohw.8zY.
参照先
魔剣士リーネ2体験版用に、解析用のSSGを試作してみました(ほんの少しだけ。実用上の意味は無いです)
吉里吉里解析ツールがあれば全く必要ないのですが、こんな構造になってると大雑把に把握する助けになれば・・・
本当はもっと複雑な構造なんですが、SSGで表示させるのは難しいです・・・(吉里吉里解析ツール使えば良いだけのことなんですが)

(追記)
>>249に修正分をアップしました
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.244)
投稿日 : 2016/10/26(Wed) 23:06
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 1FEI0U3d1/9ixStXY/B9l1
参照先
>>240 amateurさん
>「mono_runtime_quit」を基準にして書けました(「mono_runtime_init」では無理っぽかったです)
なるほど、一致しませんでしたか。
大体はズレ防止が目的ですので仕方ないかもしれません。

>今までエクスポート関数を基準にするという発想自体が無かったです。
半分くらい既出の方法のような気がします。
以前の管理者さんがズレ防止アドレスを解析されていましたが、どれもコードセグメントを基準にしています。
パッチ無しではエクスポート関数は使えないのでモジュールからの相対アドレスで固定してましたね。
エクスポート関数までいくと更にズレにくいというか、そんなところです。

>>232-241
>ハッシュ
解析では変数名もコメントも関係なくなりますから、
命名規則が弊害になるのは高級言語の話じゃないでしょうか。

>暗号化なら、ビットごとの排他的論理和(XOR)を使うことが多いとうさみみのヘルプにも書いてたような。
古くなってますがCRC32もXORです。
32ビット単位でロードして、下位1バイトを基準に算出した値(大抵は256通りをテーブル化してある)で4バイトをXORします。
少ないクロックサイクルで演算できる命令を使っているのだと思います。

>>242 (仔猫)さん
>オブジェクト指向
私も苦手です・・・
仕組みが苦手です。
仕組みとして最適化に弱いので解析が捗ったりします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.245)
投稿日 : 2016/10/27(Thu) 00:18
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
>>243
amateurさん

なんとー!
うさみみと脳内変換では理解できませんでしたが…
これは分かりやすい。制作ありがとうございます(吉里吉里解析で使わせていただきます)

>>244
変態紳士さん

>ハッシュ
>CRC32もXOR
なるほど〜勉強になります。XORは面白い命令ですよね、同じレジスタのXORで0にしたりとか大好きです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.246)
投稿日 : 2016/10/27(Thu) 01:27
投稿者 大七星◆y3el2XfkmCg
ID情報 : tz2dgEIYKl976FendKrIS1
参照先
忘れた頃にやってくる〜遙かなry 御無沙汰でした解析再開できそう
バルドが出戻りしたと思ったらナインテイルがUnity化していたとは

SSG基点に使われてるのは…gc_handles [HANDLE_PINNED].entriesですかね?
mono_runtime_quitを基準にできた場合はmono_get_root_domain経由に思えますが
とすれば [:MName::mono.dll::mono_get_root_domain + 1:] で済みそうな
その場合の基点は以前NEExploiTさんが示してくださったMonoDomain辺り


>>189
>また、[adjustment]のオプション(基準アドレス等)に、[define]での置換は機能しないようです。
そういえば[adjustment]のアドレスには、オリジナルでもオフセット演算子が機能しませんでしたし
[define]は属性の応用で実装されてらっしゃる様なので、そのあたりの現状では制約というか仕様でしょうか?

[e_with]変形の[variable]経由ならと思いきや撃沈⇒それでも冗長を嫌って[allocate]を悪用、ということで
一つ覚えが如くAGE汎用SSGを改修してみるテスト、サーチ範囲をワンタッチで変更できるのでコレはコレで…
代入式のおかげでワンライナーが捗る、けど[define]はアドレスのみで項目名とかに汎用使用は無理でしたっけ

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.247)
投稿日 : 2016/10/27(Thu) 19:50
投稿者 kn◆YbsxOuLurQk
ID情報 : bT6WXJA5QNNkeHY8MFCmK.
参照先
吉里吉里はハッシュテーブルというデータ構造を使っていますので、調べてみると構造が理解しやすくなると思います。
数字以外の添字でも配列として扱えるようにするデータ構造でして、与えられたキーをハッシュ関数を通し配列の添字に変換することで素早くデータにアクセスすることができます。

($tmp1&$hash)*0x20=>tmp1

ここでやっているのがそのハッシュ関数に当たる部分です。
(%hashは正確に言えばキーなんですが最初にこう付けてしまったので…)
ハッシュ関数は満遍なく振り当てられるように工夫したりもするのですが、この場合は至って単純でして
ハッシュテーブルのサイズとの剰余を取っているだけです。
ANDなのは実装上の都合で、テーブルサイズの取りうる値は実際には2の累乗しかなく、左辺の$tmp1は「サイズ-1」の値、つまり0x01FFと言った下位ビットに1が連続する値しか取りません。
その為、剰余と論理積の値は等しくなるようになっています。

そして、当然ですがこれだとどうしても被りが出てきてしまい、その解決方法として吉里吉里では連鎖法(チェイン法)を採用しています。
被っちゃったら後ろにポインタを付けて繋げていこう、という方法ですね。

型名についてはTJS2のデータ型に乗ってる名称をそのまま使っています。
オブジェクト型はクラスや関数と言ったものが当たります。
ツール上では非表示にしていますが実際には関数なども一緒にあります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.248)
投稿日 : 2016/10/27(Thu) 20:45
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>245 (仔猫)さん
>XORは面白い命令ですよね
XORの文字列比較を書いてみました。(添付のテキスト)

>>246 大七星さん
>SSG基点
大分スマートですね。
(検証はしてません・・・)

>[define]は属性の応用で実装されてらっしゃる様なので、そのあたりの現状では制約というか仕様でしょうか?
その通りですね。[define]はそういうものです。

>[define]はアドレスのみで項目名とかに汎用使用は無理でしたっけ
たぶん無理です。(プロセスと無関係な文字列定数は使えるかという事ですよね)
HowToSSG で アドレスコーディング、アドレスネーミングと書かれている部分が対象になります。

>>247 knさん
こんばんは
No.229で勝手な事をしてます。すいませんです。
そちらで更新していただけるか、または都合が悪い時は消しておきます。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.249)
投稿日 : 2016/10/27(Thu) 22:11
投稿者 amateur◆kR..xsXL6RU
ID情報 : GfkI1NzBTL7iDKvREcQ/t/
参照先
>>243 のなんちゃってSSGを更新。(>>243のは削除してアップし直し)
【 [:$ad?+0x1C:]=>ad(?+1); 】という記述で(被りのせいで)分岐する項目も表示するように修正。
また、改造対象の項目が集中してる「game」以下のデータを表示するようにし、
整数型の項目に限って数値変更も可能にしました。
といっても、私が書ける範囲の限定的機能しかなく実用に耐えるものではないので、
詳しく解析したり改造に使用するなら、吉里吉里解析ツールを使ってください。

>>244 変態紳士さん
色々フォローありがとうございます。
臨時板管理人さんはズレ防止で見事なアドレスコーディングを書かれていましたが、
同様の手法で書けないか試行錯誤してますが私には難しいですね。
エクスポート関数を使うと更にズレにくいとのことで、今後はこちらの手法も試してみます。
それと、CRC32もXORで暗号化ですか。勉強になります。

>>245 (仔猫)さん
あんなSSGで参考になったでしょうか・・・基本的な構造が分かれば同じ構造の繰返しが多く意外と分かりやすかったりしますが。
勿論、knさんの吉里吉里解析ツールのお陰である程度分かっただけで、自力で解析は私には無理ですけど。

>>246 大七星さん
お久しぶりです。
仰るとおり、ベースアドレス「MName::mono.dll+0x1F42C4」は、
[:MName::mono.dll::mono_get_root_domain + 1:]で記述できました。
あっという間に最短ルート特定してくださるとは流石です。
mono_runtime_quitを基準にしたのは、ほとんど当てずっぽうでした・・・(相変わらずテキトー人間の私です)

それとSSGありがとうございます、珊海王の円環 体験版で試しましたが、バッチリ動作しています。
中身読んでも相変わらず私の理解超えてますが・・・まだまだ修行が必要のようです。

[adjustment]については、よく分からない仕様があるみたい?ですね(続きは別の書込みで)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.250)
投稿日 : 2016/10/27(Thu) 22:15
投稿者 amateur◆kR..xsXL6RU
ID情報 : GfkI1NzBTL7iDKvREcQ/t/
参照先
>>247
knさん、詳細な解説ありがとうございます。
>その為、剰余と論理積の値は等しくなるようになっています。
これについてですが、
[:$base+0x10:]=>tmp1 が($tmp1&$hash)で使われる値のようですけど、
うさみみ等で確認すると、[:$base+0x14:]の値が「$tmp1+1」になってますね。そして、
$hash%($tmp1+1) = $tmp1&$hash
になっていますので、これが剰余と論理積の値は等しいという意味で、
[:$base+0x14:]の値がハッシュテーブルのサイズ、ということでしょうか。
うさみみで見ていたら必ず(?)、[:$base+0x10:]+1 = [:$base+0x14:] になっているので気になっていたのですが、
そういうことだったのですか・・・(>>249のSSGで一応ハッシュテーブルのサイズ等も入れてみました)
色々解説くださってありがとうございます。
knさんのツールがなければ私は吉里吉里には手も足も出なかったと思いますので、本当に感謝です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.251)
投稿日 : 2016/10/27(Thu) 22:26
投稿者 amateur◆kR..xsXL6RU
ID情報 : GfkI1NzBTL7iDKvREcQ/t/
参照先
検証不足で「SpoilerALの修正パッチ」のスレで報告するのは気が引けるので、
[adjustment]の話題が出たのでこちらで。(修正要望するほどの情報がない上に自力で何とかなるので単なる備忘録的なものです)
[adjustment]について、バグなのか仕様なのか分かりませんが、
ちょっと変な挙動を昨日発見しましたので書いておきます。
なお、以下の挙動は変態紳士さんのSpoilerAL修正パッチを適用していないデフォルトのSpoilerAL6.1では発生せず正常に動作していました。
(修正パッチ適用時のみの仕様? パッチは最新分を今日DLして再適用して確認しました)
-------------
[adjustment]search, (オプション)
[subject]項目名/現在値/_:calc, _[_MName::(モジュール名)_], 0, 0xFFFFFFFF, unsigned
[/adjustment]
-------------
上記のように記述すると、サーチが開始せず、【「MName::(モジュール名)」の解析エラー。】というエラー表示が出ます。
対処法としては、[adjustment]で括った項目を下記のように書けばサーチが開始し正常にアドレス補正が機能します。
[define Mo] MName::nul
[subject]項目名/現在値/_:calc, _[_{Mo}_], 0, 0xFFFFFFFF, unsigned
[subject]項目名/現在値/_:calc, _MName::nul=>mo;[_$mo_], 0, 0xFFFFFFFF, unsigned

一応、動作確認用のSSGを添付します(対象プロセスはSpoilerAL.exeなのでSpoilerALを起動するだけでOK)。SpoilerAL修正パッチ適用前提です。
テスト1と2はサーチが開始せずエラー表示。テスト3・4・5は正常に動作します。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.252)
投稿日 : 2016/10/27(Thu) 23:32
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
(大七星さん、変態紳士さん、knさん、詳細ありがとうございます)
(amateurさんのレスのお陰で、なんとか理解できました。>>249更新ありがたや)

追記:
>>247
knさん
>オブジェクト型はクラスや関数と言ったものが当たります。
>ツール上では非表示にしていますが実際には関数なども一緒にあります。
というわけでC++の本を読みながら復習中。。。
オブジェクト型とクラス…変数と関数がくっついた物だったのかぁ…。

>>248
変態紳士さん
>添付のテキスト
ありがとうございます(後から気がついて読んでます)

>>255
amateurさん
> [!R1, [: !] $adr2 [!R1, +0x1C:] !]=>adr3
ワードリピート(おお!この機能を使った人は臨時板管理人さん以外は見たことが無かったです…)使いこなすとは流石です。

>「でか」さんが書いてくださってるとおりみたいですが。
このスレは…めちゃ勉強になりました(というか、途中でまるねこさんの解析手法が秘伝!?という感じです。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.253)
投稿日 : 2016/10/28(Fri) 00:37
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : hawhNksd5H7Be3gn.TEMo.
参照先
>>251 amateurさん
純粋にバグだったので修正しました。
ご迷惑をおかけしました。

MNameなどはワード認識しているのですが、
[_ ←これが前にある時に認識できなくなっていました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.254)
投稿日 : 2016/10/28(Fri) 01:36
投稿者 大七星◆y3el2XfkmCg
ID情報 : tz2dgEIYKl976FendKrIS1
参照先
>>248 変態紳士さん
やはり厳しいですか、[repeat]で負数オフセットからを表現しようとして
項目名の一部と現在値前部補足文字を集約できないかと思ったんですが
変換式でnを符号付きとして扱う式号を追加とかの方が即したり…?


>>249 amateurさん
mono_get_root_domain+1のみで解決という事はやはり基準にした物が違うようですね
その場合はstatic MonoDomain *mono_root_domainかと思います
シンプルな関数なのでEAX代入のみになりますが、SSGでは幾つオフセットされていますか?

>>238の経路だとmono_gc_init相対ニアコールgc_handles [HANDLE_PINNED].entriesスタックPUSHでしょうか
見た感じ固定されたオブジェクトのみのリストぽいですが、どちらがベストプラクティスになるのかな

拙作のAGE汎用SSGもアプローチとしては同じで、AGERC.DLL経由を発展させたものです
AGERC.DLLで保持しているのは結局AGE.EXE!_GetClassObject@4関数ポインタのようなので
エクスポートから直接参照することで省略し、汎用化の為にコードを掘り下げています

エクスポートされているシンボルであれば変数や関数のアドレスを取得できますが
中のコードはコンパイル設定だけでも変わり得るので…しかし.dataオフセットよりは?
蛇足ですがアドレスが転送先を示す事も(kernel32.dll!AddVectoredExceptionHandlerとか)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.255)
投稿日 : 2016/10/28(Fri) 01:39
投稿者 amateur◆kR..xsXL6RU
ID情報 : GfkI1NzBTL7iDKvREcQ/t/
参照先
>>253 変態紳士さん
とても迅速なご対応ありがとうございます。
最新パッチ適用して試したところ、>>251の添付SSGが全ての項目で正常動作しました。
・・・要望ではないとか言い訳染みたこと書きましたけど、結局修正お願いしたようなものでしたね。
これ以前の修正パッチでも、操作性レベルで快適に動作するようになり、とても助かっています。
(項目をクリックした時に関係ない箇所も反応する等のSpoilerALデフォルトの意味不明の挙動が直りました)
もう修正パッチなしのSpoilerALには戻れないです。パッチ更新を続けてくださって本当に感謝です。

>>252 (仔猫)さん
>>250に書いたのは、多分こうかな?という程度なんですが。

ちなみに>>249のSSGで、被りが原因の分岐(連鎖)部分の記述には、[repeat]のワードリピート機能を試作で入れてみました。
 ※ [define Z3] {Z2}; [!R1, [: !] $adr2 [!R1, +0x1C:] !]=>adr3 の箇所
HowToSSGに書いてるワードリピート機能の解説と実際の動作には違いがあるようで、
以前、猫缶Indexの過去ログで読んだバグ回避方法を試しに使ってみましたが、
一応これで動いてるみたい?ですね。
これも解説みたいなのを書いたほうがいいのかな・・・
過去ログのこのスレの[130]で「でか」さんが書いてくださってるとおりみたいですが。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.256)
投稿日 : 2016/10/28(Fri) 02:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : GfkI1NzBTL7iDKvREcQ/t/
参照先
>>254 大七星さん
mono_get_root_domain+1:] でベースアドレスが書けたゲームですが、
mono.dllの.dataセクション開始アドレスが「0x101F2000」で、
ベースアドレスが「0x101F42C4」ですね。
元のSSGだと下記のように書いてました(.dataセクション開始アドレス +0x22C4)
_MName::mono.dll=>mo;[:$mo+0x3C:]=>pe;[:$mo+$pe+0x154:]+$mo=>data;$data+0x22C4=>base;

後半は、む、難しいですね・・・エクスポート関数自体、>>238の変態紳士さんの書込みを見て、
そんなのがあるんだ、と初めて知りまして(汗)
どの関数を基準にしたらよいのかよく分からず、とりあえずベースアドレスで検索(境界ベースチェックを外す)して、
ヒットしたアドレスorベースアドレスを指定してるのがないか、
各関数のアドレスを逆アセンブルして総当りに近い感じで確認してます・・・
(そうやって「mono_runtime_quit」を基準にしたらベースアドレスに辿り着くことに偶然気付いただけでした)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.257)
投稿日 : 2016/10/28(Fri) 17:25
投稿者 大七星◆y3el2XfkmCg
ID情報 : NcmQw1Il6.ng1ZyO.MjRL.
参照先
>>256
すみません言葉足らずでした、ベースアドレスを算出してから後のオフセットです
それをMonoDomain構造体と照らし合わせれば、参照したメンバ変数に辿り着くはず…

しかしオープンソースばかりではないし、ぶっちゃけ普遍的には使えなかったりします
というのもエクスポートテーブルは動的リンクの為に内部アドレスを提供する仕組みです
別モジュールから関数などを使用する為に、専らモジュール名+シンボル名で参照されます

ですのでDLL(=動的リンクライブラリ)には有っても、使用側なEXEでは空なのが普通です
つまり基点がEXEモジュール内の場合は、.data+オフセットが関の山な事が多いと思います
AGE.EXEのようなエクスポートも無いではないです、稀に良くある(DLLの特権ではない
あるいはARERC.DLLのようにEXEの内部アドレスを受け取り、DLLがそれを保持するならば…?

長すぎ↓
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.258)
投稿日 : 2016/10/28(Fri) 17:27
投稿者 大七星◆y3el2XfkmCg
ID情報 : NcmQw1Il6.ng1ZyO.MjRL.
参照先
↑続き

さてエクスポートが利用できる場合にですが、オープンソースばかりではないと言いながら
せっかくソースがあるので、ありきの説明…mono.dll+0x1F30ACは直後にサイズらしき値があるなど
前後のメモリ内容からするとHandleData構造体の配列gc_handlesの[3].entriesであると思われます
しかしこの変数自体はエクスポートされていない⇒gc_handles[HANDLE_PINNED].entriesを参照する関数、
即ちmono_gc_init関数…もエクスポートされていないが、これを呼び出しているmono_runtime_init関数なら。
というのが>>254で書いた>>238の道筋です(他にはmono_gchandle_new_weakrefも参照してるエクスポート関数

実際問題としてどのエクスポートアドレスを使用するかについてはケースバイケースになると思います
変数自体をエクスポートする設計は多くないので、ベースに出来る変数を参照する関数をあたりますが
mono_gchandle_newでもgc_handlesを参照しているのですが、アセンブルコードがバージョンで若干異なりました
>>254で添付したAGE.EXE!_GetClassObject@4もエンジンバージョンで様変わりしている様子がうかがえます
しかしながらMonoDomain*変数を返すだけのmono_get_root_domainのようなエクスポート関数であれば
アセンブルコードはEAXに代入するだけになるので、mono_root_domainの参照はこれがベストそうです

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.259)
投稿日 : 2016/10/28(Fri) 21:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : QJ.z8C47qd.osIs7Gyxfs1
参照先
>>257>>258 大七星さん
最初のポインタ集合領域の先頭アドレスは、SSGで下記のように書いてました。($baseがベースアドレス)
_MName::mono.dll=>mo;[:$mo+0x3C:]=>pe;[:$mo+$pe+0x154:]+$mo=>data;$data+0x22C4=>base; [:[:$base:]+0x50:]

一応、ベースアドレスと、そこからポインタで飛んだ先あたりのメモリダンプのスクショを添付します。

それと、添付していただいたスクショ等は凄く参考になります。ありがとうございます。
教えていただいた情報で、unityのベースアドレスへの経路は何とかなりそうな気がしてきました。

>使用側なEXEでは空なのが普通です
確かに、別の某ゲーム(unityではない)のベースアドレスはexeのモジュールエリア内にあったのですが、
うさみみで確認するとエクスポート関数は一つもありませんでした。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.260)
投稿日 : 2016/10/28(Fri) 22:12
投稿者 yun◆6As0zdMqREo
ID情報 : xjkk8VgwM4DLzTpau9cQC/
参照先
ウディタの補助SSGをパッチ対応させ、セルフ変数を追加しました。
パッチで動作させるのに必要最低限の変更しか加えてないので、ややごちゃっとしてます。

一応、これで改造に必要な部分を網羅できたのではないかなぁと思います。

Ver2.0以前にもそれなりに対応できるようにセクションからのずれから指定できるようにしたので
適当に数値を変えてもらえれば1.31とかにも対応できるはずです。きっと。

また、臨時版管理人さんやamatureさんのように項目表示をずらす機能を入れようとして失敗しているので、
どこが悪かったかアドバイスいただけると非常に助かります。
(アドレスコーディング関連の式はほかの方が書いた式を参考にしてるだけのつけがきたもよう。)
セルフ変数のマップ名を表示させるやつだけしか書いてませんが、一応、0のときだけは正常表示されます。
1以上になるとほかの部分の文字が表示されるようです。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.261)
投稿日 : 2016/10/29(Sat) 02:28
投稿者 amateur◆kR..xsXL6RU
ID情報 : QJ.z8C47qd.osIs7Gyxfs1
参照先
>>260 yunさん
SSGありがとうございます。ついにセルフ変数追加ですか。
結局、コモンイベント系も全部yunさん頼みになってしまいました・・・
これでウディタの残っていた課題も解決、でしょうか。

項目表示をずらす機能についてですが、
基本的な構造は結構単純で、例えば、表示するタイプ(ID)をを30個ずつずらすには、以下のように書けばよいと思います。(関数的構文を使う場合の例です)
  //空きメモリを確保(最初の「0」は確保したメモリ領域の番号。次の「100」はサイズですが何を書いても結局0x1000になるそうです。「RW」は書換え可能領域という意味っぽいです)
 [allocate]0, 100, RW
  //上記で確保した空きメモリに任意の数値を書き込む(この値によってずれる表示タイプの数が変わる)。「Memory::0」は確保した空きメモリの番号0の先頭アドレス。「Memory::0+0x4」だと先頭から+0x4。
 [subject]表示するタイプを【書込み値*30】個ずつずらす【 '+' _mem, _Memory\:\:0, 4,num ,??,%d '+' 】/書込み値/_:calc, _Memory::0, 0, 99999, unsigned
  //【書込み値*30】個ずつずらす、のずらす表示数を定義。
 [define DP] [:Memory::0:]*30
  //各データベースの項目の値のアドレスを関数的構文で記述($typeがタイプのIDを示す)
 [define db_value] [:[:[:(ベースアドレス):]+0x14+$type*0x28:]+0x04+$data*0x20:]+0x00+$chap*0x4
  //上記で定義したDBのアドレスの「$type」の部分に、「 (タイプのID値)+{DP}(=空きメモリへの書込み値*30) 」の値を代入。
 [subject]項目名/現在値/_:calc, _(タイプのID値)+{DP}=>type; {db_value}, 最小値, 最大値, unsigned

(1000文字制限に抵触するので書込みを分割します)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.262)
投稿日 : 2016/10/29(Sat) 02:29
投稿者 amateur◆kR..xsXL6RU
ID情報 : QJ.z8C47qd.osIs7Gyxfs1
参照先
(↑の続き)
ダラダラと書きましたが、要するに、「 (タイプのID値)=>type 」と代入する箇所を、
「 (タイプのID値)+(空きメモリへの書込み値*30) =>type 」と変更すればよいだけだと思います。( 0x[! $Val !]+(空きメモリへの書込み値*30)=>type など)
(空きメモリへの書込み値*30) は上の例だと「 [define DP] [:Memory::0:]*30 」で定義して、{DP}と書くことになります。

データのIDや、項目の番号(ID)についても同様です。=>data や、=>chap と代入する箇所を上記と同様に変更することになります。
以前は空きメモリを確保する[allocate]が無かったので、勝手に値を書き込んでよい空きアドレスを自分で見つける必要がありましたが、
今は変態紳士さんのSpoilerAL修正パッチで[allocate]が実装されましたので、項目ずらし技が使いやすくなりました。

関数的構文を使わず、普通にアドレスを書く場合は、下記のように書けばよいと思います。(ウディタではなく一般的な例)
[allocate]0, 100, RW
[subject]表示項目を【書込み値*30】個ずつずらす【 '+' _mem, _Memory\:\:0, 4,num ,??,%d '+' 】/書込み値/_:calc, _Memory::0, 0, 99999, unsigned
[subject]項目番号[[! L$Val !]+'+' _mem, _Memory\:\:0, 4,num ,??,%d '+'*30]/現在値/_:calc, _0x1000000 +(0x[! $Val !]+[:Memory::0:]*30)*0x20, 最小値, 最大値, unsigned
 (アドレス部分が本来、「 _0x1000000 +0x[! $Val*0x20 !] 」である場合に、項目表示を30個ずつずらす場合の例)

参考に、項目ずらしのサンプルSSGを添付します。(対象プロセスはSpoilerAL.exe。SpoilerALを起動するだけでOK)
うさみみ等でアクセスアドレスとその値を確認すれば分かりやすいと思います。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.263)
投稿日 : 2016/10/30(Sun) 04:44
投稿者 大七星◆y3el2XfkmCg
ID情報 : T9tHStgIxP.CcunMl1QkJ0
参照先
>>259 amateurさん
+0x50という事はやはりmono_root_domain->static_data_arrayですね

幾らかソースを読み進めたのでUnityインスペクタを仮組してみました
α+β×みたいな項目は件のずらし用のページャ電卓です

mono_root_domainではstatic_data_arrayとstatic_data_class_arrayから
staticフィールドを持つクラスのフィールド一覧を表示します(たぶん
値にアクセス出来るフィールドがstaticフィールドのはず…です
値型(構造体)の場合はアクセスアドレスに構造体内容がありますが、
参照型の場合はアクセスアドレスにあるのは参照ポインタ値です

gc_handles[HANDLE_PINNED]はアドレス固定されたインスタンスの一覧?
対象プロセスが>>58のDustShooters試遊版になっています、適宜変更してください

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.264)
投稿日 : 2016/10/30(Sun) 15:57
投稿者 (仔猫)◆KCezBilYINU
ID情報 : i2AoCQdUk3/aOAxieKS6c0
参照先
>>263
大七星さん提供ありがとうございます。

と言うわけで恥ずかしながら、添付1が『DustShooters試遊版』の(以前作った)サンプルSSGです…いつものやり方で解析したので不完全です。ゲーム中にESCでタイトルへ戻るとアドレス(クラスのフィールド?)が再配置されてしまって。
うーんまだ勉強不足です(安定した経路ができませんでした。)
(このアドレスが変わる現象は、メモリー再利用のためかな?RPGとかSLGのゲームなら固定されてることが多いのですが。。。)

>>260
yunさん更新ありがとうー。
ウディタSSG制作補助用SSGを使って色々とウディタ製ゲームの解析やってます。
添付2が『とつげきダンジョン!2(Rush Dungeons!β)』のSSGです。

ちなみにこの2つのゲーム…窓の杜で知りました(窓の杜をみて解析やることが多くなってしまった汗)

追記:
>>265
amateurさん
>イグニッシアサーガ
おわ!っとイグニッシアサーガ第六幕(IS6)がまだ途中でした〜。終わり次第、IS14へ行きたいです。
提供ありがたや〜。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.265)
投稿日 : 2016/10/30(Sun) 18:36
投稿者 amateur◆kR..xsXL6RU
ID情報 : OhN076EBlZPYrFfy4gudT/
参照先
>>263 大七星さん
SSGありがとうございます。
早速使ってみたのですが、件のベースアドレスが「0x101F42C4」のゲームで、
「mono_root_domain」の方で、色々なデータの種類(何のデータか)がほぼ丸分かりになりました。
自力解析では何のデータか分からなかった箇所もほぼ判明・・・これは物凄く便利です・・・!

ベースアドレス「mono.dll+0x1F30AC」のゲームは、gc_handles[HANDLE_PINNED] の方で情報表示されました。
これは、Unity解析の強力な武器になりそうです。
本当にありがとうございます。

>>264 (仔猫)さん
yunさんの提供くださったウディタの解析結果やSSGのお陰で、ウディタのSSG作成が飛躍的に楽になりましたね。
NEExploiTさんや臨時板管理人さんの解析結果もそうですが、お三方のお陰でウディタ解析は大部分達成された感じです。

そういえば、夏ごろから何度か中断しながら作っていたウディタ製ゲームのSSGが漸く完成したので、
需要無さそうですが、こちらにこっそりアップしておきます。
前に名前を出したゲームですが、イグニッシアサーガ第十四幕-穢れし神に捧ぐ詠-です。
単に自分好みの作品なので作っただけですが。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.266)
投稿日 : 2016/10/31(Mon) 05:02
投稿者 大七星◆y3el2XfkmCg
ID情報 : 8VOWo7XhVMZsoetum2gbs0
参照先
>>263をちょいと整形してインスタンスフィールドも弄れるようにしました
[undef]の便利さはシャレになry という事で両方のフィールドを出し
整数値が大半を占めると思うので、4バイトの電卓項目になっていますが
論理値は1バイト、実数はIEEE754だったりと、そぐわない物もあります

フィールドオフセット右の0x10ビットがstaticを示し、その場合
インスタンスアドレスではなく、vtable->data値へのオフセットになります

ついでにページャ(&で始まる)電卓をページ番号から行番号入力に変更して
インスタンスアドレスの入力で対象をinspectする&MonoObject項目を実装しました
>>52ほど詳細ではないものの、CreateRemoteThreadではないので安心・安全!
ちなみにSpoilerALでは再帰が難しいのでスーパークラスのフィールドは出ません

DustShooters試遊版は仔猫さんの経路だと&entries[569]や&entries[468]としても
直通で同程度の精度っぽいですが、それ故にタイトル画面へ戻るとやはりダメですね
対象の破棄後、というよりgc_handles[HANDLE_PINNED].entriesでは保証されない気が
static_data_arrayならクラスがロードされた順序にはなる?…しかし全て辿れるか否か

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.267)
投稿日 : 2016/10/31(Mon) 17:34
投稿者 (仔猫)◆KCezBilYINU
ID情報 : BaxmJFnvaIKeW4IYTUBQ//
参照先
>>266
大七星さん更新ありがとうございます。
画像でわかりやすいメモリ配置、毎回参考になります(C#もいつの間にか理解できるようになってきてます。今度C#の本も買ってこよう。)

>DustShooters試遊版
情報ありがとうございます(アクションやシューティングゲームでは変数の保持?が必要ないからか初期化されちゃうのかなぁ)
また時間があるときにでもチャレンジしたいと思います。

追記:
>>270
>ちょっと記事が古いけど
めちゃ参考になりました図解でわかりやすい!(this.XXXXとか吉里吉里でも使ってるケースがありましたし、メモリ内部でこんな事が起きてたのかと参考になりました…。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.268)
投稿日 : 2016/10/31(Mon) 22:26
投稿者 amateur◆kR..xsXL6RU
ID情報 : XOoWdqFd6tBTz4j2aMtSW1
参照先
>>266 大七星さん
SSG更新ありがとうございます。
これは、>>52でアップしてくださったmono用ツールの機能を統合したという感じですかね。
既に入力すべきアドレス(インスタンスアドレス?)が分かってる場合は、
こちらの&MonoObject項目を使った方が早そうですね。
>>52のツールの方が詳しく表示されるとのことで、併用して使わせていただきます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.269)
投稿日 : 2016/10/31(Mon) 22:30
投稿者 yun◆6As0zdMqREo
ID情報 : xjkk8VgwM4DLzTpau9cQC/
参照先
>>261-262 amatureさん
いろいろとありがとうございます。
普段使わない部分の頭をごりごり使ってなんとか実装できるようにしていきます。
実装できたらまた投稿します。
ウディタは項目表示が多すぎてずらしをつかわないと全部を表現しにくいのがなんとも…。

>>264 (仔猫)さん
>yunさん更新ありがとうー。
いえいえ。のんびりじっくりSSGに落とし込んでいったので超スローペースでしたがなんとか実装できました。
ちょっと時間が取れるようにはなってきたので、昔のバージョンのベースアドレスもたどれたら別口でどうにかしたいですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.270)
投稿日 : 2016/11/01(Tue) 02:21
投稿者 大七星◆y3el2XfkmCg
ID情報 : nHEapdmDHFfmN89O3jTfp.
参照先
>>267 仔猫さん
メモリモデルはMono公式から拝借…、ただC#というと本家.NETと互換Monoで若干実装は異なりますね
ちょっと記事が古いけど、TypeHandleとSyncblkが逆位置で、参照位置もオフセットされていたり
「C#プログラマのための.NETアプリケーション最適化技法」とかJIT後のx86コードにまで踏み込んだ
変態的な訳書とかも有りましたが、いずれも巷には具体的な内部実装の解説はなかなか少ないよう

おそらくタイトル画面へ戻ると破棄され、再生成されても同位置になる保証はない感じですかね
今の経路だとentries[4]から相対でEnergyBarを持つEnergyBarToolkit.FilledRendererGUIへですが
インスタンスが固定解除や破棄されるとエントリから外れ、メモリも空き、そこへ別物が配置されると…
初回の相関関係は生成順序によって配置に規則性が生まれ、辿り着けているという具合だと思います


>>268 amateurさん
ツールの方はMonoが予め備えるデバッグ機能に働きかけるので、内部変更に強く一応重宝するものの
あれでは正確なアドレスが必要で、しくじるとアクセス違反、64bit両対応に実装がカオスになったり…
SSGでもメタ情報は追えそうなので、これを確立した後、補えない機能を開発するか保留になりそうです

しかし多少は煮詰まってきたし、AL修正パッチのおかげでポツポツとアイデアも浮かんできたので
そろそろAGE・MV・Unityあたりの汎用解析専用(意味不明)スレッドを立てる頃合いでしょうか

そういえばChromeのアップデートでMVのリモートConsoleと合わなくなったりしたのかな…動かない('A`
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.271)
投稿日 : 2016/11/01(Tue) 22:13
投稿者 amateur◆kR..xsXL6RU
ID情報 : QpAAiTIb7zrZw6bVLXfQ.0
参照先
>>270 大七星さん
おお、まだSSGやツールの方も更新していただける可能性が・・・
現状でも自力解析するしかなかった以前と比べて格段にUnity解析の効率はアップしてますが、楽しみです。

>そろそろAGE・MV・Unityあたりの汎用解析専用(意味不明)スレッドを立てる頃合いでしょうか
このスレ自体が私があまりにテキトーに立ててしまったせいで闇鍋みたいになってますからね・・・
管理人さんからも情報まとめろ的なご指導もいただきましたし。
話題が多岐にわたりすぎて何のスレなのか意味不明に・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.272)
投稿日 : 2016/11/03(Thu) 01:32
投稿者 NEExploiT◆1I03EIw9l9M
ID情報 : Tvk4MoNhhL2PGOq4ITg1t1
参照先
当方環境でもMVが54.0でデバッグできない事を確認

Chromiumの過去版を適当に
(自分はなんとなくで381909)引っ張ってきたらおkだった

ティラノスクリプトはデバッグできないと思ってたが、
localhost:port/json でURLを入手すればデバッグできるかも?
変数保管場所まだ分からないので特に何もできないが
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.273)
投稿日 : 2016/11/04(Fri) 03:17
投稿者 七星◆y3el2XfkmCg
ID情報 : t2vFXQ2H8Qqp6MTECPrk5/
参照先
Unityのメモリ解析SSGもジェネリック型パラメータや
配列情報の表示に対応したので専用スレッドを作りました、大がもげました

ただ設計的にstatic_data_arrayから辿れない場合も有りそうなので
全てのゲームで汎用的なベースポインタかどうかはちょっと未知数です
SSGで作るとちょっとUIがアレ…でもMonoがオープンソースゆえに
既にありそう誰か作りそうな解析ツールを本格的に作りたくないのもまた一理…


>>272
嗚呼…おま環でなかった事を喜ぶべきか、嘆くべきか
TyranoScriptやAlmightでも汎用的に使えそうなだけに
現行バージョンで使えないとなると些か面倒ですね

変数は取得できているのから見るとプロトコル変更という訳でもないのかな?
↑↓が効かなかったり、Shift+Enterされたみたいに見えるのでバグなのか…?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.274)
投稿日 : 2016/11/04(Fri) 21:48
投稿者 amateur◆kR..xsXL6RU
ID情報 : 353DdNed7B0CZaxDzw1sL0
参照先
>>273 七星さん
あ、頭の大を書き忘れられたのかと思っていたら、お名前変えられたのですね。
SSG更新とスレ立てお疲れ様です。
Unity用のSSGがさらに便利になってますね。ありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.275)
投稿日 : 2016/11/08(Tue) 20:51
投稿者 七星◆y3el2XfkmCg
ID情報 : 2g59tyikJgCCEcY.NoBmr0
参照先
修正パッチスレで続けるのも何なのでこちらへレス

文字列に限らず領域を拡張するというのは、少し難しいかもしれないですね
プログラム的にも新たなメモリに元をコピー、参照先を更新がセオリーでしょうし
[allocate]へは難があるので、パラサイト等で確保しても破棄を任せられるのか、という問題

リンクリストのずらしはデリファレンスを増やすよりも、頭とする要素の切り換えでしょうか
Memory::0等にポインタを入れておき、各要素に自身のポインターをセットするトグル項目とか
表示数分すすめたポインターやリセットするトグル…何番目を参照しているのか併せて格納したり

ついでに幾人かプログラムがーパラサイトがーと仰っていたと思うので、調子に乗って
躓きそうなスタックの解説を書いてみたり(cdecl版、stdcallだとret 8とかで関数側が除去します
メソッド等に使われる、インスタンスをecxで渡すthiscallとか呼出規約は色々有るます
もっともこれは最適化がオフなので、実際の所こんな素直なコードにはなりませんが…
ちなみにスタックはヒープと違って各スレッドへ自動的に(既定では1MB)割り当てられます

と書いてて最近はゲームエンジン増えたから、プログラム改造も難しいかなーと思ったけど
Unity(Mono)なんかはJITコンパイルでネイティブコードになるのでメソッド一覧も必要になるかな?
ときにデータを遡るよりもクラスからメソッド辿ってプログラム書き換えの方が楽なケースも…?

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.276)
投稿日 : 2016/11/09(Wed) 01:23
投稿者 amateur◆kR..xsXL6RU
ID情報 : /9X8fyBGDasgZQZHfKhOv/
参照先
>>275 七星さん
私がダラダラ書いた愚痴にレスくださって有難うございます。というか、申し訳ないです・・・(愚痴書きすぎて反省してます)

リンクリストのずらしの件、頭とする要素の切り換えですか、成程!
これは思いつきませんでした。書いてくださった方法を色々考えてみたところ、解決のイメージが見えてきたような気が。
何番目を参照しているのか併せて格納、これは [! #n !] で空きメモリにバイト列書込みすればいけそう?な感じですね。
これから実際にSSGに書いてみようと思います。貴重なご助言ありがとうございます。

それと、スタックの解説もありがとうございます。(添付いただいたスクショが凄く分かりやすいです)
関数内でお約束のように「PUSH EBP」「MOV EBP,ESP」と先頭にあるのは、こういう意味なんですね。
逆汗コード読むの苦手なんですが、少し理解が進んだ気がします。

(追記)
>>275の七星さんのご助言に従って、一応、ワードリピート使用時にも項目表示ずらしが可能になりましたので、
サンプルSSGを添付します。(項目が少なすぎて改造の役には立たないです)
Heartium〜ハーチウム〜というSRPG Studio製フリーゲームです。
「各クラスのステータス上限値等 (ワードリピート使用)」の項目が確認しやすいと思います。
「キャラステータス」の項目も同様の方法で書いたのですが、序盤ではキャラが少なすぎて正常動作してるか確認できないです。
SSGの中身がゴチャゴチャして分かりにくい上に、七星さんが想定されたものとは違うかも知れませんが・・・

(追記 11/11)
添付のSSGを修正
(追記 11/12)
添付のSSGを修正

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.277)
投稿日 : 2016/11/09(Wed) 21:23
投稿者 七星◆y3el2XfkmCg
ID情報 : 2g59tyikJgCCEcY.NoBmr0
参照先
>>276 amateurさん
push ebp〜は定番ですね、後に実装されたプロローグコード相当のenterは
互換性を重視してなのか、暗黙的なレジスタ変更を嫌ってなのか
コンパイラが吐くのをほどんど見たことがありませんが…そもそも遅い?

リンクリストのずらしは少々説明が解りづらかったでしょうか
私が考えたのはこんな感じです、各要素トグルonで、それが先頭になります
リンクリストは芋づる式?なので、先頭だけ保持してやれば良いです
32オフセットの方はうまくワードリピート出来ていないかな…?

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.278)
投稿日 : 2016/11/09(Wed) 22:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : xaafhDTY1QU/FgQWujfz6/
参照先
>>277 七星さん
リンクリストのずらし、SSGまで作っていただいてありがとうございます。
早速試してみましたが、見事表示がずらせています。
SSGを拝見しましたが、凄すぎて30分ほど読んでも仕組みが私には理解できないです。
10年経っても私では自力でこれを書くのは無理な気が・・・(汗)
何か、越えがたい壁の存在を感じてしまいました。まだまだ勉強が足りないですね・・・
とりあえず、アップしてくださったSSGをよく読んでみます。(理解するのに何日かかるかな・・・)

>32オフセットの方はうまくワードリピート出来ていないかな…?
これについては先程、SpoilerALの修正パッチスレの方で報告しましたが、
ワードリピートのバグに起因する気がします。
「開始値」が0以外(1以上?)だと、ループ変数=「開始値」の時のワードリピートの文字列の出力回数が必ず「1」になってしまうようです。
開始値の次の値以降は「増加値」が幾つかは関係なく、必ず1ずつ出力回数が増えていく(2,3,4,5・・・となる)のような感じで。
>>276のSSGの必須コード部分に、無駄に[repeat]で「0,30,1」と書いて30個も項目があるのは、
「29,30,1」だと正常機能しないからだったりします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.279)
投稿日 : 2016/11/09(Wed) 23:31
投稿者 七星◆y3el2XfkmCg
ID情報 : 2g59tyikJgCCEcY.NoBmr0
参照先
>>278 amateurさん

さっそく三項演算子とコードセクション取得を使ってみたくらいで
あとは特別な演算はしていないので、SSG展開直後の利便性を考慮して
[allocate]した[:Memory::0:]がNULLなら、amateurさんのポインタを参照というだけです

リンクリストの要素(主にノードと呼ぶらしい)各項目では、[allocate]したMemory::0に
自身のノードアドレスと、それだけだと不明なノード番号(表示用)を書き込んでもらいます
すると最初に参照するノードが、先頭へのポインタから[:Memory::0:]へ切り替わるので
ノードが次ノードへの参照を持つリンクリストでは、それだけで全てずれていきます

この辺りは概念の理解というか、知らないと分からないけど、解ったら何でもない的な
私もオブジェクト指向のクラスとか構文だけを見て、関数を纏めたもの?と妙な捉え方をして
データと関数の結びつきが大事ということに気づかず、理解に時間が掛かったものです

ワードリピートは確かにバグっぽそうですね
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.280)
投稿日 : 2016/11/10(Thu) 22:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : DpGSbI7OSqetEch/ncCMt0
参照先
>>279 七星さん
解説ありがとうございます。ああ、追加された三項演算子を使われているのですね。
理解できないはずでした・・・(三項演算子自体をまだ理解してないので)
というわけで、先に三項演算子のお勉強が必要のようです。

ただ、七星さんのSSGや解説くださった内容から、少しSSGを改良するヒントが得られましたので、
>>276のSSGを修正しました。これで少しは見栄えがマシになったかと・・・

(追記)
ワードリピートのバグが修正されましたので、>>276のSSGをさらに修正しました。
(追記2)
ユニット(キャラ)データが、敵と味方でポインタが別であることに気付いたので、>>276のSSGをさらに修正
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.281)
投稿日 : 2016/11/12(Sat) 18:03
投稿者 amateur◆kR..xsXL6RU
ID情報 : rzLN6s4I2WkwrSeLTgMvv/
参照先
新規で追加された三項演算子の使い方が大体分かった(つもり)ので、
七星さんのSSGと解説を参考にしつつ、>>276のSSGを修正。
最初に比べると大分使いやすくなったかと思いますが・・・

[define A] (([:Memory::0:]==0x0)&&([:Memory::0 +0x8:]==0x0) ? {1st} : [:Memory::0:])
[define B] [! R($Val),[: !] {A} [! R($Val),:]+0x4 !]

上記のような三項演算子を使った式の場合、下記のように従来の演算子を使った記述で置き換えることも可能ですね。(>>276のSSGでは両方の書き方を入れてます)

[define A] ([:Memory::0:]==0x0)&&([:Memory::0 +0x8:]==0x0)=>re; ({1st})*$re +[:Memory::0:]*($re^1)=>tmp
[define B] {A};[! R($Val),[: !] $tmp [! R($Val),:]+0x4 !]
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.282)
投稿日 : 2016/11/13(Sun) 06:21
投稿者 七星◆y3el2XfkmCg
ID情報 : 2g59tyikJgCCEcY.NoBmr0
参照先
>>281 amateurさん
ほぼ形になりましたね、そうです従来は条件結果の乗算で実現していたアレです
乗算の必要がなくなったので0か1に調整する必要もなくなりました(0以外なら真評価
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.283)
投稿日 : 2016/11/13(Sun) 16:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : PH87djo8Wkmhi63Vr7/lx/
参照先
>>282 七星さん
お陰さまで何とか・・・。ここまで纏めるのに何日かかってるんだよって感じですが。
従来の条件分岐の書き方より簡潔に書けるので、三項演算子の方が使いやすいですね。
0か1に調整する必要もなくなった、成程、確かにそうですね。
0 以外のときは「真式」、と変態紳士さんの作ってくださったHowToSSGの差分(「アドレス」のページ)にもそう説明されてますし。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.284)
投稿日 : 2016/11/14(Mon) 21:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : LyTxFElLTw67zE/fsJUvf0
参照先
既に気付いている(使ってる)方も多いかもですが、
修正パッチ適用前提の6.2書式のSSGを書いてて、ちょっと良さげな書き方を思いついたので、一応書いておきます。
[allocate]と、トグル項目等のバイト列書込みの組み合わせなのですが、例えば、

 [allocate]0, 0x1000, RW
 [define M0] Memory::0
 [subject]下記の項目で変更後のレベル/変更後のレベル/_:calc, _{M0}, 0, 99999, unsigned
 [subject]習得可能な全スキルのレベルを上記の書込み値に一括変更/ON/_: toggle, _{skillLv};1=>num;{Num},\
  *[_0x2DBC :: *{ *+ 01 08 04000000 :: $4 [:{M0}:] $$ 00000000 *+ 01 04 *} *]

上記のトグル項目で、書込むバイト列(ONのバイト列)に、$4 [:{M0}:] $$ と書き、
その値(バイト列)は、その上のcalc項目で書き込んだ値によって自由に変えることが可能です。
通常、トグル等のバイト列で書き込む場合は、SSGに書いたバイト列に相当する値(「64000000」なら100)しか書き込めないですが、
[allocate]で確保した空きメモリに書き込んだ値に応じて好きな値を書き込める、calc項目に近い使い方が出来るということです。
[allocate]の実装でSSGの自由度が増して、他にも活用法は色々ありそうな。
上記と同様のことは、自分で空きアドレス見つけられたら[allocate]無しでも可能でしたけど・・・


なお、上記の例で、$4 [:{M0}:] $$ と[define]による置換を使ってるのには理由があって、
「ONのバイト列」の部分は、「反復命令」の中の「反復するバイト列」を条件付き置換命令で記述してるのですが、
$4 [:Memory::0:] $$ と置換せずに書くと、「Memory::0」の「::」を、
「条件付き置換命令」の書式の「:: 偽のとき処理するバイト列」の「::」であるとSpoilerALに誤認されてしまい、
正常に動作しないからです(誤認回避のため置換して記述。なので[define]が無かった以前はボツにした書き方)。
SpoilerALによる同様の誤認は「MName::(モジュール名)」と書いた場合の「::」でも同様に起こるので要注意ですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.285)
投稿日 : 2016/11/14(Mon) 21:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : LyTxFElLTw67zE/fsJUvf0
参照先
>>284で書いた「::」の誤認については、他にもパターンがあって、
「条件付き置換命令」の中で、「真のとき処理するバイト列」中に「反復命令」を使っても正常に動作しないです。

 (条件付き置換命令の書式)  ※「:: 偽のとき処理するバイト列」は「偽のとき」に何も処理しないなら不要
  *{ 条件式のバイト列 :: 真のとき処理するバイト列:: 偽のとき処理するバイト列 *}
 (反復命令の書式)
  *[ 反復サイズのアドレス式 :: 反復するバイト列 *]

反復命令の「::」を、「条件付き置換命令」の「:: 偽のとき処理するバイト列」の「::」と誤認されるのが原因の模様。
他方、「偽のとき処理するバイト列」の中に反復命令を使うのは大丈夫のようです。
(条件付き置換命令の中で「::」のチェックは終わった後の「::」だから?)

>>284で書いた誤認例でも同様で、誤認されるのは「真のとき処理するバイト列」の中に「::」を使うのが原因で、
「偽のとき処理するバイト列」の中で「::」を使っても大丈夫だと思います。

以上をまとめると、バイト列の「条件付き置換命令」を使う場合、
 「真のとき処理するバイト列」の中に「::」を使うのはアウト。
 「偽のとき処理するバイト列」の中で「::」を使ってもセーフ。
ということだと思います。検証してない(使ったことがない・・・)ですが、多分、条件分岐命令でも同じかと。
なお、「::」を「\:\:」と書いても無駄でした。
長々と書いたけど、間違ってたらゴメンナサイ・・・

ついでなので補足。
>>284で書いたSSGの例で、反復命令の「反復サイズのアドレス式」を「 _0x2DBC 」と、
アドレスコーディングを示すアンダーバー( _ )を前につけてるのにも理由があるのですが、
きちんと説明しようとすると、[replace]の仕様(何故かHowToSSGに書いてない・・・)を長々と説明する必要があるので別に書きます・・・
知ってる人は当たり前のようにご存知の仕様だと思いますが、初心者に対する罠みたいな・・・(私もこれに引っ掛かって混乱しました)

>>284に書いた内容と併せて、検証用のSSGを添付します(対象プロセスはSpoilerAL.exeなので、SpoilerALを起動するだけでOK)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.286)
投稿日 : 2016/11/14(Mon) 22:19
投稿者 amateur◆kR..xsXL6RU
ID情報 : LyTxFElLTw67zE/fsJUvf0
参照先
(>>285の補足の続き)
[replace]については、重要なのにHowToSSGに書いてないですが、
先頭に _ が付いているアドレスコーディング部分には、[replace]のオフセット値が加算されないという仕様です。
当然にオフセット値が加算されるのは、「0x400000」のような単純な数値アドレスに対してだけです。
アドレスコーディング部分に[replace]のオフセット値を加算させるには、加算させたい箇所をオフセット演算子[. .] で括る必要があります。
 (下記のアドレスコーディング部分には、[replace]のオフセット値加算はされない)
  _0x400000 +0x0
 (オフセット値を加算させるには、下記のようにオフセット演算子を使う)
  _[.0x400000 +0x0.] または、_[.0x400000.] +0x0 または、_0x400000 +[.0x0.]

そして、上記の性質を逆用した、アンダーバー( _ )の裏技的?使い方として、
「0x400000」のような単純な数値アドレスの前に、 _ を付けて、
[replace]のオフセット値加算を回避するという手法があります。
 _0x400000 と書くと、オフセット値加算を回避可能です。

以上を前提として、>>285の補足に書いた反復命令についてですが、
実は「反復サイズのアドレス式」にも[replace]のオフセット値が加算される仕様であり、
このせいで想定したサイズを超えて書き込みが行われる危険性が高いため、(普通は「反復サイズのアドレス式」にオフセット値加算など考えない)
「 _0x2DBC 」のように _ を前につけて、オフセット値加算を回避した方が良いということです。
 _ は本来、アドレスコーディング(演算子使用)を示すものですが、
先頭に _ を付けることで、アドレスコーディング部分だとSpoilerALに認識され、
[replace]のオフセット値加算を防ぐことが可能です。
_0x400000 のように書いてもオフセット値加算を防ぐだけで、それ以外の不都合は無いと思いますので、
保険的に「反復サイズのアドレス式」には頭に _ を書いた方が良いかと思います。

上記の内容プラスα的な、[replace]の動作検証用のSSGを書いたので、参考に添付します。
対象プロセスはSpoilerAL.exeなので、SpoilerALを起動するだけでOK。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.287)
投稿日 : 2016/11/15(Tue) 22:13
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>285 amateurさん
なおしておきました。
それまでGUI(項目のツリー)を修正してました。

・ツリーを展開した時にチカチカしないように修正
・リサイズ時とスプリッター(分割線)の移動時にツリーペインもリサイズするように修正
・「SSGを投稿したり、ゲーム解析について語るスレ No.285」の修正

>[replace]のオフセット値加算を回避
オフセット値の件、アンダーバーの意味は知ってましたけど回避は知りませんでした。
不思議がいっぱいです。

>サイズを超えて書き込みが行われる危険性が
そうですね。間違って書くと・・・ ゴニョゴニョ

No.285の件ですが、

・条件分岐の「::」検索から「$? $$」の区間を読み飛ばすようにしました。
「$? $$」は入れ子になる事を想定していません(たぶん出来ないはず)。

・他の種類のバイト列で入れ子にならない(マトリョーシカ出来ない)との事でしたが、
今までは同種のバイト列のみ入れ子に出来たようです。

・階層の深さを含めて検索しますが、開始と終了の種類が一致しているか検査していません。
↓こんな間違いですね。
*{ FF :: *[ 0x20 :: 00 *} *]
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.288)
投稿日 : 2016/11/15(Tue) 23:51
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
変態紳士さん修正ありがとうございます。
しかし、過去のSSGが11/15更新のAL修正パッチでは誤動作するようになってしまい報告しておきます。
::使い方ですが…。

*[_0x1100::*{*+010D00::*{0000::0000::0100*}*+0186::*+0188*}*]


+0Dhに00判定で真なら
次判定00hに0000があれば0000それ以外なら0100
+86h

+0Dhが00判定で偽なら
+88h

の0x1100ループです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.289)
投稿日 : 2016/11/16(Wed) 00:23
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>288 (仔猫)さん
スレッドの方ではNo.285の修正内容を無効化しました。
ゆっくり修正する事にします。

修正が有効になっているテスト用(288の不具合があります)を添付します。

※追記
2016.11.16 添付ファイルを修正しました。
2016.11.16 20:52 プチフリーズのテスト用に更新しました。
2016.11.17 もう一度修正しました。
2016.11.18 日々修正。
2016.11.22 直ったようなので削除。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.290)
投稿日 : 2016/11/16(Wed) 00:47
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
>>289
変態紳士さん対応ありがとうございます。

結果ですが…NGでした。
項目を選択中はフリーズしたような状態になってしまいます。次にtoggle命令なのでチェックボックスをONにしてみると異常な値が入ります。

本スレにある方(差し替えて頂いた、無効になった版)では問題なく動作しました。

追記:
>>289
本スレの差し替えて頂いた版でアドレスネーミングを多用したSSGでは動作が極端に重くなります。
11/14版では問題なく…。

>>291
amateurさん詳細レポート毎回ありがとう。
例であげたコードですが…
中身はBoss以外のユニットのLVを1にすると言うコードだったんですよ。
+0Dhにボスフラグ1byteがあって先にチェックして
その後00hにあるLVのほうをチェック
0000ならユニットが存在しないと判断してそれ以外なら0100つまりLV1にと…。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.291)
投稿日 : 2016/11/16(Wed) 01:15
投稿者 amateur◆kR..xsXL6RU
ID情報 : jrkmG/fps5spv.6OIcQP1.
参照先
>>287 変態紳士さん
パッチ修正ありがとうございます。
仕様として諦めていたことを書いたのですが、ご対応いただけるとは思ってませんでした。
>>285に書いた「::」の誤認問題は>>289のパッチで無事解決したようです。
これでバイト列の記述をしやすくなりました。感謝です。

>今までは同種のバイト列のみ入れ子に出来たようです。
これは知りませんでした。条件付き置換命令を入れ子で使うケースが思いつかない、
と思ったら、>>288に(仔猫)さんの書かれているのが正にそれですね。
うーん、こんな例もあるんですね。

>↓こんな間違いですね。
>*{ FF :: *[ 0x20 :: 00 *} *]
バイト列の命令は、似たような記号が多くて分かりにくいですね・・・
私は覚えるのを放棄して、HowToSSGからコピペするか、書式をIME辞書登録するかしてます・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.292)
投稿日 : 2016/11/16(Wed) 19:07
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>290 (仔猫)さん
>本スレの差し替えて頂いた版でアドレスネーミングを多用したSSGでは動作が極端に重くなります。
>11/14版では問題なく…。
14日からアドレスネーミングに関連した変更は無いと思いますが、
もし変な状態であれば検証用にSSGを頂ければと思います。

No.288の件ですが、検証こそ出来ていないものの多分直った?ような気がします。
問題無ければこちらのテスト用のものと差し替えます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.293)
投稿日 : 2016/11/16(Wed) 19:23
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
>>292
更新ありがとうございます。::の件は直りました!

が、動作が異常に重くなり画面の更新がプチフリーズするようになりました。
本スレに差し替えて頂いたのと同じ状態です。

ALパッチなしと11/14版では問題ないレスポンスなので
どこかで負荷が入ったと思うのですが…。

現象としては畳んである項目を表示しようとクリックでプチフリーズ?
カーソルを動かすと表示・・・のような感じです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.294)
投稿日 : 2016/11/16(Wed) 19:41
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>293 (仔猫)さん
それはアドレスネーミングや構文の解釈ではなくGUIですね。

>が、動作が異常に重くなり画面の更新がプチフリーズするようになりました。
フリーズではなくイベントメッセージの取り扱いだと思います。
ツリー展開時の更新に問題が発生しているようです。
ちなみに、こちらでは妙に速くなっています。

少し調べてみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.295)
投稿日 : 2016/11/16(Wed) 19:51
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
>それはアドレスネーミングや構文の解釈ではなくGUIですね。
了解です。となると…

項目の一番上に一括処理(toggleの処理がありました)
toggleで重くなってるのかな?

toggleが原因かもです。
いくつかtoggleの処理を纏めた項目(dir以下)を開くと問題の状態になります。

追記:
すいませんtoggleが原因かと思ったのですが違いました。
どうもそうじゃないみたいで。
うーん100%発生する状況がわかりません。
あと怪しいのが縦スクロールをした後の動作ぐらいしか…。引き続き調べてみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.296)
投稿日 : 2016/11/16(Wed) 20:55
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>295 (仔猫)さん
No.289をプチフリーズのテスト用に更新しました。
テスト用にGUIの修正部分を一部切り離しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.297)
投稿日 : 2016/11/16(Wed) 21:37
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
>>296
変態紳士さんありがとうございます。
うーん改善なしです。

確実に再現するSSGが…

amateurさんが参考になるSSGをあげてくれてるので
こっちのは削除します。後でSSGをくまなくみると2カ所間違いが見つかりまして。
ただ今回の直接の原因ではなかったので(修正してみても動作に影響はなかったです。)

追記:
>2016.11.17 もう一度修正しました。
こちらで試しましたが、こちらでも改善されず
amateurさんの報告と同じく
マウスオーバーでフリーズしてしまうのと表示が残ってしまう現象が見受けられます。

追記2:
>2016.11.18 日々修正。
おお!レスポンスが正常に戻りました!
修正ありがとう御座います。

(x86環境で試してみようかなと思ってた矢先に…)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.298)
投稿日 : 2016/11/16(Wed) 22:33
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5QVU79IflIKjWCkNRndeO0
参照先
>>変態紳士さん、パッチ更新お疲れ様です。
本スレの最新版と>>289のパッチですが、私の方でも、
下位項目を開いたり、閉じたりする際の反応がおかしい場合があります。、
具体的には、下位項目を開いたり、閉じたりした後にカーソルを動かさないと表示が更新されない、
または開いた項目の少し下の項目の表示が一瞬バグる(カーソルを動かすと正常に戻る。表示更新処理の問題?)など挙動がおかしい場合がありますね。
かなり重いSSGなので、単にPCの性能が追いついてないだけかも知れませんが・・・
ただ、(仔猫)さんが書かれているのと同じく、11/14版のパッチに戻すと特に問題なく動作します。

とりあえず、今作ってる(6.2書式で作り直し)途中なのですが、検証用に
SpoilerALの修正パッチのスレ(No.20)に私が書いた「GEARS of DRAGOON 〜迷宮のウロボロス〜」のSSGを添付します。
上記記事に書いたとおり、体験版(入手先等の情報も上記記事に)でも動作すると思います。
私の方では添付のSSGを使うと、「アイテム」→各アイテムの「魔石」や「特殊効果」を開いた際の挙動がおかしいです。
最初は問題なく動くこともあるのですが、何度か下位項目を開いたり閉じたりしてると挙動がおかしくなってきます。

>>290 (仔猫)さん
成程、>>288の例はそういう意味なんですね。
解説ありがとうございます。
最初の条件付置換はボス判定、その中の入れ子部分の条件付置換はユニットの存在判定、ということですね。
機会があれば2段階での条件付置換を試してみようと思います。

そういえば、以前、リストやトグル項目とファンネルライトを併用したこともありました。
ファンネルライトは、条件式と書込むバイト列の中の条件付置換等を両方使えるので、嵌ると便利なんですよね。
[enabled]だと、途中の項目で偽判定が出ると下位項目の一括書換えが途中でストップするという面倒な仕様があるので、
その代替でトグル項目等+ファンネルライトを使ったり。
ファンネルライトの条件式は偽判定で下位項目一括書換え処理が止まることはないので、
場合によっては[enabled]より便利だったりします。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.299)
投稿日 : 2016/11/17(Thu) 22:47
投稿者 amateur◆kR..xsXL6RU
ID情報 : PH87djo8Wkmhi63Vr7/lx/
参照先
>>298で、下位項目の一括書換えが途中でストップする(orしない)仕様について、
[enabled]とファンネルライトを例に出しましたが、
その後、三項演算子の条件式を使うとどうなんだろうと試したところ、
三項演算子の条件式で偽判定が出ると、[enabled]と同じく下位項目の一括書換えが途中でストップします。
下位項目の一括書換えは、項目本体の書込みでエラーが出ると途中でストップする仕様のようで・・・([enabled]に限った話ではないようです)

※三項演算子の「偽式」を「0x0」と書くことで、偽判定の際はエラーが出るように書いて試しました。

一応、検証用のSSGを作ったので参考に添付します(例によってSpoilerAL.exeが対象プロセスにつきSpoilerAL起動だけでOK)
結論としては、ファンネルライトの条件式なら偽判定で下位項目一括書換え処理が止まることはなかったです。
項目本体のエラーではないからでしょうかね。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.300)
投稿日 : 2016/11/19(Sat) 00:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : cl3nENcej64VTDiQ/YDfu1
参照先
>>289 変態紳士さん
気付くのが遅れましたが、>>289のパッチ更新ありがとうございます。
2016.11.18 日々修正。のパッチで表示の問題が直ったようです。今のところ問題なしです。
>>285に書いた「::」の誤認問題もしっかり修正されています。
色々お手を煩わせてしまい申し訳ありませんでした。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.301)
投稿日 : 2016/11/19(Sat) 01:02
投稿者 (仔猫)◆KCezBilYINU
ID情報 : Lxk.KhoJ6rRb0XErwLMLV/
参照先
変態紳士さん修正ありがとう。

と、::の二重判定はごく最近の更新だったのですね。
旧パッチ(11/06以前)とALパッチ無しでは正常に解釈されてなかったので驚きです、昔からのテクだと勘違いしてました。
これも、amateurさんの提供してくれてるレポートを脳内変換て考えてたりで知らず知らずに身についてるからでしょうか…。本当勉強になります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.302)
投稿日 : 2016/11/19(Sat) 21:48
投稿者 amateur◆kR..xsXL6RU
ID情報 : ypFYTRC6HzfU4h4VpKuMk0
参照先
>>299に書いたとおり、下位項目の一括書換えは、
一括書換えの途中の項目でエラーが出ると、そこで書換えがストップする(以降の下位項目の書換えがされない)のですが、
どうも、一括トグル等の一括系の書換えでも同様の仕様のようです。
例えば、一括トグルで、チェインファイルの1行目のアクセスアドレスが「0x0」となってエラーとなると、
2行目以降の書換えがされない、というような仕様のようです。
三項演算子等を使ってチェインファイルに書くアドレス部分に、
条件判定の結果が「偽」の場合に「0x0」となるように書くと、
偽判定となった行で一括トグル等の書換えがストップするという・・・

今作ってるSSGで、条件式で偽判定となった一括トグルのチェインファイルの各行については書込み自体をさせないために上記のように書いたのですが、これで困りました。
ただ、一応、これには回避手段があります。
例えば、三項演算子を使ってアドレスを書く場合、
 _条件式 ? 真式 : 偽式
上記の「偽式」部分を、「0x0」等ではなく「Memory::0」等、[allocate]で確保した空きメモリを指定すれば、
エラーにはならないため一括書込みがストップせず、かつ、おかしなアドレスに書き込んで不具合が生じることもない、というわけです。

>>299に書いた、下位項目の一括書換えにつき、三項演算子を使って偽判定でエラーになると途中で書換えストップするケースも、
上記と同様に条件式で偽判定となった場合は[allocate]で確保した空きメモリに書込むようにすればOKですね。

[allocate]は本当に便利です・・・作成中のSSGでも[allocate]を使い倒していて、
[allocate]と[define]無しではもうSSGを書く気になれない、と有り難味を実感しています・・・

一応、参考に上記の一括系の項目の動作検証用SSGを添付します。
(例によってSpoilerAL.exeが対象プロセスにつきSpoilerAL起動だけでOK)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.303)
投稿日 : 2016/11/20(Sun) 04:16
投稿者 amateur◆kR..xsXL6RU
ID情報 : ypFYTRC6HzfU4h4VpKuMk0
参照先
「一括リスト項目」ですが、この書式は「初項, 公差」で表現できる規則性のある値をとる場合(アイテムIDが通し番号になってる等)にしか使えず、
そういう規則性のない場合に一括で複数のアドレスをリスト選択形式で書換えるにはどうするんだろう、とふと疑問に思いました。

一応、ダブルリスト項目なら、「リストファイル1」で選択した行に対応する「リストファイル2」の行に、
「@チェインファイル名」の書式を用い、そのチェインファイル内に「アドレス, バイト列」と必要数を書けばよいのですが・・・
この場合、例えば、書換えを要するアドレスが数百個(アイテム数等)もあると、
チェインファイルに「アドレス, バイト列」を数百個書く必要があり、
さらに、「リストファイル1」の行数分だけ、上記のようなチェインファイルを用意する必要があるのでは・・・
 (※上記の各チェインファイルは、アドレス部分は共通で、バイト列部分だけが異なる)

この方法で書けないことはないのですが、場合によっては長大なチェインファイルを多数用意しなければならず、
面倒かつ作業量・ファイル容量ともに物凄く無駄な気がするので、他に何か方法はないか考えて、一つ思いつきました。

(長すぎるので分割)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.304)
投稿日 : 2016/11/20(Sun) 04:19
投稿者 amateur◆kR..xsXL6RU
ID情報 : ypFYTRC6HzfU4h4VpKuMk0
参照先
(↑の続き)
>>284に書いた、[allocate]とトグル項目等のバイト列書込みの組み合わせを少し変えただけですが、
一括トグルの書き込むバイト列は【 $4 [:Memory::0:] $$ 】として[allocate]で確保した空きメモリから読み取る形にし、
その前にダブルリストでその空きメモリに書込みたいバイト列(値)を書き込んでおくという方法です。
----------
[allocate]0, 0x1000, RW
[define M0] Memory::0
[subject] 下記で変更後の付与タイプ/_: d_list, _{M0}, ssl->付与タイプリスト,0x80000000, 0x7FFFFFFF, ssl->付与タイプリスト2, offset
[subject]装備品の付与タイプ変更(上記リストで選択分に変更)/ON/_: b_toggle, 0x0, ssl->CHN,real
----------
[group]CHN
_1=>num;{gfItemN}; 0xFC79641E=>hash;{AD3};{Str}, $4 [:{M0}:] $$
_2=>num;{gfItemN}; 0xFC79641E=>hash;{AD3};{Str}, $4 [:{M0}:] $$
  (中略)
_428=>num;{gfItemN}; 0xFC79641E=>hash;{AD3};{Str}, $4 [:{M0}:] $$
_429=>num;{gfItemN}; 0xFC79641E=>hash;{AD3};{Str}, $4 [:{M0}:] $$
[/group]
----------

この方法なら、チェインファイルは一つだけで済むので、ダブルリストだけで書くよりは楽だと思うのですが・・・
今書いてるSSGでは取り敢えずこの方法を使って書いてみましたが、
他に良い方法があるでしょうか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.305)
投稿日 : 2016/11/20(Sun) 18:07
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
(amateurさんよく思いつくなぁ…。[allocate]もまだ使ったことがない命令です)
(パラサイトルーチンとかで使えそうとサンプルも頂いてるのですが…)
(そういえば、確保したままでALが不慮に落ちた場合どうなるのかな?)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.306)
投稿日 : 2016/11/20(Sun) 18:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : TK0NM2x0hJel6y9HRr7VC0
参照先
>>305 (仔猫)さん
私も[allocate]の仕様はよく分かってないのですが、
使ってみた限りでは、SpoilerALを終了すると[allocate]で確保した空きメモリのアドレスは無効になるようです。
 (再起動すると、同じ「Memory::0」でもアドレスは変わってしまう)
なのでSpoilerALが落ちてしまうと、
 [allocate]0, 1000, RW
 アドレス:Memory::0
として、メモリを確保していた場合、
「Memory::0」自体がアドレスとして無効(0になる)になり、
そのメモリのアドレスを参照していた項目の書換えも無効になると思います。
 ※ 項目の表示ずらし用の値を「Memory::0」等に書き込んでいたら値がゼロに戻る(表示ずらしがリセットされる)、という感じで。
[allocate]は便利ですが、注意すべき点はそこでしょうか。

参考:変態紳士さんが作成されたSpoilerAL修正パッチのファイルに同梱の、
HowToSSG差分ファイルの「アドレス」→「Memory::」の説明に、
「※失敗した場合はゼロを返します。 」とあります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.307)
投稿日 : 2016/11/20(Sun) 19:19
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
>>306
amateurさん情報ありがとう。人柱でやるところでした(汗
ルーチン等をメモリ確保された場所に書いてた場合…ゲーム側を先に終了させる。
もしくはAL側でルーチンを削除して(変更箇所を元にもどして)からALを落とす必要がある訳ですね。

>>308
amateurさん
変態紳士さんの説明でパラサイトルーチン部が消えることはなさそうですが、無茶な改造やってALが落ちた時は素直にゲームも再起動したほうが安全ですね。

>>309
変態紳士さん詳細な説明ありがとう。
ゲーム側に処理を任せてあるわけですね…了解です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.308)
投稿日 : 2016/11/20(Sun) 19:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : TK0NM2x0hJel6y9HRr7VC0
参照先
>>307 (仔猫)さん
[allocate]を使ってプログラム改造のパラサイトルーチン書いた場合、SpoilerALが突然落ちるとヤバそうですね。
ゲーム自体も落ちそうな・・・
パラサイトルーチン用には[allocate]を実戦で使ってないので体験してないですが。
SSGデバッグモードになってるのを失念して操作→SpoilerALがクラッシュ
を私はよくやってしまうので怖いです・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.309)
投稿日 : 2016/11/20(Sun) 22:46
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
[allocate]ですが、

・ゲーム側のプロセスに確保します。
 まずSpoilerALのプロセスに確保してもゲームからアクセスできないので対象プロセスです。
 仮にSpoilerALに確保したとしたら変数として使えますが直接的に改造には使えません。
 確保はSpoilerALを起動したユーザーの権限でシステムが確保しますのでSpoilerALの領域ではありません。

・確保サイズの仕様
 これはOSの仕様ですがページサイズに合わせてアライメントされます。
 OSのメモリーページのサイズが4096バイトなので、
 5000バイトを指定すると8192バイトになります。

・SpoilerALが落ちたら?
 パラサイトルーチンは変更できなくなった状態で動き続けます。
 アドレスは分からなくなります。
 後からSpoilerALを再起動した場合はメモリを使用していない状態として認識され、
 再度ルーチンを埋め込むと別の領域を確保し再度コード領域を上書きする事になります。
 問題は余分にメモリが確保される事と同期できなくなる事の二つです。

・任意にSpoilerALを終了させたら(または別のSSGを読み込んだら)
 確保したメモリを消します。
 コード領域からジャンプする場合は亜空間へ飛ぶ事になります。

・ゲームが落ちたら?
 SpoilerALは確保された領域が無くなっている事を知りません。
 SpoilerALも再起動しないと誤動作します。
 (これは修正の余地がありそうですが)

・先にゲームを終了させたら
 確保されたメモリはプロセスの終了と共にシステムが(NTなら)開放する事でしょう。

・何が問題になるか
 当然、同期が問題になります。
 プログラムを埋め込んで管理する方法もありますが、ゲーム環境を操作することになります。
 そもそもゲームはプロテクト満載でも不思議ではないので、無理に管理する事を良い方法だとは言えないです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.310)
投稿日 : 2016/11/21(Mon) 01:04
投稿者 amateur◆kR..xsXL6RU
ID情報 : hxtmbhB2Gm57te5DT3n3B0
参照先
>>309 変態紳士さん
[allocate]の詳細解説ありがとうございます。
成程、SpoilerALを通常終了した場合と、不正終了した場合では挙動が異なるのですね。
通常終了した場合と同じだと思い込んでいい加減なことを書いてしまいました。
確保サイズは、4096以下だと4096(0x1000)、4097以上8192以下だと8192(0x2000)、のように
0x1000バイト単位でのメモリ確保となるわけですか。

SpoilerALが落ちただけなら、そのままパラサイトルーチンは動作し続けるとのことですが、
セーブしてゲームも終了してから、両方再起動した方が良さそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.311)
投稿日 : 2016/11/22(Tue) 23:00
投稿者 yun◆6As0zdMqREo
ID情報 : HQPM6BhyAP2pLH0dGp/Ju1
参照先
ウディタのver2.20αと2.20βが公開されました。
あまり時間がとれないので詳しく調査できてないのですが、
ver2.00以降で共通して使えていたアドレスは使えないかと思われます。

今後、ゲームのバージョンアップによってver2.20α以降が使われることがあれば
各ベースアドレスがずれるため、使えないので対応してくださいといった要望
が増える可能性があります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.312)
投稿日 : 2016/11/23(Wed) 01:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : 2cbk.vvzsyw2knYTWR5d81
参照先
>>311 yunさん
情報ありがとうございます。
3年ほど更新がないなと思っていたら、先月にバグ対応で2.20αがアップされ、現在2.20ベータ2という感じみたいですね。
最初どこにアップされてるんだろうと思ったら、公式の「WOLF RPGエディター フォーラム」の
「バグ報告スレッド 11 Ver2.20ベータ公開中」で公開されてるようですね。

上記スレを読んだところ暫くはバグ対応で安定しないような感じなので、私は様子見しようかなと・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.313)
投稿日 : 2016/11/23(Wed) 07:08
投稿者 yun◆6As0zdMqREo
ID情報 : HQPM6BhyAP2pLH0dGp/Ju1
参照先
amateurさん

過去の傾向からして2.20安定版が公開されるのは6−10か月程度かかると思われるので、
ゲームの作者さんによってはβ版を使うかたも多いかと思われます。
(ウディタのベースアドレスが複雑なのはそのせい)

とりあえず今回更新の情報をまとめれたらまたウディタスレをたてる予定です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.314)
投稿日 : 2016/11/23(Wed) 17:16
投稿者 amateur◆kR..xsXL6RU
ID情報 : ujHLyy56U757CaUdQ9JG2.
参照先
>>313 yunさん
安定版が公開されるまで今までそんなにかかってるんですか・・・
とすると、安定版公開まで放置ってわけにもいかないですね。
私の方でも時間あるときにベースアドレス等は確認してみようと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.315)
投稿日 : 2016/11/23(Wed) 22:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : ujHLyy56U757CaUdQ9JG2.
参照先
>>284で書いた、[allocate]でメモリ確保して、電卓とトグル系項目を組み合わせる方法ですが、
これは、電卓(リストでもOK)とトグル系項目に分けなくても、
電卓等にフェンネルライトを付ければ同様のことが可能ですね。(今ごろ気付いた・・・)
>>284に書いた例だと、以下のように代替可能ということで。
 [allocate]0, 0x1000, RW
 [define M0] Memory::0
 [funnel]ssl->Funnel
 [subject]習得可能な全スキルのレベルを一括変更/変更後のレベル/_:calc, _{M0}, 0, 99999, unsigned
 [/funnel]
-----------------
 [group]Funnel
 use, _{skillLv};1=>num;{Num},\
  *[_0x2DBC :: *{ *+ 01 08 04000000 :: $4 [:{M0}:] $$ 00000000 *+ 01 04 *} *]
 [/group]
-----------------

ファンネルライトでの書き込みは、項目本体の書き込みの「後」に付随して行われるため、
上記のようにファンネルファイルの「書き込むバイト列」で
$4 [:{M0}:] $$ と書いて、項目本体のアドレスの値(項目本体で書き込んだ「後」の値)を読み取るようにすれば、
>>284で書いたのと同じ結果が得られるというわけですね。

上記例ではファンネルファイルで書き込むアドレスは一つのみですが、
ファンネルファイルに「use, 書き込むアドレス, 書き込むバイト列」の書式で必要な数の行を書けば、
電卓(リスト)項目&一括トグルの組み合わせと同様の結果になると思います(実際のSSGで試したら出来ました)。

>>304に書いた、ダブルリスト&一括トグルの組み合わせの例も、
ダブルリスト&ファンネルライトで代用可能かと一瞬思いましたが、
臨時板の過去ログのこのスレの ( No.30 )で七星さんが解説くださっているとおり、
ダブルリストにはファンネルライトが機能しないので駄目ですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.316)
投稿日 : 2016/11/25(Fri) 22:01
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : DhrvhxnMN5Nbavvyj.pFh.
参照先
>>298 amateurさん
検証どうもです。
色々と立て込んでいたり修正部分にバグが発生していたりしたので後回しになりました。
(平行で作業を行うと何のバグか判断できなくなるので・・・)

一括書換えでエラーが発生した場合に後続の項目の書き換えが中断される件ですが、

まず、[enabled]は現状のままでいいかと思います。
[enabled]はバージョンチェックなどに使われており、本来ならもっと厳密なチェック機構があってもいいくらいで、
1つでも条件を満たさない時は後続どころか書き換えた内容をロールバックしてほしい事もあると思います。
なので[enabled]の仕様が変わっては過去のSSGが変な事になります。

次に、ファンネルライトですが、
これは何かを書き込んだ後に付随する動作ですのでエラーチェックはありません。
逆にチェックしようとしたらファンネルライト自体で検査しても順序としては間違っていますので、
ファンネルライトは当然の結果というべきかもしれません。

さて、件の三項演算子ですが、
この一括書換えでエラー発生しても後続の書き換えを行うかどうかはある程度の疑問が残るところです。
ゲームのバージョンが更新された時に間違ったアドレスへアクセスしていたとしたら、
後続の書き換えは中断してほしいのですが、
たとえばキャラ10人の内の3人が加入した状態で表示されているものだけで書き換えたい場合、
これは中断してほしくありません。

しかし、この問題点は三項演算子に限った事ではありません。
今までエラースキップの方法が無かったのでファンネルライトを使ったり色々と手の込んだ事をしてきたわけです。

これを解決する場合は[child_rw]にオプションを付けるとか仕様の部分かもしれませんね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.317)
投稿日 : 2016/11/25(Fri) 22:51
投稿者 amateur◆kR..xsXL6RU
ID情報 : zwU85gT3Psq6QjZIt36wD0
参照先
>>316 変態紳士さん
まさか、私のあんな鬱陶しい長文を読んでくださっていたとは、恐縮です。
解説とご意見ありがとうございます。
同様の問題は一括トグル等の一括系の書換えについても生じるようで(>>302)、
仮に[child_rw]にオプションを付けて下位項目の一括書換えについては解決しても、
こちらはSpoilerALの仕様変更で対応するのは難しそうですね。

ただ、>>302で書いたのですが(長文書きすぎて全部読んでられないという声が聞こえそうです、済みません)
(一括トグル等の一括系の書換えについて)
例えば、三項演算子を使ってアドレスを書く場合、
 条件式 ? 真式 : 偽式
上記の「偽式」部分を、「0x0」等ではなく「Memory::0」等、[allocate]で確保した空きメモリを指定すれば、
エラーにはならないため一括書込みがストップせず、かつ、おかしなアドレスに書き込んで不具合が生じることもないようです。
(今書いてるSSGで実際に使って確認しました)
下位項目の一括書換えについても、三項演算子を使って
上記と同様に条件式で偽判定となった場合は[allocate]で確保した空きメモリに書込むようにすればエラースキップ可能のようです。
[allocate]で確保した空きメモリを、偽判定となった場合の書き込み内容の廃棄場所のように使うという感じで・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.318)
投稿日 : 2016/11/26(Sat) 02:09
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>317 amateurさん
>同様の問題は一括トグル等の一括系の書換えについても生じるようで

テストプログラムを作って[child_rw]だけ対応は出来たものの・・・
↓一括項目がこんなにありました。(つまり公開できる機能ではないです)
―――――――――――――――――――――――――――――――――――
下位項目の一括書き換え可否属性
[child_rw]可否オプション
[/child_rw]

トグル項目
[subject]項目名: toggle, 開始アドレス, 終了アドレス-ONのバイト列, OFFのバイト列

一括電卓項目
[subject]項目名: b_calc, アドレス, チェインファイル, オフセットか, 最小値, 最大値, 符号の有無, エンディアン

一括リスト項目
[subject]項目名: b_list, アドレス, リストファイル, 初項, 公差, チェインファイル, オフセットか

一括実数電卓項目
[subject]項目名: bf_calc, アドレス, チェインファイル, オフセットか, 最小値, 最大値, サイズ記号, エンディアン
―――――――――――――――――――――――――――――――――――

公開できない機能は以下のようなものです。
―――――――――――――――――――――――――――――――――――
下位項目の一括書き換え可否属性
[child_rw]可否オプション, エラースキップ
[/child_rw]
―――――――――――――――――――――――――――――――――――

確かに [allocate] でアドレスを有効にすれば仮にSpoilerALが落ちても余分に4Kバイトずつメモリが消費されるだけですが・・・
プログラム(SpoilerAL)本体側としてはナンセンスだと思ったりします。

新たな仕様を思いついたのですが [ignore_error] とか [error_skip] とか、
そういった属性タグを付ける事でナントカなるのではないかと机上の空論を定義してみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.319)
投稿日 : 2016/11/26(Sat) 17:13
投稿者 amateur◆kR..xsXL6RU
ID情報 : o0pGKlYowhFTlv4pJ2GPr0
参照先
>>318 変態紳士さん
テストプログラムまで作っていただているとは・・・
一括系のチェインファイル各行の書き込みに条件を付けるとか、
私のマニアックな使い方で振り回してしまったようで、何だか申し訳ないです。

そういえば、一括実数電卓項目というのもありましたね。使ったことがないので存在自体を失念してました・・・
[allocate]使ってエラー回避は苦し紛れに思いついた手法で、
実際に書いてても邪道っぽいなと思いましたから・・・あまり堂々とオススメするような使い方ではないですね。
(自分が今書いてるSSGでは、項目表示ずらしなど他の目的で[allocate]を使ってるので、確保した空きメモリの余りを使ったのですが)

>新たな仕様を思いついたのですが [ignore_error] とか [error_skip] とか、
こういう属性があれば、エラー出たらそこで書換えストップさせるか、エラーの後も書換えを続行させるか、
SSG作者側で制御できるので便利ですね。
自分が今書いてるSSGでも、一括トグルの途中でエラーが出たら、以降は書換えしなくて良い(したら困る)場合と、
途中でエラーが出ても、あくまで各行で条件判定して真判定なら書換えしてくれないと困る場合と両方あります。
(色々面倒臭い仕様のゲームでして・・・自分がSSGにマニアックな機能をつけすぎなせいもありますが)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.320)
投稿日 : 2016/11/26(Sat) 22:55
投稿者 amateur◆kR..xsXL6RU
ID情報 : mcqYx0VHmLEO/7KTGaMbb1
参照先
一括項目でエラーが出ると書換えストップする件ですが、
>>318で変態紳士さんが挙げてくださった他に、
>>303に書いた、ダブルリスト項目で「リストファイル1」で選択した行に対応する「リストファイル2」の行に、
「@チェインファイル名」の書式を使うと、結局、一括リストと同じような処理になって、
各行でエラーになるとそこで書換えストップになる気がします・・・
ダブルトグルでも同じく「リストファイル2」の各行にチェインファイル指定を行うと同様なのでは。
検証してみたところ、やはりダブル系項目で「@チェインファイル名」の書式を使った場合も同様でした。
一応、サンプルSSGを添付します。(例によってSpoilerAL.exeが対象プロセスにつきSpoilerAL起動だけでOK)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.321)
投稿日 : 2016/11/27(Sun) 02:39
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>320 amateurさん
検証どぉもです。
[error_skip] を実装しました。(パッチのスレッドトップを更新しました)
amateurさんのSSGファイルをテストに使わせてもらいましたので、そのまま使用例として添付します。

いまのところ [enabled] は対象にしていませんが、
[enabled] もスキップした方がいいでしょうか?
後回しにして放置しただけですけど・・・

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.322)
投稿日 : 2016/11/27(Sun) 03:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : mcqYx0VHmLEO/7KTGaMbb1
参照先
>>321 変態紳士さん
物凄く早いご対応、ありがとうございます!
早速試させていただきましたが、
下位項目一括書換え(三項演算子使用)、一括トグル、一括電卓、ダブルリスト、ダブルトグルでは、
エラーで一括書き込みがストップしなくなりました。
ただ、一括リストについては、[error_skip]を付けても従来どおりエラーで一括書き込みがストップしてしまうようです。
(私の使い方が何かおかしいのかもですが)
一応、[error_skip]を付して修正したサンプルSSGを添付します。

[enabled]は、どうでしょう。
[error_skip]を付ければ三項演算子の条件式で対応可能になりましたので、
私としては無くても困ることはなくなりましたが・・・
[error_skip]をあえて付けない限り[enabled]自体の仕様が変わるわけではないので、
>>316で変態紳士さんが懸念されているような、過去のSSGが変な事になる、ということは無さそうですけど。
三項演算子の仕様が分からない、という方もいるかもしれませんので、
[enabled]も[error_skip]の対象にした方が良いかも、とは思います。

ところで、readmeを拝見したところ、SSGのファイルヘッダが6.1でも[error_skip]は機能するようですね(?)
(ファイルヘッダによる動作変更の箇所に書かれていない)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.323)
投稿日 : 2016/11/27(Sun) 06:02
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : DhrvhxnMN5Nbavvyj.pFh.
参照先
>>322 amateurさん
・[enabled] に対応
・一括トグルに対応
・一括電卓に対応
・一括リストに対応
修正しました。
[enabled] の必要性についてどうこう言ってましたが、[enabled] を使った記述が一番シンプルですね。

>ところで、readmeを拝見したところ、SSGのファイルヘッダが6.1でも[error_skip]は機能するようですね(?)

修正パッチではDLLファイルのロード時に1度だけコード領域を書き換えています。
そして6.2かどうかの分岐はSSGファイルの選択時にヘッダを確認してフラグ変数を変更しています。

互換性に影響を及ぼすものとしてアドレスコーディングがありますが、
フラグ変数で、元のコードを使用するか、完全に置き換えられたアドレスコーディングを使用するか、
この2つに分岐します。

つまりアドレスコーディングに関連しているか、
またはコード上の処理がアドレスコーディングを通過していれば6.2です。
それ以外は6.1で共通の処理として動作します。

余談ですが、ビット・アンドとビット・オアの互換性が確認できたSSGは、
ヘッダを6.2と書き換えるだけでアドレスネーミングが高速化します。
これは新しく用意されたアドレスコーディングと分岐しているからで、
部分的なパッチではないからです。

それと、新しい機能が6.1でどうなるか確認していませんので、
新しい機能が6.1のヘッダのまま動く事を保証できるわけでもないです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.324)
投稿日 : 2016/11/27(Sun) 17:58
投稿者 amateur◆kR..xsXL6RU
ID情報 : HPoRPVvZ5SR0S0bjDbTJg.
参照先
>>323 変態紳士さん
パッチ更新ありがとうございます。
試してみたところ、[error_skip]を付ければ、
[enabled]と一括リスト(一括トグルと電卓も)でもエラーで書換えストップされなくなりました。
( [error_skip]を付けなければ従来どおりの動作 )

>[enabled] の必要性についてどうこう言ってましたが、[enabled] を使った記述が一番シンプルですね。
確かに、三項演算子で偽式に「0x0」と書くのは敢えてアクセスエラーにして、
偽判定時に書き込まないようにするための苦肉の策ですからね。
[enabled]なら条件式だけ書けばよく、偽判定なら書き込まない(エラーを返す)ので一番シンプルだと思います。

SSGのファイルヘッダでの分岐の件、解説ありがとうございます。
成程、アドレスコーディングに関連するもの等だけが6.2限定(ヘッダの記載で分岐)というわけですか。
ただし、[error_skip]も含めそれ以外の新しい機能が6.1のヘッダのまま正常動作するかは別問題ってことですね。
新機能を使う場合は、readmeで6.2限定と書いてなくても念のため、ヘッダに6.2と書いた方が無難みたいですね。
(6.2にすると演算子の優先順位がデフォルトのSpoilerAL6.1とは違ったりするので要注意ですが)

それと、アドレスコーディング部分って、6.2用のは完全に置き換えられてるんですね・・・
何と言うか、素人が想像しただけで物凄い作業量のような気がします・・・
こちらは[define]等の追加された機能の恩恵を享受してるだけですが、
あらためて頭が下がる思いです。パッチ製作と日々の更新作業、本当にお疲れ様です。
ヘッダを6.2と書き換えるだけで高速化するというのは、その6.2用の新しいアドレスコーディングを使うからなんですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.325)
投稿日 : 2016/11/28(Mon) 00:34
投稿者 (仔猫)◆KCezBilYINU
ID情報 : kG/YyE2NbKB6lyGtrPMSQ.
参照先
こっそり勉強させて頂いてます。

そう言えば [repeat]ssl->char_rpt,0,xx,1
xxの部分を変数化($4 [:[.0x04.]:] $$)できたらおもしろいなぁとアイデアを思いついたのですが
よく考えると表示更新(3人→4人になったときとか)で難しいかなぁと言う考えに至りました。

次に[enabled]で判定(選別表示)させればいいのか
と思ったのですが[enabled]は表示を止めてくれませんでしたのでどっちも無理かぁ…。というオチです。
(用途としては6人パーティの3人まで存在するので3人分表示とかぐらいですし…)
(ひょっとして以前だれかが議題に上げてるかもと…汗)

>>326
変態紳士さん
ああ!やはり無理でしたか。勉強になりました。
過去にamateurさんが[allocate]を使ってメモリー内に転送して一人ずつ表示とかやってるのを見つけました。
なるほど。こっちで行けば無駄なく表示できますね。

>>327
amateurさんSSG提供ありがとうございます。
まさに望んだのはこれです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.326)
投稿日 : 2016/11/28(Mon) 00:59
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : zrKtjGLCFEb8jzYJzlbP2/
参照先
>>325 (仔猫)さん
[repeat] の引数に変数を使えればという話だと思いますが、
確か [repeat] は静的に展開されています。
10回繰り返す書式ならメモリの中には対象グループの中身×10倍という感じで、
SSGファイルを読み込んだ時点の解釈になります。
なので動的に変化する値を適用することは出来ません。

こんな回答しかできません。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.327)
投稿日 : 2016/11/28(Mon) 02:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : HPoRPVvZ5SR0S0bjDbTJg.
参照先
>>325 (仔猫)さん
一人ずつ表示なら、添付SSGのような感じで可能ですね。
[repeat]ssl->SSR,0,1,1
の部分を、
[repeat]ssl->SSR,0,10,1
に変えれば10人ずつ表示で、表示は好きなようにずらすことが可能です。

(追記)
一人ずつ表示するだけなら、[repeat]を使う必要はないですが。
その場合は添付SSGの、SSRファイル内のループ変数($Val)部分を全て「0」にして[group]main の中に直接書けばOKですね

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.328)
投稿日 : 2016/12/03(Sat) 22:42
投稿者 amateur◆kR..xsXL6RU
ID情報 : 1a6f/8TBJr0/DWL9zOoAY1
参照先
雑談掲示板の「ゲーム雑談部屋」のスレで仔猫さんが書かれていた、
Unity製ゲームのプログラム改造の件ですが、
解析に役立つ話題だと思いましたので、こちらでレスさせていただきます。

※以下は一度ゲーム起動したらプログラムのアドレスが固定の場合の話で、
ゲーム起動中にもコロコロ変動するような例だと下記の例のようにはいかないですが。

もしかして、該当のプログラム部分が、モジュールエリア内ではなく、
「ERW」という実行属性が付与された書換え可能なメモリエリアにあるのでしょうか。
私も別のUnity製ゲームでポインタ探すためにブレークしたらEIP(プログラム部分)のアドレスが
モジュールエリア外の「ERW」の属性エリアにあった覚えがありますが。

Unityではなく、Java(Javardry THE KING)のSSGを書いた際に同様のケースがありまして、
プログラム改造をしようと思ったら、そのプログラムのアドレスがモジュールエリア外の「ERW」の属性エリアにあり、
ゲーム起動ごとにそのプログラム部分のアドレスが変動するという例でした。(モジュールエリア外なのでモジュール開始からの相対アドレスも変動する)
この例では、下記のように[adjustment]のsearchでアドレス補正する手法で一応、SSGに書くことができました。
下記の例では、アドレス変動の幅がそんなに大きくなく、ある程度絞り込めるのでこんな感じで書けましたが。
------------------
[child_rw]
[subject]特性値の上限解除(サーチ補正要):dir
[adjustment]search, 0x01000000, 83F9630F8E110000003B7B080F83132D0000C744BB0C63000000, 0x01000000, 0x05000000, 1
[subject]特性値の上限99解除(1)/ON/_: toggle, _[_0x01000000_], *{ 83F9630F8E11000000 :: 83F9630F8E110000003B7B080F83132D0000EB06909090909090 *}, *{ 83F9630F8E11000000 :: 83F9630F8E110000003B7B080F83132D0000C744BB0C63000000 *}
 (中略)
[/adjustment]
[back]
[/child_rw]
------------------

参考に、上記例のプログラム改造のアドレス周辺と逆汗コードリスト等のスクショを添付します。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.329)
投稿日 : 2016/12/04(Sun) 07:41
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>328
amateurさん詳細情報ありがたや
>そのプログラムのアドレスがモジュールエリア外の「ERW」の属性エリアにあり
それです!書き換え可能なメモリー上に配置されてるので、その場しのぎで書き換えてみるとちゃんと動作するのですが
毎回同じ場所に存在するかと思うと居なくなったり。戻ってきたりと(汗

>下記のように[adjustment]のsearchでアドレス補正する手法で…
サーチで補正すれば行けそうですね。
やってみます→出来ました。
とりあえず簡単なミスしても減らないコードを

[group]info2
[child_rw]
[subject]残機体減少(サーチ補正):dir
[adjustment]search, 0x05000000,83C4108B4708C64030008B47088B483C, 0x05000000, 0x06000000, 1
[subject]ミスしても残機減らない/ON/_: toggle, _[_0x05000000_], *{ 83C4108B4708C64030008B47088B483C :: 83C4108B4708C64030008B47088B483C90 *}, *{ 83C4108B4708C64030008B47088B483C :: 83C4108B4708C64030008B47088B483C49 *}
[/adjustment]
[back]
[/child_rw]
[/group]

アドバイスありがとうございます。
本当は無敵コードまで追っかけようかと思って→迷宮入り(いや、一歩前進したと思わねば)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.330)
投稿日 : 2016/12/04(Sun) 17:45
投稿者 amateur◆kR..xsXL6RU
ID情報 : l3DKiZa7Zzqnr9cat0ayQ/
参照先
>>329 (仔猫)さん
何とかお役に立てた?ようで良かったです。
ゲーム起動中にもアドレス変わるタイプで役に立たない話ではないかとも思ったのですが。

(仔猫)さんは気付かれてると思いますが、一応書いておきますと、
>>328で私が書いた例で、誤爆防止のために[enabled]ではなく、バイト列の条件付置換命令を使ってる理由ですが、
[enabled]だとサーチ補正適用前だと偽判定のエラー表示が出て、サーチが開始しない(だったと思います)ので、
やむなくバイト列の条件付置換で代用しています。
(条件付置換の「条件式のバイト列」は、書換え部分より前のバイト列を指定)

それと、[adjustment]使ってバイト列でサーチする場合、
CALL命令やジャンプ系の命令の部分で、呼び出し先・ジャンプ先を指定するバイト列部分(相対アドレスを示す)については、
同じメモリ領域(ERW)内なら大丈夫だと思いますが、別領域を指定しているような場合だと
その部分(相対アドレスを示すバイト列)は変わる可能性がありますので、??(マスク)にした方が良いかもしれません。

上記は、通常のプログラム改造について、ゲームVerアップに対応するために
[adjustment]使ってバイト列で該当プログラム部分のアドレスをサーチする場合にも当てはまるかもしれません。
CALL命令やジャンプ系の命令の呼び出し先・ジャンプ先を指定するバイト列部分はVerアップで変わることが多いので。
以前、[adjustment]は使ってなかったですが、ゲームVerアップに伴ってプログラム改造部分のアドレスを
うさみみのバイト列検索で見つけようとした(Verアップ前の該当部分前後のバイト列をコピーして残してた)のですが、
確か、CALL命令やジャンプ系の命令の呼び出し先・ジャンプ先を指定するバイト列部分だけが変化していて、
その部分を??でマスクしないとバイト列検索でヒットしなかった記憶があります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.331)
投稿日 : 2016/12/06(Tue) 02:54
投稿者 amateur◆kR..xsXL6RU
ID情報 : 6VN4zRpENpBKiFjVfdg440
参照先
別スレにアップしたギアドラのSSG書いた際の失敗談なのですが、
必要な項目に対して一つ一つサイズ属性で括っているとサイズ属性を付け忘れて失敗しそう(&面倒)だと思ったので、
全項目をまとめてサイズ属性[size]4 で括ったのですが、
その中にdouble型の実数電卓項目があって、この場合、オプションの「サイズ記号」に「double」と書いても、
4バイトのサイズ属性が優先され、「float」と解釈されてしまうのですね。(HowToSSGの実数電卓項目を参照)
この場合に、正常にdoubleと認識させるには、下記のようにdoubleの実数電卓項目のみを8バイトの[size]で括る必要がありました。

 [size]4
  (略)
 [size]8
 [subject]項目名: f_calc, アドレス, 最小値, 最大値, double
 [/size]
  (略)
 [/size]

横着してまとめて[size]4 で括って失敗したという恥ずかしい話です・・・
doubleの実数電卓だけが何で正常動作しないのか、書いてる途中で暫く悩んでしまいました。
矢鱈と長いSSGなので[size]4で全部括ってるのを途中で忘れていたというのもありますが・・・
SpoilerALでは実数電卓系のdoubleだけが8バイトの読み書きなので(バイト列書き込みとかは別で)、色々間違いやすいですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.332)
投稿日 : 2016/12/06(Tue) 20:12
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>330
amateurさん
情報ありがとうございます。

>誤爆防止のために[enabled]ではなく、バイト列の条件付置換命令を使ってる理由ですが‥
>(条件付置換の「条件式のバイト列」は、書換え部分より前のバイト列を指定)
なるほど!そうでしたか…。
サーチは全くて言っていいほど使ったことがなくて勉強になりました。ありがとうございます。

>(相対アドレスを示すバイト列)は変わる可能性がありますので、??(マスク)
確かに変動するのでマッチから外してました。
??でマスクすればOKですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.333)
投稿日 : 2016/12/09(Fri) 08:39
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
こっちに持ってきました。

>下記は、該当モジュールの、.dataセクション開始アドレス。(「.text」等、他のセクション名でもOK)
>_MName::(モジュール名または、nul):=.data

まさかこんなに簡単に.dataへアクセス出来るとは…。
amateurさんのスレで、ウディタの解析とかでやってたのですね。
見逃してましたorz

と言うことはVer違いで
dataセクション前に別のセクションが追加されてたりでずれる時でも直接.dataを選択できるのかぁ…。

MName::nul=>base;[:$base+0x3C:]=>pl;[:$base+$pl+0x17C:]=>data;[:$base+$data+0xDC7B0:]
.rdataセクションが間に居て.dataセクションが+0x17Cの時がありました。いつもは大抵0x154なのですが
これを使うと気にしなくて良くなりますね。

上と全く同じアドレスを表現すると
[:MName::nul:=.data+0xDC7B0:]
なんとまぁコンパクトに…。来年の目標は6.2でSSGを書くことにしようかと。
今年の目標、プログラム改造(パラサイトルーチン)を覚えるはなんとか達成した感じが。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.334)
投稿日 : 2016/12/09(Fri) 21:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : wq.B5PeyXj7h4b7bIUd5Y.
参照先
>>333 (仔猫)さん
>amateurさんのスレで、ウディタの解析とかでやってたのですね。
変態紳士さんのSpoilerAL修正パッチで、セグメントアドレス取得が追加されたのが先月ですから、
私が使い始めたのは、最近yunさんの立てられたウディタのスレにアップした解析用SSGからなんですけどね。
 (ウディタでは.data開始直後あたりから辿るのが基本なので、この書き方が便利なんです)
エリクシアのSSGでは .txtセクションで使ってみましたが、
 _MName::nul+0x1000+?? でも.txtの場合は問題無さそうですね。

>今年の目標、プログラム改造(パラサイトルーチン)を覚えるはなんとか達成した感じが。
最近、(仔猫)さんはプログラム改造で凄いのを書かれてましたよね。
私はプログラム改造が苦手(というか、アセンブリ読むの自体が・・・)なので、
どうにかしたいと思ってるのですが・・・
うさみみ一本では限界を感じてきたのでいい加減、OllyDbgあたりも使い慣れないとですね。
 (うさみみに慣れすぎてついついこれだけで済ませてしまいます)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.335)
投稿日 : 2016/12/10(Sat) 00:34
投稿者 (仔猫)◆KCezBilYINU
ID情報 : T52Eqpbi.nNHsCnZngl/s1
参照先
>>334
amateurさん
>エリクシアのSSGでは .txtセクションで使ってみましたが、
> _MName::nul+0x1000+?? でも.txtの場合は問題無さそうですね。
おお、情報ありがとう御座います。
テキストもいけますか…。

>OllyDbgあたりも使い慣れないとですね。
僕も使いこなしてるとは言えないです。サーチはうさみみの方が使いやすいですよね。
一気に逆汗してテキストに落として解析する場合によく使ってます。

そういえば、プログラム改造の恩師であるナスさんにも会えたし。
これで思い残しはないのです。
今年で卒業もありかなぁ。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.336)
投稿日 : 2016/12/10(Sat) 01:34
投稿者 amateur◆kR..xsXL6RU
ID情報 : wq.B5PeyXj7h4b7bIUd5Y.
参照先
>>335
>今年で卒業もありかなぁ。
さ、寂しい・・・
でも、事情は人それぞれですから、無理して続けるものでもないですよね。
私は今のところは結構時間に余裕ありますから毎日のように覗いてますが、何時まで続けられるかは・・・
時間があって気が向いたときだけ覗きに来るってのもアリだと思いますし(そういう方も結構多そうな気が)

そういえば、SpoilerAL修正パッチのスレで話題に出ていたゲームのワードリピートの書き方ですが、
ヘッダを6.2にするなら、ステータスの箇所はこんな風に書けば簡略化できそうですね。(一応体験版では動いてました)
-----------------------
[group]unit_00
[subject]ステータス(AL本体修正パッチ必須※):dir
[define Base] MName::nul:=.data=>data; [:[:[:$data+0x6F30:]+$ofs:]+0x4:]=>base
[child_rw]
[subject]味方ユニット:dir
[repeat]ssl->unit_rpt1,0,20,1
[back]
[subject]敵ユニット:dir
[repeat]ssl->unit_rpt2,0,50,1
[back]
[/child_rw]
[back]
[/group]

[group]unit_rpt1
[define Link] 0x1F0=>ofs; {Base}; [!R($Val+1),[:!] $base [!R($Val+1),+0x4:]!]
[subject]No.[!L$Val+1!]  '+' _mem,_{Link}=>link;[\:$link+0x40\:],0x20,unicode,-:dir
[replace]_{Link},ssl->status
[back]
[undef Link]
[/group]

[group]unit_rpt2
[define Link] 0x254=>ofs; {Base}; [!R($Val+1),[:!] $base [!R($Val+1),+0x4:]!]
[subject]No.[!L$Val+1!]  '+' _mem,_{Link}=>link;[\:$link+0x40\:],0x20,unicode,-:dir
[replace]_{Link},ssl->status
[back]
[undef Link]
[/group]
-----------------------
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.337)
投稿日 : 2016/12/10(Sat) 11:10
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>336
amateurさん
ありがとうございます。修正したコードを内包させて頂きました。

変数化[define]でコードをもっとスマートにできるんですよね。
同じコードがこんなに短くなっちゃって6.2恐るべし。

昨日レスしようかと思ったら、サーバー移転?しましたか?
SSL(TLS)で通信してるしセキュアになりましたね。

卒業に関しては臨時板の時に「この板は2年間で閉めます」と宣言されてたので2年で活動終了と予期してました。
できればお世話になった方々に挨拶してから…と思ってまして。ちょうどナスさんが来られたので、これで挨拶は全部すんだような気が…臨時板管理人さんを忘れてました!そろそろ戻って来られてる筈!?

(…卒業しても、軒下に居座ってる可能性が高いです。)
(ただ投稿はもう無理かもしれませんが…。Linux環境に慣れつつあります。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.338)
投稿日 : 2016/12/11(Sun) 02:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : 3t/QP0oLku2RCBGgezpcH.
参照先
>>337 (仔猫)さん
さり気なく、掲示板の名前が「猫缶Index The 3rd サポート・質問&アップロード板」と変わってますね。
(猫缶Index The 3rd・・・某ゲームを髣髴とさせる名前のような・・・)
管理人さんが、本家と似たようなドメインを取得したと仰ってましたので、
丁度移転タイミングだったのでしょうね。
URLが猫缶Indexっぽくなってますし。

>臨時板管理人さんを忘れてました
来年3月ごろに一時帰国されるものの、落ち着かれるのは2年後くらいと仰ってましたね。
その後は、ひっそりROM専にとも書かれてましたので・・・
ご挨拶する機会があればいいのですが。
仮に書き込みされても臨時板管理人さんだと私たちには分からないかも・・・?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.339)
投稿日 : 2016/12/11(Sun) 05:04
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : 7YBrPoHRJV0lmyUJUMw630
参照先
>>337 (仔猫)さん

>昨日レスしようかと思ったら、サーバー移転?しましたか?

移転したのはドメインだけですね。
軽くなったのはぎゅうぎゅう詰めだったドメインから
ゆったりとしたドメインに移ったのが原因でしょうね。

>>338 amateurさん

>(猫缶Index The 3rd・・・某ゲームを髣髴とさせる名前のような・・・)

元ネタは「ルパン三世」のつもりですが某ゲームってなんですか?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.340)
投稿日 : 2016/12/11(Sun) 10:58
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>338
amateurさん。続きは雑談板で…。

>>339
管理人さん
作業お疲れ様です。ドメイン移転ですかなるほど。
先週はなぜか504が連発してましてハッキングでも受けてるのかなぁと…心配してました。
バックアップか何かだったのですね(これが続くなら連絡板で報告しようかと思ってました)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.341)
投稿日 : 2016/12/11(Sun) 17:40
投稿者 amateur◆kR..xsXL6RU
ID情報 : hAsqkX4ieQu2mada0uS5w1
参照先
>>339 RICK(管理人)さん
掲示板の管理お疲れ様です。
ルパン三世ですか。英語表記で「LUPIN the Third」ですね。
私が思い浮かべたのは、「英雄伝説 空の軌跡 the 3rd」でした。

>>340 (仔猫)さん
了解です。確かにゲーム解析とは関係ない話題ですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.342)
投稿日 : 2016/12/18(Sun) 18:54
投稿者 amateur◆kR..xsXL6RU
ID情報 : gfNCFFD16Q6OT8tf0/JJ1.
参照先
以前このスレでも少し話題になっていた、来週発売予定の「VenusBlood-RAGNAROK-」ですが、
マスターアップ後にSLG体験版ver2が公開されたので、
上記体験版を少しだけ解析してサンプルSSGを書いてみました。
一番検索しやすい資金項目からベースアドレスまで辿り着きましたが、
少し前に変態紳士さんや七星さんに教えていただいたエクスポート関数を使い、
mono.dllのエクスポート関数「mono_get_root_domain」でベースアドレスは特定できました。
 ※ [:MName::mono.dll::mono_get_root_domain +0x1:] = 0x101F52CC (ベースアドレス)

添付SSGでは、取り敢えず自力で解析したお金や資源等のリソース関連4項目しか変更できませんが、
>>52で七星さんがアップしてくださったmono用ツールに入力するアドレスを表示させる機能を付けてみました。
(電卓の表示を16進数に変えてコピーして、そのままツールのアドレス入力欄に貼り付ければOK)
これで、他のデータも芋づる式にツールで解析可能ですので物凄く便利です。七星さんにあらためて感謝!

・・・なんですが、ベースアドレス特定を含め、これでこのゲームの解析方法は概ね分かり解析的興味は特に無くなったので、
後は製品版を買う人にお願いします。(ゲーム内容自体にはあまり興味が・・・)
添付の体験版用SSGの内容は改変・流用等してくださってOKです。(項目が少なすぎて流用する価値も乏しいですが)

追記;
添付SSGにターン数・月の巡り・時間帯・難易度の変更を追加

追記 12/19
添付SSGに、メダリオンの項目を追加。
>>343で(仔猫)さんの提供くださった情報をほぼそのまま利用させていただきました。
ありがとうございます。

追記 12/20
添付SSGに、周回数(クリア回数)、装備品等の所持数、アイテムデータを追加。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.343)
投稿日 : 2016/12/18(Sun) 23:04
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>342
amateurさん提供ありがとうございます。
体験版をちらと見てみました、この解析は完成って言って良いような…
とりあえずメダリオンとかもすぐ付近にいました。

unity製の為か消費メモリーは増えましたが…。
ゲーム自体は吉里吉里より軽いような気がします。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.344)
投稿日 : 2016/12/18(Sun) 23:19
投稿者 amateur◆kR..xsXL6RU
ID情報 : gfNCFFD16Q6OT8tf0/JJ1.
参照先
>>343 (仔猫)さん、メダルの情報(SSGの記述)ありがとうございます。
私も、無地のメダリオン(&初期状態では表示されないメダル)の変更機能は必要そうと思ってたので助かります。
後はお任せとか言っておいて、ターン数等を追加しました。

吉里吉里は、何か挙動が変になるときがありましたね(ロード後にアイテム等をゲーム上で表示させないとSSG等でエラーになったり)。
Unityになって確かに表現力が明らかにアップしてるようですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.345)
投稿日 : 2016/12/19(Mon) 00:50
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : HZHKDJMuSkse2GztUvE61/
参照先
>>342 amateurさん
新作ですか、お疲れ様です。
我が家ではunityになってから重くなりました。
ゲームを途中でやめてしまうくらい・・・


別件ですが、trace/copy の変更を6.2限定に変更しました。
(プラネット・ドラゴンのSSGが落ちちゃったので)

そこで相談なのですが、

修正された trace/copy って使い道はあるんでしょうか?
それよりも従来の仕様通りではない状態の方が需要があったりします?

修正したtrace/copyは使われている様子がないですし、
切り捨てて前の状態に復帰した方がいい?

という内容です。「現状維持 or 復帰」または別の機能に変えてしまう。

>>343(仔猫)さん
メニュー修正しましたよ。Linuxではテストしてないですけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.346)
投稿日 : 2016/12/19(Mon) 01:33
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>344
amateurさん更新ありがとうございます。
6.2のコードはやっぱりスゴいですね。

>>345
変態紳士さん
>メニュー修正しましたよ。Linuxではテストしてないですけど。
…ミラレタ!? 更新ありがとうございます。
昨日は504でアクセスできなくてメニュー云々の記事修正が途中で破棄に…失礼しました。
同じ記事を載せるのもアレでしたので日替わりSSとなりました(汗。
体験版のunityは結構軽かったりします…製品版になると超重かったり(泣

>trace
よく表示用で使ってました(グレーで渋い)
問題あるとするなら本来の機能ではなく、表示用として使ってた側ですよね…。
僕は6.2でのみ機能する方が嬉しいですが…(機能を戻すでもOKです)
あ…でもTakeさんのSSGでも使ってらっしゃるので(表示用だったかな?)
確認してみると…。
タイトル"正しい性奴隷の使い方"で正規のtraceの使い方されてます
AL6.2書式でした。
>起動時に「:trace」にてVer1.00を基準としたVer毎の差分を自動的にセーブデータ内に書き込み

追記
>>347
traceの使い方結構おもしろいですよね。
脳内で思いついた方法ですが…
解析とかの過程で例えばエウの暗号化を無効にするパッチをtraceで書いておいて各項目の値の場所を探すとか…。
(解析中だけ実行ファイルへ直接パッチでもいいのですが。。。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.347)
投稿日 : 2016/12/19(Mon) 02:46
投稿者 amateur◆kR..xsXL6RU
ID情報 : gfNCFFD16Q6OT8tf0/JJ1.
参照先
>>345 変態紳士さん
新作の件ですが、以前に教えていただいたエクスポート関数をベースアドレスの記述で使わせてもらっています。
Unityではこの方法で書くのが良さそうですね。

修正された trace/copyですか・・・
使う上で個人的にネックになると思ってるのが、ロックが強制という点ですね。
ゲームによっては、アドレスコーディングが長大でどうしてもSSGが重くなってしまうのですが、
trace/copyを使うと、ロックが強制なので余計に重くなりそうでして。

traceについては、使い道がよく分からない・・・と思ったのですが、
>>346で(仔猫)さんが書かれているTakeさんのような手法があるのですね。これはロック項目ならではの使い方ですね。

copyについては、あらためてHowToSSGを読むと4バイトを超えるコピーも可能なんですね(?)
これが可能だと、一定範囲のバイト列を[allocate]で確保した空きメモリにまとめてコピーとか、色々使い道がありそうな・・・
他にも、最大HPのアドレスから現在HPのアドレスにコピーという感じで使い道はあると思います。
トグルで同じような結果になる書き方は可能ですが、copyの方が楽ですよね。
ロックが強制でなければなあ、というところでしょうか。
原則はロック状態だけど、ロックOFFをデフォルトにする書式もあり、とかならば・・・(トグル使えという話になりそうですね)

trace/copyの両方について、というか別の項目・属性等でやるべき話なのかもですし、
こんなことが可能なのか分からないのですが、
SSG読み込み後に1回だけ自動的に書き込むようにできれば便利かな、とは思います。
trace/copyだと周期的に何回も延々書き込むので無駄な負荷がかかりますので。
>>346で(仔猫)さんが書かれているTakeさんの手法も、起動後に1回書き込むだけで良いみたいですし

※ロック強制について
例えば吉里吉里だとロック強制が致命的になる場合もあるかも知れません。
パーティ全滅 → タイトル画面に強制的に戻る、というような場合に値の固定をONにしていると、
エラーで落ちたという話を聞いたことがあります。
(吉里吉里ではプレイ中にアドレスがガラッと変わることが多いので他の場合でも危ないかも)
最近アップした吉里吉里製ゲームのSSGでもその点を考慮して、故意に値固定を不可にしている項目が多かったりします。

>>346 (仔猫)さん
成程、Takeさんのその手法は目から鱗ですね。
わざわざ必須コード項目を作ってSSG使用者に操作して貰わなくても、
traceで自動的に必須コードONみたいなことができるわけですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.348)
投稿日 : 2016/12/19(Mon) 23:45
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : HZHKDJMuSkse2GztUvE61/
参照先
>>346-347 (仔猫)さん、amateurさん
ありがとうございます。

・エウ等の暗号化の常時複合化への応用
 これは何度か試みた事があります。
 モジュール単位の逆汗(.exeや.dllを.asmに変換するツール)で見てみると、
 rorもしくはrol命令は一カ所ではなく幾つもの場所で使われています。
 全てにパッチを当ててencode/decodeをバイパス手術したところで汎用化にはなりません。
 タイトル毎に大きな作業が付いてきますし、失敗していればいつ落ちるか分からないので
 利点が少ないかもです。(それに完全な複合化をメーカーが嫌うかもしれないし)

 代替えの方法として、実行モジュールを作る開発ツールでプロセスのメモリをファイルへとダンプし、
 その際に複合化をする方法があります。

 もし部分的な複合化であれば他の機能でどうにかなると思います。

・SSG読み込み後に1回だけ
 これはタイミングを計りかねます。
 実際にはSSG読み込み後ではなくプロセスを見つけた直後になりますし、
 そのタイミングでタイトル画面なのか、セーブデータをロードした後なのか、
 ゲーム毎に条件が変わってきます。

 代替として思いついた方法は、メモリを確保して書き込み済みフラグを用意し、
 タイトル画面かどうかSSGで判断し、
 1度目の書き込み後にファンネルライトでフラグを書き込み、
 enabledとerror_skipで抑制できればナントカならないかな、という方法です。

・常時ロックする件
 もしロックしなければトグルで代用できてしまう気がします・・・
 使い方に色々と工夫が見られますので再考の余地もあるかもしれません。
 しかし、基本的には無意味ではないかと。

・ロック強制が危険だという点
 その通りです。
 なので使いたくない機能です。
 しかし、ロックしない内容は他の機能で補えてしまうので。

・とりあえず的に実装しない件
 謎仕様に突貫工事をしてしまうと、どうにもならない建築物を爆破解体という結末があります。
 しかも拡張書式のSSGを巻き込んで解体してしまいます。
 一方通行なので・・・
 それと面倒なのが8割くらい。

やはり疑問の多い仕様です。
自己完結で申し訳ないですが不透明なので現状維持の方向で。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.349)
投稿日 : 2016/12/20(Tue) 03:07
投稿者 amateur◆kR..xsXL6RU
ID情報 : itsStPhKYsbx1X8bZd9n.1
参照先
>>348 変態紳士さん
私が思いつきで書いたものを検討していただき、ありがとうございます。
自分でも書きながら別の書式で代替できるのではとか、どこまで需要あるのかと疑問がありましたので、
こんな思いつきを実装は無理がありますよね。
(・SSG読み込み後に1回だけ、については素直に必須コードONにして貰ったらいいだけですね・・・)

(以下は別件です)
>>342のSSGを更新。
周回数(クリア回数)、装備品等の所持数、アイテムデータを追加しました。
ついでに、アイテムリストをオマケでアップしておきます。
SLG体験版ver2からMDXで抽出(したコードをLibreOfficeを使ってUnicode文字列に変換・整形)したデータで、
製品版とは異なるかもしれませんのでご了承ください。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.350)
投稿日 : 2016/12/20(Tue) 19:18
投稿者 (仔猫)◆KCezBilYINU
ID情報 : hxukakYtynvoJMlarF0O40
参照先
>>348
変態紳士さん
おお!解析済みでしたか。エウの解析は変態紳士さんが居なかったらヤバかったです。
特にデバッガが起動できなくて・・・。あのデバッガを阻害してるコードのパッチのお陰で解析の幅が増えました。ありがたや。

>>349
amateurさん更新ありがとうございます。
アイテム表示が素晴らしい(勉強になります)
変態紳士さんのパッチと相性が非常に良いです(…表示が瞬時に切り替わるので)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.351)
投稿日 : 2016/12/20(Tue) 23:32
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : HZHKDJMuSkse2GztUvE61/
参照先
何度か話に出ていたので[define]を強化してみました。

タグ自体の置換、スタティックの置換、リストなどのグループ中の置換、リストなど外部ファイルの置換、引数の置換、アドレスネーミングと無関係な文字の置換など。
全部を動作確認したわけではないです。
理論上?出来たらいいなという感じで・・・
リストグループなどはリストの中ではなく参照する手前でdefineする必要があるかもです。

スタティックでもループ変数の置換は・・・
出来ないかも
スタティックの場合はその手前の解釈になるので、書式化文字列の再度書式化というのも無理かも
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.352)
投稿日 : 2016/12/20(Tue) 23:41
投稿者 amateur◆kR..xsXL6RU
ID情報 : dSBAaNyq6.o9SM/q0mgkV.
参照先
>>351 変態紳士さん
[define]の強化、ありがとうございます!
これは、さらに便利になりそうですね。
これから、どんな使い方ができるか、試行錯誤してみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.353)
投稿日 : 2016/12/20(Tue) 23:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : dSBAaNyq6.o9SM/q0mgkV.
参照先
>>342のSSGに機能を追加してこちらにアップし直します。
ユニットデータを追加しましたが、スキル変更は文字列書換えが必要で面倒なのでパスしました。
未加入ユニットを一括して兵舎に入れる機能を付けましたので、
ゲーム開始直後にいきなり全ユニット加入とか無茶も可能です(不具合があるかもですが検証してません)。
あと、オマケファイルとして、アイテムリスト、ユニットリストを同梱しました。
アイテムデータやユニットデータで目当てのアイテム・ユニットを見つけるには、
リストファイル上でテキストエディタの検索機能を使って該当ユニット等を探し、
左端の「通し番号」(例;560 = m1000 = ヴァーリ なら、「560」)を、SSGの表示をずらす項目に入力してください。
該当データが一番上に表示されると思います。

それと、製品版ではアイテム・ユニットリストの内容が変わってるかもしれないので、
MDXの抽出用設定ファイルと、その抽出データを貼り付けると自動的にリストが出力される、
LibreOfficeのファイルも同梱しておきます。
製品版で体験版用のリストが使えなかったら、これらを利用して製品版用のリストを作成してください。

追記 12/21
添付SSGに、師団データ(敵・味方両方)と、味方ユニットデータの一括変更系を追加しました。
師団データ項目から、所属ユニットのデータを書き換え可能にしましたので、
ユニットデータは師団データの方から書き換えた方が便利かも。
また、各師団の所属ユニットを変更・追加可能です。
一応、これで必要そうなものは大体揃ったと思いますので、後は製品版をプレイする人にお願いします。

追記 12/22
添付SSGに、ターン経過数(任務選択画面)、行動値、治世、覇道、の項目を追加

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.354)
投稿日 : 2016/12/23(Fri) 00:27
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : HZHKDJMuSkse2GztUvE61/
参照先
連絡です。

AL修正パッチのdefine機能を強化していますが、初期は問題があったりして現在の内容に至っています。
(スレッド:SpoilerALの修正パッチ、レスNo141に添付)
今の所は問題ないので近いうちにスレッドのトップへ移行する予定ですが、問題があれば連絡を頂ければありがたいです。

・動作が変わってしまうSSGファイルがある
・[define]が使えない場合がある
・[define]で落ちる

上記ような内容を想定しています。その場合は対象のSSGファイルの入手方法もお願いします。


追記:

2016/12/23 02:17 「SSGを投稿したり、ゲーム解析について語るスレ (No.355)」に対応
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.355)
投稿日 : 2016/12/23(Fri) 01:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : BeyA7MMIfzRm04vR3z1Pe1
参照先
>>354 変態紳士さん
ご連絡ありがとうございます。
>>351のお知らせを受けた後、試したらSSGの挙動がおかしかったのですが、
既に修正パッチのスレで対応中と書かれていましたので報告はせず、[define]強化前のパッチに戻して様子見させていただいてました。

早速、SpoilerAL修正パッチのスレ、No141に添付のパッチを適用したところ、
このスレの>>353のSSGが正常に読み込みできずに下記のようなエラー表示が出てフリーズします。
---------------------------
モジュール 'WINMM.DLL' のアドレス 6FA217CF でアドレス 00000014 に対する読み込み違反がおきました。.
---------------------------
一応、その際のスクショを添付します。
ゲームはVenusBlood-RAGNAROK-のSLG体験版ver2です。
とりあえずご報告させていただきます。
なお、修正パッチのスレッドトップのパッチ(2016.12.20)に戻すと上記SSGが正常動作しますので申し添えます。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.356)
投稿日 : 2016/12/23(Fri) 02:22
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : HZHKDJMuSkse2GztUvE61/
参照先
>>355 amateurさん
ありがとうございます。
早速修正しました。

スレッドの最新のSSGで問題があるというのも変な話ですよね。
どうも失礼しました。
作っている時にゲームを起動するのが面倒だったので、実践的なテストが省かれていました。

引き続き動作不良が見つかればお願いします。

>なお、修正パッチのスレッドトップのパッチ(2016.12.20)に戻すと上記SSGが正常動作しますので申し添えます。
はい、単純に比較で結構です。
また、使えなかった場所に[define]入れたけど動かないという事でも大丈夫です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.357)
投稿日 : 2016/12/23(Fri) 04:55
投稿者 amateur◆kR..xsXL6RU
ID情報 : BeyA7MMIfzRm04vR3z1Pe1
参照先
>>356 変態紳士さん
迅速なご対応ありがとうございます。更新分のパッチで>>353のSSGが正常に読み込み可能になりました。
それで、ほとんどの機能は正常動作するのですが、上記SSGで「味方ユニットデータ一括変更系」の下位項目の
 全ユニットのステータス加算値を入力値【 '+' _mem, _{M0}+0xC, 4,num ,??,%d '+' 】に一括変更
の項目に、数値を入力すると下記のようなエラー表示が出て、SpoilerALが落ちてしまいます。
---------------------------
Abnormal program termination
---------------------------
この項目には、ファンネルライトを付けて実質的な書込み処理はそのファンネルファイルに記述しています。
そして、Gears of Dragoon〜迷宮のウロボロス〜のSSGについても(このSSGはRPG体験版でもおそらく動作すると思います)、
同様にファンネルライトを使った項目は全て同じ「Abnormal program termination」のエラー表示でSpoilerALが落ちました。

どうやらファンネルライト絡みの原因ではないかと思い、検証用のSSG(添付します)を作って試してみたところ、
どうも、ファンネルライト自体がエラーの原因ではないかという結果になりました。
添付SSGでは、ファンネルライト・テスト1〜5の全てで「Abnormal program termination」のエラーが出て落ちます。
条件式がuseでもそうでなくても、また、書き込むバイト列を色々変えても同じ結果ですので。
なお、>>355と同じく、2016.12.20のパッチでは上記のエラーの例が全て正常動作します。

※添付SSGの対象プロセスはSpoilerAL.exe です

追記
必須コード(ベースアドレス確定等のためのもの)にファンネルライトを使ってるウディタ解析用SSG(リンク先のNo.10)でも上記と同じエラーを確認。
それと、メモリ使用量がかなり増えているようでして、
上記のウディタ解析用SSGでは、2016.12.20のパッチ適用時では約126MBだったのが、
更新分のパッチを適用すると、約336MBになっています。
また、こちらは結構深刻なのですが、
2016.12.20のパッチ適用時ではSSG読み込みに10秒弱しか要しなかった上記ウディタ解析用SSGが、
更新分のパッチを適用するとSSG読み込みに2分以上の時間がかかるようになっています。
元々読み込みに時間がかかるSSGではかなり厳しいです・・・

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.358)
投稿日 : 2016/12/23(Fri) 06:31
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : HZHKDJMuSkse2GztUvE61/
参照先
>>357 amateurさん
ファンネルライトの部分を修正しました。

>2016.12.20のパッチ適用時ではSSG読み込みに10秒弱しか要しなかった上記ウディタ解析用SSGが、
>更新分のパッチを適用するとSSG読み込みに2分以上の時間がかかるようになっています。
ふむぅ・・・
これは色々と変更しなければダメですね。速度とメモリの圧迫が解決するまで差し替えはないです。
どうもありがとうございました。しばらく弄ってみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.359)
投稿日 : 2016/12/29(Thu) 20:01
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : ZgqmTlfzW5VLT0g5up16t/
参照先
電卓のスキンです。
ボタンの画像と配置情報が入ってます。

※追記
2016/12/31 なんとなく追加
2017/01/01 もひとつ追加

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.360)
投稿日 : 2016/12/29(Thu) 23:06
投稿者 amateur◆kR..xsXL6RU
ID情報 : Wiir81xbBmclxqcM7/PIy0
参照先
>>359
変態紳士さん、電卓のスキンありがとうございます!
早速入れてみましたが、中々いいですね。ちょっと高級感があるというか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.361)
投稿日 : 2017/01/02(Mon) 08:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : 2Lg3g5rVNNZmw811BJrsi1
参照先
新年書込み1回目。皆さん、今年もよろしくお願いいたします。

早速ですが、ポケット★ソーサリーの体験版でSSGを作ったみたので、
よろしければどうぞ。
ウディタ汎用解析機能を付けたというより、ウディタ解析用SSGにこのゲーム専用の機能をくっつけただけですが。
ステータス関連を弄るのに、別スレにアップしているウディタ解析用SSGでは分かりにくいかと思ったので(それで改造不可能なわけではない)。

このゲームの専用スレがあるのに何でここにアップするの?と思われる方がいらっしゃるかもですが、
一言で言うと、あちらのスレにはアップしたくないからです。
あちらのスレ主さん、このゲームの改造依頼スレを立てる10日ほど前に、別ゲームの改造依頼スレを立てていらっしゃるのですが、
とある方がSSGをアップしてくださったのに動作確認報告やお礼のレスを全くせず放置したまま、
このゲームの改造依頼スレを立てています。
ちなみに、その別ゲームのSSGをアップしてくださった方は昨年一杯でこの掲示板での活動を終了(卒業)されたようです。

まあ、上記の事情は直接関係無いのかもしれませんし(実際、活動終了されるのには他の事情がおありのようでした)、
私はその件については傍観していただけで当事者ではありませんが、
私個人としても見ていて気持ちの良いものでは無かった(はっきり言って不快)ので、
その方の立てたスレにはアップしたくないと、ただそれだけのことです。

単に動作確認報告やお礼のレスが無いだけなら、もしかして何か緊急事態でも発生して掲示板を見るどころではない、
ということも可能性としては考えられますので、それだけでマナーや常識に欠けると決め付けはしませんが、
依頼してSSGを上げて貰っても放置したまま別ゲームの改造依頼スレ立てるのは、
流石に弁解の余地なしと判断せざるを得ません。
猫缶Indexの頃から同じだと思いますが、こういう掲示板は利用者の善意とマナーで成り立っている場だと私個人は思っていますので、
自分は最低限のマナーすら守らないのに他人の善意を要求するのは言語道断、ではないかと。

この件に限らず、利用規約や常識的なマナーを守らない例が最近多すぎると感じていたこともあって、
些か捻くれた真似をしてしまいました。
新年早々、こんなことはしたくないとは思うものの・・・

話を戻して添付のSSGについてですが、
所持金やパーティの座標(マップ上の位置)変更は、
可変DB →タイプのID【3】(パーティ情報) →項目の値・文字列 →データのID【0】 から可能です(他にも色々なデータあり)。
各キャラのステータス(最大HPは除く)は、可変DB →タイプのID【1】(戦闘キャラデータ)以下に。
ウディタ全般に言えることですが、セーブデータに記録されるデータは基本的に可変DBか通常変数・予備変数にあります。
ユーザーDBは職業・アイテム・スキルの基本データ等、セーブデータに記録されないデータです。
システムDBは改造に使うことはあまり無いと思います(マップの名称はここのタイプID【0】に必ず?あるようですが)。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.362)
投稿日 : 2017/01/02(Mon) 21:15
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : /vzOaam.AdqcEPzPnBqw4/
参照先
>>361 amateurさん

・利用規約を守らなかった場合
・スレ主ががお礼のコメントをしないまま次のスレを立てる

こういった場合には何かしらの制裁を加えたほうがよさそうな気がしてきました。

仏の顔も3度(まで)ともいいますし、
私が運営しているサイトで上記の行為を3回繰り返した時点で
該当IPアドレスをアクセス禁止にすることを検討します。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.363)
投稿日 : 2017/01/03(Tue) 01:05
投稿者 amateur◆kR..xsXL6RU
ID情報 : 74BQ/W30sWEy3QmX.BXkv/
参照先
>>362 管理人さん
日ごろ掲示板の管理運営お疲れ様です。
ゲーム改造に興味のある私たちに交流の場を提供してくださって改めて感謝いたします。

>>361に書いたのは私個人の愚痴みたいなものですので、特に管理人さんにご対応を求める意図等はありませんでしたが、
わざわざご覧下さってご検討までしていただいているようで有難うございます。
・・・大人気ないというか捻くれたことを書いた(やってしまった)なと少し後悔も・・・

できれば楽しくゲーム改造について情報交換等したいですし、
あまりギスギスした場にはなってほしくないとは思いますが・・・(そうならないためにマナーが大事なわけですけど)
SSGやツール等をアップしてる人が嫌な思いをしない方策も必要かもですね。
お礼のレス等がなくても頓着しないという人も中にはいるのかもですが、
>>361に書いた、年末で活動終了された方はそうでは無かったですし・・・(一度苦言を呈されているのを見ました)
もしかしたら、黙って去っていった人も猫缶Indexの頃から少なくないのでは、と思うと・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.364)
投稿日 : 2017/01/09(Mon) 18:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9FKS6Lf/tw/U9UWTQcaS51
参照先
Unityの文字列書換えについて、Venus Blood-RAGNAROK-(SLG体験版ver2)のSSGを書いていて気付いたことをメモ的に書いておきます。

少し前にSpoilerAL修正パッチで追加されたアドレス演算子"wcslen::"を使うと、
wcslen::(アドレス)と指定したアドレスにあるUNICODE文字列の文字数(終端文字列となる0000は含まない)を返してくれますが、
ダブルリストで文字列を書き換える場合、ダブルリストの処理内容を記述したリストファイルに、
下記のように書くことで文字数も同時に書換え可能です(ファンネルライト使う必要なし。もっともダブルリストにファンネルライトは動作しませんが)。

,(文字列の開始アドレス)=(書換え後の文字列に相当するバイト列),_(文字列の文字数のアドレス)=$4 wcslen::(文字列の開始アドレス) $$

上記の処理で、文字列の書換え→文字数の書換えの順番に書かないと、
文字列書換え後の文字数にならないので注意が必要です

もう一つ、最近SpoilerAL修正パッチでアドレスネーミングに追加された新書式「fmt」を使うと、
 _fmt, _wcslen::(文字列の開始アドレス), 4,num ,??,%d
のように書けば、アドレスネーミングで該当文字列の文字数を表示させることが可能です。(文字数のアドレスの値と比較して文字数の書換え忘れのチェックもできる)
「_fmt」は、従来のアドレスネーミング「_mem」のようにアドレスから値を読み込むのではなく、
 _fmt, 値, (以下はオプションで異なる)
の「値」(アドレスコーディング使用可)を直接(またはその値に応じてリストの文字列を)表示させることが可能です。
(詳しくは変態紳士さんが作成してくださったHowToSSG差分のアドレスネーミングの箇所を参照)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.365)
投稿日 : 2017/01/15(Sun) 08:22
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : wiV1gw0vQHsY9cKSTlNLa/
参照先
SSGファイルのインデントを変更するツールです。

※追記
2017/01/15 ファイルを間違えていたので修正
2017/01/16 エスケープシーケンス「\」による行の分割に対応
2017/01/17 分割行のインデントを変更
2017/01/18 修正パッチの分割行の仕様をC言語に合わせ、こちらも変更
2017/01/19 全角スペースまで削っていたので、SpoilerALの解釈が出来るだけ変わらないように修正
2017/02/01 [: [. [~ で始まる行を含むグループをインデントの対象にしていたので修正、[/script]以降をインデントの対象から除外

以下のように書けば連続した文字列の表現になります。
―――――――
[subject]項\
目:dir
―――――――
分割行のインデントは、分割された行の先頭が半角の空白文字ならインデントを調整するようにしました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.366)
投稿日 : 2017/01/15(Sun) 16:40
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9gobaP0g3C8A9VOgd2zFK1
参照先
>>365
変態紳士さん、提供ありがとうございます。
早速DLしてみたのですが、これはSpoilerALの修正パッチでしょうか(最新版?)

あと、今ごろ気付いたのですが(遅過ぎ)、>>359の電卓のスキンが追加されていたのですね。
雑談版に書いた事情で最近漸く復活したメインPCの方のSpoilerALにも適用させていただきました。
どれもいい感じなので、どれを使うか迷いますね(時々入れ替えようかな)。

追記
変態紳士さん、インデント変更ツールありがとうございます!
早速試してみましたが、インデントが滅茶苦茶だった件の私の書いたSSGが見事に(インデントだけは)綺麗になりました。
このツールを使えば、適当に書いてても後からインデントを整えられますね。
綺麗に見やすく書く才能が壊滅的な私には有り難いツールです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.367)
投稿日 : 2017/01/19(Thu) 23:36
投稿者 amateur◆kR..xsXL6RU
ID情報 : rDrWR.tVTce44Vo9TzM4//
参照先
今自分用に作ってるSSGで、一箇所だけポインタ等でどうしてもアドレスを記述できない部分があり、
仕方なく、今まで使ったことのない[adjustment]のdialog補正で書いてみました。
何人かの方が使用されているのを見たことはあるのですが、
今まで必要な状況に遭遇しなかったので自分は使ってなかったのですけど、
これはある意味、SSGでアドレスを書く際の最終手段ですね。

同じ[adjustment]の「search」は、検索するバイト列をSSG作者が書いておくものですが、
ダイアログ補正は、HowToSSGに書いているとおり、検索するバイト列(を確定するための情報)をSSG使用者に入力してもらうというものですね。

例えば、RPGでよくあるパターンとして、
現在HP、最大HP、現在MP、最大MP、という順に4バイトごとに値がメモリ上に並んでいる場合、
うさみみ等で検索する場合、「検索・比較単位」を4バイトにして「(現在HP値) (最大HP値) (現在MP値) (最大MP値)」とシーケンス検索すると思いますが、
ダイアログ補正ではこれと同様に、SpoilerALでサーチ時に表示されるダイアログに、
ユーザーに上記の値を入力してもらって、その入力値に応じたバイト列でSpoilerALがサーチし、
サーチ結果の補正値を適用してアドレス補正を行う、というものですね。
この場合、ダイアログ補正のADJファイルには、下記のように書くことになると思います。
-------------
[group]ADJファイル
[val]*.*.*.*.
[input]キャラの現在HP:calc, no, 0, 0x7FFFFFFF
[input]キャラの最大HP:calc, ok, 0, 0x7FFFFFFF
[input]キャラの現在MP:calc, ok, 0, 0x7FFFFFFF
[input]キャラの最大MP:calc, ok, 0, 0x7FFFFFFF
[/group]
-------------

実はHowToSSGを読んでもよく分からない箇所があり、
七星さんがAGE汎用SSGでダイアログ補正を使っていらっしゃったので、
実際に書く際はそれを参考に書いたのですけど。

サーチ結果が複数あったら全部試してもらうしかないとか、
サーチ結果を一つにするために入力必要な項目を増やすと面倒になるとか、
補正値を適用しても正しくアドレス補正されない項目があるときはどうするか(ダイアログ補正を複数使うとそれだけ使用する側が面倒)とか、
 [input]名称:string, 未入力の可否, 最大文字数, 末尾にNULL付加
と書いて、文字列を入力してもらう場合、現状ではANSIでしかサーチできず、
「末尾にNULL付加」に「unicode」と書いてもUnicode文字でのサーチはできないよう(ANSIのバイト列でサーチされてしまう)等、
色々問題はあるのですけど、一応こういう手法もあるのだと分かって収穫だったと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.368)
投稿日 : 2017/01/20(Fri) 23:25
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : wiV1gw0vQHsY9cKSTlNLa/
参照先
サクラエディタでSSGをスマートインデントするためのプラグインです。
というか、サクラエディタ使ってないです・・・
なのでプラグイン云々はグーグル先生にお聞きください。

続きはEmEditorや秀まるおエディタでも・・・
秀丸ってマクロだけでプラグインは無かったような?

>>367 amateurさん
[input]のstringにunicodeのバイト列が入るようにしておきました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.369)
投稿日 : 2017/01/20(Fri) 23:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : PgpE1MxbRPPLkWlo9p3G71
参照先
(以下はゲーム改造には直接関係ない話ですので、興味ない方はスルーしてください)

天秤のLa DEA。のスレの件でお騒がせ・ご迷惑をおかけして申し訳ありません。
他の掲示板利用者の方々にはお目汚しでした。(知らないよという方はスルーしていただければ。あのスレを読んでも不快になるだけでしょうから)
実は、あのゲームのSSGが元々アップされていた猫缶Indexの該当スレを私は当時リアルタイムで見ていて(私はROMっていただけの傍観者)、
そこで起こったトラブルのことが心に残っていたこともあり、やり過ぎてしまったかもしれません。

覚えていらっしゃる方もいるかもですが、当時の概略を述べると、
あのスレでは複数の方がSSGをアップしたり解析情報を補完し合ったりしていたのです。
しかし、とある方の作成されたSSGの内容を、別のSSG作者の方がご本人に無断で流用してしまい、
流用された側のSSG作者の方が、流用した方に苦言を呈されたのです。
流用した方のSSG作者の方はそれを受けて謝罪され、SSGからも流用部分を削除されたのですが、
この話には実は続きがあります。

その後、流用された側のSSG作者の方を名指しで、非常に無礼な言葉で批判した愚か者がいたのです。
「あいつ(上記SSG作者の方を呼び捨てで)が文句なんか言うから雰囲気が悪くなった」云々(正確には覚えてないですが、大体こんな感じだったかと)
その無礼な愚か者は勿論、「名無し」の類いの捨てHNでした。
そして、その後、流用された側のSSG作者の方は(私が知る限り)二度と掲示板に書き込みしたりSSGをアップすることも無くなりました。
特にその愚か者に苦言を呈したり、「引退宣言」をすることもなく、黙って消えていかれました。
消えられた、流用された側のSSG作者の方は、かなり高度なSSGを作成されていた方だったのですが・・・
実際のところ、流用されたこと自体が「引退」の原因だったのか、
それとも、「愚か者」の暴言が原因だったのかは分かりません。
二つの原因の合わせ技でやる気を無くされたのかも知れません。

しかし、私はもう一つ原因があったのかも知れないと思っています。
上記のトラブルにはもう一つ重要な事実があるのですが、
その「愚か者」の暴言を、他の利用者が誰も咎めず、全員スルーしてしまったのです。
もしかしたら、その引退されたSSG作者の方は、誰も暴言を咎めない他の利用者や掲示板全体に愛想が尽きたのかもしれない、
私の頭にはそのことがずっと残っているのです。
なお、当時は2014年で、猫缶Indexの管理人さんが一切掲示板に書き込みをしなくなって既に何年も経っていました。
昔は猫缶Indexの管理人さんが結構、マナー違反した利用者を厳しく叱責したり、フォローされていたのですが、
管理人さんが一切そういうことをしなくなってから、猫缶Indexのマナーは下落する一方で、
2015年1月に自然消滅する直前には、明らかな荒らしが我が物顔で跋扈する場に成り果てていました。

マナー違反を一々咎めるのは大人気ない、そう考える方もいらっしゃるかもしれませんが、
私はそうは思いません。
マナー違反を放置すると、マナーや利用規約など守る必要はないんだという風潮が掲示板に蔓延し、
まともな人が寄り付かなくなる。そう思います。
少なくとも、2ちゃんねるのように暴言が平気で飛び交い、誰もそれを咎めないような無法地帯のような場に、
私はSSGをアップしたりする気にはなりません。掲示板を覗くことすらやめるでしょう。
まして、苦言を呈した利用者に逆ギレして暴言を吐くとか言語道断だと思います。
が、それを誰も注意しない、傍観する、それはマナー違反を認めたのと同じでしょう。

私もそうですが、人間は弱い生き物です。他の人が平気でマナー違反をしていて咎める声もないと、
自分もそれでいいか、と周りに流されてしまいます。
「赤信号、みんなで渡れば怖くない」これは人間社会の悪い真実を的確に示していると思います。

あの時、傍観せず誰かがほんの少しの勇気を出して愚か者を咎めていれば、と後悔しても遅いです。
管理人さんに任せれば、と思われる方もいらっしゃるでしょうが、
猫缶Indexの管理人さんはそういう管理行為は途中で放置、
去年夏に閉鎖された臨時掲示板の管理人さんは多忙で毎日チェックするのは難しそうでした。
この掲示板の管理人さんも、ここ以外に複数のサイトを運営されていますし、
全てのスレッドのトラブル対応を、管理人さんに全部任せるのは負担を押し付け過ぎではないでしょうか?

長過ぎる話でしたが、私の考えは以上です。
興味のない方には申し訳ないですが、冒頭に書いた別スレの件もあり、
一度自分の考えは書いておいた方がよいと思い、敢えて書きました。
まあ、上記のような事情等があるからといって私の言い過ぎや余計な一言等が全部正当化されるとも思っていませんので、
改めるべき点はあるとは思い、反省しています。今後は注意するにしてももう少しマイルドにと・・・
実は、とある方から苦言をいただく前に、自分でもちょっと言い過ぎかな、と思わないでも無かったので。
注意されて(的外れの)無礼・暴言を返すというパターンが、上記の昔の話を思い起こさせて(奇しくもそのゲームのSSG絡みだった・・・)・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.370)
投稿日 : 2017/01/21(Sat) 00:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : PgpE1MxbRPPLkWlo9p3G71
参照先
>>368 変態紳士さん
>[input]のstringにunicodeのバイト列が入るようにしておきました。
ありがとうございます!
早速試しましたが、unicode文字列でサーチ可能になっていました。
わざわざ>>367を読んでいただいて、対応までしていただき感謝です。

それと、サクラエディタでSSGをスマートインデントするためのプラグイン、
これもありがとうございます。サクラエディタをメインに使ってるので、有り難いです。
これから試してみます。
他にも色々エディタがあるようなので、使ってみようかなと。
自分は、使い慣れたものから乗り換えるのが億劫で、
どうしても必要な理由でもないと、中々新しいのに変えられないんですよね・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.371)
投稿日 : 2017/01/21(Sat) 01:29
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : wiV1gw0vQHsY9cKSTlNLa/
参照先
>>369 amateurさん
私も天秤のLa DEAのスレを眺めていましたが・・・
アレは意見を募らない方が良かったと思います。

後に荒れていた別のスレッドは大人数で罵り合うという、
どこかの国の何も決まらない国会みたいになってました。

話題として2chがチョイスされるのも微妙ですが、
日本のインターネット(掲示板において)の特徴は匿名が基本で、海外は登録制が多いようです。
2chを始めた人(創業者)はジャーナリストにタン壺と批判され、
それを自虐ネタとしてサイトの入口にタン壺の画像を張り付けたり、
ある意味シャレがあり別の意味では風変りな人でした。

ちなみに、タン壺というのは肺結核が不治の病だった頃、咳で病気が伝染するとウワサが広まっていて、
それで駅のホームにはタンやツバは所定のツボに入れるようにと設置されたそうです。

まぁ、日本の匿名性というものは色々と破綻していますが、
アジアの諸外国ではインターネットを検閲する国もあるくらいですから、
今更ながら、この国内事情に利点があっても良いのではと思ったりです。

マナー云々に関しては、雲隠れしちゃいますからね。
子供が多かった昭和のオッサンは、電車の中で走ると怒鳴るのが基本でしたが、
今は子供の人口も少ないので軍隊教育みたいなのは無いです。
でも塾通いの子が多いので理系の人は優秀かもです。

時代が変わったので近所の銭湯も何十年か昔に無くなりました。
テルマエロマエも怒っている事でしょう。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.372)
投稿日 : 2017/01/21(Sat) 02:04
投稿者 nana◆rg/HHpKwreg
ID情報 : mBKT2Naj2q/wV0FBZaMuf0
参照先
>>369 amateurさん
マナー違反を咎めること自体は悪いとは思わないけど、スルーすることが悪いみたいな感じに言われるのはちょっとどうかなって思う。

猫缶の当時のことは僕は知らないけど今回の発端になったスレのようなああいった人や暴言吐いてくるような人に下手に注意したり等反応(特に第三者が)すると更に暴言を吐いて来たり煽ってきたりして、またそれに反応する人が出たりしてといった感じで荒れる可能性が高いというかネットでは(僕の印象では)そういう傾向が強いと思うんですよね。

実際、結果論ですが今回もご自身が仰ってる通り過剰反応してしまった結果僕も含めてこうして話が広がってしまってますからね。

あまり文章にしたり伝えたりするのがうまくないので誤解されたら申し訳ないですが、マナー違反に対して注意することが悪いといってるわけではないです。
ただ、注意する際に今回の場合だと最初の1回目で止めてそこに(たとえ的外れであろうとも)反応があってもそれにさらに反応し返すみたいなことはしなければよかったんじゃないかな?と思っただけです。

あと言い逃げになってしまいますがよほどのことがない限り僕は今回の件にこれ以上レスしたりすることはありません。

正直上記にある通り僕自身うまく言葉(文章)にして伝えたりできないのと、スルー=悪いみたいに書かれてるように感じたのと「赤信号、みんなで渡れば怖くない」という言葉を出してましたので、
「触らぬ神に祟りなし」という言葉もあり時にはスルーすることも大事じゃないですか?って思ったのです。
リアルだと周りの人間なり警察なりが物理的に仲裁などに入ることができますが、ネットではそれができないので一度ヒートアップすると際限なく広がる可能性もありますからね。

僕も長々と失礼しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.373)
投稿日 : 2017/01/21(Sat) 03:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : PgpE1MxbRPPLkWlo9p3G71
参照先
>>371 変態紳士さん
こんな話にまでレスしていただいて恐縮です。(お騒がせして本当に申し訳ありません)
荒れ過ぎるのもそれはそれで問題なので、難しいですね。
猫缶Indexの時は、最終的な調停者(の権限を持っていた)の管理人さんが事実上不在だったので、
争いがヒートアップすると際限が無くなったのでしょうね。

2ちゃんねるに関しては、私も全否定するつもりはなく、見る側に耐性があれば、
むしろ有用な場でもあると思います。匿名でなければ書けないこともありますからね。
気兼ねなく本音を書けるっていうのも発想を変えれば長所なのかもです。
ただし、この掲示板のような場とは根本的に相容れない性格の場所だとは思いますが。(使う側も二重人格的に意識を入れ替えるべきかも)

>マナー云々に関しては、雲隠れしちゃいますからね。
私も大概齢ですから、時代錯誤的というか、世代間ギャップとかもあるのでしょうね。
私も子供のころは、近所のオジサンに怒鳴られたとか普通にありましたし。
(しかもどう考えても理不尽に。子供の喧嘩に親が出しゃばるような)

>>372 nanaさん
>「触らぬ神に祟りなし」という言葉もあり時にはスルーすることも大事じゃないですか?って思ったのです。
それも分かってはいるのですが。
明らかな荒らしと判断すれば私も一切相手にはしないのですけど。
前の臨時掲示板で一度その手の荒らしに絡まれまして。無視していたら当時の管理人さんがその人をBANしてくださいました。
まあ、今回の例の人は、荒らしとまでは言えそうにない(少なくとも確信犯的な荒らしではない)と思い、
つい続けてしまったという次第で・・・

あと、「触らぬ神に祟りなし」というのは、個人レベルの短期的な自己保身術としては有効ですが、
それを一人残らず全員が実践すると中長期的には確実に全体(今回の場合では掲示板)の荒廃を招くと思います。
経済的不況だからといって倹約を国民全員が実行すると、経済全体がますます悪化しますが、
個人レベルの保身術が、必ずしも全体の状況改善には寄与せず、逆に全体を悪化させることもあるという話ですね。
リアルだと身体的危険(いいがかりで殺人とかもある)もあるので個人レベルで勇気を要求するのは酷ですが、
ネット上だと別に命の危険はないので、むしろリアルよりは注意したりの危険性は低いと思いますけどね。(リアルだと本当に怖いですから・・・)

>リアルだと周りの人間なり警察なりが物理的に仲裁などに入ることができますが、ネットではそれができないので一度ヒートアップすると際限なく広がる可能性もありますからね。
その役目はこの掲示板だと管理人さんの仕事なのでしょうが、
多忙でそれどころではないとかあるでしょうし、いつも管理人さん頼みというわけにもいきませんね。

ちなみに、前の臨時掲示板の管理人さんは、かなり厳しい方でして(猫缶Indexの管理人さんも管理されていた当時は相当厳しかった)、
注意事項を明らかに読んでいないとか、ネット検索で探しもせずに書き込んだとの理由で依頼レス削除したり
悪質なのは容赦なくアクセス禁止処分等を下していました。
過去ログにある臨時板の管理スレを読めば分かるかと思いますが。
思えば、惨憺たる有様になっていた猫缶Index末期の惨状を踏まえて、敢えて厳しい方針をとっていたのかもしれません。
個人的にはちょっと厳し過ぎるのでは、と思うこともありましたが・・・

いずれにしても、nanaさん、書き込みとご意見、ありがとうございました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.374)
投稿日 : 2017/01/21(Sat) 23:23
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : wiV1gw0vQHsY9cKSTlNLa/
参照先
サクラエディタ用のSSGファイルの設定です。

以下を含んでいます。
・スマートインデントのプラグイン
 [back]や[io_fep]の後に改行するとインデントが形成されます。
・項目の名称やキーワードの色付け
・入力補完

既存のSSGのインデントを変更したい場合は >>365 を使ってください。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.375)
投稿日 : 2017/01/22(Sun) 18:34
投稿者 amateur◆kR..xsXL6RU
ID情報 : vGOHKTEe3.1tkOP83BsMV0
参照先
>>374 変態紳士さん
ありがとうございます。
スマートインデントが機能しない?と思っていたのですが、
「設定」→「タイプ別設定」→左端の「スクリーン」タブの「インデント」→「スマートインデント」で「SSG」を選ぶと機能しました。
[subject] :dir、[io_fep]、[funnel]、[size] 等の後に改行すると自動的にインデントされるのですね。
SSG作成がさらに快適になりそうです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.376)
投稿日 : 2017/01/27(Fri) 02:20
投稿者 amateur◆kR..xsXL6RU
ID情報 : uXNDLnpwSVOHcSho4k0DH1
参照先
Javaを8 Update 121 に更新しましたが、別スレの(No.36)にアップしたJavardry THE KING のSSGはそのまま使えるようです。
jvm.dllの.data先頭からのオフセットは8u111から変わってないようなので、
上記スレの(No.31)にアップしたSSGでも(「Javaのバージョン選択」で、「8 Update 111」を選択)、
エクスポート関数を使ってベースアドレスを記述した(No.36)の分でも両方動くと思いますが。
.data先頭からのオフセットが変わってもエクスポート関数を使って書いた(No.36)のSSGが使えれば、
Javaのバージョンに左右されにくいSSGということになると思うのですが・・・
8u101以前のJavaでも動くか確認すればいいんですけど、わざわざJavaのVerを古いのに戻すのも面倒で・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.377)
投稿日 : 2017/01/28(Sat) 22:30
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : ywuVFvf1rd/Es0nZXCmhr1
参照先
>>376
>Re: 【改造依頼】 Javardry THE KING 【SSG】 (No.36)
>amateurさん

お疲れ様です。凄まじい解析方法ではないかと。
話題がこちらだと思うのでこっちへレスです。

>経路に使えそうな関数を調べる際には、
>「(ベースアドレス-0x200),(ベースアドレス)」くらいで数値範囲検索(境界ベースチェックは外す)し、
デバッガ1つで検索しているのではないかと思います。

MicrosoftVisualStudioならデバッガでナントカなりますが、
今回は日本古来から伝わる逆汗を書いておきます。(いつかレガシーだと言われそうな)

jvm.dllというファイルが対象のようですので、
ファイル1つを逆アセンブルしてしまいます。
アセンブリ言語ではアドレスではなくラベルで検索できるので見つかりやすくなります。
相対アドレスはメモリから数値を検索しても見つからないので。

1.逆汗ツールのダウンロード
以下のようなツールをgoogle先生に聞いてダウンロードします。
中には使ってないものもありますが、変わったファイルを食べさせるとお腹を壊すものが多いので数は必要です。
(たとえば kernel32.dll は解析できないツールが多かったり)

・dispe
 頑張ってインデントしてみました版
 というかアセンブリ言語が階層になるわけもなく、
 アドレステーブルにインデックスでジャンプ(C言語のswitch命令の最適化)すると変な事になる場合が多い

・DISWIN
 古いけど基本的

・DUMPBIN (Visual Studio Community:無償版)
 「Visual Studio Community」の付属品なので本体が大きい
 書式はどうでもいいらしく、
 マシン語(バイトコード)を基準にしているのか、省かれる事が少ない
 関数が分かりにくい
 何でも食べる

・Object file converter (objconv)
 「Agner Fog objconv」で検索
 書式がややキレイ
 エクスポート関数も分かりやすい
 そもそもプログラミングで使うobjファイルのコンバータなので解析できない事がある

2.バッチファイルの用意
コンソールからキーボードをペチペチするのが面倒なのでバッチファイルを用意します。
--- dispe-e.bat ---
@echo off
dispe.exe -e %1
pause
--- EOF ---

--- DISWIN-s.bat ---
@echo off
DISWIN.EXE -s"%~n1" %1
pause
--- EOF ---

--- dumpbin-disasm.bat ---
@echo off
dumpbin.exe -DISASM %1 >"%~n1.asm"
pause
--- EOF ---

--- objconv-fmasm.bat ---
@echo off
objconv.exe -fmasm %1
pause
--- EOF ---

3.そして逆汗
後は ???.exe と ???.bat を同じ場所に置いて対象をバッチファイルにドラッグアンドドロップします。
コンソールが表示された後に出力されたasmファイルをテキストエディタで開きます。
dllファイルなどアドレスが違うことが多いですが、それは相対アドレスとして計算します。
大きなものでは数百メガのテキストになるのでマトモなエディタで開きます。
後は検索すると色々出てきます。

他にも逆汗ツールは沢山あります。
プログラムに組み込むライブラリもあるので自作も楽です。

※注意事項
出力されたファイルからコピペしてモジュール(.exeや.dllなど)を作る事をリバースエンジニアリングと言って、
これは法律が禁止している事ですので開発環境にコピペしてはいけません。

※追記
jre1.8.0_121 (javacpl.exe - バージョン8更新121, 1.8.0 121 b13) で確認してみました。

[:MName::jvm.dll::_JVM_FindPrimitiveClass@8 + 0x58:] + 0x3C
[:[:MName::jvm.dll::gHotSpotVMStructs:] + 0x1378:] + 0x3C

この2つのアドレスは一致するようです。バージョンの違いによるズレは確認していません。
gHotSpotVMStructsというのは名前の通りなら構造体(複数形なので構造体の配列)ですがズレるかどうかまでは分かりません。
逆汗はobjconvで出力してみましたが88.3MBになりました。(巨大なので捨てました)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.378)
投稿日 : 2017/01/28(Sat) 23:05
投稿者 amateur◆kR..xsXL6RU
ID情報 : K0aMa.1t9tob/KmLGyuGy/
参照先
>>377
変態紳士さん、レスありがとうございます。
ご推察のとおり、デバッガは1つ、うさみみしか使っていません(汗)
>ファイル1つを逆アセンブルしてしまいます。
そんな方法が・・・しかも色んなツールがあるんですね。

>大きなものでは数百メガのテキストになるのでマトモなエディタで開きます。
・・・今使ってるエディタで開けるか心配になってきました。
以前、数メガ程度のテキスト開くだけで物凄く時間がかかった経験があります・・・(マシンスペックが今のPCより激低だったからかもですが)

とりあえず、教えていただいた方法で色々試してみようと思います。
詳しく解説くださってありがとうございます。

追記;
[:[:MName::jvm.dll::gHotSpotVMStructs:] + 0x1378:] + 0x3C

私の方でも確認しましたが、確かに _JVM_FindPrimitiveClass@8 の方と一致していました。
一つのベースアドレスを特定するためのエクスポート関数は一つとは限らないんですね。

[:MName::jvm.dll::gHotSpotVMStructs:] + 0x1378
このアドレスが何か見覚えがあるな(ポインタが同じような並びで延々と続いていて)、
と思ったら、
[:[:MName::jvm.dll::gHotSpotVMStructs:] + 0x1378:] + 0x3C

[:[:MName::jvm.dll::gHotSpotVMStructs:] + 0x1398:]
も結局、同じアドレス(ベースアドレス)となるようですね。

[:MName::jvm.dll::gHotSpotVMStructs:] + 0x1398
このアドレスは、jvm.dllの.data先頭からのオフセットが0x11B60で、
エクスポート関数を使う前のSSGで使っていたアドレスでした。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.379)
投稿日 : 2017/01/29(Sun) 02:19
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : ywuVFvf1rd/Es0nZXCmhr1
参照先
>>378 amateurさん
MName::jvm.dll::gHotSpotVMStructs
↑これはエクスポート関数ではなくて共有変数ですね。(滅多に使わないけど、たぶん)
コード領域はコンパイルの設定だけで意図せず(開発者が把握することなく)変わりますが、
データ領域をエクスポートする場合は外部から参照する事を前提にしているので、
仕様が変わらない限り使えると思います。(コンパイルではズレない)
ただし、その仕様が非公開な内部仕様だとすればズレるどころかエクスポートの名称さえ無くなる事も有りえます。
それと先頭アドレスから遠いのが気になったり。
HotSpotという名称がかなり気になったり。(HotSpot怖い・・・)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.380)
投稿日 : 2017/01/29(Sun) 02:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : 448CduWhoDFLdyMJYe2Ve/
参照先
>>379 変態紳士さん
共有変数というのですか。(ググっても意味はよく分からなかったですが・・・)
そういえば、MName::jvm.dll::gHotSpotVMStructs は、コード領域ではなく、.dataにありますね。
だからコンパイルではズレない、ということでしょうか。
>エクスポートの名称さえ無くなる事も有りえます。
絶対にズレない、というわけではないのですね。それでも他の方法よりズレにくいだけでも助かります。

先頭アドレスから0x1398と遠い、これは確かに気になるというか、
最初にこのアドレスを発見した時、この領域(ポインタが延々と並んでいる)の先頭はどこなのか分かりませんでした。
なので、SSGには.data先頭からのオフセットで書いたのですけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.381)
投稿日 : 2017/01/29(Sun) 15:47
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : ywuVFvf1rd/Es0nZXCmhr1
参照先
>>380 amateurさん
補足になりますが(補足の方が長かったり・・・)

>そういえば、MName::jvm.dll::gHotSpotVMStructs は、コード領域ではなく、.dataにありますね。
>だからコンパイルではズレない、ということでしょうか。

上手く説明できないのでプログラム寄りの話になってしまいます。

まず構造体(structure)というものですが、こういう書き方で型を定義します。
typedef struct {
DWORD x;
DWORD y;
DWORD z;
} Matrix3D;
とあるアドレスの先頭は、変数xで始まり、4バイト目にyが存在し、8バイト目にzがあるよ。
と各4バイトのxyzが並んでいるという定義です。
これが配列になると複数形でxyzxyzxyzと何個か並ぶ形式です。

それで、エクスポート関数と同じ仕組みで共有変数にするという事は、
変数を別の.exeや.dllが参照することになります。
外部からアクセスする手順として同等か互換性のある構造体を用いなければ読み取れません。
この仕様があるはずですのでエクスポートされたデータ領域は崩れません。

ただし、注意しなければならないのは仕様書やドキュメントを一般公開していない場合、つまり内部仕様です。
言ってしまえば開発している会社の社内仕様のようなもので、いつ変更しても問題が無く、
仕様を廃止してもユーザーからの苦情は受け付けないというものです。

しかしコード領域は計算の順序を変えるだけでコンパイラは実行速度を求めた最適化を行い、
マシン語と高級言語を照らし合わせれば暗号化されていると感じるくらい自在に変化します。
対してエクスポートされるデータ領域は型が変わってしまえば不具合でしかないので固定された形式になります。

>HotSpot
それと、こちらも知っておいた方がいいかと思います。
リンクは貼りませんので「ウィキペディア HotSpot」でグーグル先生に聞いていただきたいと思いますが、
JavaはVM(VirtualMachine:仮想マシン)と呼ばれ、これは実行時に最適化を図るJITという仕組みで構成されています。

その中でもHotSpotは環境依存となる可能性があり、たとえば1万回繰り返す命令を発行した際に、
100回くらいで「残りも多いし疲れた」となれば、メモリ上で環境に適した速度向けの「コンパイル」を行います。
その後の9900回は高速に実行されるので中間言語が遅くなる弱点を補う事になります。

このHotSpotが特定の回数で最適化という条件ならいいのですが、
もしクロックに依存する実行時間だったり、メモリの空き容量が条件だったら、
コンピュータの構成次第で実行方法が変わり、HotSpotの条件も環境で変わってしまいます。

依存させないためには実行環境のメモリではなく、モジュールを逆アセンブルするなどして、
初期値から書き換えられる事がなく変動しない変数を使う必要があります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.382)
投稿日 : 2017/01/29(Sun) 20:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : 7WD8G7AfhafWkXtCDDiaK/
参照先
>>381 変態紳士さん
補足ありがとうございます。物凄く勉強になります。
データ領域とコード領域の違い、共有変数、何となくイメージが掴めたような気が(あくまで何となくですが)
MName::jvm.dll::gHotSpotVMStructs のアドレスからポインタらしきデータがズラーっと並んでるのが構造体なんでしょうね。
それを外部の.exe等から参照するようになってる(だから共有変数と呼び基本的にズレない)、と・・・

HotSpotをググって説明を読みましたが、何か凄そうな、Javaの肝のような技術みたいですね。
でも、
>コンピュータの構成次第で実行方法が変わり、HotSpotの条件も環境で変わってしまいます。
これは、ゲーム解析という観点で考えると確かに厄介ですね・・・
Javaでは特に環境によって変動しない変数を使う必要がある、と。
面倒ですが、Javardry以外ではJavaを使ってるゲームは私は他にあまり見たことがない(ふりーむ!で探すと少ないながらも一応あるみたいですが)のが救いでしょうか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.383)
投稿日 : 2017/01/30(Mon) 23:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : zHT4TWA0mS2mFfIVx4h1v0
参照先
自分用に作ったSSGを使ってみて気付いたのですが、SSGの「リスト抽出」機能(HowToSSGの「ファイル指定」の箇所に記載)について、
SpoilerALを起動後最初にSSGを読み込んだ時点では正常にリストを表示できていないような・・・
ただ、一度SpoilerALを起動してSSGを読み込んだ後、
「ファイル」→「SSGファイルの再検索」で同じSSGを再度読み込むと(実際には同じSSGの再読み込みには失敗する場合があるのが難点ですが)、
抽出したリストが正常に表示されるようです。(SpoilerALを終了して再起動では駄目)

一応、検証用のSSG(対象プロセスはSpoilerAL.exe)を添付します。1個目が6.2用、2個目が6.1用です。
なお、SpoilerAL修正パッチを削除して6.1用のSSGを使っても結果は同じでしたので、デフォルトのSpoilerAL6.1自体がこういう仕様っぽいですね。

私はリスト抽出機能を使用したのが今回が初めてで最近気付いたのですが、もしかして以前から知られていた仕様なのでしょうか。
対処法ですが、内容自体は変えずにファイル名(と分かりやすいようにSSGの[title]部分も)だけを変えたSSGを用意してから、
SpoilerAL起動→元のSSG読み込み→「SSGファイルの再検索」でファイル名を変えた同じ内容のSSGを読み込み、で問題なく使用できますね。
(前述のように、同じSSGファイルの再読み込みには失敗する場合があるので、内容は同じで別のSSGファイルを用意した方が確実です)

しかし、滅多に使わない機能を使うと、知らなかった仕様(HowToSSGにも書いてない)に出くわすものですね・・・
このスレに何回か書き込みましたが、[adjustment]のアドレス補正についても使い出してから色々と妙な仕様に遭遇して気付いたことが多かったですし。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.384)
投稿日 : 2017/01/31(Tue) 00:35
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : oxOp0zjzZ5c9dzgfuyruD/
参照先
>>383 amateurさん
確かにHowToSSGから見ればバグですね。
しかし、コード上は回避できるものではありません。

「ファイル指定」の部分は静的に解釈されます。
このスタティックな解釈はファイルなりメモリなりをバッファに溜め、
項目が数百あっても一度読み込んだものはバッファを再利用する仕組みです。

ロード時のバッファを消す仕組みなら可能ですが、
それも書式としては微妙だと思ったりします。

※追記
以下が規定の書式です。
――――――――――――――――――――――――――――――――――――――――
_mem/ アドレス/ 1行の最大文字数/ 行数/ ステップサイズ/ 終端バイト列/ エラー時の代替え文字列
_mem/ アドレス/ サイズ/ 行数/ ステップサイズ/ num/ エラー時の代替え文字列
_mem/ アドレス/ サイズ/ 行数/ ステップサイズ/ num_big_e/ エラー時の代替え文字列
――――――――――――――――――――――――――――――――――――――――

この「エラー時の代替え文字列」の後ろに「/ キャッシュ」を付け、
cache/uncache を入力(uncache以外は規定の処理)
というのを考えています。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.385)
投稿日 : 2017/01/31(Tue) 01:37
投稿者 amateur◆kR..xsXL6RU
ID情報 : zHT4TWA0mS2mFfIVx4h1v0
参照先
>>384 変態紳士さん
おお、ご解説ありがとうございます!
やはり、これがリスト抽出(というか「ファイル指定」全般ですか)の元からの仕様なのですね。
>>383に書いてから自分の環境の問題ではないかとも思えてきたので、仕様と分かって少し安心しました。(書いてみて良かった・・・)
書式追加まで考えてくださっているようで恐縮です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.386)
投稿日 : 2017/02/01(Wed) 22:51
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
>>385 amateurさん

No.384の修正を行いました。
内容はHowToSSGの差分を参照してください。

尚、STLのstd::mapの動作をアセンブリ言語で実装することになりましたので微妙に大きな内容です。
(C言語の1行がアセンブリ言語だと(手書きで直して処理を半分以下に)最適化しても600行を超えたり、というかSpoilerALはBCB6なので・・・)
なので、同じ日付でも何度か修正してます。

ついでにインデントのツール(実行ファイルの方)を修正しておきました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.387)
投稿日 : 2017/02/02(Thu) 02:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : wZPCQdvbU1/0NXbE3H8H0.
参照先
>>386 変態紳士さん
ご対応ありがとうございます!
SSGの再読み込みしなくても、最初から抽出したリストが正常表示されるようになりました。
需要が少なそうな機能にまで対応くださって感謝いたします。
アセンブリ言語で600行超え・・・またしても大変なお手間を取らせてしまい申し訳ないです・・・

それと、インデントのツールの修正ありがとうございます。
こちらも有り難く使わせていただきます(今も使わせていただいてます)。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.388)
投稿日 : 2017/02/05(Sun) 06:59
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
修正パッチを更新し[repeat]に「$Idx」を追加しました。
現在のループへアクセスするには「$Idx」を使用します。
階層でアクセスするには「$Idx1, $Idx2, $Idx3, ...」を使用します。
上位のループへアクセスするには「$FwdIdx1, $FwdIdx2, $FwdIdx3, ...」を使用します。
サンプルは"source\test\__idx_test__.ssg"です。

ついでに、全ての[define]をグローバル化([/involve]の下か[main]グループのヘッダに配置)すると
メモリは極端に少なくなるし展開速度も速くなります。
サンプルでは1万件の項目が10MB程度、1秒程度で読み込まれます。

あとツリー項目はメモリを解放しないっぽいのでSSGを切り替えたらメモリは増え続けます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.389)
投稿日 : 2017/02/05(Sun) 09:05
投稿者 dipper◆LEFxdWWYR3c
ID情報 : wKqYKKtoxVhIIX59xi1YU0
参照先
>>388 変態紳士さん

毎度の修正パッチの更新ありがとうございます。
新機能も追加され、さらにSSG作成の幅が広がりそうですね……私に使いこなせるかな(汗)。
[define]は条件さえ満たせばメモリの消費を抑えられ、さらには高速化までされるのですか、素晴らしい限りです。

ただ、「SpoilerAL 6.1 修正パッチ (2017.02.05)」はリストがあると強制終了してしまうような気がします。
ためしに「__idx_test__.ssg」に下記を追加したところ強制終了してしまいました。
手短に確認しただけなので他にもあるかも知れませんが、一応報告させて頂きます。


[subject]test[ '+' _mem,0x00,0x04,list,-,ssl->flag_list,0,1 '+' ]/test/:list,0x00,ssl->flag_list,0,1

[group]flag_list
×

[/group]
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.390)
投稿日 : 2017/02/05(Sun) 17:53
投稿者 amateur◆kR..xsXL6RU
ID情報 : T85vxf6Rfy3fuTaX01xER1
参照先
>>388 変態紳士さん
新機能の追加ありがとうございます。
同梱のサンプルSSGの表示や中身の記述とにらめっこし、自分でも色々弄ってみて、何とか意味が把握できた、ような気がします。
要するに、"$Idx"は、現在のループ変数の値で、0x[!$Val!] と同等、
"L$Idx"は、[!L$Val!] と同じく10進数での出力(頭に"L"を付けると10進数で出力)

「$Idx1, $Idx2, $Idx3, ...」については、多重ループ([repeat]を多段階で使用する)する場合、
"$Idx1"が1段階(階層)目のループ変数の値、以下、$Idx2, $Idx3, ...は、2段階目、3段階目...のループ変数の値

「$FwdIdx1, $FwdIdx2, $FwdIdx3, ...」については、同じく多重ループする場合、
"$FwdIdx1"が1階層上のループ変数の値、以下、$FwdIdx2, $FwdIdx3, ...は、2階層、3階層...上のループ変数の値

「$Idx1, $Idx2, $Idx3, ...」と「$FwdIdx1, $FwdIdx2, $FwdIdx3, ...」についても、頭に"L"を付けると10進数で出力、
こういうことでしょうか。

使い方としては、多重ループ([repeat]を多段階で使用する)する場合、
1階層上のループ変数を利用する際は、([replace]を使用しないとして)
従来ですと、まず1階層上のSSRファイルの中で[define]の定義を利用して、
--------------------------------
[repeat]ssl->SSR,0,10,1
--------------------------------
[group]SSR
[define A] 0x[!$Val*0x1000!]
[repeat]ssl->SSR2,0,100,1
[undef A]
[/group]
--------------------------------
[group]SSR2
[subject]ID[!L$Val!]/現在値/_:calc, _0x400000+{A}+0x[!$Val*0x4!], 0, 0xFFFFFFFF, unsigned
[/group]
--------------------------------
こんな感じで私は書いていましたが、
追加していただいた新機能を使うと、上記は、
--------------------------------
[repeat]ssl->SSR,0,10,1
--------------------------------
[group]SSR
[repeat]ssl->SSR2,0,100,1
[/group]
--------------------------------
[group]SSR2
[subject]ID[!L$Val!]/現在値/_:calc, _0x400000+$FwdIdx1*0x1000+$Idx*0x4, 0, 0xFFFFFFFF, unsigned
[/group]
--------------------------------
こんな感じで書けそう?ですね。(上記例で"$FwdIdx1"の部分は、"$Idx1"と書いても可?)
多重ループの場合に、一々途中のSSRファイル内で[define]の定義を使う必要が無くなり、便利になりそうです。
([define]の定義式で$Valを使うと後ろを[undef]で閉じる必要があるので、よくミスの原因になっていた)

それと、質問があるのですが、"$Idx"や"$FwdIdx1"は、従来の"$Val"と同じく、静的に展開されるのでしょうか。
いずれにせよ、便利そうな機能追加ありがとうございます。


>全ての[define]をグローバル化([/involve]の下か[main]グループのヘッダに配置)すると
>メモリは極端に少なくなるし展開速度も速くなります。
成程、[define]の定義はできるだけ最初にまとめて書いておくと良いわけですね。

>あとツリー項目はメモリを解放しないっぽいのでSSGを切り替えたらメモリは増え続けます。
SpoilerALを再起動せずSSGの再読み込みを続けていると、メモリ使用量が増えていくわけですね。
こちらも気をつけたいと思います。
色々教えていただきありがとうございます。

追記;
新機能を軽く試してみたサンプルSSGを一応添付します。取り敢えずはこんな感じでしょうか。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.391)
投稿日 : 2017/02/05(Sun) 21:24
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
余裕が出来てきました、暇が無いというよりは優先順位的に後手後手な感じですが


>>388 変態紳士さん
衰えぬサポートに頭が下がる思いです、ありがとうございます
しかし__idx_test__.ssgは$Idx1と$Idx2の記述があべこべに見えるのですが…

>[define]をグローバル化([/involve]の下か[main]グループのヘッダに配置)
これについては[script]直接の子か、[script]直下から[replace]する[group]のヘッダ、
ということで良いのでしょうか?あるいは最初の[group]だったりmainという名前ですか?

静的な[!$Val!]と動的な$Idx、どちらを使うべきなのだろう…


>>390 amateurさん
_Lは下記の構文だと思いますよ、書式指定フィールドは別に有りますので
>SpoilerALにアクセスする場合は先頭に「L」を付ける必要があります。
_fmtでは関係なさそうな気がしますが、無駄が無かったりするんでしょうか
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.392)
投稿日 : 2017/02/05(Sun) 21:56
投稿者 amateur◆kR..xsXL6RU
ID情報 : T85vxf6Rfy3fuTaX01xER1
参照先
>>391 七星さん
あっ、そちらでしたか・・・ >SpoilerALにアクセスする場合は先頭に「L」を付ける必要があります。
よく考えると、$Idx等は[!$Val!]等とは違ってアドレスコーディング部分にしか使用できない(?)ようなので、
10進数・16進数のどちらで出力するかに意味は無さそうですね。
([! !]だと、項目名部分等にも使えるので、出力が10進数か16進数かの違いに意味がありますが)
フォローありがとうございます。(勘違いしてお恥ずかしい・・・)

それと、$Idx等は動的展開なんですね。
動的展開ということは、SSG読み込みに要する時間には影響しない(?)と思うので、
読み込み時間が気になる場合は、$Idx等を使った方が個人的には良さそうに思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.393)
投稿日 : 2017/02/06(Mon) 05:55
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
バグがあったので直してました。

>>389 dipperさん
すみませんです。
修正しました。


>>390 amateurさん
>それと、質問があるのですが、"$Idx"や"$FwdIdx1"は、従来の"$Val"と同じく、静的に展開されるのでしょうか。

強行軍で作ったので説明不足でした。
$Valと同じ値を使用できますが、静的展開というわけではありません。

まず、各項目がクラスになっているのでパディング領域から接続する形でプロパティを拡張します。
これは単なるメモリの拡張ですが、既にあるクラスのサイズは変更できないため面倒な動作です。
面倒だけど高速で拡張部分のメモリも断片化しません。

次に「静的な展開」と呼ばれている動作で値をプロパティにストアします。
[repeat]の階層とインデックスを保存します。

そして「動的な展開」で変数へロードします。
アドレス書式で$Idxに値を代入した場合はロードされた変数を上書きする事になりますが、
変数は揮発性(各アドレス書式単位で有効)なので問題にはなりません。

今までループ中の $Val は [define] + [undef] する必要があったのですが、
これは[define]を解釈する前の静的な展開で[define]そのものを書き換えます。
なので[define]の中に静的な変数を使用すると変動しない値に書き換えられ、
変動しないという事は[undef]する必要があります。
この[undef]が遅かったりします。(クラスとSTLの領分です)


>>391 七星さん
>しかし__idx_test__.ssgは$Idx1と$Idx2の記述があべこべに見えるのですが…
SSGだけのミスでした。本体のバグじゃなくてよかった・・・

>[define]をグローバル化([/involve]の下か[main]グループのヘッダに配置)
一番初めに読み込まれる場所です。
[involve]〜[/involve]ブロックの外が初めに読み込まれる場所のようです。
また、[main]というのは[replace]0,ssl->mainと書く場合のグループの固有名称で、
一番初めに参照されるグループの中のヘッダを指します。
実際のところはループの外なら何処でもいいです。

>静的な[!$Val!]と動的な$Idx、どちらを使うべきなのだろう…
速度に大した差は出ません。メモリはSSGのテキストのサイズ程度の違いが出ます。
静的なものは従来の書き方です。

>_Lは...
ローカルメモリを参照する指定です。
対象のプロセスが存在しない場合も表示するような意味です。


[! !] と _fmt を比べると長文になってしまうので、書式化するための構文が必要ですね。
サンプルのSSGで間違えるくらいですし、何か考えてみます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.394)
投稿日 : 2017/02/06(Mon) 21:39
投稿者 amateur◆kR..xsXL6RU
ID情報 : UoxAeoZN.eOevBgpjSZlr0
参照先
>>393 変態紳士さん
詳細な解説ありがとうございます。
追加された$Idx等は静的展開では無いのですね。
>この[undef]が遅かったりします。
そうなんですか・・・ということは、出来るだけ[undef]を使わなくても済むように、
$Idxや$FwdIdx1を使った方が良さそうですね。
パッチ更新を継続してくださって本当に感謝です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.395)
投稿日 : 2017/02/06(Mon) 23:03
投稿者 dipper◆LEFxdWWYR3c
ID情報 : wKqYKKtoxVhIIX59xi1YU0
参照先
>>393 変態紳士さん

早速の修正ありがとうございます。
無事にlist項目が使えるようになりました。

それと質問なのですが、[repeat]中に[replace]を使用すると$Idx系が機能しないのは、やはり仕様でしょうか?
HowToなどにも特に記載が無かったようですけど。

私の作成するSSGは[repeat]中に[replace]を使用しているのが多いので、$Idx系を使おうとすると一から練り直す必要が…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.396)
投稿日 : 2017/02/07(Tue) 04:12
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
>>395 dipperさん
直しておきました。

それから _fmt は長すぎるので [# #] <# #> というのを追加しました。
HotToSSGの差分でアドレスネーミングの下の方に書いておきました。
"source\test\__idx_test__.ssg" で使ってみましたのでサンプルというかコピペにいいかもです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.397)
投稿日 : 2017/02/07(Tue) 19:00
投稿者 dipper◆LEFxdWWYR3c
ID情報 : HB8A7pEwNTHFn0DYGsM3r.
参照先
>>396 変態紳士さん

修正ありがとうございます。
[replace]でも$Idxが使える様になりました。(個人的には使える様になって一安心)
それに加え新しい機能までありがとうございます。


それと私の環境下でパッチ(2017.02.07)の機能をテストした感じですと、
全ての[define]をグローバル化した状態のSSGに比べ、
[repeat]中に$Idx系を使用した[define]+[undef]のSSGは体感的に展開速度、メモリ消費はそれほど変わらない印象でした。
ただ、$Idx系ではなく$Valを使うと展開速度はかなり遅く、メモリ消費も増加しました。

一応テストで使用したSSGを添付しておきます。
もっとも、展開速度とメモリ消費を確認するために作ったのでかなりテキトーですけど…


添付ファイル1 = 全ての[define]をグローバル化
添付ファイル2 = [repeat]中に$Idx系を使用した[define]+[undef]
添付ファイル3 = [repeat]中に$Valを使用した[define]+[undef] (添付ファイル1、2に比べて重い)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.398)
投稿日 : 2017/02/07(Tue) 19:15
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
SSGの展開速度は総repeat数に依る所が大きそうなので
静的展開で[define]せずグローバル化させるのが肝ですか
時にlistへのio_fepは割に合わなく見送られたままでしたっけ?

>>変態紳士さん
こちらへ書くのも何ですがメニューバーのヘルプにある
versionやCreated byも修正しておくのは如何でしょうか
それと以前ブランチは手間というお話でしたが、github等で
過去のコミットやリリースだけでも、やはり面倒でしょうか
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.399)
投稿日 : 2017/02/07(Tue) 21:39
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
>>397 dipperさん
参考になりました。
確かに大して変わりませんね。10万件で40MBですか。
今回の試みは失敗しているのかもしれません。

何だか機能が増えたという事で・・・

あと、どうでもいい?かもしれませんが、[# #] → <# #> で '+' の分割は不要です。
(可読性が下がる代わりに僅かに速くなります。文字が長い場合の切り詰めにも)
[# #] → <# #> は '+' の1つ前の段階で行われる文字列の置換です。
置換なので前後に半角スペースがあってもトリミングされません。

今更ながら [# #] は他の括弧と混ざって読みにくいので
<# #> へ変更しました。

>ただ、$Idx系ではなく$Valを使うと展開速度はかなり遅く、メモリ消費も増加しました。
なるる。$Valは静的な展開で変換した場合ですね。
STLのアローケータ―はクラスが消滅するまでメモリを解放しないというのが仕様(C++11からは任意に開放)ですし、
newやdeleteで断片化しているのもアレですが。


>>398 七星さん
>時にlistへのio_fepは割に合わなく見送られたままでしたっけ?
仕様がどうなるか分からなくなって放置してますね。
― HowToSSG トグル項目 ―
[subject]項目名: toggle, アドレス, ONのバイト列, OFFのバイト列, 入出力変換属性(「fep」で有効、それ以外は無効)
[subject]項目名: toggle, 開始アドレス, 終了アドレス-ONのバイト列, OFFのバイト列, 入出力変換属性(「fep」で有効、それ以外は無効)
― HowToSSG リスト項目 ―
[subject]項目名: list, アドレス, リストファイル, 初項, 公差, 入出力変換属性(「fep」で有効、それ以外は無効)
― HowToSSG 一括トグル項目 ―
[subject]項目名: b_toggle, アドレス, チェインファイル, オフセットか, 入出力変換属性(「fep」で有効、それ以外は無効)
― HowToSSG 一括リスト項目 ―
[subject]項目名: b_list, アドレス, リストファイル, 初項, 公差, チェインファイル, オフセットか, 入出力変換属性(「fep」で有効、それ以外は無効)
― HowToSSG ダブルリスト項目 ―
[subject]項目名: d_list, アドレス, リストファイル1, 最小値, 最大値, リストファイル2, オフセットか, 入出力変換属性(「fep」で有効、それ以外は無効)
― HowToSSG ダブルトグル項目 ―
[subject]項目名: d_toggle, アドレス, リストファイル1, リストファイル2, オフセットか, 入出力変換属性(「fep」で有効、それ以外は無効)
― HowToSSG ビットリスト項目 ―
[subject]項目名: bitlist, アドレス, リストファイル, バイトサイズ, 入出力変換属性(「fep」で有効、それ以外は無効)

― SSToggle.cpp ―
TSSToggle::Setting strD.Listの後のstd::vector::resizeを変更 (インライン化されているので部分的に要素数*sizeof(std::string)になる)
TSSToggle::Setting TSSToggleからパディング領域を1バイトのisFEPとして使用 (パディングを探すためクラスの全てのメンバ変数を調べる)
TSSToggle::Read MakeDataCodeの値に対してCheckIO_FEPをループ ([size]か4バイトでループ)
TSSToggle::Write MakeDataCodeの値に対してCheckIO_FEPをループ
― SSList.cpp ―
TSSList::Setting strD.Listの後のstd::vector::resizeを変更
TSSList::Setting 継承元のTSSArgLongIndexSubjectからパディング領域を1バイトのisFEPとして使用
TSSList::Read OneReadの値に対してCheckIO_FEP
TSSList::Write OneWriteの値に対してCheckIO_FEP
― SSBundleToggle.cpp ―
TSSBundleToggle::Setting strD.Listの後のstd::vector::resizeを変更
TSSBundleToggle::Setting 継承元のTSSToggleからパディング領域を1バイトのisFEPとして使用
TSSBundleToggle::Read MakeDataCodeの値に対してCheckIO_FEPをループ
TSSBundleToggle::Write MakeDataCodeの値に対してCheckIO_FEPをループ
― TSSBundleList.cpp ―
TSSBundleList::Setting strD.Listの後のstd::vector::resizeを変更
TSSBundleList::Setting 継承元のTSSListからパディング領域を1バイトのisFEPとして使用
TSSBundleList::Read OneReadの値に対してCheckIO_FEP
TSSBundleList::Write OneWriteの値に対してCheckIO_FEP
― SSDoubleList.cpp ―
TSSDoubleList::Setting strD.Listの後のstd::vector::resizeを変更
TSSDoubleList::Setting 継承元のTSSArgLongIndexSubjectからパディング領域を1バイトのisFEPとして使用
TSSDoubleList::Read MakeDataCodeの値に対してCheckIO_FEPをループ (2ヶ所)
TSSDoubleList::Write MakeDataCodeの値に対してCheckIO_FEPをループ (2ヶ所)
― SSDoubleToggle.cpp ―
TSSDoubleList::Setting strD.Listの後のstd::vector::resizeを変更
TSSDoubleList::Setting 継承元のTSSArgLongIndexSubjectからパディング領域を1バイトのisFEPとして使用
TSSDoubleList::Read MakeDataCodeの値に対してCheckIO_FEPをループ (2ヶ所)
TSSDoubleList::Write MakeDataCodeの値に対してCheckIO_FEPをループ (3ヶ所)
― SSBitList.cpp ―
TSSBitList::Setting strD.Listの後のstd::vector::resizeを変更
TSSBitList::Setting 継承元のTSSArgBoolVectorSubjectからパディング領域を1バイトのisFEPとして使用
TSSBitList::Read OneReadの値に対してCheckIO_FEP
TSSBitList::Write OneReadの値に対してCheckIO_FEP
TSSBitList::Write OneWriteの値に対してCheckIO_FEP
↑編集で追記しました。C++なら書いている間+αで修正が終わる(爆)という事ですが、何分アセンブリ言語なので・・・

こんなのでいいんでしょうか。listとd_list以外にありましたかね・・・ (バイト列とかどうなるんだろ、ビットリストとか・・・)

>versionやCreated byも修正しておくのは如何でしょうか
気が向いたら変更します。

>それと以前ブランチは手間というお話でしたが、github等で
>過去のコミットやリリースだけでも、やはり面倒でしょうか
すみません、やはり面倒です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.400)
投稿日 : 2017/02/07(Tue) 23:11
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>399 変態紳士さん
属性は部分的に掛けられるとはいえ後方互換性的にはオプション必須になりますよね…
元々[funnel]は効くので現状でも[allocate]と[copy]や[trace]で連携して代替は出来そう?
[funnel]が効いて[io_fep]が掛からないのはtoggle系を除けばlistと一括のb_listだけだと思います

エウシュリーの季節が近づいてきたので、ふとそれを思い出したのですけど、アレはアレで
連番じゃないわ、文字列が共用体だわ、でリスト抽出にも無理があるので出番が無いかもですけど
前にfree_listを項目としても使えたらという話も出ましたが、大手術になっちゃうでしょうし
いずれにしてもメモリにある文字列をSSGにも書かなくてはならないジレンマは変わらないですね

gitの件はご負担になるようでしたら本末転倒ですね、了解です
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.401)
投稿日 : 2017/02/07(Tue) 23:56
投稿者 dipper◆LEFxdWWYR3c
ID情報 : HB8A7pEwNTHFn0DYGsM3r.
参照先
>>399 変態紳士さん

毎回のパッチ修正ありがとうございます。
[# #] → <# #> で機能することを確認できました。

> あと、どうでもいい?かもしれませんが、[# #] → <# #> で '+' の分割は不要です。
解説ありがとうございます。
適当に記入していたのがバレてしまいました…
ま、まあここは反面教師と言うことで一つ…(汗)

> こんなのでいいんでしょうか。listとd_list以外にありましたかね・・・
こ、これは list に io_fep が使える兆しが…


追記
ところで、ここ最近403エラーが頻繁に発生しているのは私の環境だけでしょうか?
この記事を投稿するのに何度発生したか…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.402)
投稿日 : 2017/02/08(Wed) 00:38
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
>>401 dipperさん
>ところで、ここ最近403エラーが頻繁に発生しているのは私の環境だけでしょうか?

そうですね。←という返事も403で拒否られています。
余所ではipv6で発生してるのだとか、httpsの仕様はブラウザ毎に大分違うらしいです。
しかし実験でもしない事には個別の原因は分かりません。 (←素人の話です)

>こ、これは list に io_fep が使える兆しが…
いぁ、パディング領域が見つからなければ面倒で低速なロジックになるかもしれないし、
それにNo.399に追記で列挙したように大きいんですよ・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.403)
投稿日 : 2017/02/08(Wed) 01:09
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
私も403が連発しております、なんだか連続アクセス時間かなと思ったりも

仮に実装するとしても、とりあえずlistのみで十分ではないでしょうか
一括は[funnel]で各アドレスにコピーして代替できると思いますし
バイト列が使える項目は置き換え型アドレスコーディング表記で済まし…

ビットリストは現在値がツリーに出せなかったりで
概ねトグル項目で済ませられたりするのでどうでしょうね…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.404)
投稿日 : 2017/02/08(Wed) 02:04
投稿者 amateur◆kR..xsXL6RU
ID情報 : DbYmPIIKCDyrIQ7y4AH.k1
参照先
変態紳士さん、数値の書式化<# #>の追加、ありがとうございます!
これは$Idx等に限らず、幅広く使えるようですね。

>list に io_fep
これはダブルリストやファンネルライト([allocate]を併用)で対処できそうですね。
ダブルリストだとリストが2つ必要で面倒なので、ファンネルライト使った方が楽でしょうか。

>403エラー
確かに、エラーで掲示板にアクセスできないことが多いですね。
少し間を空けて何度か試行すれば大体アクセスできてますけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.405)
投稿日 : 2017/02/08(Wed) 04:15
投稿者 dipper◆LEFxdWWYR3c
ID情報 : HB8A7pEwNTHFn0DYGsM3r.
参照先
>>402 変態紳士さん
>いぁ、パディング領域が見つからなければ面倒で低速なロジックになるかもしれないし、
>それにNo.399に追記で列挙したように大きいんですよ・・・

やはり難しそうですか…


>>403 七星さん
>連続アクセス時間

「連続アクセス時間」と検索をかけると、やたらとニコニコの名前を見るやつですね。
仮にそうだとしたら利用者側が気をつければ良いだと思いますが、
ただ、注意事項などが記載されている所に仕様として記載してほしいような…


>>404 amateurさん
>これはダブルリストやファンネルライト([allocate]を併用)で対処できそうですね。

…………………………………………………………………………………………………………あ、d_listはバイト列が使えた…


追記

>>404 amateurさん

動揺しすぎてお礼を言うのを忘れていました。申し訳ありません。
改めて、アドバイスありがとうございます。
amateurさんのアドバイスが無ければ、未だに解決方法に気づけなかったと思います。


>>405 RICKさん

403エラーの対応ありがとうございます。
連続アクセス制限ではなく、同時アクセス数制限でしたか。
それと連続アクセス制限の記載についても了解いたしました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.406)
投稿日 : 2017/02/08(Wed) 17:46
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : zarxCQ/PDFa6UQW6JxMqp1
参照先
>>403エラーについて
どうやらevent_mpmの同時アクセス数制限を絞り過ぎていたのが原因のようです。
このたびデフォルトに近い設定に戻しました。
ご迷惑をおかけして申し訳ございませんでした。

>>連続アクセス制限について
連続アクセス制限も設けていますが1秒間に20〜30というものなので、
そこまで気にする必要はないと思い注意事項に載せる程ではないと考えています。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.407)
投稿日 : 2017/02/08(Wed) 21:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : HlGpxCLIRSJuqgXt2eG4//
参照先
>>406 管理人さん
ご対応ありがとうございます。
問題なくアクセスできるようになりました。
わざわざこちらを読んでくださって対処していただき恐縮です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.408)
投稿日 : 2017/02/09(Thu) 00:35
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
アレッ…もしかしてもうlist,fep実装されてる…仕事の早さに感服です

そういえば正規化の一環にバージョン情報を思いついたのでサンプルを組んでみました
リハビリがてら追加内容を試しつつ…しかしバージョンリソースが無い場合もありますし
所詮は自己申告の参考値でしょうから、ひょっとしたらdでもないバッドノウハウかも
(このSSGのlist,fepのねじ込み様は紛れもないバッドノウハウ、free_listかd_listを使う所)

<# $Idx #>にしろ動的展開なので都度Parsingされ、デバッグモードの負荷にもなるので
[undef]の必要が無い場合は[! $Val !]が優勢な気もしますが、この辺は組みながら調整したほうが?

VS_VERSIONINFO構造体はMSDNの定義が奇妙な上にヘッダファイルがない、どういうこと海馬くん


>>406 RICKさん
お疲れ様です、まだ若干Forbiddenが返る時もありますが
同時アクセス数絡みということは混雑中に出る感じでしょうか
同ユーザーの同時コネクションは連続アクセス制限の方に入るのかしら…

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.409)
投稿日 : 2017/02/09(Thu) 06:46
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : zarxCQ/PDFa6UQW6JxMqp1
参照先
>>407 七星さん
同時アクセス制限は読み込み中のコンテンツ数によって発生するもので、
連続アクセス制限は単位時間あたりのアクセス回数によって発生します。
よって同ユーザーの同時コネクションは両方に該当すると思われます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.410)
投稿日 : 2017/02/09(Thu) 19:52
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>409 RICKさん
回答ありがとうございます、という事はブラウザの最大同時接続数も関係はしそうですね
バックグランドで読み込むはオフでFEATURE_MAXCONNECTIONSPERSERVERも既定のはずですが…
クライアント側でも設定を見直して、しばらく様子を見てみます
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.411)
投稿日 : 2017/02/12(Sun) 22:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : l9szaAub5/F4mi6sIlYWf1
参照先
ルナソフトの新作「リターニアの精霊使い-迷宮を征く者-」の体験版が公開されたので、
SSGを作ってみましたのでアップしておきます。(ダンジョンRPGが好きなので以前から気になっていた)
なお、このメーカーも、ゲームエンジンが今作からUnityになっています。着々とUnityが勢力拡大していますね・・・
製品版で動作するかは分かりませんが、Unityはアドレスがずれにくいようなので何となく動作するような気が。
(同じUnityのVenusBlood-RAGNAROK-は体験版で作ったSSGが最新パッチ適用の製品版でも動作しているそうなので)

Unityということで、別スレで公開されている七星さんのUnity汎用解析SSGと、
このスレの(No.52)の記事に添付されている、同じく七星さん作のmono用ツールを活用させていただきました。
少し前にSSGを作ったVenusBlood-RAGNAROK-の時はmono用ツール一本で詳細に解析できたのですが、
今回は片方だけで詳細解析はできず、上記の汎用解析SSGとツールの両方を駆使する必要がありました。
こんなに便利なSSGとツールを製作して公開してくださった七星さんに改めて感謝いたします。
この二つのお陰でUnityのゲーム解析が本当に捗ります。
Unityが今後もますます幅を利かせると思うので今後も重宝しそうです。

それと、今回のSSGでは、最近追加された[repeat]の変数「$Idx」等を初めて実戦使用しました。
このSSGでは$Idx1、$Idx2、$Idx3、の階層変数(と私が勝手に呼んでるだけです)を主に使いました。
多段階で[repeat]を使用する場合は、1回目のループ変数は「$Idx1」、2回目の変数は「$Idx2」...と書くのが分かりやすいかなと個人的には思いました。
ファンネルライトを使う場合等、「$Idx1」等のループ変数をファンネルファイル等の別[group]でもそのまま使えるのが超便利ですね。
少し前まではファンネルファイル等でループ変数の値を反映させるには元のSSRファイル内で[define]定義が必要でしたので。
お陰でSSGの途中で[define]を使う場面が大幅に減りました。
パッチで便利な変数を追加くださった変態紳士さんに改めて感謝です。

なお、添付のSSGには不備なままになっている箇所が二つほどあります。
一つ目は、マップ踏破フラグについて、フラグONにしてもダンジョンの壁等は表示されないので、
全座標のフラグ全開にしてもマップは分かりにくいままです(一応、別階層等へのポータル等は表示されますが・・・)
これでは不便だ!我慢ならん!という真面目な方は、どうぞ完璧にマップを表示させるよう修正なさってください。(私には無理でした)

二つ目は、各装備に付く特殊効果のリストが不完全になっていることです。
これだけは解析用SSGやツールを使っても楽にデータを抽出するための情報は得られませんでしたので・・・
一応、該当のUnicode文字列がズラーっと並んでる箇所は見つけたのですが、
規則性のあるアドレスで文字列が格納されているわけでもないのでMDXでの抽出もできず、
うさみみの文字列抽出機能でまとめて文字列は吸い出したものの(ゴミデータが多過ぎる)、
まとめて吸い出したデータをツールでうまく整形もできなかったので、
別にこれでも困らないだろうと私は思ったのと、1個ずつ手打ちで書くのも面倒(これが本音)なので不完全なままということに・・・

こんな不完全なリストは我慢ならん!という几帳面な方は、どうぞ一つずつ確認してリスト修正お願いします。
特殊効果をSSGで変更して画面上の表示を確認してリストを修正、という作業を繰り返すだけです。
単に私が極度の面倒臭がりで途中で投げただけでして・・・
なお、添付のSSGはこの掲示板内であれば(関係ない外部はNG)、改変・再アップ・流用等ご自由になさっていただいて構いません。

追記;
添付SSGについて、上述した各装備に付く特殊効果のリストを修正しました(まともになったと思います)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.412)
投稿日 : 2017/02/13(Mon) 21:59
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>411 amateurさん
文字列について少し気になったのでメモリを見て妙だなと思ったら
ItemMng.GetPropStr(int,int)にハードコーディングされてますね
ILSpy等で*_Data\Managed\Assembly-CSharp.dllを開き{}から辿ってみてください

自分で作っておいてなんですが、Monocleは試作ということもあり
急拵えでCreateRemoteThreadするなどお行儀の悪い感じです
mono.dll側に吐かせるので正確で分かりやすくはあるのですが
実際問題としてどうやってこれをSSGに落とし込むんだという問題も
解析SSGも整備しきれていないので完全な代用にはならないのですが

static_data_array(+0x50)は恐らくクラスのロード順で半固定的だと思います
ズレにくいでしょうけど、完全追跡にはHashTableからクラス名を…(SSGでどうやるんだっていう)
ループ変数はどちらに階層を増やすかで、IdxかFwdIdxが良いか変わってきそうですね
途中に階層を増やすと総崩れになりそうです

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.413)
投稿日 : 2017/02/13(Mon) 22:53
投稿者 amateur◆kR..xsXL6RU
ID情報 : WYOGA/Lbl.ZxWMhUHTHGo0
参照先
>>412 七星さん
詳細な情報提供ありがとうございます! (ありがたや・・・)
例によっての私の愚痴にフォローくださってありがとうございます。
教えてくださったツールで件の文字列の確認と吸出し(コピペ)ができました。
これでリストをマトモなものに修正できそうです。

MonocleとSSGは、現状でも物凄く助かっています。
慣れるとSSGに反映させるのもスンナリいくのですが。
私は取り敢えず最初に自力でベースアドレスを特定してからSSGとツールを使わせていただいております。

>static_data_array(+0x50)は恐らくクラスのロード順で半固定的だと思います
やはりそうなんですか。
[:MName::mono.dll::mono_get_root_domain +0x1:] がベースアドレスになる場合は、
今のところ全部 [:[:{ベースアドレス}:]+0x50:] となっていますね。

>ループ変数はどちらに階層を増やすかで、IdxかFwdIdxが良いか変わってきそうですね
今のところ私は手探りで書いていますが、SSG作者の書き方にもよる気がします。
最初に関数的構文で設計図的に定義してから書くか、書いていく途中で必要に応じて[repeat]を使っていくか・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.414)
投稿日 : 2017/02/14(Tue) 23:48
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>413 amateurさん
>慣れるとSSGに反映させるのもスンナリいくのですが。
おや…そうですか、案外作った本人より使いこなしているかもしれませんね、HAHAHA

>[:MName::mono.dll::mono_get_root_domain +0x1:] がベースアドレスになる場合は、
そうですね、これが関数コード中で参照しているmono_root_domain変数のアドレスになるので
>今のところ全部 [:[:{ベースアドレス}:]+0x50:] となっていますね。
そのMonoDomain*を逆参照して+0x50するとstatic_data_arrayにオフセットされる訳です

というのは前にも書いた繰り返しになる話ですが、これは型の静的フィールドへの参照ですので
(リターニアの精霊使い_体験版ではGameData.g_GameData構造体のm_*等が「static」で定義されていますね)
これがズレる場合はプログラム変更によって型のロード順序が変わった時か(これは稀だろうか)
それよりは型のフィールドが増えたり減ったりで位置やサイズが変わった時になると思います

SSGには荷が重いですが豆知識として、完全に追跡しようとすると少し手前のtype_hash等になるでしょう
このMonoGHashTableですが、なんとtableがSlot**になっています、片方向リストのしかも配列です
keyもgpointerですのでMonoStringだったり色々です、type_hashの場合はMonoTypeでしょうか
雑なサンプルですかldstr_table(これがハードコードされた文字列)とtype_hashの先頭を覗き見るSSGを添付しておきます
簡易的にstatic_data_class_arrayからクラス名を照会しても良いかと思いますが、どのみち完全追跡となると
最後の仕上げはフィールド名も照会してあーだこーだしなければならないので、雑多になり専用SSGには向きません

役に立たん情報だ!となりますが、静的フィールドから辿れるなら現状が現実的な落とし所ではないかというお話として。
私は昔ながらのプログラミング作法的に、末端の[group]から先に書いていくので$FwdIdxな傾向になりそうです
そして仮組できたら、また0から組み直してブラッシュアップするという何とも非効率な作成手順…

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.415)
投稿日 : 2017/02/15(Wed) 02:28
投稿者 amateur◆kR..xsXL6RU
ID情報 : quSV2yuGGSAQkgxEeu/xf.
参照先
>>414 七星さん
ご解説とSSGありがとうございます。
>ズレる場合は・・・フィールドが増えたり減ったりで位置やサイズが変わった時になると思います
やはりズレる時はズレるのですね。
何回かUnityの解析しただけですが、Verアップでズレてるのは今のところ見たことがないので、
ズレにくいだけでも有り難い(Verアップ毎に修正は辛過ぎる・・・)です。
現状が現実的な落とし所、仰るとおりなんでしょうね。これ以上を望むのは欲張りということで。

添付くださったサンプルSSG、これは・・・相変わらず私の理解超えてるというか、
"_*[.0.]"は一体何だ?と暫く悩んでいたら、変態紳士さんがパッチで追加くださった間接演算子([: :]と同等)でしたね。
全く使っていないのですっかり忘却していました(汗)
他にも、"MONO->{group}"の箇所、ファイル指定部分にも[define]が効くのか、とか、
SSGの意味を把握する以前のレベルで目から鱗のオンパレードです。
役に立たない情報というより、プログラミングに関して無知すぎる私に活用できそうにない、というだけのような気がします(大汗)

>昔ながらのプログラミング作法的に、末端の[group]から先に書いていくので$FwdIdxな傾向になりそうです
なんと、そういう書き方もあるのですか・・・
末端の[group]から、ということは、そこから逆算して[repeat]も書いていく感じでしょうか。
そういえば以前、変数を4箇所くらい使ったアドレスコーディングを先に[define]で定義してから、
各[repeat]で順次"0x[!$Val]=>(変数);..."と代入していく書き方を試したことがありますが(ウディタ解析用SSGはそんな書き方)、
それを逆に末端から書いていく感じ、なのかな・・・
基本は自分流の書きやすい方法でやっていけば良いのだろうと思いますが、
偶には他の方の書き方を参考にするのも勉強になりそうです。

あっ、それと、
>>慣れるとSSGに反映させるのもスンナリいくのですが。
>おや…そうですか、案外作った本人より使いこなしているかもしれませんね
これは、ちょっと語弊があったというか、七星さんのツールやSSGが未だ無かったころ、
最初にUnityの解析した際は、膨大なデータの解析に難儀してた(結局中途半端でお茶を濁した)のが、
MonocleとSSGでほとんど完全に解析できてしまったので、完全自力に比べると雲泥の差、的な意味でした。
一度Unityのゲームを解析してみないと、いきなり七星さんのツールやSSGを使っても、最初は少し?となるかもですね。
Unity(というかmono?)のデータの大まかな特徴(みたいなもの)が分かると、イメージしやすいと思うのですけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.416)
投稿日 : 2017/02/15(Wed) 13:42
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
お昼にコソコソ

>"_*[.0.]"は一体何だ?
そうCライクな間接参照演算子ですね、既存のポインタ演算子と違いコロンを含まないので
項目名でアドレスを記述するときに「\」によるエスケープが不要になり重宝します
一方で弊害として、そういった何だこの乗算は、と紛らわしい事もあります(ログでは特に
それも含め、単項でない時は結局*()と囲む事になりますし、通常は[::]が良いかもしれません

>"MONO->{group}"の箇所、ファイル指定部分にも[define]が効くのか
これは私が雲隠れしていた昨年末に、変態紳士さんが実装して下さった[define]強化による産物かと
([replace]を除く)アドレス部の置換タグは動的展開されるので、上書きを避けるには[undef]しますが
それ以外のパラメータは静的展開されて[undef]不要?本来の#defineに近い使い方が出来るようです

末端の[group]からは詰まる所、amateurさんの仰る関数的構文と同じだと思います、所謂ボトムアップ設計ですね
HowToSSGの[involve]然り、使うものは先に定義しておくのがお約束というか(こちらは設計というより制約ですが

私の作るものは解る人が使えれば良いやになりがちです:D 構造体というものを理解している人ならあるいは…
UnityはSSG整備を進めて構造把握に繋げ、再帰走査やAPIコールなど不向きな所をツールで補助できたらと構想を始めました
(即ちまだ考えているだけ…いつやる出来るとは)個人的には原理からの智見がない物も色々仕上げてしまう事に驚嘆してます
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.417)
投稿日 : 2017/02/15(Wed) 21:40
投稿者 amateur◆kR..xsXL6RU
ID情報 : quSV2yuGGSAQkgxEeu/xf.
参照先
>>416 七星さん
私のグダグダと長い話にお付き合いいただいて有難うございます。
添付いただいたSSGの
_mem,_*(***[.0.] + 0x34),
の箇所は、[::]を使って書くと、
_mem,_[\:[\:[\:[\:[.0.]\:]\:]\:] + 0x34\:],
となると思いますけど、間接演算子を使うと物凄くスッキリ書けますね!
今後、この演算子も使っていこうかなと思い始めています。(今まで惰性で[::]だけ使って便利さに気付いてなかった・・・)

[define]強化については、少しずつ試してはいるのですが、どこまで効くのか未だに把握できておらず・・・
少し前に自分用に作ってたSSGで、長ったらしいバイト列部分を[define]で置換できないか試したのですが、
その時は私の書き方が悪かったのか置換できていなかったようでして。
もう少し自分で検証してみないとですね。

自分ではこれ以上は無理かな、という箇所を七星さんの提供くださったツールや情報で補完できて大変助かっております。
先日のハードコーディングされた文字列の件もそうでしたし。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.418)
投稿日 : 2017/02/17(Fri) 13:40
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>417 amateurさん
>長ったらしいバイト列部分を[define]で置換できないか
これはNG subject (重すぎ)に該当する部分ではないかと
グループ側も未検証という事なのでバイト列は対象外?

ソースを一見していたら「s文字列」などというバイト列表記も元々あるようでした
16進数表記の1バイトと混ぜ合わせたり…修正を導入しているとマルチバイトは妙な気も
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.419)
投稿日 : 2017/02/17(Fri) 21:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : Ay/QcqQeOgMxlbmMMRQTZ.
参照先
>>418 七星さん
情報ありがとうございます。
バイト列は[define]の対象外ですか・・・
重すぎ、ということは仕様的に無理があるみたいですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.420)
投稿日 : 2017/02/18(Sat) 04:30
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
>>417-419 amateurさん、七星さん
>バイト列部分を[define]

これでどうでしょうか。たぶん読み込みには影響しないと思います。
問題が無ければファイルは移動します。

※追記
問題は無いようなのでファイルを移動
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.421)
投稿日 : 2017/02/18(Sat) 15:19
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>420 変態紳士さん
こちらまでご足労頂いて…私の方はあまりバイト列を多用しないので
検証しきれていませんが、toggleやb_toggle先でもバイト列置換確認できました

ただ一つバイト列絡みということでHowToSSGには記載されていませんが
[subject]toggle:toggle,0x00602000,sボーランド,sBorland C+
という書式でマルチバイトがランダムなバイト列になる再現性はないですか?

こちらは[define]関係なさそうですが、私の環境ではwinmm.dllを外すと正常で
修正パッチを導入していると6.1でも6.2でも起こるように見受けられます
これに\h20とか16進表記を混ぜる機能は元々バグっている気もしますが
(もはやこれ普通のエスケープシーケンスで良いのではないか…)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.422)
投稿日 : 2017/02/18(Sat) 18:01
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Rpl0M0EWSnJO/VkBHFcSz.
参照先
>>421 七星さん
No.420を差し替えました。

>という書式でマルチバイトがランダムなバイト列になる再現性はないですか?
すみません。未検証につき危険地帯でした。
この修正は高級言語では正常ですが、アセンブリ言語の実装で期待する動作にならなかったバグです。(検証を省いた)

>もはやこれ普通のエスケープシーケンスで良いのではないか
ソレを表現する言葉を持ち合わせておりません。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.423)
投稿日 : 2017/02/18(Sat) 18:42
投稿者 amateur◆kR..xsXL6RU
ID情報 : KymZzD7gxOO0Ui2LKHfpv/
参照先
>>420 変態紳士さん
こちらをご覧いただた上にご対応くださって有難うございます。(いつも済みません・・・)
取り敢えず試してみましたが、問題なく動作しているようです。
反復命令や置き換え型命令、相対ジャンプ命令、条件付置換命令等のよく使う命令でも試してみましたが、
[define]でバイト列が見事に置換できています。
[define Byte] 01 01 のように半角スペースを入れていても大丈夫でした。

バイト列の命令部分を丸ごと置換も可能でしたが(下記は反復命令を入れ子で使ったケース)、
[define ByteON] AA BB
[define Whole] *[ _0x100 :: *[ _0x10 :: {ByteON} *] *+ 01 20 *]

[define Whole] *[ _0x100 :: *[ _0x10 :: {ByteON} *] *+ 01 20 *], *[ _0x100 :: *[ _0x10 :: {ByteOFF} *] *+ 01 20 *] (←は駄目な書き方)
上記のように「ONのバイト列」と「OFFのバイト列」を両方まとめて置換は無理みたいですね(当たり前か)。
「ONのバイト列」と「OFFのバイト列」は下記のように別々に定義して別々に置換する必要がある、と
[define ON] *[ _0x100 :: *[ _0x10 :: {ByteON} *] *+ 01 20 *],
[define OFF] *[ _0x100 :: *[ _0x10 :: {ByteOFF} *] *+ 01 20 *]
[subject]反復命令でテスト/ON/_: toggle, _{アドレス}, {ON}, {OFF}

何百行もあるチェインファイル等でバイト列部分の全部(orほぼ全部)が同じ場合がよくあり、
そういう場合にバイト列を置換できれば簡潔に書けますので、大変有り難いです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.424)
投稿日 : 2017/02/18(Sat) 21:15
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>422 変態紳士さん
こんな隠れリテラル使ってるSSG見当たらないですものね
修正パッチ適用中も元来の書き込みが出来るようになりました

\xhhが一般的ではと思ったのですが、当時どころか今でも
C/C++ライブラリやWin32APIにパース関数は無かったり…?
UrlUnescapeで代(いや使われていない以上詮無い事か


>>423 amateurさん
>両方まとめて置換は無理
この辺りが行全体や項目自体になり肥大化して現実的ではなくなる部分ですかね
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.425)
投稿日 : 2017/02/19(Sun) 01:23
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9A2XLhpIVWJaspZIQqBqP.
参照先
>>424 七星さん
成程、そういう事情ですか。
肥大化して重くなるのを防ぐためにも制約があるのは已む無しなんですね。
バイト列の置換が可能になっただけでも有り難いことです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.427)
投稿日 : 2017/02/21(Tue) 03:07
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
変態紳士さんにせがんで対象プロセスの指定式を拡張して頂きましたが
ウィンドウクラスは目にする機会乏しく馴染みが薄そうなので、ちょっと解説を書きます

Windows上のウィンドウには雛型となるクラスが存在します(オブジェクト指向言語のとは似て非なる
UsaMimiから各種情報のウィンドウでも調べられますが、ProcessWalker Expressなども良い感じでした
(インストーラーですが自己解凍CABなので拡張子をcabに変え手動展開して実行も可能)

このウィンドウクラス名を元にプロセスを指定できると何が嬉しいかというと
メインウィンドウなどは概ねアプリケーション固有のウィンドウクラスから作られます
実行ファイル名はリネームされても動くのが普通ですが、クラス名は通常固定です
それを[process]に指定することで、より柔軟なプロセス捕捉が可能になります
(親子番号が単一のThread直下に連なるトップレベルウィンドウが対象です)

最も効果を発揮すると予想されるのは汎用ゲームエンジンを対象とする場合です
例えばUnityや吉里吉里2、System4の場合、実行ファイル名はタイトル固有の傾向にありますが
それだと汎用SSGを作成した時に、全ての実行ファイルに対応するのは冗長になります
[process]<UnityWndClass>、[process]<TTVPWindowForm>、[process]<AliceRunWindowClass>
といった固有ウィンドウクラスの指定1つで、各ゲームエンジンで実行されるもの全てを対象にできます

その一方で実行ファイル名がGame.exeなど普遍的すぎる場合にも役立ちます
[process]<RGSS Player>でRPGツクールXP/VX/VX Aceプロセスのみに限定できます
[process]<起動中です、この処理にはしばらく時間がかかることがあります>でウディタ限定(2.10以前?)
開発中の2.20βでは、これにゲームタイトルが接頭される様です(これはこれで更にゲームタイトル限定)

モジュール指定式も実装してくださったので、[process]Game.exe :GuruGuruSMF4.dllとしてウディタ限定や
RPGツクール向けに[process]Game.exe :RGSS301.dllとして厳密なRGSSバージョン指定も可能になりました

添付SSGはウィンドウクラスからSpoilerALを捕捉するサンプルです、TGuideFormは常在ではないので宜しくない例です
おまけとして何時ぞや話に挙がったfree_list形式のリストを、d_listで使用可能にするプログラム改造も含んでいます
極めて安直な手段による実現ですが、d_listの数値解釈のみ=を許可し、符号修正すれば実用には足るのかな、という実験です
この部分で読み書き両方に[io_fep]から入力値への演算を適用すれば、数値行のみ実質的に入出力変換属性も対応できそう?

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.428)
投稿日 : 2017/02/21(Tue) 06:09
投稿者 amateur◆kR..xsXL6RU
ID情報 : pUV.r6FsjuW/3yZ6b2fVB0
参照先
>>427 七星さん
色々教えてくださってありがとうございます。
早速、Unity製ゲームの改造依頼があったので、[process]<UnityWndClass> を使ってみました。
上記ゲームの体験版で試した限りではバッチリ機能しているようです。
Unity汎用で使えるのは超便利ですね。
SSG本体部分も、「mono.dll」とそのエクスポート関数でベースアドレスを記述できますので、
UnityのSSGの汎用性がますます向上しそうです。

DL版でプロセス名がパッケージ板とは変わる場合でも気にする必要がなくなりそうなのも有り難いです。
別スレに七星さんがアップくださっているUnity汎用の解析用SSGも、
[process]欄に上記のウィンドウクラス名を書けば、一々ゲームごとに[process]欄を修正しなくて済みますね。

吉里吉里やツクール、ウディタでも同様に[process]欄に各エンジン汎用の記述ができるとのことで、
これから試していきたいと思います。

添付いただいたSSGは・・・ウィンドウクラスからSpoilerALを補足する、そんなことも出来るんですね。
少し中身を拝見しても仕組みが理解できていませんが、勉強させていただきます。
(早速、バイト列を[define]で置換されていますね)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.429)
投稿日 : 2017/02/21(Tue) 07:05
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>428 amateurさん
ウィンドウクラスはウィンドウがあるプロセスなら、普遍的に使用できます
しかし常にウィンドウクラスで指定した方が良いかというと状況によります
同じゲームエンジンなら、まず同一クラスなので専用SSGには向かないのです

実行ファイル名だけがゲームタイトル固有のものなら、そちらを優先した方が良いです
体験版でSSGを作成したが、製品版の実行ファイル名が不透明という場合には
保険として複数定義を行い、最後の[process]にウィンドウクラスも良いかもしれません

TGuideFormというのはGuideFormのウィンドウクラスです、当然ガイド無しだと捕捉できません
普通は常に存在する(メイン)ウィンドウのクラス名を指定します(ALだとこれが最も特有でした
free_list形式が使用可能になるのは「2=two」を数値にしようとすると'='でストップしますが
文字列を最後まで数値に出来なくとも正常に解釈した、となる様マシンコードを書き換えています
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.430)
投稿日 : 2017/02/21(Tue) 21:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : SVa40FTfkX4oI7WHe6ZLA.
参照先
>>429 七星さん
>ゲームタイトル固有のものなら、そちらを優先した方が良いです
そうなのですか・・・汎用だからといってそれだけ書くというのも問題ありなんですね。
今少し悩んでいる(というほど大げさなことではないですが)のは、
DL版でプロセス名が「main.bin」になる場合、どう[process]欄に書くかでして。
この場合、
[process]main.bin
[process](ゲームの実行ファイル名)
という順番に書く必要がある(「main.bin」を後ろに書くと動作しないらしい)ようで・・・

とりあえず、DL版にも配慮して(最近は商業でもパッケージとDL版を同時発売する例が増えてきた)、
[process]main.bin
[process](ゲームの実行ファイル名)
[process]<(ウィンドウクラス)>
という風に書くのが良いのかな、と今のところ考えているのですが。

それと、>>427に添付くださったSSGについて、
ご丁寧に解説くださって有難うございます(相変わらず飲み込みが悪くてすみません・・・)
成程、"(数値)=(文字列)"のようなfree_list形式のリストを、d_listの処理内容記述のリストに使用できれば、
アドレスネーミング部分を含めてリストファイルが1つだけで足りることになり、
大幅にSSG作成が楽になりますね(従来はアドレスネーミング部分を含めて3つもリストが必要で面倒臭かった)。
しかし、こんなプログラム改造が可能とは・・・
実際のゲームにも使えると便利ですね。今度機会があれば試してみようかと。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.431)
投稿日 : 2017/02/22(Wed) 07:22
投稿者 七星◆y3el2XfkmCg
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>430 amateurさん
そうですね、汎用SSGなら対応できるプロセスは全て対象にできた方が良いので
ゲームエンジン固有のクラスや特有モジュールだけを指定するのも合理的ですが
専用SSGだと共通する部分はあれど、特定ゲームタイトルのみの想定ですから
間違ったプロセスを捕捉しないためにも、限定できる記述が望ましいと思います

そこで問題なのが件のDL版ですね、元のファイル名でランチャー?も立ち上がるのか
[process]main.binを優先しないと捕捉できないという具合でしょうか
ただそれだと同時実行できるのか解りませんが、他のゲームも対象になりますよね

これには変態紳士さんに実装を進めて頂いていますが、クラス+キャプションによる捕捉を考えています
プロセスハンドルよりもウィンドウハンドルが必要な自動操作マクロ等では、これが常套手段です
しかしこれもウィンドウタイトルが変わるなら万能ではありません(ウディタのF8でFPS表示を始め…
あちらでも書きましたが、ゲームバージョンやゲーム内日付・ルートが入るものも有りますよね
そういった場合は仰るような複数定義で保険を掛けておくのも良い案だと思います

もっともウディタは2.20ならばウィンドウクラスがスペースを2個挟みゲーム固有になるみたいなので
「ウルファールのサンプルゲーム 起動中です、この処理にはしばらく時間がかかることがあります」
といったウィンドウクラスの指定だけで、実行ファイル名に関係なく狙い撃ちできそうです
2.10以前でゲーム限定はF8の所為で難が…2.10から2.20βにバージョンアップしたゲームも見かけました


free_list項目は元々Re: SpoilerALの修正パッチ (No.37)におけるdipperさんの提案ですね
listやb_listは初項+公差が前提ですが、d_listのリストファイル2は書き込む値を直接指定しますから
この辺りの変型としてなら実装コストも抑えられるのでは…という検証です。
表示は=以降だけにしたいとなると、それなりの手術が必要になりますが、値も見えた方が解りやすいですし
リスト表示フォントを等幅フォントにできれば、それだけでも見栄えは良くなりそうです

プログラム改造はマシンコード改竄ですから原理上は何でも出来ます、ただ現実的かどうかで…修正パッチも仕組みは同じです
現在はローカル書き込みも実装されているのでAL以外を対象とするSSGでも、[trace]と合わせ自動適用する事も可能ですが
検証のための簡易実装なので、d_list以外も使う汎用関数を書き換えており、どこかで破綻するかもしれません
今後の修正パッチと干渉することも考えられるため、実用にはお奨めしません
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.432)
投稿日 : 2017/02/22(Wed) 22:27
投稿者 amateur◆kR..xsXL6RU
ID情報 : SVa40FTfkX4oI7WHe6ZLA.
参照先
>>431 七星さん
DL版を考慮すると、少し厄介になってきますね。
>[process]main.binを優先しないと捕捉できないという具合でしょうか
これについては、別スレで最近報告された内容を私は読んだだけなのですが。
ただ、去年の今ごろ解析していたゲームで、SpoilerAL等で捕捉すべきプロセスがbinファイルとなっていて、
実行ファイル(exe)と同時に立ち上がっている例がありました。
こういう場合は、binの方を優先しないと捕捉できないのかなと。

>ウディタの例
これは面倒くさい仕様ですね・・・F8でFPS表示。
こういうウィンドウタイトルが変わるゲームは他にもあったように思います。
というか、ウィンドウクラス名が何でこんなに長いのか(内容もナンダコレ?)と笑ってしまいました。

>free_list形式のリストの件
>原理上は何でも出来る
プログラム自体を書き換えてしまうわけですから、言われてみれば納得です。
それと、実験と書かれていましたから、実際にSSGで使うと問題が起こる可能性もあるわけですね。
よく考えると、今でも大体の場合、d_listで使うリストは、MDX等で文字列とそれに対応するID等の数値を吸い出し、
リストファイル1に文字列を、リストファイル2にID等の数値を貼り付け、
表計算ソフトで両者を結合したものをアドレスネーミング(free_list)用のリストに貼り付けてるだけなので、
手間としては大して変わらないのかもですね。
3個リストを書くのでその分だけ行数が矢鱈と増えるのが鬱陶しいのですが。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.434)
投稿日 : 2017/02/25(Sat) 19:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : kJdvECn5UYC0ke96ncpKl1
参照先
「SMILE GAME BUILDER」という去年?に公開されたゲームエンジン(製作ツール)が少し気になったので、
開発会社がサンプル的に公開しているゲーム「グランブーム国物語 〜 スマイルと目覚めし力 〜」を試しに解析してSSGを作ってみました。

最初にうさみみのメモリエリアマップでexeを調べたら、.dataセクションがないという初めて見るタイプ。
.dataがないということは、ベースアドレス等は他のモジュール(dll)にあるんだろうと流石に気付き、
解凍したゲームファイルを見てみると、「kmyCore.dll」がexeの倍くらいのサイズで一番大きく、
例のウィンドウクラスを調べると「kmyWGLWindowClass」となっていて、
「kmyCore.dll」が明らかに怪しい、とベースアドレスはこれの.data内だと当たりをつけました。
(後で気付いたのですが、ゲーム起動時に一瞬「powered by KMY」みたいな表示が・・・分かり易すぎる・・・)

特に値が暗号化等されていることもなく(極一部にfloatがあった程度)、割りと素直に検索等できるなあ、と初めは思っていたのですが、
途中でポインタがループしてるような感じでうまくいかなくなり・・・
行き詰ってしまったので、攻略法を切替え、上記の「kmyCore.dll」の.dataを調べると、
先頭からのオフセット+0x26A0に、まるで砂漠のオアシスの如く、
前後が「00000000......」と延々バイト列ゼロに囲まれた、ポインタらしき値が3つポツンと並んでるのを見つける。
あまりに怪しすぎるので、これがベースとなるポインタだろうと、ここから辿っていくと、
上記の行き詰まったアドレスからオフセット+0x20の箇所に偶然(?)辿りつきました。(結果オーライ?)

偶然なのかプログラム的な必然なのか私には判断がつかないですし(逆汗してもよく分からず)、
ベースアドレス(?)からアドレスコーディング書くと途中のオフセットがマイナスというのが気になったものの、
取り敢えずこれで書いてみたら、ゲームやOSを何度再起動しても自分の環境では問題なく動作しているので・・・
偶然と勘に頼りすぎだと思いつつ、自分には正攻法では無理っぽいのでこれでお茶を濁しました。

ついでに、開発会社が去年の夏ごろに公開した「SGBクエスト 〜伝説の宝をさがせ〜」というサンプルゲームで試したら、
エンジンが古いせいか、全く動作しませんでした。
調べると、ベースアドレス(?)が少しズレており(こちらも矢張り分かり易い)、
他にも、上記の「途中のマイナスのオフセット」も微妙にズレていたので、
どうにかこの2つだけでも汎用化っぽくできないかと、
苦し紛れかつ強引にベースアドレスと上記オフセットを補正する機能を付けてみました(見たら強引すぎて失笑すると思います)。
一応、これで古い方のサンプルゲームでもSSGがある程度は使えるようになりましたが、
補正した部分以外の細かいオフセットも結構ズレているようで・・・
自分にはこれ以上の汎用化は無理みたいです。
エクスポート関数も少し調べてみましたが見つからなかったので(そもそもベースアドレスがこれで良いのかも怪しい)。

まあ、今後このエンジンがどの程度普及するかも未知数ですし、
解析の邪道なサンプル程度に思っていただければ。

ちなみに、シナリオ等の内容はともかく(解析にかまけてあまりプレイしてない)、
3Dの表現は良好でした。一人称視点(ウィズ等の3Dダンジョン風)と見下ろし視点(ドラクエ風)を切り替え可能で、
カメラ視点の回転、ズーム等も可能と、グラフィック的には凄く気に入りました。
個人的には普及してくれるのを期待したいところです。

追記;
添付ファイルを修正して差し替え

追記(3/1)
添付SSGに戦闘中のステータス等、若干の機能追加

追記(6/18)
添付SSGを更新。ベースアドレス特定方法と細かい修正。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.435)
投稿日 : 2017/02/26(Sun) 16:49
投稿者 amateur◆kR..xsXL6RU
ID情報 : ttVXCkZ1h6T1AuzFwdeVD.
参照先
>>434 の添付SSGを修正。
実行ファイル等のファイルバージョンを表示する機能を追加しました。
表示させるにはサーチ補正適用が必要です。
「エンジン等のバージョン」を開くと、1個目の項目のサーチが開始→「サーチを停止しますか?」でキャンセルし、補正値適用。
もう一度当該項目を開き直すと2個目の項目のサーチが開始→補正値適用

それと、>>434で言及した「SGBクエスト 〜伝説の宝をさがせ〜」について、
exeのバージョンが"0.9.15.0"のようですが、
古いexeでも動作するよう、所持金のアドレスオフセットをリストから選んで修正できるようにしました。
ついでに、座標について"0.9.15.0"のexe用の項目も追加。
座標についてはオフセットが2箇所ズレていたのでSSG上で経路修正はやりにくく・・・
他の細かいオフセットのズレは放置です(主にアイテムやスキルの性能部分ですが)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.436)
投稿日 : 2017/02/26(Sun) 22:20
投稿者 七星◆MH.ms4.V3i2
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
SMILE GAME BUILDERでもしやと思ったらプチコン3号 SmileBASICのスマイルブームでしたか
3Dだとツクールやウディタのようなコテコテ感が少し薄れますね(あまり変わらない?
ろくに調べてませんが、これもエンジン共通ウィンドウクラスっぽいですね

>>427の話も一段落して、ウィンドウタイトルも前方一致で指定できるようになりました
RPGツクールを始め普遍的なプロセス名も「[process]<"RGSS Player"> *"ゲームタイトル"」として狙い撃てます
私の環境ではRGSS系RPGツクールXP/VX/VX Aceのヒープ列挙が遅かったので、その対策も施してもらいました
SSG展開後、実際に項目が使えるまでのモタツキに心当たりがあった方はその辺の確認もして頂けると幸いです

(ちなみにMVセーブエディタのポートスキャンは、結局HTTP総当たりにしただけだったり…相手が誤作動しないか心配
 それとお帰りなさい仔猫さん、今際の際(違)に立ち会えなくて済みません、コンゴトモヨロシク マルカジリ
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.437)
投稿日 : 2017/02/26(Sun) 23:05
投稿者 amateur◆kR..xsXL6RU
ID情報 : ttVXCkZ1h6T1AuzFwdeVD.
参照先
>>436 七星さん
MVのツールのご対応、ありがとうございます。今のところ当方では特に問題なく使用できております。
プチコン3号 SmileBASIC、私は知らなかったのですが、この会社3DSのソフトも作ってたんですね。

>ウィンドウタイトルも前方一致で指定できるようになりました
解説ありがとうございます。
これで色んなエンジンで使われてる「Game.exe」の区別もウィンドウクラス等で厳密に指定できるわけですね。
このあたりは変態紳士さんと七星さんのお陰ですね。ありがとうございます。

(追記)
>>434 の添付SSGを修正。
座標のアドレス修正機能を追加(Ver1.0.6.2では微妙にオフセットがズレていたので)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.438)
投稿日 : 2017/02/27(Mon) 01:36
投稿者 (仔猫)◆KCezBilYINU
ID情報 : T/Ij9x7on85gdL9yuGyvF/
参照先
>>436
こんばんわー。久々の仔猫です。
なにやら新しい機能が追加されてるのでびっくりです。

吉里吉里2で使うときはこれで行けるのでしょうか…
[process]<TTVPWindowForm>
プロセス名を入れなくても補足できるとしたら…これはスゴい。

>>439
amateurさん分かりやすい解説ありがとう。またまた助かりました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.439)
投稿日 : 2017/02/27(Mon) 02:28
投稿者 amateur◆kR..xsXL6RU
ID情報 : ttVXCkZ1h6T1AuzFwdeVD.
参照先
>>438 仔猫さん
こちらのスレではお久しぶりですね。
吉里吉里2だと、それでも捕捉はできると思いますが、
[process]<TTVPWindowForm> *"(ゲームタイトル=キャプションを前方一致で書く)"
と書くのが望ましい?のでしょうか。
該当ゲームを狙い撃ちで捕捉し、かつ、DL版で「main.bin」等とプロセス名がパッケージとは異なるような場合に対応するためということで
ただ、七星さんが仰ってましたが、本命の[process]の記述が外れた場合の保険として、
[process]<TTVPWindowForm>
とウィンドウクラスのみの分を最後に書くのもよいかもですね。

ちなみに、リターニアの精霊使い(体験版)では、
[process]<UnityWndClass> *"リターニアの精霊使い"
と書けばSpoilerALで捕捉できました。
(クラス名とタイトルの間の*の前に、半角スペースを入れないと捕捉できないようです→HowToSSGの差分(識別情報)に明記されてますね)
キャプションはうさみみの「プロセスの各種情報を表示」で調べると、
「リターニアの精霊使い_体験版」ですが、前方一致で構わないようです(後ろの「_体験版」は不要)。
DL版でプロセス名が「main.bin」となる場合でもこれで大丈夫なのかな?

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.440)
投稿日 : 2017/02/27(Mon) 23:22
投稿者 七星◆MH.ms4.V3i2
ID情報 : EO1F4.qa2sHkDF3axAhPO0
参照先
>>438-438 仔猫さん、amateurさん
仰るとおりクラス+キャプション前方一致が誤爆の可能性も少なく
かつ見失いにくいベストな方法だと思います、優先順位的には

  1. 固有クラス+キャプション
  2. 固有実行ファイル名
  3. 固有ウィンドウクラス
  4. 固有モジュール

という感じでしょうか?クラス+キャプションのみで済むなら、それだけで良いかもしれないですね
汎用SSGならクラスのみで…ウディタ2.20汎用はもはや固有モジュールしか?逆に専用がクラスのみで済むかも
私も何故ウディタクラスが文章なのか不思議です、そのまま所かタイトルも接頭されだしたので仕様なのでしょう

ちなみに吉里吉里2は<TApplication> *"ゲームタイトル"というのと
<TTVPMainForm> *"吉里吉里 Control"というウィンドウもあったりします
かたやVCLフレームワークの汎用クラス、かたやゲームタイトルじゃないという具合なので
基本的には<TTVPWindowForm> *"ゲームタイトル"で良いと思います

それとあまり機会に乏しいかもしれまんせが、[funnel]を使っていて気づいた事を一つ
「条件,アドレス,バイト列」といった書き方のSSFですが、実はアドレスの方が先に評価されます
そしてアドレスが0と評価されると、条件に関係なく偽となって次の検証に進んでしまいます
なので条件次第で何もせず抜けたいというとき、「真式」や「真式,0」のみだと抜けられません
「真式,-1」や「真式,1」とする事でbreak的な操作ができます※バイト列が空だと処理しません
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.441)
投稿日 : 2017/02/28(Tue) 01:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : 0wW46ZR8YCwMnrCWLa8JV/
参照先
>>440 七星さん
成程、固有モジュールという記述もアリですね。
ということで、ウディタ2.20betaが更新されたのを機に早速、ウディタ解析用SSGで
[process]Game.exe :GuruGuruSMF4.dll
[process] :GuruGuruSMF4.dll
[process]Game.exe
という記述にしてみました。(ただ、GuruGuruSMF4.dll は別に固有モジュールというわけでも無いみたいですね)
これで、実行ファイル名を「Game.exe」から意図的に変更しているウディタ作品も捕捉できそうです。(スーパードラモンクエストとか)
>私も何故ウディタクラスが文章なのか不思議です、そのまま所かタイトルも接頭されだしたので仕様なのでしょう
確かに・・・先程確認した最新の2.20ベータでは、

キャプション:ウルファールのサンプルゲーム      F4:画面変更 / F8:情報変更
クラス:ウルファールのサンプルゲーム 起動中です、この処理にはしばらく時間がかかることがあります

となっていました。これでは汎用SSGでクラスとキャプションは使えませんね(苦笑)

それと、[funnel]の情報ありがとうございます。
条件式よりアドレスの方が先に評価されるのですか・・・これは全く気付きませんでした。
ファンネルファイルのアドレスに三項演算子を使って、偽式を0にして偽判定だと、
その行の条件式は機能しないということですね・・・
「真式,-1」や「真式,1」とすれば、条件式は機能するわけですか。
これは確りと覚えておきたいと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.442)
投稿日 : 2017/03/02(Thu) 05:16
投稿者 のび
ID情報 : N4e0EHyCC1UZeOkrjQtTf.
参照先
どうも、こんばんわです。いや、おはような時間になっておりました。winmm.dllのパーサーの部分Parsing.cを見てみました。
そして、ツクール系のキーを見るところをシンプルにするようなのを作ってみました。パーサーに入れてみました。
そして、RGSS300なゲームひとつ確認してみました。

↓これが
[:$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+$cns:]=>base;_RGSSFindKeyAddr=>base;

keyとbaseを入れて_RGSSFindKeyAddrを呼ぶという感じです

こんな実装いかがでしょうという提案です。

それではお休みなさいませ。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.443)
投稿日 : 2017/03/02(Thu) 12:22
投稿者 七星◆MH.ms4.V3i2
ID情報 : Z74HqRslc7LOTW4i0xdFW0
参照先
>>441 amateurさん
>GuruGuruSMF4.dllは別に固有モジュールというわけでも無い
SMFループ再生となっていてMIDIファイルを(RPGツクール互換)ループ再生するDLLらしいですね
なくても起動するようですが警告が出るので、実質必須モジュールと言えそうです
ウディタ専用固有ではないけど、まぁ特有に近いものとして一助にはなるでしょうか

それと[funnel]繋がりで、$Addrという項目のアドレスを取得する変数を実装してもらいました
今までは条件式にて$Valで値を参照できるくらいで、汎用ファンネル適用は項目毎に[replace]とか必要でしたが
「use,_$Addr,$4 *$Addr $$」などとしてアドレスを合わせたり、書き込まれた値を取得する事も簡単になりました
ただrealな項目だと$Addrは未定義で、offsetな項目だと[replace]と[adjustment]は未処理なので注意が必要です↓
>「チェインファイルに書いたアドレス」は[replace]等の属性の影響を受けますが、オフセット値は属性に関係なく、書いたとおりの値
↑これも定数を書いた場合の話なので、アドレスコーディングではオフセット演算子の使用が必要になりますが。

この変数は[funnel]に限らず[io_fep]や[enabled]、チェインファイルからも参照できるので、$Idxと同じ感じですね
ごく普通なトグル項目のバイト列でも汎用的にアクセスアドレスを取得して、現在の値を間接参照するような事もできます
項目のアドレス部で使っても無限ループするような事はないですが、常に前回の評価アドレスが返ります(初回は未定義
(人の褌で説明をする様な真似)


>>442 のびさん
添付ファイルも見当たらないので一体何をどうしたのかよく分かりませんが
修正パッチのパーサーにRGSSのリンクリスト検索関数を実装ということでしょうか
修正パッチに実装するなら専用の関数ではなく、SSGから関数を登録するとか
while文であるとか、抽象化された汎用機能になると思います(実装方法はともかく

代替案とは言えませんが、現状の修正パッチでも
※RICKさんのRPGツクールVX Ace.ssgから引用、修正を加えたものです
[involve]Game

[group]RGSSFindKeyAddr
[define RGSSFindKeyAddr]base;\
[!R $Val, (*$base == $key ? $base : [:$base + 0x0C:]) => base; !]\
(*$base == $key ? $base : 0)
[/group]

[group]address_money
0x466B => key;
[:(MName::RGSS301.dll | MName::RGSS300.dll) + 0x002AC044:] => tmp;
[:$tmp + 0x04:] => modulo;
[:[:$tmp + 0x0C:] + ($modulo ? $key % $modulo * 4 : 0):] => {RGSSFindKeyAddr} => base;
[:[:*[:$base + 0x08:] + 0x04:] + 0x0C:] + 0x04
[/group]

[/involve]

[repeat]Game->RGSSFindKeyAddr,10,11
[io_fep]$Val * 2 + 1,($Val - 1) idiv 2
[subject]所持金:calc,@Game->address_money,0,2000000000
[/io_fep]

などとして、記述量を抑えつつ[repeat]開始値と終了値で検索数を調整する事くらいなら可能です
(whileできない以上不完全ですし、常に設定数だけ評価を続けるので非効率極まりないですが

>>444 のびさん
この部分の名前…というかこれは連結リスト(リンクリスト)構造ですよね?
専用機能を入れるかどうかは変態紳士さんの裁量次第になるかと思いますが
あれもこれもとなるとその度に追加実装しなければならくなるのでおそらく…
あるいはプラグインDLL仕様でも作って追加演算子を処理させるとかになる気が…あまりしないですね(´・ω・`)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.444)
投稿日 : 2017/03/02(Thu) 16:06
投稿者 のび
ID情報 : N4e0EHyCC1UZeOkrjQtTf.
参照先
>>443 七星さん
修正箇所の説明を添付します。
説明はへたなので、チンプンカンプンでしょうか。

あと、この部分の名前は「キーリスト」なのですね。KeyAddrをKeyListにしてみました

修正箇所の添付はしましたが、そもそもパーサーに固有の機能は入れられないのなら、話はここまでにします。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.445)
投稿日 : 2017/03/02(Thu) 16:15
投稿者 のび
ID情報 : N4e0EHyCC1UZeOkrjQtTf.
参照先
あ、なにか脳内補正をしてしまいました「リンクリスト」でしたか。
LinkListと妥当な名前にしてください。失礼しました。

>>443 七星さん
うお!444の返信を443に入れてたのですね。では俺もこれを再編集。

そういやこれはリスト構造ですね。そんな名称すっかり忘れておりました。単方向やら双方向やら
ということは、FindLinkListでもFindKeyListでもなく、最初のFindKeyAddr(アドレスを得るので)でよいのですね。

プラグインDLLにしてしまえば、アドレス保持も自由に出来ますから、SSGをもっと小さい記述にすることも可能ですね。
ただ、winmmとの連携やら仕様やらライブラリやら、そんな長期開発になるかもしれないものは、ここではいかがなものでしょう。と思うところであります。
もうすでにすごいことになっておりますよね。ここまでになっているとは、全然気がつきませんでした。

ではこの件、いらん話でしたらここまでで。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.446)
投稿日 : 2017/03/02(Thu) 21:20
投稿者 amateur◆kR..xsXL6RU
ID情報 : cRLj4gf.iwgNgVWEuLvVy0
参照先
>>443 七星さん
私が確認した限りでは、ウディタのゲームでは全てGuruGuruSMF4.dllが入ってましたので、
プロセス捕捉には使えそうですね。

>$Addrという項目のアドレスを取得する変数
これはまた便利そうな変数が!
解説ありがとうございます。
ざっと試しましたが、[io_fep]や[enabled]、d_listのチェインファイル等でも動作していました。
仰るとおり、トグルのバイト列でも機能していますね。

>offsetな項目だと[replace]と[adjustment]は未処理なので注意が必要です
これは、HowToSSGを読んでも初めは分かりにくい仕様ですね。
要するに、一括系やダブル系の項目本体のアドレスについては、
たとえ定数であっても[replace]のオフセット値加算等はされないので、
そういう場合の"$Addr"は、オフセット値加算等のない値になる(チェインファイルのアドレスも加算されないのでアクセスアドレスとはズレる)、
というわけですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.447)
投稿日 : 2017/03/08(Wed) 19:24
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
SSGとはあまり関係ないですが、Visual Studio 2017が正式リリースされました
とは云ってもVSデバッガーはpdbありきというか、解析向けにもアレですけど
ただのインポート/エクスポートシンボルはサジェストしてくれなかったり…
修正パッチをビルトできるよ!とかソースがどう機械語になるのか研究したりでしょうか
エディタだけ使うにしてもVisual Studio Codeとかいくらでもあった気がしますし

インストールコンポーネントを個別に選べるようになりましたが(取捨選択にも知識が必要かな…
C++環境だけでも割とでかく2GB強、SDK次第で4GBくらい必要でしょうか、C#環境も入れると7GB前後に

ついでに>>427が呼び出し元の変更だけでコードが収まったので副作用のないものに
ローカル書き込みでAL以外が対象でも使えます、懸念事項は今後の修正パッチとの衝突のみでしょうか


>>446 amateurさん
身も蓋もない手段ですがオフセット周りは6.0ソースを読んだ方が分かりやすいかもしれません
アドレス計算はsrc\TSSGCtrl\SSGCtrl.cppの1485行目、TSSGCtrl::GetAddressに集約されますが
[replace]や[adjustment]を適用しているのは1508行目で呼び出しているAddressAttributeFilterです
即ち、アドレス開始文字が「_」、「@」、「h」、「m」のいずれでもない場合のみとなります
加えてoffsetな項目自体にはMode=0(いかなる属性も適用しない)で呼び出されるので常に適用されません
チェインアドレスに$Addrを使う場合、コーディングにせざるを得ないので、どちらかで演算子による適用が必要ですね

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.448)
投稿日 : 2017/03/08(Wed) 22:37
投稿者 amateur◆kR..xsXL6RU
ID情報 : k9VxXZvZHOFHIdlXPdPbI.
参照先
>>447 七星さん
Visual Studioといえば、以前からスクショを何度か貼っていただいている、
あの凄そうなデバッガが付いているものでしょうか。
4GBとか7GBとかファイルサイズも凄いんですね(下手なゲームよりもデカい・・・)
私に使いこなせるかはかなり怪しいです(大汗)
うさみみだと正確に逆アセンブルできないゲームが時々あるので、
本格的なデバッガが必要かな、とは思うのですが・・・
逆アセンブルしても理解できない場合も多いので、結局宝の持ち腐れになりそうです。

以前別のデバッガも使おうとしたのですが、
検索用にうさみみ使って、それとは別にデバッガ立ち上げて、となるとアレコレとアプリ立ち上げすぎでモニタの画面がゴチャゴチャに・・・
結局元に戻してうさみみ一本で無理矢理何とかしてる状況です。
解析してるゲーム以外にSpoilerAL、うさみみ、LibreOffice、MDX(メモリデータ抽出用)、テキストエディタ(複数の場合も)、その他必要に応じてテキスト整形ツール等々、
今でも大概訳分からない状態ですけど・・・

>ついでに>>427が呼び出し元の変更だけでコードが収まったので副作用のないものに
>>427のSSGの改良版ですね。ありがとうございます。
SpoilerAL以外でも使えるとのことで、
自分用に現在チマチマ作ってるSSGで使ってみようと思います。
d_listでアドレスネーミング部分含め、リスト3つは行数が多くなって鬱陶しいので、
これが使えるとSSGの行数圧縮になりそうで助かります。

>アドレス開始文字が「_」、「@」、「h」、「m」のいずれでもない場合のみ
ソースからの解説ありがとうございます。
やっぱり「_」や「@」から始まる場合はオフセット値加算等はないのですね。

>チェインアドレスに$Addrを使う場合、コーディングにせざるを得ないので、どちらかで演算子による適用が必要ですね
やはり、項目本体のアドレスで[..]等を使うか、チェインファイルの方で[..]等を使うか、ですね。
チェインファイルは数百行以上となる場合も珍しくないので、
そちらで$Addrに演算子使うと同じ記述を大量に繰り返すことになりそうですから、
項目本体で演算子使った方が効率的でしょうか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.449)
投稿日 : 2017/03/08(Wed) 23:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : k9VxXZvZHOFHIdlXPdPbI.
参照先
雑談掲示版の方で話題になったのですが、
アドレスネーミングでサイズを1バイト(2バイトでも同様)指定して、「%d」「%+d」と書式指定しても負数を表示できないようです。
負数を表示できるのは、サイズを4バイトと指定した場合のみ、のようですね。
これは、_fmt、_mem、<# #>、のどれを使っても同様で、
書式指定フィールド自体の問題のような気がします

参考に、SSGを添付します(対象プロセスはSpoilerAL.exeなのでSpoilerALを起動してSSG選択するだけでOK)
なお、動作には変態紳士さんのSpoilerAL修正パッチ(できるだけ新しいもの)適用が必要です。

このことは私も以前から気になっていたのですが、
私にはどうすれば解決できるのか分かりませんので、皆さんのお知恵を貸していただければ幸いです。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.450)
投稿日 : 2017/03/09(Thu) 01:24
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>448-449 amateurさん
そうですコレです、GUIデザイナーとかで視覚的に構築できるあたりがVisualなんでしょうか、主用途はアプリの作成です。
なので添付画像のようにデバッグ情報とソースを突き合わせた使い方がメインで…(画面は修正パッチに同封されているソース
既存プロセスへのアタッチも勿論可能ですが、読み込みブレークやら無かったりと解析機能はさほどでもないです
ただ実際に自分でC++をコンパイルしたマシンコードを見ると逆アセンブルへの理解も深まる所はあります
自社プラットフォームの充実という目論見もあるのでしょうが、個人開発者ならPro相当が無償というのも時代を感じます(2013からですけど

うさみみはよく作り込まれていると思いますが、未対応命令が出てくるとその後まで崩れてしまうので困り所ですね
有名すぎて偽装しないと椎名里緒とか検知してシレっと落ちるエンジンを思い出しました

以前挙がったx64dbgもDigital Travesiaで紹介されてますが、ローカライズは遅々としている様子
右端の雲ボタンからts(xml)をDLして自分で翻訳してQt Linguistとやらでtranslationsに入れるqmファイルを作れば良いのかもしれないですが。
まぁしかし何というか高機能になるほどUIが雑多というかゴチャゴチャしてきますね(失礼
デバッガはあまり漁っていないのでドレが良いとか語れるほどではなかったり

メモリデータ周りならNEExploiTさんがしていた様なスクリプト言語からWindowsAPIを呼び出すとかやると
汎用ツールでは対応しきれない追跡も自分でスクリプト組んで…も良いですね(APIとスクリプト知識が要るけど…私はPython
Office…OfficeもVBA使えばWindowsAPI呼び出してアレコレ出来るのかな?


さて雑談掲示板、そういえば全然見ていませんでした。これは書式が符号ありでもALは特に符号拡張というものをしてないので仕様といえば仕様というか原因です
アドレスネーミングで4バイト未満を符号付きとして扱うには、<# #>か_fmtを使ってコーディングで値を読み出し、追加された演算子I1toI4::あるいはI2toI4::を使います
この時_fmtを使うならサイズは常に4とします、4未満にすると符号ビットごと削られてフォーマット関数に渡ります(読み出すサイズはポインタ変換演算子で調整
リストなどで負数を扱うときも[io_fep]とかでコレをやらないと読み込み時にリストとマッチしない場合があったような気もします

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.451)
投稿日 : 2017/03/09(Thu) 02:13
投稿者 amateur◆kR..xsXL6RU
ID情報 : k9VxXZvZHOFHIdlXPdPbI.
参照先
>>450 七星さん
Visual Studioってプログラム組むのに使うんだろうな、という程度しか知りませんでしたので、
ゲーム解析にも使えるのかあ、と意外に思っていました。

うさみみは、時々対策されて落ちることがありますよね。
ある程度知名度のあるツールは対策されてしまうのも致し方なしでしょうか。
x64dbgは、NEExploiTさんが以前教えてくださいましたが、日本語化はまだなんですね。
国産の本格的なデバッガがあれば、とも思いますが、
私の場合、ツールに文句つけるより先ず自分の知識習得の方が優先すべきと思います。

>スクリプト言語からWindowsAPIを呼び出すとか・・・
そんな方法があるとは・・・まだまだ勉強不足です(というかプログラムの勉強は全くといっていいほどしてない・・・)

それと、アドレスネーミングで負数表示させる件、フォローありがとうございます!
教えていただいたとおり書いてみたところ無事、1バイト・2バイトの値で負数表示できました。(添付SSGのとおり)
_fmtや<# #>なら、符号付32bitキャストを使用することで出来るのですね。
Cast64:: は一度だけ使ったことがあるのですが、
I1toI4:: やI2toI4:: を使ったことがなく、勉強になりました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.452)
投稿日 : 2017/03/11(Sat) 01:50
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>451 amateurさん
例えばLibreOfficeだと「ツール」→「マクロ」→「マクロの編集」で↓のような物を書いて
SpoilerAL起動中に実行するとIMAGE_DOS_HEADER->e_lfanewの値を表示することが出来ますね

Declare Function FindWindowA Lib "user32" (lpClassName As String, lpWindowName As String) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Declare Function Toolhelp32ReadProcessMemory Lib "kernel32" (ByVal th32ProcessID As Long, ByVal lpBaseAddress As Long, lpBuffer As Variant, ByVal cbRead As Long, lpNumberOfBytesRead As Long) As Boolean

Sub Main

Dim pid As Long
Dim dos(31) As Integer
Dim numberOfBytesRead As Long

GetWindowThreadProcessId(FindWindowA("TMainForm", "SpoilerAL"), pid)
Toolhelp32ReadProcessMemory(pid, &H00400000, dos, &H40, numberOfBytesRead)
print dos(31) * 2 ^ 16 Or dos(30)

End Sub


ただVBAは引数がデフォルトで参照渡しなのを始め、一般的な言語とは色々かけ離れている所がありますし
アクセス違反すると即クラッシュでお奨めできないかもしれないですね(Officeとか全く使わないので基礎文法を調べるだけで力尽きました

ちなみにアセンブラレベルでもmovsxという符号拡張命令があったりします
しかし負数は専らintで扱われるでしょうから、ゼロ拡張するmovzxより見かけなそうですが
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.453)
投稿日 : 2017/03/11(Sat) 17:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : e9jr.BYdPyZ2cH/K5iYdj/
参照先
>>452 七星さん
VBAでこんなことが出来るのですね。
わざわざ調べてくださって有難うございます。
私ではVBA使いこなせるか怪しいですけど・・・
エクセルでもマクロをほとんど使ったことがなかったり。

>アセンブラレベルでもmovsxという符号拡張命令があったりします
movsxの符号拡張ってそういう意味だったのですね。
movzxのゼロ拡張も、以前適当にググって解説読んでも今一イメージが掴めなかったのですが、
改めて符号拡張・ゼロ拡張の解説読むと、I1toI4::やI2toI4::のやってることが理解できました。
このページあたりを読むと成程という感じです。
具体例で考えると理解しやすいですね。
教えてくださって有難うございます。

実は、今自分用に作ってるSSGで、"I2toI4::"を使ってアドレスネーミングで負数表示できるようになり、
早速実戦で役立っています。
10年以上前の古いゲームだからか、メモリの使い方がケチ(?)で、値が2バイト単位なのが多かったりで。
古いゲームの方が、SSGを書くという観点では難しい場合が多いですね。
少し前にSSGを書いていた別の古いゲームでは、2バイトのうち、
上位4bit(アイテム個数)と下位12bit(アイテムID)で別のフラグを格納していて、
[io_fep]でビット演算通さないと正常に書換えできない項目があり、
しかも項目本体がlistなので、SpoilerAL修正パッチで[io_fep]がlistにも効くようになったのが早速役立つということも・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.454)
投稿日 : 2017/03/11(Sat) 22:23
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>453 amateurさん
ネイティブDLLのエクスポート関数を呼び出すというのは大抵の言語でありそうです
その場合は構造化例外処理が入っているのが一般的だと思うのですが…
エクセルだとマクロよりエクセル関数という感じで相対的に解説も少ない気がしますね

メモリが限られていると、バイトの切り詰めは勿論、ビットフィールドはザラですね
ビットフィールドだと書き込み時には現在値も必要になるので$Addr共々使われていたりでしょうか
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.455)
投稿日 : 2017/03/11(Sat) 23:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : e9jr.BYdPyZ2cH/K5iYdj/
参照先
>>454 七星さん
>ビットフィールドだと書き込み時には現在値も必要になるので$Addr共々使われていたりでしょうか
あっ、ご指摘を受けて気付きましたが、今だと$Addrが使えますね!
この間書いた際は、まだ$Addrが採用されていなかったので、下記のように書いたのですが、

[io_fep]([:(項目のアドレス):2]&0xF000)+$Val, $Val&0x0FFF
[subject]アイテム名【 '+' _mem, (項目のアドレス), 2,fep_list ,--,ssl->アイテムリスト,0,1 '+' 】/_: list, (項目のアドレス), ssl->アイテムリスト, 0, 1, fep
[/io_fep]

今だと、上記の[io_fep]の"(項目のアドレス)"の部分に、$Addrが使えるというわけですね。

追記
先程気付いたのですが、$Addrについて、
アドレスネーミングの「アドレス」等の部分にも一応使えるようですね。
ただ、当該項目に一度アクセス(クリック)するまでは、
"_mem"の場合は、エラー時の代替文字列を表示し、
"_fmt"と"<# #>"の場合は、$Addrが未定義で?「0」となって正常に表示しませんが、
項目に一度アクセスした後は正常表示するようです。
項目数がある程度以上多いと、一々各項目にアクセスしないと正常表示しないのは面倒なので、
アドレスネーミングに$Addrを使うのは実用的ではなさそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.456)
投稿日 : 2017/03/12(Sun) 23:16
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>455 amateurさん
アドレス取得変数のために新たな負荷を増やすのは…という理由から
読み書き時の算出アドレスを項目にキャッシュして参照する実装にしたので
「現在値もツリーに表示する」でもしていないと初っぱな0は仕様ですね

三項演算子で$Addr判定しておいて算出後は重複演算を省く、あたりでしょうか
そういう意味では[enabled]の判定もアドレス計算より先んじて行われるので
$Addrを元に制御する場合は、0ならスルーして有効にしないと進まなくなります
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.457)
投稿日 : 2017/03/13(Mon) 03:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : berLq5VU7y5UJg00Q8DdY.
参照先
>>456 七星さん
>「現在値もツリーに表示する」でもしていないと初っぱな0は仕様ですね
やはり仕様ですよね。まだ項目にアクセスしてないので$Addrは0となるのが当然と・・・
(項目のアドレスは動的展開だと思うのでアクセス前は未定義でしょうし)
「現在値もツリーに表示する」なら最初から表示できるのは気付きませんでした。

>三項演算子で$Addr判定しておいて算出後は重複演算を省く
成程、こういう風に同じアドレス算出のための演算を省いて処理の高速化を図れるわけですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.458)
投稿日 : 2017/03/21(Tue) 05:08
投稿者 amateur◆kR..xsXL6RU
ID情報 : dE2TkFjKviyqygZ41jtKR/
参照先
--------------------------------------------------------
(あまりにみっともない文章だったので削除しました)
(不快に思われた方にお詫び申し上げます)
--------------------------------------------------------
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.459)
投稿日 : 2017/03/22(Wed) 19:29
投稿者 dipper◆LEFxdWWYR3c
ID情報 : 7BSCo/bEOmOaEcZfRuR7L1
参照先
最近amateurさんのコメントに対して否定的なコメントが付きやすくなっている気がします…ちょっと気がかりです。
もっとも、余計な心配かも知れませんが。

別スレの方たちは、amateurさんのようなコメントがあるからSSGが作られないと言っている様ですが、
私に限っては、その方たちのコメントの方が、SSGを作る意欲がなくなるのですが…
そんな事を言うと「お前には頼んでない」と言われそうですけど。

スレ違いなコメントで申し訳ありません。


※追記

>>460 名無しさん
>>461 ナスさん

結果論ですけど、スレ主がお礼を述べている時点でamateurさんに問題はなく、スレ主の依頼は終了しているかと思います。
(amateurさんはスレ主に宛ててコメントしていると思うので)
それに伴い、第三者がSSGを所望するのは別件なのでは思えます。
少なくとも、SSGの作成を依頼せず、非難される様な内容ではないと思うのですけど。

ですが、トラブルを未然に防ぐには、そういった配慮も、やはり必要かも知れませんね。
ただ、あまり配慮しすぎると「第三者>質問者」みたいな図式になってしまいそうですが…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.460)
投稿日 : 2017/03/22(Wed) 20:13
投稿者 名無し
ID情報 : hEUWtrzJyNrF46wwal.8C/
参照先
amateurさんは言ってることは正しいけど
まじめすぎて相手の挑発に乗ってしまったり
時折失言気味に余計なこと言ったりしたりしたせいで敵を多く作ってしまった感じがしますね

SSG作成可能なゲームでSSGの代わりにツールを紹介する場合
今回のようにスレが立ってすぐに紹介するのではなく
しばらくレスがつかなかった時に
こういうのがあるので試してみてくださいといった感じでやれば
少しは違った結果になるのかもしれません

追記
臨時板の方でもSSGが欲しいと書いていない場合でもSSGが欲しかったと文句を言うケースがあったように
SSGが欲しいと書かれていない場合でもSSGが欲しいと思っている人が多いと思ったほうがいいのかもしれません
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.461)
投稿日 : 2017/03/22(Wed) 23:04
投稿者 ナス◆7u.0h1NDCYM
ID情報 : bxr0JMq7V6PP1zFvhmJG61
参照先
苦情を書くなとは言いませんが、一定の礼儀や節度は守ってほしいです
amateurさんの書き込みを悪し様にとらえてゆがめていますし、本人の書き込みも何が言いたいのかわかりにくい。
苦情の中身を伝えようとする意志が感じられないので、無責任な誹謗中傷とそう変わらない印象を受けてしまう。

ただ、ほかの人の書き込みから汎用ツールの紹介については考えた方がいいんでしょうね。
amateurさんの早めのレスポンスは善意であると思うので非常に心苦しいのですが……
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.462)
投稿日 : 2017/03/23(Thu) 00:24
投稿者 admi
ID情報 : bT7/wUBoiH/tMN7McZoek/
参照先
吉里吉里ツールとSSGの違いって手動でプロセス更新することくらいなのにSSGを求める理由はなんなんだ・・・?
今後SSGより汎用ツールが主要になる可能性は?
と考えると解析側と雛鳥側の認識が違うことも大きいだろうね。
 
ただ解ってない人に長文かつ正論で怒っても伝わるわけがないんだよな。
理解ある人はそこまで書かなくても理解しているだろうですしおすし。
「改造=SSGという認識の改定と周知を求めていく」程度の短文だったら理解も得やすい気がします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.463)
投稿日 : 2017/03/23(Thu) 20:01
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
使い慣れた形式でなければダメだ、ちまちま金策とかしてられないから改造したいのに自分で解析しろでは意味がない
…というのも理解できる部分はありますし、うさみみ検索で済むよ、とかは確かに身も蓋もない話でしょうけど
各自で解決できる簡便な代替手段がある場合には、SSGで車輪の再発明のような真似をする意味もまた疑義が生じる所ですね

実際問題として全てを丸投げしていると、限定販売で体験版もないようなゲームどうするのって場合もありますし
仮に高々数個の変動検索で済んでしまうとか、汎用ツールで簡単に改造できてしまうような場合においても
是が非でもSSGを待つというのは、ゲームの旬が過ぎたり、時間の無駄なのではないかと思いますが

詰まる所、元祖の頃から今でも利用規約には「希望意思を含まない行間を察せよ的サポート発言は、削除対象」とありますし
あの様な輩の対処法は総じて放置してくださいと書かれていますので、言い返さずともスルーしておけば良いかと存じます
ツール紹介なぞ邪魔になる、とまで言うならWEBサイトの方にもツール情報のページがありますし、丸々スルーでも問題はなさそうです

(管理者任せにするのもどうかという話もありますが、自治のような真似をすると
 どれだけ貢献している人であっても“管理者でもないくせに”という声は挙がるでしょうしね

以前、元祖掲示板での事が心残りだと書かれていましたが、アレが影を落としているのなら気にする必要は無いです
元々あの人(すっとぼけ)はARCGameEngineをはじめ、メモリが特殊なものくらいしかSSGを投稿していませんでしたし
リクエストに応じて作っていた訳ではないです。仰る様に汎用プロセスメモリエディタより合理的だったというだけです

無断流用については、作者が別ゲームのスレッドでご自由にどうぞと云っていたのもあるのでしょうが、
そのスレッドでは言及していなかった事、原則として自力で研究・作成したものに留めてください。とある事、
コード断片ではなく、ちゃんとしたSSGとして投稿された物から、断りなく足りない物のみを拝借する様な行為だったので
苦言というより、その辺の分別付いてないのではないか程度のメ欄だかURL欄へのツッコミでした

かの愚か者という云々にしても、皆よく訓練されたスルースキルだ、と感心したくらいです。マナー云々を咎めるのは大人気ないというより
それは親が躾けるなり、対人コミュニケーションの過程で学ぶものであって、まぁリアルであれば騒いでる人がいれば雰囲気も悪くなるでしょうけど
荒らしに反応する人もまた荒らしと言われるくらい、ネットでは放置が不文律というか、粛々とスレを進め落としていくのが定石だと思いますし
加えて掲示板は対面会話ではないので、書き手は読み手を慮りづらいですし、読み手も文章を額面通り捉えがちという点も留意すべきでしょうか
「これアダルトゲームだよなぁ、18歳過ぎてこんな物言いなのかなぁ」くらいに思っておけば、別段腹も立たぬというものです
スレッド主旨から外れた関係のない言い合いが続く方が、予算委員会宜しく荒れているなぁと感じます

確かにあれからSSGを投稿する機会は減りましたが、それは単に時の流れというか、歳食ってゲーム自体に興が薄れたのもありますし
やはり原則自力でのしきたりを重んじ、他人のコードをマージしたりは憚られるので(他人のコードと干渉しないかとか検証なぞしたくないというもありますが
主導的にSSGを作るよりも、汎用ゲームエンジンの採用も増えてきたことですし、下地を提供し後進の育成に励もうというスタンスになっただけですね


個人的にはSSGにしろ、MVセーブエディタにしろ、テキストファイルですから、是非自分で弄ってみて(私のは教材としては拙いですが)仕組みを学んでほしいと願っています
(MVはウィンドウを持つプロセスではなく、レンダラープロセス―それもコマンドライン見ても絞り込めない、何かしら判別できそうだけど―なのでAL単体での捕捉は相変わらず…
 しかしデベロッパーコンソールからJavaScriptを打ち込めば、マップ遷移も任意エンカウントも何でも自由自在です、SSGに固執しているとこういう恩恵は受けられません
改造して楽したいのに、改造するために労力を使うなんて本末転倒だ、という人には相容れないかもしれないですが。(決して改造依頼をするなという話ではないですよ
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.464)
投稿日 : 2017/03/24(Fri) 03:28
投稿者 (仔猫)◆KCezBilYINU
ID情報 : Nn.DpA2RuaOK4c7rR5uRx0
参照先
amateurさん申し訳ないです。
該当スレのリンクを張ったせいでご迷惑をおかけしました(ちなみにリンク元は"【改造依頼】魔剣士リーネ2 "の記事No.11へのレス、記事No.9です。該当スレにも書き込んでしまったし…考え足らずでした。こちらを先に見るべきでした)

一部記事を訂正しました。

PS.やはりID表示は必要では?と思ったり。

>>465
ええ、それです。確か臨時板ではID表示があった記憶が…それでか無茶な書き込みする人が少なかった気がします。
RICKさんも以前、ID表示も検討するようなことを書かれてたので…。

>スパム
あ、海外からの書き込みの可能性もありますか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.465)
投稿日 : 2017/03/24(Fri) 04:55
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : M2CKbGI707g1aTnYCCc6g.
参照先
>>464 (仔猫)さん
>ID表示
PINKちゃんねるで見かけるようなものですかね。

書き込まれた日にスパムも書き込まれているので
日本語を使った新手のスパムだという事にしておきます。
(たまに「夫がワニに噛まれました」とかお便りが届く)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.466)
投稿日 : 2017/03/24(Fri) 21:49
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : ybAdnDHIbTvhaygQtEj2f1
参照先
>>ID表示
そもそもこの掲示板にはIDを生成する機能がないので実装するのはかなり難しいです。

>>汎用ツールについて
おそらく使い方がわからない人にとっては無用の長物なのでしょう。
かといって調べたところで情報があるわけでもなく・・・

そう考えるとツールの使用方法をまとめた何かを作ることが必要かもしれませんね。

私が全てのツールを使いこなせるわけではないのでドキュメントを充実させるなら
皆で協力して編集可能なWikiぐらいが適当でしょうか?

>>吉里吉里解析ツールについて
あれが吐き出すSSGのコードは6.2で使えるコードでしたっけ?

吉里吉里製ゲームにおいては吉里吉里解析ツールがあればうさみみ等も不要になるので
吉里吉里解析ツールからSSGを作る方法を何らかの方法でまとめれば
吉里吉里製ゲームにおいては自力でSSGを作る人が増えて来るかもしれませんね。

個人的には吉里吉里解析スレッドを立てたいところですが、
吉里吉里解析ツールを制作していただいているkn氏に立てて頂きたいと考えています。
(吉里吉里解析ツールをスレッドトップに配置して、スレッドトップで更新していただくため)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.467)
投稿日 : 2017/03/24(Fri) 22:26
投稿者 ナス◆7u.0h1NDCYM
ID情報 : bxr0JMq7V6PP1zFvhmJG61
参照先
>>466  RICK(管理人)さん
いつもお世話になっております。

>>>吉里吉里解析ツールについて
>あれが吐き出すSSGのコードは6.2で使えるコードでしたっけ?
そのまま6.2では使えないようです(VenusBlood-HYPNO-のSSGを作るときに確認しました)
とはいえ

($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)

(($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2))

と|を含む式を()で挟めば大丈夫なようですが
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.468)
投稿日 : 2017/03/24(Fri) 23:15
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : M2CKbGI707g1aTnYCCc6g.
参照先
>>466 RICK(管理人)さん
>6.2で使えるコードでしたっけ?

以下のような事になっています。
No.229 変態紳士
No.247 knさん
No.248 変態紳士

No.229 knさんが長期不在なので許可を貰わず6.2に対応するファイルを添付
No.247 別件でknさんのレス
No.248 分かりにくい内容だけど、勝手にアップロードしていると連絡(問題があれば削除すると)

その後は見かけていません。
察するに忙しいのではないかと思います。(スレッドも難しい?かどうか勝手に決めてはいけませんが)
今の所、No.229のファイルはグレーです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.469)
投稿日 : 2017/03/24(Fri) 23:42
投稿者 amateur◆kR..xsXL6RU
ID情報 : HQlnB/z8TCrLDEyabyt/30
参照先
>>皆さん
私の駄文でまたお騒がせしてしまい、申し訳ありません。
内容以前にレスしたこと自体が余計なことでしたね・・・余計なこととは半ば承知で書いたのですが。
(休日出勤で仕事終わったのが午前3時半でテンションおかしかったのも・・・)
ちょっと頭冷やすため(と年度末進行で珍しく多忙で)数日掲示板から離れていました。

スルースキルというか、今後は距離の取り方というものを学ぼうと反省中です。(色々出しゃばりすぎだったので)

>>463 七星さん
何と・・・全く気付きませんでした。(今考えるとお名前が似てますね・・・)
例の件は私の勘違いでしたか・・・
勘違いで昔の話を蒸し返して申し訳ありませんでした。

>>464 (仔猫)さん
お目汚しでこちらこそ申し訳ありません。
(仔猫)さんが責任を感じられる要素は何もないと思いますので。
お気遣いいただいて感謝いたします。

今後は目立たないように細々と活動していこうかと思います。
色々レスしてくださった皆さんにお詫びとお礼を申し上げます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.470)
投稿日 : 2017/03/25(Sat) 05:39
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>466 RICKさん
WEB PATIOのID情報は認証モードのアカウント表示用みたいですね
patio.cgiのread_logサブルーチンに2ヵ所ある認証モードelse節でID情報が削られる所を
親は「$tmpl =~ s/!id!/hoge/g;」、レスは「$tmp =~ s/p5jM6fG8hm1S92uAEZ7lB//hoge/g;」で任意のID情報にできます
ログにUA情報は無いけど最低限IP($ho)があるので、実装するなら適当なハッシュ関数を噛ましてでしょうか
あとは…タイムスタンプ($tim)を元にsalt生成すれば一定周期でアルゴリズムを変えれるくらいが関の山?

>>469 amateurさん
SSG傾向でヴァレヴァレかと思ってましたが…尤もアレは“ななしの ごんべえ”由来でコテハンとも云えず時折被ってましたが
勘違いというより、それほどまで気になる事案ではなかったですが、投稿形式を考え直す切っ掛けにはなりましたね
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.471)
投稿日 : 2017/03/25(Sat) 06:39
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : ybAdnDHIbTvhaygQtEj2f1
参照先
>>470 七星さん
>patio.cgiのread_logサブルーチンに2ヵ所ある認証モードelse節でID情報が削られる所を
>親は「$tmpl =~ s/!id!/hoge/g;」、レスは「$tmp =~ s/ybAdnDHIbTvhaygQtEj2f1/hoge/g;」で任意のID情報にできます

この部分は理解できました。さっそく実装しました。

>ログにUA情報は無いけど最低限IP($ho)があるので、実装するなら適当なハッシュ関数を噛ましてでしょうか

そこまでプログラムに強くないのでどうやって呼び出し、どうやって生成し、どうやって返すのかが検討がつきません。
辛うじて表示方法のみ検討がついているのが現状です。

>あとは…saltをタイムスタンプ($tim)を元に生成すれば一定周期でアルゴリズムを変えれるくらいが関の山?

匿名性を考慮してのことでしょうか?
この場合一定周期でIDが変わると思うので自分の書き込みに責任を持ってもらう意味ではこの部分は必要ないかなぁと。

ただし、反省した後でも反省する前の書き込みを元にやじが飛ぶのを防ぐ意味では必要かもと思っていたり。

>>吉里吉里のコードについて
最新パッチでは[define]とwhile文が実装されたので吉里吉里のアドレスコーディングはかなりシンプルになりそうですね。

例えば


[:MName::nul+0x0030EA04:]+0x30=>base;\
0x48058FEE=>hash;\
[:[:$base:]+0x10:]=>tmp1;\
[:[:$base:]+0x18:]=>tmp2;\
($tmp1&$hash)*0x20=>tmp1;\
$tmp2+$tmp1=>ad0;[:$ad0+0x04:]==$hash=>valid0;\
[:$ad0+0x1C:]=>ad1;[:$ad1+0x04:]==$hash=>valid1;\
[:$ad1+0x1C:]=>ad2;[:$ad2+0x04:]==$hash=>valid2;\
[:$ad2+0x1C:]=>ad3;[:$ad3+0x04:]==$hash=>valid3;\
(($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2)|($ad3*$valid3))+0x10=>base;\
0xC8EC7D06=>hash;\
[:$base:]=>base;\
[:$base+0x10:]=>tmp1;\
[:$base+0x18:]=>tmp2;\
($tmp1&$hash)*0x20=>tmp1;\
$tmp2+$tmp1=>ad0;[:$ad0+0x04:]==$hash=>valid0;\
[:$ad0+0x1C:]=>ad1;[:$ad1+0x04:]==$hash=>valid1;\
[:$ad1+0x1C:]=>ad2;[:$ad2+0x04:]==$hash=>valid2;\
(($ad0*$valid0)|($ad1*$valid1)|($ad2*$valid2))+0x10=>base


のコードは


[:MName::nul+0x0030EA04:]+0x30=>base;0x48058FEE=>hash;{find_addr};0xC8EC7D06=>hash;{find_addr};$base


[define find_addr][:[:$base:]+0x10:]=>tmp1;\
[:[:$base:]+0x18:]=>tmp2;\
($tmp1&$hash)*0x20=>tmp1;\
$tmp2+$tmp1=>base;\
$count=30;\
while(([:$base+0x04:]!=$hash)&&$count--)[:$base+0x1C:]=>base;\
$base+0x10=>base


と書き換えられるみたいですし。

RGSSシリーズ(RPGツクールXP/VX/VX Ace)もそうですが、while文はチェイン法には抜群の効果を発揮しますね。
ちなみに3月9日以降に作成したSSGおよび汎用SSGは[define]とwhile文を使って書いています。

$countを設けているのは無限ループを回避するためです。無限ループに陥るとSpoilerALが強制終了するので。
2回か3回かループしていないのに30回ループはやり過ぎかもしれませんが・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.472)
投稿日 : 2017/03/25(Sat) 13:33
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>471 RICKさん
よく使われるのはトリップ然りcrypt()関数ですね、第1引数に対象文字列、第2引数にsalt文字列を与えます
salt文字列によってパターンが変化し、更に接頭辞次第でアルゴリズム及びsalt文字数、ハッシュ長も変化します
最も単純なのは「crypt($ho, $cf{trip_key})」とかすると、init.cgiで設定したトリップ用salt文字列でホスト情報がハッシュ化されます

返されるハッシュの先頭には使用されたsaltを示す文字列が付加され、接頭辞無しのDESアルゴリズムだとsaltは2文字なので
substr(crypt($ho, $cf{trip_key}), 2)」なとどして、salt部分を削り用いるのが通例です※標準DESは対象を8文字までしか評価しません
substr(crypt($ho, '$1$'.substr($date, 0, 7)), 11)」とかだと西暦/月パターンでMD5ハッシュ、同一ホストなら月単位になりますね
(localtime($tim))[7]」でその年の0から始まる経過日数を算出できるので、7で割った値を元に週単位とかも良いかもしれません
salt文字列が「$1$」で始まるとMD5アルゴリズム、「$5$」〜でSHA-256、「$6$」〜でSHA-512、と衝突耐性が向上していきます

挿入には「$tmpl =~ s|!id!|substr(crypt($ho, sprintf('$1$%s%02u', substr($date, 0, 4), (localtime($tim))[7] / 7)), 10)|ge;」とeオプションの併用で
置換文字列へPerlコードを直接記述できます…が、マッチ毎の評価になるので後方参照を使わないなら非効率かもしれないです。(ID情報の置換はどうせ各1回だろうけど
そういえばCloudflareを通すとホスト取得に一工夫必要なような話を見たけど、その辺大丈夫かな…(CGN等のIP共有型もポート情報がないと一意性は…?

Perlは私が初めて触れたスクリプト言語でもありますが、十数年前に少々囓っただけで適切な作法は忘れました

ちなみにRGSSも吉里吉里もハッシュテーブルは線形リストでしょうから、ループ条件は「while($base && [:$base + 0x04:] != $hash)」としておけば
見つからなくて終端に到達すると「[:$base + 0x1C:] => base;」が0となるので、全検索しつつも自動break可能かと思います

追記:優先順位としては!=関係演算子>&&論理演算子なので括弧は必須ではありませんが、分かりにくければ括るのもアリです
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.473)
投稿日 : 2017/03/25(Sat) 18:10
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : ybAdnDHIbTvhaygQtEj2f1
参照先
>>472 七星さん

【ID情報について】
最も単純な永久式のID情報を実装してみました。
しばらくはこれで様子を見てやはり変えるべきと思ったら別のやつに変えようと思います。
いろいろとありがとうございました。

【Cloudflareについて】
最初からmod_cloudflareなるものがインストールされているのでその辺は大丈夫だと思います。
自分はマイIPというサービスで固定IPを拝借しているのですが、そのIPが正常に反映されています。

【RGSSと吉里吉里のアドレスについて】
>while($base && [:$base + 0x04:] != $hash)
確かに終端は0なのでそのように書いたほうが漏れが生じないのでベストかもしれませんね。
あと、これ「while($base && ([:$base + 0x04:] != $hash))」のように括弧がいるような気がするのですが・・・

P.S.
ところで、最近GitとかSourceTree等でSSG等のプロジェクト管理をしている方がいるようですね。
自分も使ってみようと思っているのですが初心者が使うのはどれがおすすめですか?環境はWin10 64bitです。

あと、+は追加、-は削除というのはなんとなくわかるのですが、
@@ -259,13 +274,13 @@というのはどういう意味なのでしょうか?


PPS.
上記の件はどうやらGitとGNU Patchのことを勘違いしていたようです。
お騒がせして申し訳ありませんでした。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.474)
投稿日 : 2017/03/25(Sat) 23:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : f7aKV6YTOUrZmbtEbvyTG1
参照先
>>管理人さん、七星さん
吉里吉里のSSGのwhileを使った書き方、とても参考になりました。有難うございます。
お二人の書いてくださった方法でギアドラのSSGを書き直すと、
物凄く動作が高速化されました。従来は数秒間フリーズしていた特に重い一括系項目も、ほぼ一瞬で書換え可能に・・・驚愕モノです。
whileだと、条件式が偽になったらループが終了するので演算の無駄が省けるわけですね。

whileについては適当にググって解説読んで、SpoilerAL修正パッチに同梱のサンプルSSGが漸く理解できたかなというところで、
実際に吉里吉里のSSGでどうやって書こうかな?と考え中だったのですが、
具体的にお二人が書いてくださったお陰で、whileについてある程度理解できたと思います(まだ色々怪しいですが・・・)

ついでに、修正パッチスレの方でdipperさんが、while文と左辺代入の新機能(ポインタ変換演算子等を用いたアドレスに書き込める)を使えばチェインファイル不要になる旨を書いてくださっていましたが、
漸くwhileをある程度理解できたので、試しに上記のギアドラのSSGに書いた一括トグル項目を、
while等を使ってチェインファイル無しで書いてみました。

-------------
[subject]全614種類のアイテムを一括で店売り品に/ON/_: b_toggle, 0x0, uroboros_CHN->itemClass_CHN,real
-------------
[group]itemClass_CHN
_1=>num;{gfItemN};0x3E527817=>hash;{AD3};{Str},4300
_2=>num;{gfItemN};0x3E527817=>hash;{AD3};{Str},4300
  (中略)
_613=>num;{gfItemN};0x3E527817=>hash;{AD3};{Str},4300
_614=>num;{gfItemN};0x3E527817=>hash;{AD3};{Str},4300
[/group]
-------------
上記の一括トグルと同様の結果が、下記のようにチェインファイル無しでも可能になりますね。
-------------
 // 全アイテムにつき、Unicode文字で「C」と書き込む。「C」はバイト列で「43000000」
[subject]全614種類のアイテムを一括で店売り品(C)に/ON/_: toggle, _L Memory::0, \
$1 id=614;\
while($id--)($id+1=>num;{gfItemN};0x3E527817=>hash;{AD3};{Str}=>ad;[:$ad:]=0x43); 0 $$
-------------

取り敢えず思いつきで書いただけなので、もっと良い書き方があるのかもですが・・・
複雑なバイト列を書き込みたい場合は難があるのかな?(バイト列ではなく、アドレスコーディング中で数値を書き込むことになるので)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.475)
投稿日 : 2017/03/26(Sun) 00:25
投稿者 七星◆MH.ms4.V3i2
ID情報 : p5jM6fG8hm1S92uAEZ7lB/
参照先
>>474 amateurさん
コーディング中の書き込みは少し注意が必要です。ONのバイト列はチェックを入れた時だけでなく
項目の初期化時(サイズ算出)と読み込み時(適用済み判定)でも評価されています

なので$Size && !$Readが満たされる時のみに限定しないと予期しないタイミングで書き込まれます
OFFのバイト列はチェックを外した時にしか評価されないので、このような配慮は不要のはず…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.476)
投稿日 : 2017/03/26(Sun) 03:40
投稿者 amateur◆kR..xsXL6RU
ID情報 : f7aKV6YTOUrZmbtEbvyTG1
参照先
>>475 七星さん
そんな罠がありましたか・・・フォローありがとうございます。
やはり思いつきで適当に書いたら何か問題ありますね(汗)
差替えアップしたSSGの方には書いていなくて良かったです。
>$Size && !$Readが満たされる時のみに限定しないと
実は$Sizeや$Readを理解していなかったり(いつの間にかこんな変数が・・・)
OFFのバイト列なら問題なしなんですね。チェック外すというのが違和感あるので(別のゲームで「チェック外す」で必須コードONということにしたら違和感が・・・)、
どうしたものかと思ったのですが、ファンネルライトに書けば良さそうかなと。

-----------
[funnel]ssl->ItemClassC_funnel
[subject]全614種類のアイテムを一括で店売り品(C)に/ON/_: toggle, _L Memory::0, 01
[/funnel]
-----------
[group]ItemClassC_funnel
use, _L Memory::0, $1 count=614; num=0;\
while($count--)(++$num;{gfItemN};0x3E527817=>hash;{AD3};{Str}=>ad;[:$ad:]=0x43); 0 $$
[/group]
-----------
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.477)
投稿日 : 2017/03/26(Sun) 18:14
投稿者 amateur◆kR..xsXL6RU
ID情報 : 2EFOF2AIfQBv/dGjQvDNj.
参照先
このスレでも以前話題になったリンクリストでデータ格納されている場合、
従来は[repeat]のワードリピート機能を使って書くのが定石だったと思いますが、
変態紳士さんがSpoilerAL修正パッチで最近追加くださったwhileでも書けるのですね。
最近のエンジンでリンクリスト使用の典型例である「SRPG Studio」だと、以下のような感じで。

-------------
 //クラスデータ1個目の先頭アドレス( {BASE}=ベースアドレス。Ver1.084では、$ofs=0xEC )
[define Class] [:[:[:[:{BASE}:]+$ofs:]+0x4:]+0x4:]
[subject]クラスデータ:dir
[repeat]ssl->class_SSR,0,50,1
[back]
-------------
[group]class_SSR
[define ClassData][:Memory::0:L]=>ofs; {Class}=>ad;\
id=$Idx1;\
while($id--)[:$ad+0x4:]=>ad;$ad
[subject][<# $Idx1,%d #>]クラスID【 '+' _mem, _{ClassData}+0x8, 4,num ,??,%d '+' 】【 '+' _mem, _{ClassData}+0x18=>ad; [\:$ad\:], 50, unicode,-- '+' 】:dir
[subject]基準アドレス【0x'+' _fmt, _{ClassData}, 4,num ,??,%08X '+'】/書込み不可/_:calc, _{ClassData}, 0xFFFFF, 0xFFFF0, unsigned
[back]
[undef ClassData]
[/group]
-------------

ワードリピートかwhileのどちらで書いても、普通に書く分には大した違いはないので好きな方で良いと思うのですが、
一つだけ、ワードリピートでは「表示ずらし」の手法を使うのが面倒臭い(出来ないわけではないけど私は悪戦苦闘しました。このスレの過去ログ参照)一方、
whileを使うと表示ずらしが簡単に書けるという違いがありますね。
上記の例だと、whileを使用した[define]の箇所を、
-------------
[define ClassData][:Memory::0:L]=>ofs; {Class}=>ad;\
id=$Idx1+[:Memory::0+0x4:L];\
while($id--)[:$ad+0x4:]=>ad;$ad
-------------
とし、下記のような電卓項目を設ければ簡単です(リスト項目でリストから先頭インデックスを選択してずらす等でもOK)。
[subject]表示するクラスを書込み値【 '+' _mem, _L Memory\:\:0+0x4, 4,num ,??,%d '+' 】個分ずらす/現在値/_:calc, _L Memory::0+0x4, 0, 999, unsigned

一応、サンプルとしてSRPG Studio製ゲーム用の簡易SSGを添付します。
(臨時掲示板の管理人さんが作成されたような至れり尽くせりのSRPG Studio汎用SSGは私には無理です・・・)
Ver1.084、Ver1.115のゲームでしか動作確認していませんが、比較的新しいSRPG StudioのVerのものなら動くかもです。
ベースアドレスは[adjustment]のサーチ補正適用必須、オフセット部分はリストから選択式となっており面倒な仕様ですけど・・・

追記;
添付SSGを差替え(修正内容は>>479を参照)

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.478)
投稿日 : 2017/03/27(Mon) 18:45
投稿者 (仔猫)◆KCezBilYINU
ID情報 : Nn.DpA2RuaOK4c7rR5uRx0
参照先
>>471-472
RICKさんと七星さんの投稿記事を読んで、これはレスしないといけないと思い書き込みです。

リピート機能の強化版!?
-------------------------------------
[define T][:$B+0x10:]=>T1;[:$B+0x18:]=>T2;($T1&$H)*0x20=>T1;$T2+$T1=>A0;[:$A0+0x1C:]=>A1;[:$A1+0x1C:]=>A2;[:$A0+0x04:]==$H=>V0;[:$A1+0x04:]==$H=>V1;[:$A2+0x04:]==$H=>V2;(($A0*$V0)|($A1*$V1)|($A2*$V2))+0x10
オリジナルのコード(吉里吉里解析ツール)

[define T]([:$B+0x10:]&$H)*0x20+[:$B+0x18:]=>B;$C=30;while(([:$B+0x04:] != $H) && $C--)[:$B+0x1C:]=>B;$B+0x10
RICKさんのコードに直すとこうでしょうか?めちゃ綺麗です。

[define T]([:$B+0x10:]&$H)*0x20+[:$B+0x18:]=>B;while(([:$B+0x04:] != $H) && $B)[:$B+0x1C:]=>B;$B+0x10
で、七星さんの方法では全検索しつつ短く…
同処理がここまで短縮できるとは驚きです。また実装してくれた変態紳士さん、ありがとうございます。

-------------------------------------
>>474-476 amateurさん、七星さん
一括変更のコードありがとうございます。
同じような処理でカウントアップするので勉強になります。

追記:
>>477
SRPGの汎用SSGありがとうございます。Ver対応オフセット調べてくれてたのですか、ありがとう。
キャラの新作、dipperさんが作ってくれてたSSGもスゴい。中でもソート関数の実装!?世界初ですか!と思ったり。

>>479
更新ありがとうございます。また添付ファイルのテキスト凄く分かりやすかったです。一括処理、技法勉強になりました。
>オフセット選択のリスト上で↑↓キー
おお、便利な機能ありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.479)
投稿日 : 2017/03/28(Tue) 23:49
投稿者 amateur◆kR..xsXL6RU
ID情報 : 3w499ZDx5eXwnGipqgNO8.
参照先
変態紳士さんがSpoilerAL修正パッチで最近追加くださったwhile文について(半ばインクリメント・デクリメントの話になってますが)、
漸く大体分かった内容の備忘録(書いておかないと忘れそうで・・・)と、
間違ってたらご指摘等お願いします的な意味で書いておきます。
あまりに長くて鬱陶しいので、内容は添付テキストに。
なお、約2週間前にwhile文という言葉自体を初めて知ったド素人の書いたものですので、
詳しい方からすると「そんなこと当たり前じゃないか」ということが多々あるかと思いますが、
生温かく眺めつつ間違いがあれば突っ込んでくださればと。

それと、>>477に書いた、「SRPG Studio」でのリンクリストのデータのwhile文を使った書き方ですが、

[define ClassData][:Memory::0:L]=>ofs; {Class}=>ad;\
id=$Idx1;\
while($id--)[:$ad+0x4:]=>ad;$ad

について、リンクリストのデータの最後に到達すると、その最後のデータの先頭アドレスから+0x4の、
本来次のデータへのポインタとなっているアドレスは空(値が0)となるので、
>>472の最後の方で七星さんが書かれているのと同様に、
 while($id--&&$ad)[:$ad+0x4:]=>ad;$ad
と変更した方が良さそうです。
最後のデータまで行くと、"[:$ad+0x4:]=>ad"が0となり、そこから先のループ処理は意味がないので、
継続条件式の部分を($id--&&$ad)とすれば、無駄な演算を省き負荷を減らすことが出来るようです。
実際、>>477に書いたままだと、最後のデータに到達した後の項目(つまり不要な項目)でも、
"[:$ad+0x4:]=>ad"が0となった後も延々と最後まで無駄な演算を繰り返していましたので(デバッグモードで確認済)

そういうわけで、>>477の添付SSGを上記要領で修正再アップしました。

追記
>>478 仔猫さん
汎用SSGというほどの大げさなものではないですけど・・・
Ver対応オフセットに関しても、2-3個のVer分しか書いてないですし、そもそも機能が少な過ぎて(汗)
オフセット選択のリスト選択時に(下位項目を開いたまま)、リスト上で↑↓キーを押していくと、結構簡単に正解が見つかるかと思いますが。
あと、意図したわけではなく、副産物的なものですが、
クラスデータの下位項目を開いたまま、オフセット選択のリスト上で↑↓キーを押していると、
クラスデータ以外のアイテム・スキル・各種用語等のデータへのオフセットやID等が分かったりします。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.480)
投稿日 : 2017/03/30(Thu) 03:19
投稿者 amateur◆kR..xsXL6RU
ID情報 : abKSfFFskQt0uIf11FdFN0
参照先
>>479に書いた「SRPG Studio」でのwhile文を使った書き方ですが(いつまで続けるのかと)、
さらに色々考えて、下記のようにクラスデータ等の総数(リンクリストでのポインタ経由数)をwhileで算出して、
その数を左辺代入の新機能でSpoilerALに確保したメモリに書き込み、
各クラスデータのアドレスコーディングでは、三項演算子の条件式で書き込んだクラスデータ等の総数と比較して分岐させ、
クラスデータ等の総数を超えるデータ分についてはループ処理を1回も行わないように修正しました。

--------------
[subject]クラスデータ・インデックス【<# [\:{M0}\:L]=>ofs;{Class}=>ad; cnt=0;\
while([\:$ad+0x4\:]!=0)(++$cnt;[\:$ad+0x4\:]=>ad;)\
[\:{M0}+0x4\:L]=$cnt; $cnt,%d #>】まで。(ステータス上限値等):dir
[repeat]ssl->class_SSR,0,50,1
[back]
--------------
[group]class_SSR
[define ClassData][:{M0}:L]=>ofs; {Class}=>ad; id=$Idx1;\
([:{M0}+0x4:L]>=$id ? (while($id--)[:$ad+0x4:]=>ad;$ad) : 0)
 (以下略)
--------------

これで無駄なwhileのループ処理は結構削れたと思うのですが、
一方でクラスデータ等の総数の算出等で余計な演算が増えた気もするので、
実際のところ元より動作が軽くなったのか重くなったのか、よく分からないです・・・

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.481)
投稿日 : 2017/04/01(Sat) 17:29
投稿者 七星◆MH.ms4.V3i2
ID情報 : BXfphnn2SudbHe170S9/m/
参照先
しばらく修正パッチのレポジトリ整備に掛かりきりで他のことが疎かでした。

ループカウンタ数だけ回すには「while($Idx--)」としてもカウンタ変数はアドレス文の評価毎に設定されるので
1つのアドレスコーディング内でカウンタ変数を再び参照しない限りは、特に問題なくシンプルになりますね。

元になった([define]参照ではない)「{}」は複数文を纏めるために使う、“ブロック”と呼びます。
変数の範囲(や因っては寿命を)も定める“スコープ”としての機能も持つ言語もありますが、ALでは関係ないのでそれは割愛するとして…
文を一纏めとして扱えるので「if = 条件; while($if) ( if = 0; 処理1; 処理2; )」などとすると
三項演算子では1つの式しか不可能だったif文もどきも、コレ一つあれば完全な形で再現できます

論理演算子の短絡評価(「And1 && And2」でAnd1==偽の時And2を評価しない、「Or1 || Or2」でOr1==真の時Or2を評価しない)も実装してくださったので
その辺りも考慮してコーディングを行うと、従来のコードが大分スマートになっていくと思います
ただwhile文は1つ間違うと無限ループに陥りかねないので、プロセスロスト時なども鑑みる必要がありそうです

そういえばアドレスコーディングで「:」等のエスケープが必要な場合、いつの間にか括弧内だと要らなくなったようです
ついでに割とどうでもいい情報として、項目名を_ではなく@で始めると[group]から引っ張り出して項目名にする
アドレス“コーディング”の分割ならぬアドレス“ネーミング”の分割のような機能も元からあったみたいです
※[group]の各行を連結してから再帰解釈を行うだけなので、同名項目を纏める以外では遅くなるだけで\による改行をした方が?


>>amateurさん
エンジン専用のコードまでは、まだ読んでないのですが、バージョン情報へのアクセスには>>408にwhileを応用するとサーチ補正なしで到達できます
.rsrcを参照しているのでリソースセクションに有るのはお分かりかと思いますが、このセクションにはちゃんとしたフォーマットがあります

MSDNのPeering Inside the PEにも解説がありますが、PE File Resources節のTable 12. IMAGE_RESOURCE_DIRECTORY Formatがそれです
このページは英語版しかないので、概要を掴むにはそこいらの解説のほうが良いでしょうが…公式資料ということで。
仕様書としてはこれまた英語のみですがこちらになるのでしょうか?(pecoff.docx)

DirectoryEntriesは実際の構造体メンバではないので、IMAGE_RESOURCE_DIRECTORY構造体は16バイトという事になり、
NumberOfNamedEntries+NumberOfIdEntriesの数だけIMAGE_RESOURCE_DIRECTORY_ENTRY構造体(8バイト)がその後ろに連なります
このIMAGE_RESOURCE_DIRECTORY_ENTRY.OffsetToDataはリソースセクション先頭からのオフセットで、
最上位ビットがあると、その先はまたIMAGE_RESOURCE_DIRECTORY構造体があるという、階層構造になっています(Figure 5. Resource directory hierarchy)

バージョン情報へは3層辿る必要があり、ルートディレクトリからName==16(RT_VERSION定数)の物を探し、
次の階層からName==1(VS_VERSION_INFO定数)を探します。最終階層のNameは言語IDになっています。
末端のOffsetToDataはリソースセクションの先頭からIMAGE_RESOURCE_DATA_ENTRY構造体へのオフセットで、同アドレスにはモジュール先頭からのオフセットがあります
これはWin32APIのFindResourceが行うことでもあり、同関数が返すHRSRCはIMAGE_RESOURCE_DATA_ENTRYポインタのようです。

これを経て得られるのはVS_VERSIONINFO構造体アドレスですが、メンバが可変長で、Windows SDKヘッダにすら構造体定義がありません
MSDNにはszKeyの型がWCHAR、Padding1とPadding2はWORDと書かれていますが、実際はWCHAR[]とWORD[]のような可変長配列です…が
szKeyは「L"VS_VERSION_INFO"(Lはwchar_tリテラル)」固定なのでヌル終端を含めszKeyはWCHAR[16]となり、32バイトで
2(wLength)+2(wValueLength)+2(wType)+32(szKey)=38、4バイト境界ではないのでPadding1=WCHAR[1]となり更に2を足して
40(0x28)バイトオフセット固定でValueメンバ(VS_FIXEDFILEINFO構造体)に到達できます

しかし…SRPG StudioだとVS_FIXEDFILEINFO構造体メンバのバージョンは1.0.0.0のまま、VS_VERSIONINFO.Children→StringFileInfoStringTableString
FileVersionのみが更新されていってる様ですね。ここに到達するにはString.szKeyの長さからPaddingを算出し、アライメントしながら読み進めなければなりません。
String構造体から次のString構造体へもString.wLengthをそのまま使うのではなく、32bitアライメント(address + 3 & ~3又は-4)しないといけません

長々と書きましたが、イメージしづらいと思います、私もできません(笑)。修正パッチスレの>>303にStringFileInfoから可変長の抽出リストを生み出すSSGが有りますので
[process]<game-win>」とでもすれば、*.exeのプロパティみたいな事ができます。ここで使った可変長リスト抽出はクラスリスト生成とか色々実現できそうです。(listへ使うには[size]必須)
もっともサーチ補正が不要になるとはいえ、ここまでしてもSRPG StudioでVS_FIXEDFILEINFO構造体が更新されていない事からも分かるように、バージョン情報は自称だったりします


とまぁこの様な事をレスに書いても流れていってしまうので、管理人さんの仰る様にWikiなりにした方が良いかもしれませんが、
VPSに置くとサーバー負荷が増えそうとか、ツールなりの解説を第3者がやると、実装上の仕様を想定された仕様かのように書きかねないとか懸念事項もありますね
SSG記述TIPSとかも纏めたいところですが…githubにもWikiがあるので私の管轄分については修正パッチのレポジトリWikiにでも書こうかしら…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.482)
投稿日 : 2017/04/03(Mon) 16:05
投稿者 七星◆MH.ms4.V3i2
ID情報 : BXfphnn2SudbHe170S9/m/
参照先
あら…VPSリカバリでちょっと巻き戻ってしまったかな。スレッドトップに添付したレスまでは読みました。
“ネーミング”の分割は同じ項目名を一元化して、変更に強くするといった使い方なども出来そうですが、
変態紳士さん曰く[group]参照は遅く、“アドレス”ネーミングならアドレス部は[define]で共通化できるので微妙かもしれないですね。

ガイド最適化のおかげか、リソースセクション全検索でもデバッグモードがそこそこの負荷で済みますね。
修正パッチスレに添付したSSGは雑多過ぎたので、ファイルバージョン到達サンプルとして絞ったSSGも用意してみました、割とすっきり
項目名がVS_FIXEDFILEINFO構造体の、文字列項目がStringFileInfoの、ファイルバージョンをそれぞれ参照します。

クラスリスト然り、可変ツリーは無理があるので電卓によるページャで実現していた部分を、元にあったプロパティリストの応用で
nocache抽出リストのアドレス部において、リンクリスト等を解決しつつローカルメモリを間接操作し、各アドレスと表示名・総数を書き込み
リスト抽出パラメータの行数指定などをnocache新機能で後方参照にし、この抽出リストで対象を選択、表示・改竄する項目はツリーに1つだけ置く。
…なんてのを考えています、途中で変化しないのであれば、総数が未解決時のみif文もどきで行うとか、するとSSG展開速度も向上するかなと

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.483)
投稿日 : 2017/04/03(Mon) 18:03
投稿者 RICK(管理人)◆PIflJPH.oeY
ID情報 : Ntiptg5mB03UuevH6fbYa.
参照先
移転や復旧のどさくさに紛れて(?)Wikiを設置してみました。
個人的には「SpoilerAL」(修正パッチ含む)や「SpoilerALプロセス選択ツール」あたりの説明を書こうかなと思っています。

負荷の大半はWordPressが占めているのであって、掲示板やWikiはそこまで影響しなさそうな気がします。

【追記】
2017/04/02 06:00頃に作成したデータをバックアップしました。
そのためそれ以降のデータは消えてしまいました。

P.S.
「Visual Stadio Community」を使ってみようと思ったものの、
全部インストールしようとすれば50GB(笑)・・・
どれをインストールしたらいいのかわからないのが現状です。
CやJava・PHPとかあたりをいじれてバージョン管理の機能があれば十分です。
ひょっとしてSSGもこれで作れたり?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.484)
投稿日 : 2017/04/03(Mon) 19:48
投稿者 amateur◆kR..xsXL6RU
ID情報 : v3RRIOMoDfH/PJDvK0BTy/
参照先
管理人さん、色々とお疲れ様です。
確かに昨日の書き込み(私の分は2件)が消えていますね。
一応、書き込みの控えはあるのですが、長文2つを再び投稿するのも如何かと思うので、
初めて読んだ方向けに、話の流れ的に書いた方が良さそうなものだけ抜粋で。

>>482で七星さんの書かれた
>リソースセクション全検索でもデバッグモードがそこそこの負荷で済みますね。
ここは、おそらく消えてしまった私の以下の書き込み箇所のことを受けてのものだと思います。
---------------
別スレにアップしたSSG(結局役には立たなかったのですが)を書いていて気付いたのでが、
while文を使って、値の検索的なこと([adjustment]のサーチ補正やダイアログ補正と同じようなこと)が出来るんですね。
文字列「FileVersion」を数値に置き換えて、
(バイト列「46 00 69 00 6C 00 65 00 56 00 65 00 72 00 73 00 69 00 6F 00 6E 00」を4バイトごとにエンディアン反転して数値にする)
whileで検索して自動的にアドレス補正とか出来そうな気がしてきたので、
取り敢えずコレを試してみようかなと思います。
---------------
なお、上記は、ポインタ変換演算子[::8]を使うことでアドレスの値を4バイト単位でなく8バイト単位で検索できるので便利、
という趣旨の補足を七星さんからいただきました。
その後、実際に上記手法でSRPG Studioのファイルバージョンを表示させ、
さらに>>480に添付したSRPG Studio用のSSGに色々機能を追加した上で、
ここのスレッドトップに添付しておきました。

なお添付したSSGは、SRPG Studio Ver1.034、1.052のゲームで試しても動作しなかったので、
Verが古いと駄目のようです。
とても汎用と呼べるシロモノではありませんが、
SRPG StudioのVerが比較的新しいものなら一応使えるかと思います。
(1.084、1.109、1.115のゲームで動作確認済み)
臨時板管理人さんの汎用SSGにはない(と思う)機能として、
ユニット固有スキル、クラススキルの書換えが可能になっていますので、存在価値は一応ある?かもです。

>>482 七星さん
SSGありがとうございます。
これが>>481で説明くださったバージョン情報を表示させる方法をSSG化したものなんですね。
>>481のご説明と見比べながらじっくり勉強させていただきます。

後半に書いてくださった「クラスリスト然り」以下の構想は・・・
何となく分かるような、でも具体的手法については分からないという感じです。
(「リスト抽出パラメータの行数指定などをnocache新機能で後方参照に」の箇所が?でした)
結論的には抽出リストから表示させる項目を選ぶ、つまり一度に表示する項目は一つだけというものでしょうか。
これが出来れば、表示のための演算を大幅に削減できると思うので、
負荷も減るし速度も向上しそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.485)
投稿日 : 2017/04/03(Mon) 22:10
投稿者 七星◆MH.ms4.V3i2
ID情報 : BXfphnn2SudbHe170S9/m/
参照先
>>483 RICKさん
管理お疲れ様です、やはり大体は本家ブログの方ですか。さて、Visual Studioについてですが、最低限C/C++で10〜XPを対象とするなら
「ワークロード」タブで「C++によるデスクトップ開発」のみ選び、右端の概要でオプションを添付画像のように設定します
続いて「個別のコンポーネント」タブに移り、「SDK、ライブラリ、およびフレームワーク」から「Windows ユニバーサル CRT」で5GB程度で済みます
(IncrediBuildは何だか良さげな説明ですが、サードパーティなので完全統合されず、サインアップが必要とか煩わしいので消しました
バージョン管理には「コードツール」から「Git for Windows」とか、私はHTML用に「開発作業」から「JavaScript および TypeScriptの言語サポート」も入れてます

Javaは何分C#の競合言語なので、基本インストーラにはJDKくらいしかありません。PHP共々サポートするにはインストール後に拡張機能を入れる事になると思います
私がJavaを扱ったときはNetBeansよりも.classデコンパイラが統合されていたIntelliJ IDEAを使いましたが…VSで扱う場合、どの拡張が良いかは詳しく知りません

SSGは流石に言語としてはマイナーも良い所なので拡張を作ってる人は居ないと思いますが…
使う記号がTeXに近いので、それとしてハイライトすると若干見やすいかも、くらいでしょうか
(この辺りはテキストエディタの方が…?全てをIDE一つで扱うとなるとEclipseとかになるのかしら…?


>>484 amateurさん
パラメータで後方参照というのは、nocache指定時、サイズ(1行の最大文字数)/行数/ステップサイズをアドレスコーディングとして解釈する実装にして頂きました
そして、この部分のアドレスコーディングに限り、$Listというリスト抽出のアドレスが入った既定変数が使える様になりました。

アドレス部で(相応の領域を確保した)ローカルメモリ+4以降にリスト抽出用データ、先頭に総数を書き込み、ローカルメモリ+4を抽出アドレスとし、
行数パラメータを“[:$List - 4:L]”などとすればリスト抽出を可変長にでき、リンクリストだろうと何だろうと、コーディング次第で完全なリストを用意できます
(一度全要素をスキャンして1行に必要な最大バイト数を算出し、ステップサイズ等も動的にして圧縮するとか、変化しないならif文もどきで構築を総数0時に限定するといった方法もとれます

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.486)
投稿日 : 2017/04/03(Mon) 22:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : v3RRIOMoDfH/PJDvK0BTy/
参照先
>>485 七星さん
詳しい解説ありがとうございます。お陰様でよく理解できました。
nocache指定時にそんな新機能が追加されていたのですね。
これはリスト抽出利用の可能性が広がりそうです。


追記
スレッドトップに添付したSSGを修正して差替えました。
(修正内容)
・ベースアドレスをサーチ補正なしで、チェック入れるだけでセットできるように変更。
・各ユニットのクラス名を表示するように変更(「各種基本データ」のクラスデータのオフセット選択必須)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.487)
投稿日 : 2017/04/05(Wed) 00:52
投稿者 amateur◆kR..xsXL6RU
ID情報 : 6fHNKG41PDslRfZKOywu70
参照先
スレッドトップに添付したSRPG Studio用のSSGを修正して差替えました。
(修正内容)
・ベースアドレスについて、一番上の必須項目を開くだけでセットされるように変更。
  (サーチ補正適用やチェック等の必要なし)
・ベースアドレス特定方法を2つ追加。これで、Ver1.052、1.070のゲームでもベースアドレスは特定可能に。
・各ユニットのクラス名を表示するように変更(「各種基本データ」のクラスデータのオフセット選択必須)
・ユニットデータの「所持アイテム」に、「特効対象」「武器スキル」「専用」を追加。
・各種基本データの「武器データ」に、「特効対象」「武器スキル」「専用」を追加。
・各種基本データに「ユニット種別データ」を追加

追記
上記の添付SSGをさらに修正。
・ベースアドレス特定方法の3つ目を高速化(修正前は重すぎたので)
 なお、ベースアドレス確定は3つ目をいきなり開いても多分大丈夫です(Ver1.052以降ならこれだけでいけそう)
・「各種基本データ」で一番上の武器データのオフセットを選択すると、
  他のデータのオフセットも自動でセットされるよう修正(手動で修正も可能)

追記2
上記の添付SSGを修正。
・コンフィグを追加。
・所持アイテムや武器データで、特攻対象名やスキル名等を表示させる箇所の不具合を修正

追記3(4/7)
・古いVerでも使用可能な汎用?のベースアドレス特定方法を採用(1.034以降のゲームで確認)
  先に「SRPG Studioのバージョン確認」項目を開くのが必須に。
  Verの値がベースアドレス特定の決め手になっているため。
・ユニットデータに「支援相手」を追加(ゲームによっては支援相手が画面表示されない?よう)
・「特効対象」と「専用」につき、それぞれカテゴリ表示と変更を可能にした。
  ただし対応するIDが未設定等、不適切だとゲームが強制終了するので要注意(不用意に使用しない方が無難)。
・「コンフィグ」のアドレス指定方法を修正(誤ったアドレスとなる場合があったのを修正)
・その他、細かいミスを修正。

追記4(4/8)
・各種基本データに「性別等のデータ」を追加。
 ただし、このデータは比較的新しいVerにしか存在しないよう(1.070以降にはあったが、1.052には無かった)。
 また、このデータのみ、一番上の武器データのオフセットを選択しても自動でオフセットがセットされないので、手動で選択する必要あり。
・Ver1.034等、古いバージョンでもユニット名を表示するように修正。
 おそらく、ステータスに熟練度・体格の2つが追加されたらしいVer1.048以降では、
 ユニット名へのオフセットが0x38→0x40に変わったと思われるので、
 Verが1.048以降か否かによってオフセットを自動で変更(分岐処理)するようにした。
・アイテム(武器のみ)データについて、「武器の種別」(近接武器・遠距離武器・魔法等の大まかな分類)と、
 各種別毎に武器の区分(近接武器なら、剣・槍・斧等の細かな分類)を表示・変更する機能追加。

追記5(4/9)
・「クラスデータ」に「装備可能武器の種別・区分」を新設。装備可能な武器等を変更可能にした。
・各ユニットデータから、そのユニットのクラスの装備可能武器等を直接変更可能にした。
 なお、敵を含め他のユニットにもこの変更は反映されることに注意(クラスデータ自体を書き換えるため)
・武器データのアドレスが正常機能しないことがあったのを修正。
・スキル等の名称表示機能について、未設定のIDの場合に各データの最後の名称を表示してしまう不具合があったのを修正。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.488)
投稿日 : 2017/04/09(Sun) 19:38
投稿者 amateur◆kR..xsXL6RU
ID情報 : koX8OFsCJCvpjHbfzKVaM/
参照先
ここ暫くSRPG StudioのSSGの更新ばかりしてましたが、一応これで新規機能の追加は終わりにするつもりです。
後は不具合修正程度で・・・流石に同じエンジンのSSGを書き続けるのは飽きてきました。
残りで考えられるのは例えばストックアイテムのデータ変更ですが、
預ける前(各ユニットが所持している時)と各アイテムのアドレス自体は変わらないようです。
どうも、ストックしたアイテム自体のアドレスに辿り着く独自の確固としたポインタがあるわけではない?ようで・・・
ヒープ領域(所持金のアドレスのある領域)からポインタを10個くらい(これもVerによって変わりそう)経由して何とか辿り着いたこともありますが、
偶然だったかもしれませんし(再現性が怪しい)、これを汎用化は私にはムリですね。
アイテムのデータを書き換えたいならユニットが所持してる時に書き換えれば良いだけなので、これはパスする方向で。

それと、最後にSRPG Studioのベースアドレスを特定する方法について。
exeの.textセクションの先頭に近い箇所から辿る(臨時板の管理人さんが使われていた手法)方法が正攻法だと思いますが、
これだとSRPG Studioのバージョンが変わると使えなくなる場合が多いので、
SRPG Studioの汎用的なSSGでこの手法は厳しいかもです。
そこで私がアレコレ模索した結果、ベースアドレス周辺のデータ構造に特徴があることに気付いたので、
分かりやすいようスクショに説明を付けてアップします。
別スレの(No.46)で変態紳士さんが書いてくださっている「SecurityCookie」が手掛かりになることと、
ベースアドレスの付近にSRPG StudioのVerを示す値、例えばVer1.109なら10進数で「1109」という値があるという二つの特徴があります。

前者の「SecurityCookie」については、私が確認した範囲ではVer1.052以降では当て嵌まるものの、
Ver1.034では当て嵌まらなかったので、古いバージョンではこれを手掛かりには出来ないようです。
後者のSRPG StudioのVerを示す値がベースアドレス付近にあるという特徴はVer1.034でも当て嵌まっていて、
私が確認した限りでは全てのVerでこれを手掛かりにベースアドレスを特定出来ています。

なお、確認した全Ver共通ですが、所持金等の可変データへのベースアドレスの、
4バイト前か4バイト後ろ(Verによって前か後ろかは異なるよう。古いVerでは後ろ?)のアドレスの値が「6」(4バイトで)になっているようです。
これらの特徴を手掛かりにwhileを使ってexeの.dataセクション先頭から+0x5000以降あたりを検索すれば、
汎用的なベースアドレス特定手法になる、かもです(スレッドトップのベースアドレス特定方法はこの手法を採用)。

追記
更新終了みたいなことを書きましたが、一つ忘れていたことがあったのでスレッドトップのSSGを更新。
「難易度」の項目に、当該難易度の名称を表示する機能を追加しました。
ただし、名称表示には「各種基本データ」の一番上のオフセット選択必須です。
SSGにも書いてますが「--」と表示される場合は当該ゲームで設定されてない難易度であり、
そのままゲーム画面をアクティブにするとゲームが落ちる可能性があるので注意です(非アクティブ状態なら落ちないと思います)
Ver1.052等、古いVerだと難易度データへのオフセットがずれてるので名称表示は機能しません。
古いVerで難易度名称を確認するには、「武器の種別データ」のオフセット+0x10前後(Ver1.052では+0xCのよう)が難易度データへのオフセットですので、
「各種基本データ」の一番下(その他のデータ確認用)でオフセット選択して確認してください。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.489)
投稿日 : 2017/04/09(Sun) 23:04
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 9M12DC5sPlOaTMiKj3t3D0
参照先
>>488 amateurさん
エントリーポイントから辿る方法もあります。

まず逆汗します。
書式が分かりやすいので objconv に投げます。(objconv は解析用ではないので失敗することも)
出力されたファイルを開き Entry_point という文字列を検索します。
1行目に call 命令があれば辿ります。
「call ?_10000」であれば「?_10000」を検索します。
次に「mov eax, dword ptr [?_20000]」などとメモリを読み込んでいる場所を探します。

エントリーポイントは実行モジュールにとって重要なアドレスが集中します。
1つ目の参照でクッキーを食べている事も多いようです。

アドレスは MName::nul:=EntryPoint でナントカなるので、
後は call 命令の相対アドレスを辿るようにSSGを書いて、後はテキトーに。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.490)
投稿日 : 2017/04/10(Mon) 23:28
投稿者 amateur◆kR..xsXL6RU
ID情報 : KiXS1L16AQD.CfVsKCSck/
参照先
>>489 変態紳士さん
情報ありがとうございます。
別スレで書いてくださっていたSecurityCookieもですが勉強になります。
エントリーポイントから辿る、こういう方法もあるのですね。
objconvって見覚えがあるなと思ったら>>377で教えてくださったツールですね。
早速、objconvで試してみました。
最初はどう活用したものかと戸惑いましたが、色々弄ってるうちに何となく活用法が見えてきた気がします。
Entry_pointから辿ってみたところ、SRPG Studio(全般かどうかは不明ですが)では、
中々ベースアドレスを指定してる箇所に辿りつきませんが、色々試行錯誤してみようと思います。
慣れてみると、call命令の呼び出し先とかが検索で簡単に分かるので確かに便利ですし、
使いこなせば解析の強力な武器になりそうです。
それと、仰るとおりEntry_pointの1行目のcall命令の参照先でクッキーを食べていました。
MName::nul:=EntryPoint ←こんな書き方出来るのですね。
色々教えていただいて感謝です。

ところで、つい先ほど気付いたのですが、うさみみにもモジュール丸ごと(exe以外にdllでも可)逆汗する機能があるんですね。
「デバッグ」→「モジュールを逆アセンブル」でプロセス実行中にモジュールを丸々逆汗できました。
「エントリーポイントへ移動」機能でEntry_pointにも一発で移動できたり、
「CrossReference」にチェック入れると、jmp系命令やcall命令からの参照先箇所やそれらの参照元アドレスを表示したり、
表示された参照元アドレスを選択するとそのアドレスへ一発で移動したり・・・
うさみみにこんな便利な機能があるとは知りませんでした(ちゃんとヘルプ読んでなかっただけですが)。
特に関数部分の先頭を選択するとcall命令の参照元アドレスが表示されるのは助かります。
うさみみで本格的に解析するならこのモジュール丸ごと逆汗機能を使った方が圧倒的に便利ですね。
・・・正直今まで無駄な苦労をしていたようで何だったんだという感じです・・・(ヘルプは確り読むべしという教訓でした)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.491)
投稿日 : 2017/04/16(Sun) 19:41
投稿者 amateur◆kR..xsXL6RU
ID情報 : qxBLOC9iJ1XJC31Uou1Q1/
参照先
スレッドトップのSRPG Studio用SSGを修正して差替えました。
修正内容は、
・「ロード時にアイテムの耐久度を上限設定値まで戻す処理を無効に」の項目を追加。
  所持アイテムの耐久度をそのアイテムの上限として設定された値を超えて増やしていても、
  ゲームデータロード時に、上限値まで戻されなくなると思います。
  ただし、敵と同盟ユニットの所持アイテムについては、ロード時に耐久度の値が変になることがあります。
・味方・敵・同盟の各ユニットデータにつき、それぞれ、全ユニットの全所持アイテムの耐久度を電卓で書き込んだ値に一括変更する機能を追加。

追記
上記の「ロード時にアイテムの耐久度を上限設定値まで戻す処理を無効に」について、
ゲームを一度終了し再起動してからロードすると、
書き換えた耐久度とはかけ離れた変な値になる不具合があるので、
これを削除して全く違う内容の項目に差替えました。
「ロード時にアイテムの耐久度が上限設定値まで戻されない」という似た項目名ですが、
実際の改造内容は、全武器・アイテムの耐久上限値を9999に書き換えるだけです。
これを使用してロードすると、敵の所持アイテムを含めて耐久値MAXが全て9999になるという微妙な副作用がありますが、
現在耐久値が変わるわけではないので許容範囲内だと勝手に判断して放置(支障があれば耐久値一括書換え機能で対応してください)。

それと、別スレでのdipperさんの情報を受け、耐久値を-1に書換え可能にしました(dipperさん有難うございます)。
耐久値を-1にすればそのアイテムは無限に使用可能となるようです。
全ユニットの全所持アイテム耐久値一括書換えでも-1に書換え可能にしましたので、
こちらを利用する方が良いかもです。
(ちなみに、敵全ユニットの所持アイテム耐久値を全て0に一括書換えすれば、敵は移動以外何もできず無力化される?のかな)
(→直接0にしては駄目、というか0でも壊れず無限使用っぽいので、1にすると次に使用した時に壊れて消えるという仕様のよう)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.492)
投稿日 : 2017/04/18(Tue) 19:55
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : mAvcY9pJD8W68V3/Fv4kJ1
参照先
amateurさんSRPG Studio製ゲーム用のSSG、更新ありがとうございます。(うぉー!多機能で使いやすくなってます。方々の解析を拝見してるとAL6.2で作りたい病が発症しそうです。)

追記:
>>493
SRPG Studio製ゲームで試してみましたが…
今のところ不具合などなく完璧です、ありがたや。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.493)
投稿日 : 2017/04/18(Tue) 22:23
投稿者 amateur◆kR..xsXL6RU
ID情報 : .1Rtoj3JAeYW2IrI.emuD1
参照先
スレッドトップのSRPG Studio用SSGに、色々機能追加・修正をして差替えました。

@SRPG StudioのVer1.117でベースアドレスの特定に失敗するのを修正しました。

A一番上から2つ分の(必須)と頭に表示される項目を開くと、
 自動的に「各種基本データ」の各データのオフセットがセットされるように修正しました。
 ただし、「各種基本データ」の項目を一度は開かないと他の項目(名称表示等)が正常機能しないので注意。
 それと、種族(性別等)データだけは自動でセットされないので手動で選択してください。
 もしVerアップ等で自動でオフセットがセットされない場合は手動で武器データのオフセットを選択してください。

BSRPG StudioのVer 1.078以前のゲームでは、難易度の名称表示がされなかったのを修正しました。

C「クラスデータ」に下記の機能を追加しました。
 種別ID、種族(性別等)ID、クラス系統(戦士系・弓兵系・魔道士系の3区分)、クラスオプション(杖使用可能か等)。
 杖の使用可否は、この「クラスオプション」で設定を要するようです。
 また、弓や魔法等は「クラス系統」で該当の系統にチェックを入れないと装備できないようです。
 性別は、ユニット単位ではなく、各クラスによって設定(種族IDで)されています。

D所持アイテムのID変更に対応しました。
 アイテムの変更が反映するのはセーブ&ロード後です。
 変更後のIDに対応するアイテム名を表示するようにしましたので、参考になさってください。
 ついでに、武器⇔その他アイテム の相互変更も可能にしました(こちらもセーブ&ロード必要)。

>>492 仔猫さん
その場その場の思いつきで機能を追加していったせいで、中身も使い勝手もゴチャゴチャしてアレなSSGですが・・・
最初からこういう内容にしようとちゃんと考えていたら、もう少しマシな書き方になったと思いますが後の祭りです。
それと、Ver1.070より前のゲームは動作対象外と割り切ってほぼ切り捨ててますので(そもそも古いVerでの動作確認をほぼしていない)、
古いSRPG StudioのVerだと役には立たないのが何ともです。
ベースアドレス特定くらいには使えるかもですけど。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.494)
投稿日 : 2017/04/27(Thu) 03:48
投稿者 amateur◆kR..xsXL6RU
ID情報 : XS0xrZ11/j1K3g0p0Pca//
参照先
今作成中のSSGを書いていて気付いたことがあったので備忘録的に書いておきます。
2017.02.07にSpoilerAL修正パッチで追加された「数値の書式化」、
 <# アドレス書式, 書式, 入出力変換属性 #>
について、修正パッチのスレの修正履歴に変態紳士さんが書いてくださっているとおりだと思うのですが、
 <# #> で動的に展開された変数の書式化に対応
とのことですので、<# #> の中に "0x[!$Val!]" のような静的に展開される変数を書いても
"0x[!$Val!]" の部分は
Parsing「0x[」→[0x0]
Parsing「$Val」→[0x0]
Parsing「!」→[0x1]
Parsing「]」→[0x0]
Parsing「!」→[0x1]
と解釈されて正常に機能しないのですね(これが仕様だと思います)。

つまり、<# [!L$Val!],%d #> のような記述はNGなので、
アドレス書式部分に "0x[!$Val!]" のような静的に展開される変数と、動的に展開される変数の両方を使用するなら、
 _fmt, _[!L$Val!]+[\:Memory::0\:L], 4,num ,??,%d
のように、_fmt を使えばよい、ということのようです。([! !]の中には動的変数は使用できない)
HowToSSG差分ファイルのアドレスネーミングの項目に追加された<# #>の説明にはこの点について明記されていないので注意、かもしれません
上記のとおり修正履歴には書いてくださっているので、そちらをきちんと読んでいれば問題ないと思いますが。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.495)
投稿日 : 2017/04/29(Sat) 17:18
投稿者 七星◆MH.ms4.V3i2
ID情報 : avY7ip41JN1Te5JnQrs0e1
参照先
>>494 amateurさん
[! !]の静的展開式に動的変数やポインタ変換(間接)演算子が不正なのは、SSG展開時なので原理的仕様ですが
[! !]自体はSSG文として展開され項目さえ出力できるので、動的式の中に静的式を書くのは問題ないはずです
<# #>は項目名を'+'で分割する前に先んじて行われるだけで、_fmtとタイミング的にはそれほど変わりません
22日の修正で<# #>内のスキャンが除外された様に思いますが、これが想定されたものかは…どうでしょう
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.496)
投稿日 : 2017/04/29(Sat) 18:06
投稿者 amateur◆kR..xsXL6RU
ID情報 : BVGQoN4HyAAFzfW.VPNZk.
参照先
>>495 七星さん
フォローありがとうございます。
>22日の修正で<# #>内のスキャンが除外された様に思いますが、
これが原因、なのでしょうか。<# #>の元々の仕様では無かったのですね。
普段は <# $Idx1+[\:Memory::0\:L],%d #> のように動的な$Idx系を使うので、
以前はどういう仕様だったのか知らなかったのですが、
今回はSSG記述の都合上、$Idx等の動的なループ変数を使いにくくて静的な[!L$Val!]を使ったらアレ?となりまして。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.497)
投稿日 : 2017/04/30(Sun) 00:12
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 9M12DC5sPlOaTMiKj3t3D0
参照先
>>496 amateurさん
バグっぽいものがあったので修正しました。
それと <# #> はデフォルトを %d にしていますので <# $Idx #> という感じで省略も可能です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.498)
投稿日 : 2017/04/30(Sun) 01:34
投稿者 amateur◆kR..xsXL6RU
ID情報 : BVGQoN4HyAAFzfW.VPNZk.
参照先
>>497 変態紳士さん
修正ありがとうございます。
こちらを見てくださった上にご対応までしていただいて恐縮です。
仕様だと思っていたのですが、バグもあったのですね。
<# $Idx #> 、これはご指摘のとおりHowToSSGにも
「書式を省略(アドレス書式のみ指定)した場合は「%d」として解釈します」と書いてくださっていますね。
IMEに <# $Idx,%d #> で辞書登録してるので、何も考えずにそのまま使ってました・・・

修正していただいたパッチを早速適用して試してみたところ、
<# 0x[!$Val!],%d #> (書式省略しても同じ)だと正常にループ変数の値のとおりに表示されますが、
何故か、<# [!L$Val!],%d #> だとループ変数の値とは関係なく全て「0」となるようです。
それと、<# [!L$Val!] #> と書式を省略すると、ループ変数の値が表示されるものの今度は何故か
「<# 1 #>」 のように値の前後に <# と  #> が表示されるみたいです。
fmtや0x[!$Val!]を使えば大丈夫ですし、特にこれで困るというわけではないのですが。
一応、検証用に使ったSSGを添付します。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.499)
投稿日 : 2017/04/30(Sun) 10:49
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 9M12DC5sPlOaTMiKj3t3D0
参照先
>>498 amateurさん
修正しましたが、0xの無い[!$Val!]は機能しません。
そもそも16進数をコードとして埋め込むような機能ですが、
0xが無いという事はバイト列? にしても <# #> と関係ないような?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.500)
投稿日 : 2017/04/30(Sun) 16:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : bqN73.gorkbiwNg9Re3JV1
参照先
>>499 変態紳士さん
再度の修正ありがとうございます。
何度もお手間を取らせてしまい申し訳ありません。
[!L$Val!] の場合は、10進数出力となるので頭に0xは不要だと思ったのですが、
>そもそも16進数をコードとして埋め込むような機能
そういうことなんですね(10進数が入ることは想定外、ということでしょうか)
そもそも、<# #> を使う場合は書式指定が可能で、デフォルトで%d(符号付10進数)ですし、
16進数にしたければ書式指定で%X等を使えばよいだけなので、
素直に <# 0x[!$Val!] #> と書いておけば何の問題もありませんでしたね・・・
色々お騒がせして済みませんでした。

>0xが無いという事はバイト列?
で思い出したのですが、そういえば[repeat]では [!#$Val!] 等でバイト列にも使えましたね。
以前1回だけ使った覚えがありますが最近は全然使っていないので忘れかけてました・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.501)
投稿日 : 2017/04/30(Sun) 17:31
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : 9M12DC5sPlOaTMiKj3t3D0
参照先
>>500 amateurさん
なんだか怪しかったので再度直しました。

> <# 0x[!$Val!] #>
これは <# #> が不要で、
――――――――――
0x[!$Val!]
――――――――――
でいいかと。

静的な解釈というのはアドレス書式で計算する前のテキストを変更しています。
ロード時に遅い処理があれば大体は静的な解釈で repeat なんかは1万件繰り返すと全てメモリに展開しています。
今ではセンスのない処理だと思いますけど、以前はGUIを含めてアドレスネーミングは遅かったので・・・

内部処理はクラスでテキストとは異なりますが、
「静的な処理」とキーワードがあれば「ロード中のテキスト展開」と置き換えれば分かりやすいかと。
もちろん、テキストよりサイズが肥大化するので問題になってきますが・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.502)
投稿日 : 2017/04/30(Sun) 19:23
投稿者 amateur◆kR..xsXL6RU
ID情報 : bqN73.gorkbiwNg9Re3JV1
参照先
>>501 変態紳士さん
更に修正ありがとうございます。
[!L$Val!] の値が9以下でも表示されるようになりました(一つ前のパッチでは0-9までは全て0と表示される?ようでした)。

>これは <# #> が不要で、0x[!$Val!] でいいかと。
ああっ、これだけなら確かに・・・ [!L$Val!] でもこれ単体なら<# #>を使う意味は無いですね。
元々は、<# 0x[!$Val!]+[\:Memory::0\:L] #> という感じで、
動的変数との演算後の値を表示したかったのですが、
途中から当初の意図があやふやになっていました・・・

>ロード時に遅い処理があれば大体は静的な解釈で repeat なんかは1万件繰り返すと全てメモリに展開しています。
[repeat]を使えば使うほど段々ロードが遅くなっていくのはそういうワケなんですね。
最近は、パッチのお陰でアドレスネーミングの表示が高速化しているのを実感しております。
色々使い勝手が良くなって、変態紳士さんには感謝しております。

ついでのようになりますが、
while文に引き続いて、if文等の色々な機能を追加してくださって更にSSG記述の幅が広がり助かっております。
for文やdo〜while文は今のところ使っていませんが(今のところwhileだけで何とかなってるので・・・)、
if文は早速使わせていただいてます。
三項演算子と違って真と偽の箇所に各々複合文を使えますし、if文の中で三項演算子を使えたり色々便利ですね。
while文とif文に、左辺代入の書込み機能等を組み合わせると、
今までは出来ない(or面倒すぎる)と諦めていたことが次々実現できています。
私の不勉強でまだ使いこなせていない機能(memmoveとか・・・)も多いのですが、恩恵はそれでも大きいです。
パッチ更新本当にありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.503)
投稿日 : 2017/05/07(Sun) 17:44
投稿者 amateur◆kR..xsXL6RU
ID情報 : DtZFBa15xmdjHzboi9I4M/
参照先
SRPG StudioのSSGを書いていると、無性にヴァーレントゥーガをプレイしたくなったこともあり(私はヴァーレントゥーガのようなリアルタイムの集団戦闘が好みなんです)、
ヴァーレントゥーガのSSGを作ってみたのでアップします。
フリーゲームではかなり有名なので、とっくにSSGが作られているのかとも思ったのですが、
探しても無かった(単に私が見逃していただけかもですが、Verアップが何年にもわたって頻繁にされてるから?)のと、
最近公開されたver6.85が最終更新とのことですので、取り敢えず作ってみました。
私自身、このゲーム(と同じシステムを利用した派生作品)の戦闘があまりに面白く熱中してプレイしていた時期がありましたし・・・
もっとも、まとめwikiからDLできるスクリプトファイルが暗号化されてないver(ふりーむ!ではない方からDL)なら、
スクリプトを弄って好きなように改造できるので別にSSGは要らないかもですが。
何気にこのゲーム、8年近くも更新され続けてるんですね・・・派生作品も結構な数だし、本家と派生作品で一つのジャンルを形成してる観も・・・

SSGの動作確認は、上記のふりーむ!からDLできる6.85rと上記リンク先のwikiからDLできる6.85sの二つでしています。
ちなみに、ヴァーレントゥーガと同じシステムを使用している派生作品の一つ光の目の最新版で試したところ、
「Vahren.exe」のverが古いせいかSSGが全く動作しませんでしたが、
光の目の「Vahren.exe」をヴァーレントゥーガ最新版・6.85sのものに差し替えると、一応動作するようです。
ただし、exe入替えでゲーム自体が不具合を起こす可能性があり最後まで問題なくプレイできる保証はありませんが。

なお、「味方遮蔽」のON/OFFについては、メモリ上のどこを弄ればよいのか絞り切れなかったのでSSGには入っていません。
「味方遮蔽」のON/OFF切り替えは、上記リンク先のwikiからDLできるver6.85sのスクリプトファイルを弄るのが一番確実です。
「a_default」→「script」→「main」→「context.dat」をメモ帳等のテキストエディタで開き、
「force_fire = off」(味方遮蔽が有効=デフォ設定)を「force_fire = on」に変更すると「味方遮蔽」が無効になります。
(context.datでは他にも色々基本的なシステムを弄れます。詳細は上記wikiの「シナリオ製作講座」を参照)

上述の「味方遮蔽」のデータを含め、このゲームの連結リストのデータ構造はかなり複雑で、
解析で一番難儀したのがこの点です。
SRPG Studioのような、ポインタが次のデータのアドレスを指定する1個しかない片方向リストではなく、
データを連結するためのポインタが、各データに3つ存在します。
基本的に、前のデータへのポインタが1つ、次のデータへのポインタが2つで、
次のデータが2つに分岐するという面倒くさい構造です・・・
分岐した先で、さらに2つに分岐(以下繰り返し)ということも多く、
次のデータが存在しないドン詰まりの場合は、前のデータへのポインタ以外の二つは、
連結リストの基点アドレス(※)へ戻るポインタとなっています。
 ※ここにもポインタが3つあり、1個目のデータ・中間にあるデータ・最後のデータ、それぞれへのポインタです。

データ数が10-20個程度なら何とか強引にアドレスコーディングに書くことができたのですが、
データ数が3桁、4桁ともなると完全にお手上げで、
添付のSSGでユニット名等が記号でしか表示されないのも、
この連結リストの膨大なデータを追えなかったのが原因です。

追記;
このSSGを読み込むと、SpoilerALのメモリ使用量が600MB近くに達し、
読み込みに25秒程度(私の環境では)かかります。

追記2;
>>506に、メモリ使用量とSSG読み込み時間を大幅に減らした修正版をアップしました。
問題が無さそうなら、こちらは後日削除します。

追記3;
添付SSGの内容を修正した上でこちらのSSGは削除し、スレッドトップにアップしました。
修正内容は>>510を参照。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.504)
投稿日 : 2017/05/07(Sun) 18:28
投稿者 amateur◆kR..xsXL6RU
ID情報 : DtZFBa15xmdjHzboi9I4M/
参照先
なお、>>503のSSGでは、>>489で変態紳士さんが教えてくださったエントリーポイントから辿る方法でベースアドレスを記述しています。
また、エントリーポイントからの経路を調べるには、これも変態紳士さんが>>377で教えてくださったobjconvを使用しました。
これが無ければ、とてもエントリーポイントまでの経路が分からなかったと思います。
変態紳士さん、色々教えてくださって有難うございます。

そして、具体的にSSGを書くに当たっては、
最近のSpoilerAL修正パッチで導入されたif文、else if、break等を使用してみました。
>>503に書いた複雑な連結リストのデータを強引にアドレスコーディングに書くことができたのは、
「else if」のお陰です。else ifを18回繰り返すとかかなり強引に書いたのですが・・・

else ifについては、例によってこのサイトの解説をざっと読んだだけなのですが、
要するに、if文の基本構造である、「 if(条件式)("真"の文;) else("偽"の文;) 」の、
「偽」の部分が丸ごとif文になってる、というものでしょうか。
以前、ウディタのスレで変態紳士さんが三項演算子を連続させる書き方を教えてくださったのですが、
それと構造的には似たような感じですかね。
if文の場合はアドレスコーディングの分割を使って複合文にもできるので上位互換のようなもの?
SRPG StudioのSSGで三項演算子の連続技は既に一度使っていたので、割とスンナリ理解できた?ような。

それと、breakについて、whileの2重ループの各ループ箇所でbreakを使ってみましたが、
意図したとおりバッチリ機能していました。
breakの使用でwhileループでの無駄な演算をかなり省けたので、これも有り難い機能ですね。

他に、ポインタ変換演算子等を用いたアドレスに書き込む、複合代入演算子の新機能(左辺代入にも同時に追加されたもの)ですが、
例えば、現在のEXPに10000を加算する、というような処理に使うと便利ですね。
EXPのアドレスを「ad」とすると、
 [:$ad:]+=10000 (または、 *$ad+=10000 )
というように書くと、EXPに10000を加算することが可能です。
特に、whileやfor文のループ処理の途中でこの機能を使うと、
複数のキャラのEXPに任意の値を一括して加算する、というような処理が、
一括系の項目を使わず(チェインファイル不要)、数行程度で書けてしまいます。
加算する値を自由に変えるには、加算する値を電卓項目で[allocate]で確保した空きメモリのアドレスに書込み、
ファンネルライトで、
 use, _L Memory::0, $4 (略) ; [:$ad:]+=[:Memory::0:L] ; [:Memory::0:L] $$
 (本体の電卓項目の現在値を0にリセットしたい場合は、最後の部分を「; 0 $$」とする)
のように書けばOK。

SSGの需要があるかは兎も角、パッチで追加された新しい書式を試すことが出来て有意義であったと思います。
このゲームの連結リストの複雑さにはウンザリですけど(これに手間取らなければもっと早く完成していた・・・)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.505)
投稿日 : 2017/05/09(Tue) 18:28
投稿者 dipper◆LEFxdWWYR3c
ID情報 : iGGKA9ATGUZVcceTCsPiC0
参照先
>> 503 amateurさん

> SpoilerALのメモリ使用量が600MB

確か[subject]は長文のアドレスコーディングだとメモリ使用量が激増したような…
長文のアドレスコーディングを[define]に記載して使用すると大分メモリ使用量が減ったはずです。

試しに >> 503 に添付されているSSGを適当に一箇所(UnitFriendSub_SSR内)[define]を使用してみた所、
修正前は585MBに対し495MBほどに減りました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.506)
投稿日 : 2017/05/09(Tue) 22:48
投稿者 amateur◆kR..xsXL6RU
ID情報 : wRn4DZphcpEQ5sME51J4r1
参照先
>>505 dipperさん
情報ありがとうございます。
>[subject]は長文のアドレスコーディングだとメモリ使用量が激増したような…
成程、そういう仕様なんですね。これは覚えておかないと・・・
早速教えていただいたとおり、矢鱈と長ったらしい箇所を[define]で置換したところ、
メモリ使用量が100MB未満に、SSG読み込みが10秒弱まで激減しました。
dipperさんの情報提供のお陰です。本当に有難うございます。

というわけで、>>503のSSGを修正したものをこちらにアップします。
動作検証が不十分なので、一応、>>503のSSGはそのままにして別にアップしておきます。
問題が無さそうなら、後日>>503の方は削除する方向で・・・

追記;
添付SSGの内容を修正した上でこちらのSSGは削除し、スレッドトップにアップしました。
修正内容は>>510を参照。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.507)
投稿日 : 2017/05/10(Wed) 00:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : wRn4DZphcpEQ5sME51J4r1
参照先
サルベージスレの方でベースアドレスの特定方法を質問されている方がいらっしゃったのと、
以前からポインタやベースアドレスの具体的な探し方を書いておいた方がよいのではと思っていたので、
この機会にベースアドレス探索の実況的なことをしてみようと思います。

これからベースアドレス特定等を勉強される方は、事前に最低限の知識を確認するため、以下を参照すればよいのではと思います。
・「響 舞名のgdgd解析ページ」の「4.変動アドレスの解析〜ベースポインタを探せ!〜」のページ
  → 初めてポインタやベースアドレスを自力で探す方はここをまず読むとよいのでは。
    スクショ付きで物凄く分かりやすいです。私も約1年半前に最初にここを読んで取っ掛かりにさせていただきました。
    ただし、一つだけ注意点が。
    「検索内容を数値ではなく「バイト列」を選択して検索をかけます」とある箇所ですが、
    「05BD0048」の頭に0xを付けて「0x05BD0048」で普通に「数値」で検索すればOKです。
    わざわざ「48 00 BD 05」とエンディアン反転してバイト列検索する必要はないです。
    検索する度に一々エンディアン反転してバイト列検索していては効率が悪く面倒くさすぎますので。
・「DANAの部屋」の「アドレス可変型ゲームの改造」のページ
  → ゲーム解析の基本知識を得るための定番サイト。
   使用している解析ツールが古い(スペシャルねこまんま57号を使ってる)ですが、
   基本的なところはうさみみハリケーン等での解析と同じだと思います。
・うさみみハリケーンの作者の公式「Digital Travesia」の「逆アセンブルコードリストについて教えて下さい。
  → 「オペランド」や「レジスタ」「スタック」等のアセンブリに関する基礎用語や、
    MOV命令等の基本的な命令を解説くださっているので、初心者にはとても参考になります。

他に、サルベージスレでナスさんがリンクを貼ってくださっている、猫缶Indexの過去ログも非常に参考になりますので、オススメです。

以上のサイト等の解説を前提に実際のゲームのベースアドレスを探す過程を書きます。
対象ゲームは、サルベージスレで名前が挙げられていた「幻想少女大戦永」の体験版です。
SpoilerALやうさみみハリケーンの起動タイミングによってはゲームやツールがフリーズするので厄介ですが・・・

なお、アセンブリ言語の命令について、分からないものがあれば、私はこのサイトで調べています。
普通にググるだけでこのサイトの該当解説ページがヒットすると思います(実際はその方が早かったり・・・)

それと、ポインタやベースアドレスを特定する方法について、
上記の「響 舞名のgdgd解析ページ」で、検索→ブレークの繰り返し手法が説明されていますが、
これは言わば手抜き手法で、逆アセンブルコードを遡って読んでいくのが正攻法です。
ただし、正攻法が必ずしも最も効率の良い方法とは限りませんし、
正攻法だからといって、全てのゲームで必ずベースアドレスに辿り着けるとは限りません。
中には正攻法が通用しないゲームもあります。
ゲーム解析に割ける時間は限られていますので、いつも正攻法をとっていては時間が足りないこともあるでしょう。
なので、「手抜き手法」だからといって悪いとか止めるべきとはいえないと思います。
実際、検索→ブレークの繰り返し手法を使った方が早い場合が多いと思います。(ブレーク設定しても反応がないので検索のみで辿っていく場合もあったり・・・)
私の個人的な考えですが、検索する前に少し逆アセンブルコードを読んでみて、
LEA命令やADD命令で、追うべきレジスタ(EAX等)に値が加算等されていないかチェックしたり、
取り敢えず検索してみて、うまくいかない場合に逆アセンブルコードを読んでみる、というのが効率的ではと現時点では思っています。
(アセンブリをまともに読めないとか、ひたすら読むのが面倒くさいとか身も蓋もない理由もあるのですが・・・)

このあたりも含めて、ご意見、ご質問、間違いの指摘等あればお願いします。
別にこれが唯一の正解だとか、一番良い方法だとかは全く思っていませんし、
もっと良い方法があれば教えていただけると有り難いです。私は所詮本格的に解析を始めて1年半程度ですので色々知識・経験とも不足しています。

それでは、興味がある方は添付のテキストファイルをご覧ください(スレの本文に書くとあまりに鬱陶しいので直接は書きません)。
ちなみに、解析ツールは「うさみみハリケーン」を使用し、
逆アセンブルには「モジュールを逆アセンブル」(「CrossReference」にチェック)機能を使用しています。
「選択範囲を逆アセンブル」よりも高機能ですので。
なお、添付テキストの解析結果に基づき、同ゲームの体験版用SSGを作りましたので参考に添付します。

追記;
テキストファイルの間違い等を修正

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.508)
投稿日 : 2017/05/11(Thu) 20:25
投稿者 頭痛が痛い
ID情報 : RdiIhybU54NRAeOkkGTqg1
参照先
逆アセ意味不明だったからこういうのありがたい
2つ目まではStack dumpにあるアドレス(最初のアドレスとそれに近いアドレス)のすぐ上にCALL命令で呼び出されているアドレスが関数先頭なんだなってのはわかったんですけど
3つ目はなんでそこが関数先頭ってわかるんですか?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.509)
投稿日 : 2017/05/13(Sat) 00:04
投稿者 amateur◆kR..xsXL6RU
ID情報 : 1Ad6UGX3IxwPTz9R7yyaS/
参照先
>>508 頭痛が痛いさん
3つ目というのは、添付テキストの
 0056DCFC 55 PUSH EBP (関数先頭)
のことでしょうか?
この部分は、
0056DCFC 55 PUSH EBP (関数先頭)

0056DD18 8D1CB6 LEA EBX,[ESI+ESI*4]
の間を省いてしまったので、分かりにくかったかもですね。
関数の先頭箇所については、
うさみみハリケーン Ver 0.25 最新オンラインヘルプの、
「モジュールを逆アセンブル」の、「CrossReference」の項目に説明されているとおり、
各アドレスの左端に「 } 」の印が付いている箇所が、
関数の先頭アドレス(CALL命令からの参照箇所)です。
そのアドレスの参照元アドレスは、
右下の「参照元一覧」に表示されますが、
一つとは限らないので、
関数の先頭アドレスを「実行」でブレークポイント設定し、
ブレーク結果の「Stack dump」の1個目が、
CALL命令の戻り先アドレスです。
その戻り先アドレス -5 が参照元アドレスとなります。
今回は、「参照元一覧」に表示されている、
「005728F3」が参照元アドレスです。

一応、説明付きのスクショを添付します。

なお、関数先頭の「0056DCFC」で「実行」でブレークした結果は、下記のとおりです。
[Break on HBP1]
Registers:
EAX=1AEB7458 EBX=0AC15CF0 ECX=000C351D EDX=000187D7
ESP=0018ECE8 EBP=0018ECF8 ESI=0018EDF8 EDI=00000000
EIP=0056DCFC EFlags=00000202 [ I ]
Stack dump:
005728F8 0018EDF8 00000001 0AC15CF0
0018ED20 00572A23 0018EDF8 0018EDF8
ThreadID:
000007C8

上記の「Stack dump」1個目の「005728F8」がCALL命令の戻り先アドレスで、
その -5 の「005728F3」が参照元アドレスです。
なぜスタックの1個目かというと、上記の「EIP=0056DCFC 」の一つ前の命令がCALL命令で、
CALL命令が実行されると、必ず関数部分から抜ける際の
「戻り先アドレス」(CALL命令のアドレス+5)をPUSHする(スタックに積む)からです。
直近にスタックに積まれた値は、スタックの先頭(「Stack dump」の1個目)にあります。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.510)
投稿日 : 2017/05/13(Sat) 03:36
投稿者 amateur◆kR..xsXL6RU
ID情報 : 1Ad6UGX3IxwPTz9R7yyaS/
参照先
>>506のヴァーレントゥーガのSSGですが、
「戦闘中のデータ」について、若干の機能追加と、大幅修正をしましたので、
元の>>503と修正分の>>506のSSGは削除し、スレッドトップに移動してアップします。

(修正内容)
・戦闘中の各ユニットデータに
 「※このユニットの通常ステータスを戦闘中データ先頭の項目で表示・変更する」を追加し、
 この項目をONにしたユニットの通常ステータス(EXPや功績値等)を
 「戦闘中のデータ」の一番上に表示するようにしました。EXPや功績値等を確認・変更可能に。
 なお、この新項目で一度に表示するのはユニット一つだけです。
 上記の※印の項目を最後にONにしたユニットが対象となり、
 その後に別のユニットの※印項目をONにするとそのユニットの表示に切り替わります(前に表示したユニットの※項目をOFFにする必要は無し)。
・「戦闘中のデータ」に部隊数・各部隊のユニット数を表示するようにした。
・「戦闘中のデータ」の、味方・防衛側・侵攻側の各ユニットデータの一括変更項目を全て同じにした。
 修正前は味方ユニットデータにしか無かった機能を、防衛側・侵攻側の各ユニットデータにも追加しました。
・味方・防衛側・侵攻側の各ユニットデータで、関係ない部隊・ユニットを表示しないようにした。
・味方・防衛側・侵攻側の各ユニットデータの一括変更項目の「break」の条件を修正。
 関係ないユニットまで書き換えてしまう不具合が無くなった、と思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.511)
投稿日 : 2017/05/13(Sat) 18:24
投稿者 amateur◆kR..xsXL6RU
ID情報 : DzmGoK9KYMFf4uinicdFy.
参照先
>>509の説明の補足になりますが、
スタック(>>507の添付テキストであれば、最初のブレーク結果の「ESP=0018E8A4」のアドレス以降)の4バイト毎の値を見れば、
CALL命令のアドレス(関数先頭を参照しているアドレス)は大体分かります。
その際、CALL命令のアドレスはプログラム部分(通常は「.text」セクション)の範囲に属するアドレスですから、
うさみみの「表示アドレスを16進数で指定」(Ctrl+G)のメモリエリアマップで.exeの先頭を選択して
右下に表示される各セクションの情報を見ればプログラム部分(.textセクション)のアドレス範囲は分かります。

参考に>>507の添付テキストに対応した解説付きのスクショを添付します。
水色の下線部の値(エンディアン反転するとアドレスになる。「Ctrl+P」でそのアドレスに移動します→ポインタを辿る時に便利な機能)が、
それぞれスタックに積まれたCALL命令の戻り先アドレスであり、
それぞれの -5 がCALL命令のアドレスです(CALL命令は必ず5バイト使用するので、戻り先アドレス -5 となる)。
今回の例では、4箇所の水色の下線部の値(先頭の「94 93 40 00」を含む)を見れば、
辿っていく関数部分が簡単に分かりますね。
また、例えば、
 00572B4E E8 75FDFFFF CALL 005728C8 (スクショの水色下線部「53 2B 57 00」→00572B53 の-5のアドレス)
というCALL命令の参照アドレス(上記では「005728C8」)が関数先頭アドレス、ということになります。
関数先頭アドレスも、スタックの値を確認した方が今回の例では簡単に早く分かると思います。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.512)
投稿日 : 2017/05/13(Sat) 19:09
投稿者 頭痛が痛い
ID情報 : RdiIhybU54NRAeOkkGTqg1
参照先
>>509 そこです!わかりにくい質問ですみません
Stack dumpに書いてあるアドレスから関数先頭を見つけてるのかと思ってたけど順序が違った
CrossReferenceで一発でわかるんですね だからPUSH回数数えてたのか…
スクショめちゃくちゃわかりやすいです!補足もありがとうございます
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.513)
投稿日 : 2017/05/13(Sat) 19:56
投稿者 amateur◆kR..xsXL6RU
ID情報 : DzmGoK9KYMFf4uinicdFy.
参照先
>>512 頭痛が痛いさん
私もアセンブリを読むことに関しては初心者に毛が生えた程度です。
色々模索してる最中で、他にも色々やり方はあると思いますので、
こんな方法もある、という程度に受け取っていただければ。
例えば、>>509の実行ブレークして参照元アドレスを見つけるのはあまり良い方法ではないと思ったので、
スタックの値を直接参照する方法を>>511で補足しましたし・・・

それと、>>507の添付テキストにも書いていますが、
  00572B4E E8 75FDFFFF CALL 005728C8
で指定された関数先頭「005728C8」に関しては、
普通に逆アセコードを遡って読んでも分からない(先頭を示す「 } 」のマークが付いてない)です。
この箇所は、「objconv」で逆汗しても同じく関数先頭だとは分からない(「005728C8」を先頭とする命令も表示されない)ので、
どのツールで逆汗しても同じかもしれません。
仕方ないのでスタックの値を直接確認して関数先頭「005728C8」を特定しました。
「005728C8」を先頭にして逆アセンブルするには、
「005728C8」を先頭にドラッグで範囲指定して「選択範囲を逆アセンブル」機能を使えばOKです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.514)
投稿日 : 2017/05/15(Mon) 00:16
投稿者 amateur◆kR..xsXL6RU
ID情報 : R3wMvMJOZTK6qOARLOtEe0
参照先
スレッドトップのヴァーレントゥーガのSSGを更新。
・「陪臣フラグ」項目を追加し、陪臣の場合の主君名を表示するようにしました。
・「身分」(一般・上士・重臣等)を変更できるように修正。
 ただし、身分は功績値によって決まるので、書き換えても功績値の値に応じた身分に戻されます(功績値を高くすれば重臣まで上げることは可能)
 マスターの身分を他に変えると(逆に非マスター人材をマスターにしても)不具合があるかもですので注意
・人材プレイ時に「状態」コマンド選択中の自部隊データを表示・変更できるようにしました。

自分でプレイしながらSSGを使うと、色々修正・追加すべき点が見つかりますね。

追記(5/17)
スレッドトップのヴァーレントゥーガのSSGを修正しました。
・全勢力の軍資金を電卓に書込んだ値分だけ一括加算(マイナスも可)する機能追加。
・各領地のユニットデータについて、関係ないユニットを表示したり一括変更で書き換えてしまう不具合を修正。
・各領地単位で、全ユニットの忠誠・信用度、移動力、素早さ、移動型を「飛行」に変更、の各一括変更機能追加。
・戦闘中の一括系項目について、SSGで表示中の先頭部隊から500部隊分を一括書換え可能にしました。
 500部隊未満の場合、例えば8部隊しかいない場合は、8部隊まで書き換えた時点で「break」で書換えループ処理を抜けるように書いてますので無駄な演算はしません。
・戦闘中データの「状態異常値を100に戻す処理&状態異常値の自動回復を無効に」をOFFで元に戻せない不具合等を修正。
・戦闘中データで、召喚されたユニットのデータを表示・変更する機能追加。
 ★印の項目をONにしたユニットが召喚したユニットのみです。
 最後に★項目をONにしたユニットの召喚したユニットを表示する仕組みで、全召喚ユニットを一度に表示はできません。
・戦闘中のユニットデータに、「遮蔽フラグ」と「行動指示可能フラグ」を追加。
 「遮蔽フラグ」は、味方遮蔽のON/OFFをユニット毎に切替え可能です。
 「行動指示可能フラグ」は、戦闘中にプレイヤーが指示できるか切替え可能です。同盟軍や敵のユニットも指示可能にできます。
・戦闘中のデータで、自軍・防衛側・侵攻側の各別に、全ユニットの味方遮蔽をON/OFF切替えする一括項目と、
 全ユニットを行動指示可能にする一括項目(召喚したユニットには効果無し)を追加。

味方遮蔽については、システム上の設定箇所はメモリ上で特定できなかったものの、
戦闘中の各ユニット個別の遮蔽フラグは見つけたので、一括変更で戦闘ごとにON/OFF切替え可能になりました。
味方だけ遮蔽無効にもできるので結果的にこれの方が良いかも。
全ユニットを行動指示可能にする一括項目では、敵ユニットも操作可能になるので、八百長じみた酷いインチキ状態に・・・
ドラクエで「めいれいさせろ」コマンドが敵モンスターにも効くみたいなもんですね。
敵の行動禁止にして「大魔王ゾーマはまごまごしている!」みたいにしたり、敵の強キャラの奥の手の必殺技を射程範囲外で無駄打ちさせたり・・・
自分で書いておいてなんですが、こんな酷いチートも珍しいような(^_^;)
ただ、敵にはユニット単位でしか指示できず、味方のように全部隊や部隊単位での指示はできないので実際に敵に指示出すのは面倒ですが。
それと、行動指示可能フラグを弄っても召喚ユニットには効果がなく操作不可なのが地味に不便で・・・

一応、以上で機能追加は終了するつもりです。
各勢力との友好度や同盟の残りターン数とかは結局どこを弄ればよいか分かりませんでしたし、
色々不明なまま放置した部分も多いのですが、これくらい機能があれば十分だろうと・・・

ちなみに、本家ヴァーレントゥーガ以外の、光の目とかの拡張シナリオ(オリジナルシナリオ)では、
ユニットの耐性や移動型に、SSGのリストに入ってないものがありますが、
これは各オリジナルシナリオにおいてスクリプトで独自に追加設定されているものです。
一応、そういう追加された耐性等にも対応するため、リスト選択項目以外に、
文字列を直接書換える項目を用意しています(リスト選択項目でも実際はダブルリストで文字列を書換えている)。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.515)
投稿日 : 2017/05/28(Sun) 07:46
投稿者 圭太
ID情報 : uyat/7Y8OgZ4fcQRJSop91
参照先
お世話になります
少し質問をさせていただきたいのですが

この素晴らしい世界に祝福をDVD特典付属ゲーム
「復活のベルディア」というロックマンタイプのゲームなのですが
Usamimiの値サーチでは全くHitせず、領域確保の変動サーチでも絞り込めません。

この手の格納方法が特殊なゲームの場合、サーチはどうのようにすればよいか
もしヒントいただけるようでしたらお願い致します
そもそもDVDを購入している人がこのサイトにいる可能性も低そうなのですが…

ゲーム参考動画
https://www.youtube.com/watch?v=eXSMlf90BUw
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.516)
投稿日 : 2017/05/28(Sun) 18:20
投稿者 amateur◆kR..xsXL6RU
ID情報 : 7c0RV2Cv5ZEpN0OpmHDrB/
参照先
>>515 圭太さん
テレビアニメのDVDに付属の特典PCゲームなんですね。
私は買っておらず具体的なことは何も言えないので、
うさみみでの検索の一般論的なことだけ一応書いておきます。
(そんなことは既に試してるよということもあるかと思いますがご容赦ください)
なお、うさみみハリケーンの、「範囲検索(64Bit Mode)」を使用することを前提としています。

1.「検索・比較単位」を変えてみる。
 特に、「Float」か「Double」(いずれも浮動小数点数。実数型とも呼ばれる)に変えるとあっさりヒットする場合があります。
 この場合、一つ注意点が。
 「Float」や「Double」の実数型の場合、ゲーム画面では少数点以下なしの「100」と表示されていても、
 メモリ上では「100.5」のように少数点以下ありの値で格納されている場合があります。
 この場合は、表示する際に少数点以下切り捨て・切り上げ・四捨五入されている可能性を考慮し、
 「99,101」と検索値欄に入力し、「数値範囲:[<=,<=]」で検索する必要があります。
 ステータス等に倍率補正がかかって少数点以下ありの値になるゲームでこのような例が時々あります。
 
 他に、整数型でも、ゲーム画面で「100」なら、「検索・比較単位」をデフォルトの「4Bytes」から「1Bytes」に変更してみる等、
 値が何バイト単位でメモリ上に格納されているかを考えながら変えてみる。

 なお、検索・比較単位を変えてみるのは、通常検索だけでなく変動検索の場合でも重要です。

2.検索の「範囲」の右側にある「境界ベース」のチェックを外してみる(デフォルトではチェックが入ってる)。
 「境界ベース」とは、検索する際に検索・比較単位のバイト数ごとにアドレスをずらしながら検索するか否かということです。
 例えば、「検索・比較単位」を「4Bytes」にして「境界ベース」のチェックを入れると、
 4バイトごとにアドレスをずらしながら検索するので、
 アドレス「0x10000000」の次は「0x10000004」から始まる4バイトが対象になります。
 途中の、「0x10000001」「0x10000002」「0x10000003」の三つはスキップされるということです。
 もし「境界ベース」のチェックを外すと1バイトずつずらしながら検索するので、
 チェック有りの場合と比べると、検索対象のアドレスの数が4倍になり、検索に要する時間も4倍になります。
 大体のゲームではチェックを入れたままで構わないのですが、
 時々、メモリ上で各値が、DWord(またはQWord,Word)境界からはみ出して格納されている場合があるので、
 チェックを入れたままで検索でヒットしない場合は、チェックを外してみてください。
 このことは、通常検索だけでなく、変動検索の場合でも同様です。


3.値が3バイト単位で格納されている等、格納単位が特殊な場合
 滅多にありませんが、この場合は「検索・比較単位」が「4Bytes」「2Bytes」のいずれでもヒットしない可能性がありますので、
 「バイト列」で検索する必要があります。例えば、「10000」を検索する場合は、
 16進数に変換した「0x2710」をエンディアン反転した「1027」を入力してバイト列検索します。
 色々試しても何故か全くヒットしない場合は、バイト列で検索してみる、というのも一つの対処法です。

 なお、1バイト(8bit)のうち、上位または下位の4bitに値が格納されていたり、
 ビット単位でフラグ管理している場合もありますが、
 こういう場合はバイト列検索ではなく変動検索で調べるのが良さそうです。

4.メモリ上で値がリトルエンディアンのバイト列ではなく、ビッグエンディアンのバイト列で格納されている場合
 これは滅多にないと思いますが、こういう場合も全くないわけではありません。
 通常は、「100」の場合、メモリ上では「64000000」とリトルエンディアンのバイト列で格納されていますが、
 ビッグエンディアンの場合は、「00000064」となります。
 つまり、検索する際は、16進数で「0x64000000」で検索するか、
 バイト列「00000064」で検索する必要があります。
 
5.ゲーム上で値が変わると、値だけでなく、値を格納しているアドレス自体も変動する場合
 この場合は、いわゆる「絞込み検索」が不可能ですので、検索は困難です。
 「RPGツクールMV」がこれに該当します。(ちなみにツクールMVでは値はdouble型で格納です)
 今のところ、私には有効な対処法は思いつきません。

6.言わずもがな、かもですが、ヒットしない場合は、検索範囲を広げてみる
 現在のうさみみハリケーンには、「検索範囲を最大化」という項目がありますので、
 これにチェックを入れるとお手軽に検索範囲を最大化できますので、検索範囲から漏れることは回避できます。
 時々、アドレスのかなり後ろの方にお目当ての値が格納されていることもありますので、
 念のためにこれを試してみるのも。


ざっと私に思いつく注意すべき点は以上です。
他に、変動検索がうまくいかない場合は、「境界ベース」のチェックを外してもう一回試してみる、
変動検索を符号付きの値で行う(マイナス値もとり得る)場合は、「符号あり(比較用)」にチェックを入れる、
等くらいでしょうか。
変動検索は、検索範囲を広げるとヒット数が多過ぎて(保持できるアドレスは100万件が上限です)うまくいかない場合も多いのが悩みどころですけど。

※上記「1」および「3」について追記しました(6/1)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.517)
投稿日 : 2017/05/28(Sun) 19:53
投稿者 圭太
ID情報 : uyat/7Y8OgZ4fcQRJSop91
参照先
amateurさん

ご丁寧に有難うございます
DoubleでHP,MP共に小数点でサーチできたのですが
時間とともに徐々に回復する仕様のためか最大値から逆算で
カウントを減らしていくような感じになってました
まあ何とか出来たのですが、ステージ変わる度に格納アドレスが
変動するので、何ともしんどい仕様となってます、

またセーブに残るお金だけでも変えておこうかと思ったのですが
バイトにしようがなんだろうが、全くHitせず、こりゃ自分のスキルじゃ
無理だと諦めました。

意図してこのような複雑な仕様にしているなら、改造対策のためかもしれません
いやーこれは半端ないです、過去最強の難易度ですね。

わざわざ返信頂いたにも関わらず、残念な結果となりましたが
有難うございました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.518)
投稿日 : 2017/05/30(Tue) 23:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : vSIJByAK4RxripJrUL9Al.
参照先
スレッドトップの2個目に添付したヴァーレントゥーガのSSGですが、
if文の書き方にミスがあったので、修正しました。
アドレスコーディングがif文で終了する場合、例えば、
 if(条件式)(【略】;) else 0, 【以下略】
上記のような書き方では、「else の解析エラー」となるので、
 if(条件式)(【略】;) else 0;, 【以下略】
のように、アドレスコーディングの終端( , の手前)に、アドレスコーディングの分割「;」を入れる必要があるようです。
「else 0,」と書いていた箇所が多数あったので修正しました。

ただ、「2017.05.25」と「2017.05.27」(最新版)のSpoilerAL修正パッチでは、
何故かこのSSGの読み込みに失敗するので、(少なくとも私の環境では)使用できません(上記の修正後SSGでも同じ)。
「2017.05.21」(とそれ以前で、if文が実装された「2017.04.19」以降の分?)の修正パッチでは正常動作するのですが。
対応を検討中ですので、現在このSSGを使用中でかつSSGを使えないと困る方は、
最新版のSpoilerAL修正パッチの適用は暫く控えた方がよいかもしれません。
そもそもこのSSGに需要がなくてそんな心配は無用なのかも知れませんが、一応。

追記
上記のSSGが読み込めない原因が判明したので、スレッドトップのSSGを修正しました。
dipperさんが別スレでご指摘くださったのですが、
とある電卓項目の最大値を「0x7FFFFFFFF」と、4バイトを超えた値にしていたという、単純ミスでした。
これで、SpoilerAL修正パッチの最新版を適用しても問題ないはずです。
(問題があったのはSSGの方だったわけですが・・・)

さらに追記
上記の「else 0,」の件ですが、偽判定時にアクセスアドレスを「0」にしたかったら、
そもそも「else」以下の記述自体不要ですね(if文でアドレスコーディングが終了する場合は)。
真判定時の記述しか無かったら、偽判定時にはif文全体の演算結果は自動的にゼロになるようなので。
ただ、ヴァーレントゥーガのSSGで「else 0;,」と書いた箇所は、
偽判定時は積極的にアクセスアドレスを0にして、何も書込み処理を行わない(アドレスネーミング部はエラー時の代替文字列を表示)意図なので、
後から読み直した時にどういう意図で書いたのか分かりやすいように敢えて「else 0;,」のまま残しておこうと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.519)
投稿日 : 2017/06/04(Sun) 00:21
投稿者 amateur◆kR..xsXL6RU
ID情報 : ZDnkz4/TgubziTDqo2D8W.
参照先
スレッドトップに添付したSRPG Studio用のSSGですが、
現在の最新版に近いVer1.128で試したところ、ベースアドレスの特定等に失敗していたので、
修正して差替えました。
細かい部分まで動作検証はしてませんが、多分大体の項目は動作すると思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.520)
投稿日 : 2017/06/05(Mon) 18:52
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : 5n4u.CmlQNn40hh4AIoq30
参照先
おひさです。
amateurさん色々と更新ありがとう〜。

ヴァーレントゥーガについては、前作?ファーレントゥーガだったかな?
をやった覚えがあるのでもしや続編でしょうか?

完成度の高い大作SSGですね!制作ありがとうございます。

PS.
圭太さんが解析の勉強してるご様子、今後の活躍に期待です。
エウの新作は七星さんと変態紳士さんが至高のSSGを作ってくれてますし制作ありがとうございます。
(memmove系が特に勉強になります。必要なデータ分だけ処理して集めてるのかなぁと…)

追記:
>>521
amateurさん情報ありがとう。ヴァーレントゥーガにはいくつも追加シナリオがあるんですね。
しかし時間泥棒となると…危険ですね(滝汗

>memmoveについては、 王国のソウルスミスのSSGで実験的に初めて使ってみたのですが
既に使いこないしてるじゃないですか感服しました(流石です)
僕はやっとfep系とerror_skipまで追いつきました(適応能力の差が…)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.521)
投稿日 : 2017/06/05(Mon) 19:59
投稿者 amateur◆kR..xsXL6RU
ID情報 : CeFjnXA/AUPYDiS9mJonL/
参照先
>>520 仔猫さん、お久し振りです。
ヴァーレントゥーガについては、まとめwikiに書いているとおり、
ストーリーやキャラ設定等をファーレントゥーガから流用している(ファーレントゥーガ作者の了解は得ているとのこと)みたいですが、
システムは全く別物になってる(戦闘はRTS)ようですね。
私は元ネタのファーレントゥーガの方はプレイしたことがなかったりします。

ヴァーレントゥーガについても、私は本家よりむしろ、派生作品の光の目に熱中したクチです。
戦略マップ・戦術マップともに本家の倍はありそうな上、戦闘に投入できるユニット数も多いので、
戦術マップではド派手な戦闘を楽しめます(戦闘というより「戦争やってる」感が凄い)。
他に私はプレイしてませんが「きのこたけのこ戦争・IF」も大作として界隈では有名な派生作品ですが・・・(英語版もリリースされてるとか)
多分、両方ともゲーム実行ファイル「Vahren.exe」を最新版のものに入替えればSSGは動作すると思います。
ただ、ゲーム自体が大作すぎて凄まじい時間泥棒なのが難点かも・・・(私は数年前に光の目にド嵌りしてヤバかったです)

エウの新作SSGは、七星さんと変態紳士さんの共作?のようで、もう凄いとしか言いようがないですね。
中身拝見して勉強させていただくということで・・・
memmoveについては、王国のソウルスミスのSSGで実験的に初めて使ってみたのですが、
これは便利な機能ですね。
武器名等の文字列がメモリ上で規則的に等差で並んでいないため、
memmoveでSpoilerAL側に確保したメモリに等差で書き込んでから、アドレスネーミングで読み取るという風に使ってみました。
件のSSGでは必要がなかったのでやってませんが、memmoveでローカルアドレスに整列させるように書込むと、
リスト抽出にも簡単に利用できますね。
この方法ならリストを予め用意しなくてもよくなるのですが、
あれもこれもmemmoveでリストを何とかしようとすると、膨大なサイズの空きメモリをSpoilerAL側に確保する必要があるのが難点?かも。

追記
>>520(の追記へのレス) 仔猫さん
memmoveはまだ使いこなしてるというには程遠いです・・・1回試しに使っただけですし。
適応能力というより、単に私が暇人というだけな気が・・・(忙しかったのは案の定、年度末の一瞬だけでした)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.522)
投稿日 : 2017/06/10(Sat) 03:37
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9f.nsaTYMxD.aVx37h3OC0
参照先
スレッドトップに添付したヴァーレントゥーガのSSGですが、
ゲーム最新Verの6.85uでは動作しなくなっていたので、6.85uでも動作するよう修正して差替えました。
従来の6.85r、6.85sでも動作します。
なお、ふりーむ!で公開されている6.85tについては、差替え前のSSGでも動作していました。
現在の対応Verは「6.85r、6.85s、6.85t、6.85u」ということになります。

追記(6/17)
ヴァーレントゥーガのSSGを更新。
ゲーム最新Verの6.85vでは動作しなくなっていたので、6.85vでも動作するよう修正して差替えました。
6.85r以降の旧バージョンでも引き続き動作します。
現在の対応Verは「6.85r、6.85s、6.85t、6.85u、6.85v」ということになります。

・・・と一応Ver6.85r以降に対応するようにしているのですが、
互換性を無くしてゲーム最新版のみで動作するようにしても、「Vahren.exe」を最新版のものに差替えればSSGは動作するので、
あまり意味がない気がしてきました・・・
今のところは、エントリーポイントからベースアドレスまでの経路の一部がずれているだけなので、
複数Verで動作するように書くのは大した手間ではないのですが、
今後面倒になるようだと、最新版のみに対応とするかもしれません。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.523)
投稿日 : 2017/06/18(Sun) 23:23
投稿者 amateur◆kR..xsXL6RU
ID情報 : 5BOR0P.GMsJmBrht3NoTy/
参照先
>>434でアップしたグランブーム国物語 〜 スマイルと目覚めし力 〜のSSGを更新しました。
ベースアドレスの特定方法がやはり強引というかテキトーすぎたので修正しました。
3か月以上経ってもう一度調べてみたら、結構あっさりまともそうな経路が見つかりましたので。
エクスポート関数を経由してるので、ベースアドレスはずれにくくなったと思います。
同じSMILE GAME BUILDER製の他のゲームで試してみたら、
「1.0.6.26」と「1.7.0.10」の二つのVerでほぼそのまま動作していました(元々は「1.0.6.23」用のSSG)。
Ver1.0.6.23以降は、上記Verの2つ分しか更新されていないので、今のところこれでほぼ大丈夫そうです。
もっとも、アイテム等のリストはそのままでは使えませんが。
リストについても、memmoveとリスト抽出機能を使えば、各ゲーム用に微修正するだけである程度使えるものにできそうな気もしますけど・・・
これは今度時間のあるときにやってみようかと思います。

追記(6/20)
上で書いた SMILE GAME BUILDER用のSSGの件ですが、
memmoveとリスト抽出機能を使って、各個別ゲームに対応したアイテムとスキルのリストが使用可能になったので、
SMILE GAME BUILDERのVer1.0.6.23、1.0.6.26、1.7.0.10に対応したSSGとして改めてアップします。
リスト関係以外では、「アイテム・スキル等の名称データ」でデータの種類が大まかに分かるようにしました。
他の基本的な機能は>>434のSSGと同じです。

予めリストを用意せずにmemmoveとリスト抽出機能でリストを賄うという、
以前から出来たらいいなあと思っていたことが実現しました。
この手法なら、体験版ではアイテム名等がメモリ上でも伏せられていて完全なリストが作成できない場合でも、
アドレスさえズレていなければ製品版でSSG使用時に正確なリストが表示されると思います。
Unity製の「Venus Blood-RAGNAROK-」がこういうケースでしたし、同人サークル「犬と猫」のゲームもこんな感じでした。

SRPG Studio用のSSGでもやろうと思えば同様のことが出来そうですが、
今さら弄るのは面倒なので、とりあえずは放置ということで・・・

それと、SpoilerAL側に確保する空きメモリって、どの程度なら大丈夫なのかが気になるのですが・・・
ゲームによってはアイテムだけで1000個以上データがあったりするので、
アイテム、スキル、キャラ、敵モンスター等、全部をmemmoveでローカルアドレスに文字列を保存しようとすると、
かなりのバイト数になりそうで。
データ1個当たり、どの程度のバイト数にするかにもよりますが。
1個当たり0x30バイトとすると、データが1000個で 0xBB80 バイト、
これが何種類かのデータ分あるとすると結構な量のメモリを占拠することに・・・

追記(17.07.17)
添付SSGを修正してスレッドトップ(添付ファイル3個目)に改めてアップしましたので、こちらは削除しました。
修正内容等は>>531を参照。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.524)
投稿日 : 2017/06/23(Fri) 00:26
投稿者 amateur◆kR..xsXL6RU
ID情報 : SbbyVtHJ2vilRtpV7QG8C/
参照先
スレッドトップのSRPG Studio用SSGを更新しました。
>>523のSMILE GAME BUILDER用のSSGと同様、
memmoveとリスト抽出機能を使って、各個別ゲームに対応したリストが使用可能になりました。
これで、以前と比べて使い勝手は向上した、と思います。
ざっと試した限りでは正常に動作していましたが、不具合があれば報告してください。
リスト抽出で表示・使用可能なリストは、項目を2-3回クリックしないと正常に表示しないことがありますが、これは仕様です。
なお、リストの行数は最大500行に設定してますので、ID値が500以上のデータ(文字列)はリストに表示されません(IDはゼロから始まるので、ID:499がリストの最後)。

SRPG Studioでは、武器等の各連結リストのデータは、IDの順番に並んでいない(IDの値が不規則)なので、
whileループ中にそのままmemmoveで文字列を書き込むとID順ではない順番にデータが並んでしまうので、
 memmove(LMemory::0 +$id*0x28, address, size);
のように、IDの値によって書き込むアドレスを変えるようにしました(上記「$id」はID値)。
これにより、ID順に規則的に文字列が並ぶので、通常のlist項目でリスト抽出機能が使えるようになります。

なお、今回の更新に当たっては、>>485で七星さんが教えてくださったnocache指定時のリスト抽出の新機能の活用が不可欠でした。
詳しく解説くださった七星さんに改めてお礼申し上げます。
教えていただいた情報を生かすのに2か月以上かかってしまいましたが・・・

それと、この更新作業をしている最中に気付いたのですが、
確保したメモリのアドレスの
 Memory::(ID)
について、(ID)の箇所に、「$tmp」のような変数や、Memory::([:Memory::0:L]) のように、
()内に演算子を使ってIDを指定することも可能なのですね(上の例で括弧は要らないかもですが)。
これを利用して、三項演算子で条件分岐させ、リスト抽出で読み込むアドレスを
「L Memory::1」「L Memory::2」「L Memory::3」・・・と変化させることで、表示するリストを柔軟に切替えることができました。
(所持アイテム(武器)の「特攻」「専用」でカテゴリを変更するとリストが切り替わります)

他にdo-whileを初めて使ってみましたが、ループする文と継続条件式を書く(処理する)順番が
通常のwhile文と逆になってるだけで、特に問題はありませんでした。
継続条件式を後方にした方が書きやすい場合に使えば便利ですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.525)
投稿日 : 2017/06/24(Sat) 22:23
投稿者 amateur◆kR..xsXL6RU
ID情報 : NZH/SWS9iKuY5EIscDZA./
参照先
別スレでアップしたSSGを作っていて気付いたのですが、
私の使用しているセキュリティソフトのサンドボックス機能が原因で、
そのゲームが自動的にサンドボックス上で実行されてしまい、
その際、そのゲームのウィンドウクラス名が通常とは変更されていたので、
 [process]<> というクラス名指定(<>内に通常時のウィンドウクラス名を記載)の方法ではプロセス捕捉ができませんでした。
セキュリティソフトのサンドボックス機能をOFFにする(ゲーム実行時のみOFFでOK)等、
設定を変えてからゲームを実行すれば大丈夫でしたが。

上記のような場合、[process]にクラス名しか書いてない、
もしくはDL版等で実行ファイル名が[process]に書いたパッケージ版のもの等とは違っている場合は、
プロセス捕捉ができずSSGが動作しないということに・・・

SpoilerAL側に関しては、セキュリティソフトに引っ掛かってSSGが動作しない例があることは少し前から指摘されていましたが、
ゲーム側に関して、上記のような原因でプロセス捕捉に影響を与えることは
私の知る限り言及されたことが無かったように思いますので、一応書いておきます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.526)
投稿日 : 2017/06/27(Tue) 04:16
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : rS65E8ubdiBRAwSCU6MkE0
参照先
>>525 amateurさん
修正パッチが一部のセキュリティソフトによって誤動作する件ですが、
2017/02/25 - 2017/04/08 の分が対象です。
現在は多くのセキュリティソフトが間違えないコードになっています。

セキュリティソフトがウィンドウクラス名をフィルタリングしてしまう件に関しては、
これはセキュリティソフトを含め仕組み自体の問題ですので、個別に対処するしかない気がします。
しかし、クラス名のフィルタリングは行き過ぎているような・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.527)
投稿日 : 2017/06/27(Tue) 21:36
投稿者 amateur◆kR..xsXL6RU
ID情報 : E8zO0K38k65S.ORlW89hk0
参照先
>>526 変態紳士さん
SpoilerAL(の修正パッチ)がセキュリティソフトに引っ掛かっていた件は既にご対応していただいていたのですね。
ありがとうございます。
全然気付きませんでしたが、色々修正してくださっているのですね。お疲れ様です。

ウィンドウクラス名が変わる件は、仰るとおりSSG使う側で個別に対処するしかないですよね。
これは個々のPC環境の問題ですし、一応今後作成するSSGにその点の注意書きを追加するつもりです。
うさみみでクラス名を確認すると、頭にセキュリティソフトの名称が付加されていて、その後ろに「sandbox」、以下は通常のクラス名、という感じでした。
なので、クラス名見ただけで原因が丸分かりという・・・

それと先日のパッチ更新で、trace等の一部を除きほぼ全項目で[funnel]が機能するようになったのですね。
以前から、stringやf_calcに[funnel]が効かず不便に思っていたので、とても有り難いです。
項目によってはファンネルフィイルの条件式で「$Val」の機能に制限がかかるようですが、
これは「$Addr」等を使えば何とでもなると思いますし(useで構わない場合も多い)、
さらにSSGが書きやすくなりそうです。本当にありがとうございます。

ところで、パッチの修正履歴を読むと変態紳士さんがパッチ作成を始められてからほぼ丸一年ですが、
元々SpoilerAL6.1にあったバグの修正を含め、物凄く完成度が高く機能豊富になりましたね。
もう、デフォルト状態でのSSG作成には戻れないくらい便利になりました。
一周年をを記念?して、改めてお礼申し上げます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.528)
投稿日 : 2017/07/01(Sat) 05:30
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : chyK.1f7hNTWBZbMQ.F.r/
参照先
>>527 amateurさん
ウィンドウクラス名が変わる件ですが、正規表現を使えるようにしました。

従来の書式、前方一致をサポート
[process]<ARCGameEngine>

正規表現を使うときは「 /regex」を付ける。(この場合は完全一致)
[process]<ARCGameEngine> /regex

こうすれば前後何でもいいという指定 (DOSのワイルドカードと間違えそうですが・・・)
[process]<.*ARCGameEngine.*> /regex

正規表現についてはgoogle先生に聞いてください。
辞書引きしたい場合は、日本語テキストエディタの「サクラエディタ」や「秀丸エディタ」等で
検索画面を開いてヘルプを出すと正規表現の一覧表みたいなものがあったりします。

ただし、正規表現はエディタ毎に大分違いますし、修正パッチも大分違います。
修正パッチの場合は、ダブルクォーテーション「"」で括らないとスペースを含む事が出来ませんし、
「\」や文字列中の「"」は引数の仕様が優先されます。
でも簡単な内容なら便利かと。

尚「 /regex」を付けた行は、AND指定のウィンドウタイトルやモジュール名も正規表現になります。
なので正規表現では拡張子の「.」は「\.」にしないといけないです。
複数行の場合はOR指定です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.529)
投稿日 : 2017/07/01(Sat) 18:58
投稿者 amateur◆kR..xsXL6RU
ID情報 : AquvWsag1twkUpLVdi8h0.
参照先
>>528 変態紳士さん
おお、ご対応ありがとうございます!
まさか、ここまでパッチで対応していただけるとは…
早速試してみましたが、きっかけとなった吉里吉里のゲームでは、
下記のいずれでも正常にプロセス捕捉に成功しました。(サンドボックス上で実行される場合、されない場合いずれでもOK)

[process]<.*TTVPWindowForm.*> /regex
[process]<.*"TTVPWindowForm".*> /regex
[process]<.*"TTVPWindowForm".*> *"奴隷将校クラリス" /regex

ただ、私の使っているセキュリティソフトでは上記の方法でOKでしたが、
他のセキュリティソフトではどうなのかは分かりませんけど(通常のクラス名の前後に余計なものが付加されるだけなのかは不明なので)。

それと、クラス名の後ろに「 *"奴隷将校クラリス"」のようにキャプションを付ける場合、
キャプションの前の「*」を「\」でエスケープさせる必要は無いようですね。
「前後何でもいいという指定」、これは滅茶苦茶便利です。本当にありがとうございます m(_ _)m

正規表現については、「サルにもわかる正規表現入門」というサイトの解説が分かりやすかったです。
サルにもわかる、という謳い文句は伊達では無かった…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.530)
投稿日 : 2017/07/02(Sun) 19:07
投稿者 amateur◆kR..xsXL6RU
ID情報 : dyJIvFxBhZ1w3fh/xpVpp/
参照先
ヴァーレントゥーガのver7.00が公開されましたが、スレッドトップのSSGはそのままで動作していました。
内容に変更はありませんが、一応ver7.00に対応している旨を明記し、
>>528で変態紳士さんが説明してくださっている[process]の記述に変えましたので、
使用する際は2017.07.01以降のSpoilerAL修正パッチを適用してください。

ゲーム作者さんが「このver 7.00が 真・最終更新 になります」と「真」まで付けてわざわざ強調されているので、
おそらく今度こそ最終更新なんだろう、と思います。
私もこれでSSGの修正はしなくても済みそうで一安心、なのですが、
本当に以後全く更新がないとは言い切れないかも…
いずれにせよ、フリーゲームで8年も更新し続けるって本当に凄いことだと思います。

追記(7/7)
やはり、というべきか、ヴァーレントゥーガ本体のver7.00改が公開され、
SSGが動作しなくなっていたので修正して差替えました。
今度こそ更新終了、なのでしょうか…?
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.531)
投稿日 : 2017/07/17(Mon) 21:10
投稿者 amateur◆kR..xsXL6RU
ID情報 : PxP62WeRKHtWVw2lfEUXB.
参照先
>>523の「SMILE GAME BUILDER」用のSSGですが、若干修正してスレッドトップ(添付ファイル3個目)に改めてアップしました。
属性(装備中武器の「攻撃属性」項目のリストに表示される)について、
デフォルト(?)の属性名とは違うゲームが結構あるようで、
調べてみると各属性の文字列のあるメモリ上の場所が見つかったので、
各ゲームに対応した属性名をリスト抽出機能を使ってリストに表示するように修正しました。

それと、ふりーむ!で公開されているSMILE GAME BUILDERのフリーゲームでざっと試したところ、
既に動作確認済みのVer1.0.6.23、1.0.6.26、1.7.0.10 に加えて、
Ver1.7.4.0、1.7.5.2(最新) でも動作確認できました。
「1.7.0.10」と「1.7.4.0」の間の「1.7.3.0」については動作確認できていませんが、
公式情報によると「1.7.3.0」と同日に「1.7.4.0」が公開されている(結構大きなバグがあったので迅速に修正されたよう)ので、
このVerを使っているゲームは無さそうな気が・・・(あっても多分アップしたSSGが動作するのではと)

というわけで、現時点で対応するSMILE GAME BUILDERのVerは、
 1.0.6.23、1.0.6.26、1.7.0.10、1.7.4.0、1.7.5.2
ということになります。
なお、SMILE GAME BUILDERのVerは添付SSGで確認可能です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.532)
投稿日 : 2017/07/20(Thu) 21:43
投稿者 amateur◆kR..xsXL6RU
ID情報 : HUft1YmsHEZJ/BhyOQUO/.
参照先
スレッドトップのSRPG Studio用のSSGですが、
SRPG Studio Ver1.128以降のゲームで試したところ、
クラススキルや装備可能武器(種別・区分)の二つ(いずれもクラスデータ)についてオフセットが微妙にずれていて動作しなくなっていたので、
Ver1.128以降でも動作するように修正しました。
具体的にどのVerからずれていたのか不明ですが、ずれる前か後かを問わず動作するよう書いたので大丈夫だと思います。多分。
一応、Ver1.138(現時点の最新版は1.139)のゲームで動作確認できました。
他に、リスト抽出機能でリストから選択できる項目を少し増やしたりと細かい修正あり。

それと、今頃気づいたのですが「コンフィグ」についてはゲーム実行中にSSGで変更しても効果がないようです。
一応、設定を確認することは出来ますので、全く無意味でもないと思いますが・・・
なので、コンフィグ項目で最大HP等のステータス上限値をSSGで増やしても、
当該ステータスの値は元の設定上限値以上の値にはならないようですのでご注意を。
このあたりももっと詳しく解析すれば何とかなるのかもですが、私はやる気にならないので放置です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.533)
投稿日 : 2017/07/20(Thu) 21:47
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : NBsgF7Wu6GtBJo3hy86zj/
参照先
修正パッチで項目名を置換できるようになったのでメモリの使用量を削減する実験をしました。
結果は60MB以上減って約半分くらいです。

amateurさんの別スレッドのSSGをテスト用に使わせてもらいました。(添付の分です)

内容は、多重で [repeat] している項目の名前とアドレスを [define] で定義する方法ですが、
これは静的な展開が混ざると正しく動作しません。
静的な展開はSSGファイルのロード中にテキスト自体を置き換えるので、
[! L$Val !] で置換されていると1つ1つの項目が同じテキストではなくなるからです。
これが10万件になると10万種類のテキストがメモリに配置されます。

本当は [define] じゃなくて同じテキストがあれば自動で同じメモリを使うようにしたかったのですが、
アセンブラでパッチを当てる量が大きくなるので難しくなっています。
高級言語で色々やれば1/3か1/4分くらいに減りますが、結局マシン語としての規模が大きいので・・・

いちおうSSGの書き方で何とかなるかもしれない所まで来ました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.534)
投稿日 : 2017/07/20(Thu) 23:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : HUft1YmsHEZJ/BhyOQUO/.
参照先
>>533 変態紳士さん
パッチ更新ありがとうございます。
こちらにお知らせくださって恐縮です。
項目名の置換が可能になったのですか!
早速、添付いただいたテスト用のSSGを参考に(というかほぼそのまま)ウディタ解析用SSGを修正したところ、
仰るとおり、メモリ使用量が大幅に減りました。加えて読み込み時間も短くなったような。
多重[repeat]で威力を発揮するんですね。これは凄い・・・
確か、項目名が長くなるとSSGの読み込み時間が長くなるそうなので、その意味でも項目名の置換は効果大きそうですね。

ご指摘の [! L$Val !] と書いていた箇所ですが、
まだ$Idx系のループ変数が実装されていなかった頃に書いたSSGをベースに適当に修正・追加を繰り返したので、
<# #> 等に修正するのを忘れていました。
こういう静的展開の箇所が入ってると多重 [repeat]での項目名置換が正常動作しなくなるのですね。

しかし、元のは改めて見直してみると他にも色々ツッコミどころの多いSSGですね。
私は基本SSGが動けばいいや的に書くのでいつも中身は汚いですけど(^_^;)
そのうち最新の書式で書き直そう、と思うのですが何だかんだで放置するかも・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.535)
投稿日 : 2017/07/23(Sun) 02:56
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : NBsgF7Wu6GtBJo3hy86zj/
参照先
>>534 amateurさん
修正パッチを更新しました。
No.533 のテスト用の添付ファイルを更新しました。

同じ文字列の項目のメモリが小さくなります。
(repeat を使っていて静的な展開で書き換えられていない項目など)

※追記 (2017.07.30)
もうちょっと小さくしてみました。
ヴァーレントゥーガで37%くらいです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.536)
投稿日 : 2017/07/23(Sun) 18:27
投稿者 amateur◆kR..xsXL6RU
ID情報 : cywIXG2p6LBFkLAJvQ2Np/
参照先
>>535 変態紳士さん
パッチ更新ありがとうございます。
何と、今度は[define]による置換なしでもメモリ使用量が減るようになったのですね。
>>533で
>[define] じゃなくて同じテキストがあれば自動で同じメモリを使うようにしたかった
と書かれていたことを実現してくださったというわけでしょうか。
>>533の添付SSGで早速確認したところ、確かに項目名の[define]置換なしでメモリ使用量削減されてますね。
ここのスレッドトップのヴァーレントゥーガのSSG使用時でもメモリが約半分になって、さらに読み込み時間もかなり短くなっていました。
パッチがどんどん進化していって凄いですね・・・本当に有難うございます。

というわけで、別スレのウディタ解析用SSGやこのスレのトップにあるSSG等、メモリ使用量の多いSSGを使用される方は、
SpoilerAL修正パッチの最新版を適用されることを強くオススメします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.537)
投稿日 : 2017/07/31(Mon) 22:50
投稿者 amateur◆kR..xsXL6RU
ID情報 : LRR.Uh9JFIGfRdEiSfY/G.
参照先
スレッドトップのSRPG StudioのSSGについて、
ユニットデータの「支援相手」に支援効果の詳細項目を追加。
効果の種類と効果量を変更可能に(セーブには反映しない)。
それと、SRPG StudioのVer1.141 で一応、動作を確認しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.538)
投稿日 : 2017/08/06(Sun) 18:18
投稿者 amateur◆kR..xsXL6RU
ID情報 : BsO7Sy7xKOoq7xZv1t/Yz1
参照先
>>535の追記の件、今ごろ気づきました。
試してみたら、メモリが約35MBまで減ってました。確かに、以前の1/3近くにまで削減されてますね。
変態紳士さん、遅くなりましたが、有難うございます。


上記に関連して、最近のSpoilerAL修正パッチで、同じ項目に使われるメモリが小さくなりましたが(>>533から>>535参照)、
変態紳士さんが説明くださっているとおり、[repeat]のSSRファイル内で項目名に[! !]の静的展開部分があると、
同じテキストではなくなるので使用メモリ削減効果がなくなってしまうようなので、
[! $Val !]のような箇所は、<# $Idx #> と動的な書き方で置き換えればよいのですが
問題は、項目名に [! @ssl->リストファイル名, $Val !] という書式を使ってる場合はどうするかですが、
これは、
 _fmt, _$Idx, 4, list, --, ssl->リストファイル名, 0,1
という書き方で置き換えれば良いのではないかと思います。(上記は[repeat]の開始値が0, 増加値が1の場合)
これなら、動的に展開されるので同じテキストとして扱われるのではと・・・

それと、上記のような書き方では、表示ずらし手法を使った時に、下記のようにして項目名表示もずらすことが可能になるという利点もあります。
 _fmt, _($Idx+[:Memory::0:L]), 4, list, --, ssl->リストファイル名, 0,1 (準仕様により括弧で括った箇所はアドレスネーミング部分でも「\」で「:」を退避させる必要なし)
  ( [subject]表示を電卓入力値【'+' _mem, _L Memory::0, 4,num ,??,%d '+'】分ずらす/入力値/:calc, _L Memory::0, 0, 9999, unsigned  のような項目とセットで)
私は表示ずらし手法を使うことが多いので、メモリ使用量削減効果との一石二鳥を狙って、
[repeat]のSSRファイル内での項目名には、_fmtのlist型に変えていこうかと思っています。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.539)
投稿日 : 2017/08/07(Mon) 21:07
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : IZnKtS23N5677tM5YlLUK.
参照先
>>538 amateurさん
リストの書式を追加しました。
HowToSSG では <# #> の次にあります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.540)
投稿日 : 2017/08/07(Mon) 23:13
投稿者 amateur◆kR..xsXL6RU
ID情報 : p6SKH2gGSF6638DxZm.lF1
参照先
>>539 変態紳士さん
機能の追加ありがとうございます!
数値の書式化に続き、リストの書式化ですか、これは便利な機能ですね。
早速試してみたのですが、
アドレス書式部分に2点ほどバグ?らしきものがあるようです。

一つ目は、<@ ssl->ListFile, $Idx @> のように、アドレス書式部分に「$Idx」と書いた場合に、
 Parsing「$Idx 1」→[0x0]
となって、「$Idx」が全て「0」と解釈されてしまう?ようです。
なお、「$Idx+1」や「$Idx1」等と書けば正常機能しますし、
アドレス書式を省略した場合(「$Idx」と解釈される)も正常機能していますので、
アドレス書式を省略するか、$Idx1等を使えば済む話ですが。

二つ目は、今回追加されたリストの書式化では、数値の書式化<# #>の中とは違って、
<@ @>の中では「:」を「\」で退避させる必要があるようですが、
[\:Memory\:\:0\:L]のようにアドレス書式部分に書くと、デバッグモードのログでは
 Parsing「[\」→[0x0]
 Parsing「Memory\」→[0x0]
のように出力され、「\」による退避が正常に機能していないようです。

念のため、確認用のSSGを添付します。
お手数をかけて恐縮ですがよろしくお願いします。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.541)
投稿日 : 2017/08/08(Tue) 06:28
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : IZnKtS23N5677tM5YlLUK.
参照先
>>540 amateurさん
どぉもです。直しておきました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.542)
投稿日 : 2017/08/08(Tue) 20:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : zPKyMXMV6b5.gbX4Dx1dS1
参照先
>>541 変態紳士さん
ご対応ありがとうございます。
正常機能するのを確認いたしました。
それと、数値の書式化<# #>と同様、<@ @>の中でも、「:」を「\」で退避させる必要は無くなっているのですね。
\での退避は地味に面倒なので、楽になって有難いです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.543)
投稿日 : 2017/08/13(Sun) 23:05
投稿者 amateur◆kR..xsXL6RU
ID情報 : o8lyeYLUpfeZt61undOH11
参照先
ヴァーレントゥーガ本体が更新されましたが(「8月13日更新」の分です)、
スレッドトップのヴァーレントゥーガのSSGはそのまま動作するようです。
一応、その旨を追記しておきました。
Ver表記は7.00のままなので、対応Verの表記も含めてSSGのファイルはそのままです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.544)
投稿日 : 2017/08/19(Sat) 02:32
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : IZnKtS23N5677tM5YlLUK.
参照先
>>amateurさん
ウディタ解析用SSGも40MBを切りました。
ロード時間は大して変わりませんが・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.545)
投稿日 : 2017/08/19(Sat) 18:49
投稿者 amateur◆kR..xsXL6RU
ID情報 : v/LhK8nq2xyfF47poagLZ/
参照先
>>544 変態紳士さん
おお、早速試してみましたら、40MBくらいになってますね。
元々は約120MBだったと思うので、1/3くらいまで省メモリ化が実現したことに・・・
ご対応、本当にありがとうございます。

ロード時間については、多重[repeat]のせいで項目数が多すぎるので仕方ないですよね。
・・・と思ったのですが、以前、各項目数等を30個から25個に減らしてはと変態紳士さんからご助言いただいたことを思い出したので、
各DBで一度に表示するタイプ・データ・項目を各25個に変更したところ、
ロード時間が半分近くにまで短縮されました(5-6秒程度?)
30個→25個なら、使い勝手はあまり変わらない割に、ロード時間短縮効果は大きかったので、
別スレのウディタ解析用SSGを修正しました。
ついでに、「項目の文字列」で文字列を書換え可能にしておきました(詳細はウディタのスレを参照)。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.546)
投稿日 : 2017/08/19(Sat) 19:00
投稿者 amateur◆kR..xsXL6RU
ID情報 : v/LhK8nq2xyfF47poagLZ/
参照先
スレッドトップの「SMILE GAME BUILDER」製ゲームのSSGについて、
SMILE GAME BUILDERの最新Ver「1.8.0.7」が公開されたので、このVerのゲームで確認したところ、
メモリ上の属性名称のアドレスへのポインタが少しずれていたので、
「1.8.0.7」以降とそれ以前のVerで処理を分岐するよう修正しました。
これで、Ver1.0.6.26以降、1.8.0.7までの全てのVerで正常動作すると思います。多分。
他は特に修正無しでそのまま動作していました。
というわけで、SMILE GAME BUILDERの対応Verに「1.8.0.7」を追加。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.547)
投稿日 : 2017/08/20(Sun) 05:17
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : IZnKtS23N5677tM5YlLUK.
参照先
>>545 amateurさん
ダウンロードしてみました。
確かに速くなりましたね。ついでに30MBを切ってました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.548)
投稿日 : 2017/08/20(Sun) 22:35
投稿者 amateur◆kR..xsXL6RU
ID情報 : /vmNhWhYVb9t4gu6EJnHE.
参照先
>>547 変態紳士さん
こちらの環境では約32MBでした。やはり、PC環境によって同じSSGでもメモリ使用量は多少異なるようですね。
いずれにせよ、機能的にも省メモリ的な意味でもパッチの完成度が高まってきましたね。
修正作業、本当にお疲れ様です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.549)
投稿日 : 2017/08/21(Mon) 17:27
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : h1dPu6JCr39YBbllw9sFO0
参照先
SMILE GAME BUILDERの解析ありがとうございます。
(3D物やVR物が作れるとかで)気になるゲームエンジンですね。

追記:
話は変わるのですが超昂神騎エクシールの解析をやってたときにAL6.2の書式で、ふと思った疑問を…。
ポインタ演算子*( )と[: :]
は完全互換ではないのでしょうか?

@ [subject]<# 0x1ED=>ofs;[:{T}:]+1 #> 日目:dir
の部分を
A [subject]<# 0x1ED=>ofs;*({T})+1 #> 日目:dir
とすると値が変わってしまいます。

そこで
B [subject]<# 0x1ED=>ofs;{T}=>tmp;*($tmp)+1 #> 日目:dir
これですとOKでした。

dipperさんの経路を参照してます。
[define T]MName::nul:=EntryPoint=>ep;*($ep+0x01)=>tmp;*($ep+$tmp+0x14)=>tmp;*(*(*($tmp+0x04DC)+0x05E0)+0x04)=>base;*(*($base+$ofs*0x04)+0x0C)

添付1:Aの結果
添付2:@とBの結果

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.550)
投稿日 : 2017/08/21(Mon) 19:13
投稿者 amateur◆kR..xsXL6RU
ID情報 : f0D5H3xv.RleKY/LGR97P0
参照先
>>549 仔猫さん
お久しぶりです。領地貴族のSSG、拝見しましたが凄いですね。
私はソフトハウスキャラの作品をまともに解析したことがないので勉強になりました。あんな経路が使えるとは・・・

SMILE GAME BUILDERについては、今後どれだけ普及するのか未知数ですね。
解析して構造的な特徴みたいなものは大まかに掴めたので、今後のVerでアドレスがずれても何とかなるかなと。

※追記の件、「ポインタ演算子*( )と[: :]は完全互換ではないのか」について、
基本的に互換的に使えるものだとは思います。
ただし、以前どこかで書いたように思うのですが、
[::]については、後ろの :] の部分しかアドレスコーディングの演算では考慮されていない?っぽい感じですので、
dipperさんの経路の [define T] のように、
アドレスコーディングの分割「;」が途中に入っている場合でも結果的に意図したとおりに機能するのではと。
つまり、[:{T}:] と前後を[::]で括ると、
 [: MName::nul:=EntryPoint=>ep;*($ep+0x01)=>tmp;*($ep+$tmp+0x14)=>tmp;*(*(*($tmp+0x04DC)+0x05E0)+0x04)=>base;*(*($base+$ofs*0x04)+0x0C) :]
となりますが、上記のように後ろの :] の部分は有効に機能するので(一番前の [: は無視される?)
{T}の最後の式、
 *(*($base+$ofs*0x04)+0x0C)
が、
 [:*(*($base+$ofs*0x04)+0x0C):]
のように解釈されて、結果的には@については意図したとおり演算が行われる、のではないかと。

確か、以前検証したところ、
 [:[:0x400000:]:]:]
のように、前後で [: と :] の数が一致しなくても、上記式ではポインタ変換演算子が3個と解釈されて演算されていたと思います。

一方、Aのように、 *({T})+1 と書くと、
 *( MName::nul:=EntryPoint=>ep;*($ep+0x01)=>tmp;*($ep+$tmp+0x14)=>tmp;*(*(*($tmp+0x04DC)+0x05E0)+0x04)=>base;*(*($base+$ofs*0x04)+0x0C) )+1
ということですので、
「*」は 「MName::nul:=EntryPoint(以下略)」の前に *( のようになるので、{T}の最後の式、
 *(*($base+$ofs*0x04)+0x0C)
の部分に「*」が機能しないのだと思います。

なお、丸括弧()は、原則としてアドレスコーディングの分割「;」を挟むと正常機能しないと思います。
なので、[define]でテキスト置換する際は、置換内容に「;」が入っていないか注意しないと、丸括弧()が意図したとおりに機能せずに失敗することが私もよくあったりします。
(ただし、while文のループ処理箇所や、if文の真・偽の各処理文等の場合は、例外的に(?)「;」を挟んだ丸括弧が、当該処理箇所の範囲を示すものとしては?有効ですね)

B [subject]<# 0x1ED=>ofs;{T}=>tmp;*($tmp)+1 #> 日目:dir
については、
 {T}=>tmp;
の部分は、
 MName::nul:=EntryPoint=>ep;*($ep+0x01)=>tmp;*($ep+$tmp+0x14)=>tmp;*(*(*($tmp+0x04DC)+0x05E0)+0x04)=>base;*(*($base+$ofs*0x04)+0x0C) =>tmp;
となりますから、続く箇所の
 *($tmp)+1 
は、
 *( *(*($base+$ofs*0x04)+0x0C) )+1
ということになり、これも問題なく正常機能しますね。

分かりにくい説明な上に、本当にSSGの書式・仕様として正確な説明であるのか自信はないのですが、
現時点では上述のような理由ではないかと思います。

なお、間違っている箇所、補足すべき箇所等がありましたら、ご指摘いただければ幸いです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.551)
投稿日 : 2017/08/21(Mon) 19:57
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : h1dPu6JCr39YBbllw9sFO0
参照先
>>550
amateurさん詳細解説ありがとうございます。

おお!分かりやすい。
どうやらdefineの仕様をよく理解できてなかったみたいです。

{}で代入されるのはdefineで定義した式そのものになるわけですね。
defineで計算された値が代入されてるとばかり思ってました。
検証ありがとうございます。謎が解けました。

追記:
キャラさんはいつも通りで助かりましたが…。
アリスの方は改竄チェックが入ってたのです。以前Takeさんの報告であった暗号化時代の…というのがこれ?だったのかもと…。
ランス10でどうなるか分かりませんが、予習はしておかねば…。

>>552
amateurさん
>一旦変数定義してから、()で括ったり、[:$tmp:] や *$tmp のようにポインタ使ったりと私もよくやります。
>その方が安全策だと思いますので。
確かに…メモメモ。

>先月にランス10のデバッグスタッフ募集してて、今月半ばからデバッグ作業開始って書いてますね。
>発売までそう遠くないのでしょうか。
今年中に出てくれたら…と、期待してます。

>>553
変態紳士さん
>>defineの仕様
>純粋な置換です。テキストで置換してから演算するような動作です。
やはりそうでしたか、変態紳士さんありがとうございます。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.552)
投稿日 : 2017/08/21(Mon) 21:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : f0D5H3xv.RleKY/LGR97P0
参照先
>>551 仔猫さん
[define]の置換は、一回だけならまだ分かりやすいのですが、
何段階も[define]で置換していると、置換前のアドレスコーディングを確認するのが面倒なので、
>>549のBで仔猫さんが書かれている、{T}=>tmp; ように、
一旦変数定義してから、()で括ったり、[:$tmp:] や *$tmp のようにポインタ使ったりと私もよくやります。
その方が安全策だと思いますので。

>アリスの方は改竄チェック
超昂神騎エクシールでは2段階でチェック?だそうですね。
そういえば、エウシュリーよりもアリスの方が面倒だと七星さんが以前仰っていたような・・・
アリスに関してはdipperさんやTakeさんという方々がいらっしゃるので、何とかしてくださるだろうと私などは楽観していますが(完全に頼る気で・・・)。

そういえば、ランス10っていつ発売されるんだと少し公式見てみたら、
先月にランス10のデバッグスタッフ募集してて、今月半ばからデバッグ作業開始って書いてますね。
発売までそう遠くないのでしょうか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.553)
投稿日 : 2017/08/22(Tue) 03:10
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : IZnKtS23N5677tM5YlLUK.
参照先
>>549-552
>*( )と[: :]
>は完全互換ではないのでしょうか?
互換ですが完全互換にはなりません。
理由はamateurさんが仰る通り、セミコロン「;」を含む演算結果に差が出ます。
「*( )」は「*」から見て後方に続く式を対象にします。つまり終わりを示すセミコロンを含むと構文エラーです。
「[: :]」は括弧開きは単なる括りであり、括弧閉じの時点の演算結果で処理します。

amateurさんの言われる事はほぼ合っていますが、SpoilerAL6.2の丸括弧「( )」はセミコロン分割可能です。
「*( )」の中にセミコロンを含む場合は構文として正しくないので式を分解出来ませんが、
三項演算子の場合はスコープを用いれば複数の式を記述することが出来ます。(こういった事は他のナントカ言語では出来ません)
読みにくいので「if-else」を実装していますが、三項演算子の方がスッキリする事もたまにあります。

たとえば以下のような場合

――― if文 ―――――――――――
if (条件式1) (X = 処理1;)
else if (条件式2) (X = 処理2;)
else (X = 0;)
―――――――――――――――――

――― 三項演算子 ――――――――
X =
  (条件式1) ? (処理1) :
  (条件式2) ? (処理2) :
  0;
―――――――――――――――――

こうなるとインデントが気になります。
「呪いの魔剣に闇憑き乙女」の「[define sort]」とかは if 文が無い時のものなので三項演算子が使われています。

>defineの仕様
純粋な置換です。テキストで置換してから演算するような動作です。
なので「{置換}」の中括弧「{ }」が丸括弧の代わりになる事もありませんし、
「while」を「w{hil}e」というキテレツな置換もできます。

>ランス10のデバッグ
どうなんでしょうね。
シリーズでクォリティを維持したまま続けてるのが凄いですし、
今回は更に規模が大きくなるようなので細切れにデバッグを始めたとも取れるので何とも。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.554)
投稿日 : 2017/08/22(Tue) 21:28
投稿者 amateur◆kR..xsXL6RU
ID情報 : cPevnMB.bH044CF02m7St1
参照先
>>553 変態紳士さん
何と、三項演算子でも、()内でセミコロン分割可能だったのですね。
早速試してみましたら、確かに
 条件式 ? 真式 : 偽式
の「真式」「偽式」の各部分で、()で括った中でセミコロン分割しても正常機能していました。
てっきりif文と違って()内に複数の式を書けないものと思い込んでしまってました・・・
教えてくださって有難うございます。
これでSSGがますます書きやすくなる・・・今まで私が勝手に勘違いしてただけですが(汗)
if文と三項演算子のどちらでも良い場合は、三項演算子の方が楽に書ける場合が多い感じですね・・・

>ランス10の件
細切れにデバッグ、成程、そういうことも・・・
シリーズ最終作らしいので気合入れてるでしょうし、気長に待つのが良さそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.555)
投稿日 : 2017/08/24(Thu) 19:40
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : h1dPu6JCr39YBbllw9sFO0
参照先
仔猫です。
数値のカンマ区切りをなんとか表現できないのかと試しに作ったのですが…。
どーにも面倒な方法しか思いつかなくて。(効果は桁がわかりやすいというだけですが・・・。)

添付1:こんな感じで表示ができて必要な時以外はカンマの表示はしない(99、999、9,999)

追記:
>>556 dipperさん
レスありがとうございます。
おお!これは流石としか。こういう使い方は勉強になります。
とてもすっきりした上に動作も問題なしです。

プレイ時間の方も同様に修正できました!
dipperさん感謝。

>>557 amateurさん
おお!こんな方法が…。
アドレスネーミングのロスには気がつきませんでした。
よく考えるとそうですね。一度、変数化した方が良いのかな。。。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.556)
投稿日 : 2017/08/24(Thu) 20:23
投稿者 dipper◆LEFxdWWYR3c
ID情報 : 9n8lwGypnxt7Y2rE0nvDz.
参照先
>>555 仔猫さん

「%」を使用すればもう少しすっきりするかも?

[subject]ハイスコア  [ <# (*[.0x00.]/100000),%d #>,<# (*[.0x00.]/100)-(*[.0x00.]/100000*1000),%03d #>,<# (*[.0x00.])-(*[.0x00.]/100*100),%02d #>0 ]/現在値/_:calc,0x00,0,999999990,unsigned

[subject]ハイスコア  [ <# (*[.0x00.]/100000),%d #>,<# (*[.0x00.]%100000/100),%03d #>,<# (*[.0x00.]%100),%02d #>0 ]/現在値/_:calc,0x00,0,999999990,unsigned

※追記
>>557 amateurさん

下記だと項目にアクセスしてなくても表示されますけど、表示速度的にはどうなんでしょかね?
難点は項目毎に領域を確保する必要がありますね。

//////////
[allocate]0,0x10,L
[define ME]Memory::0

[subject]ハイスコア  [ <# [:{ME}:L]=*[.0x00.];([:{ME}:L]/100000),%d #>,<# ([:ME:L]%100000/100),%03d #>,<# ([:ME:L]%100),%02d #>0 ]/現在値/_:calc,0x00,0,999999990,unsigned
//////////
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.557)
投稿日 : 2017/08/24(Thu) 22:16
投稿者 amateur◆kR..xsXL6RU
ID情報 : 405pNIYSz6AJ24TgOpzwW/
参照先
>>555>>556
仔猫さん、SSGアップありがとうございます。
アドレスネーミングのカンマ区切り、色々考えてみると面白いですね。
dipperさんの%使った方法も勉強になります。

私も少し考えてみたのですが、アドレスネーミングが3箇所なので、
アドレスコーディングが長い場合には表示速度的に問題があるかも?と思い、
$Addr を使った方法なら演算過程がある程度省略できるかなと思ったのですが、
この $Addr という変数をアドレスネーミング部で使った場合、一度項目にアクセスしないと、
$Addrが0と解釈されてしまうので、使い勝手に問題が・・・

[subject]ハイスコア  [ <# (*$Addr/100000),%d #>,<# (*$Addr%100000/100),%03d #>,<# (*$Addr%100),%02d #>0 ]/現在値/_:calc,0x00,0,999999990,unsigned

追記 (>>555の仔猫さんの追記部分へのレス)
変態紳士さんがSpoilerAL修正パッチでアドレスネーミングの表示を高速化(演算等も全般的に速くなってますが)してくださったので、
余程アドレスコーディングが長い場合でないと実際には問題にはならないとは思いますけど。
そもそも、$Addr は[funnel]や[io_fep]、一括・ダブル系のチェインファイル等での使用を想定したものだと思いますので、
アドレスネーミングで使用するのは用途としてあまり良くないのでしょうね。

>>556 dipperさん(追記へのレス)
その方法、仔猫さんの「変数化した方が良いのかな」へのレスとして書こうと実は思ってました。
カンマ区切りを使う項目数が限られているならその方が良さそうですが、
大量の項目でカンマ区切り使う場合は仰るとおり面倒そうですね。
速度的には・・・仔猫さんに添付いただいたSSGだと、[replace]のオフセット値が定数(0x49E638)のようなので、
かえって複雑になるかもですね。
アドレスコーディングが長い場合にはその方が速そうな気がします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.558)
投稿日 : 2017/08/25(Fri) 07:09
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : h1dPu6JCr39YBbllw9sFO0
参照先
dipperさん、amateurさんありがとうございます。無事表示できました。

>[allocate]0,0x10,L
>[define ME]Memory::0
この方法を眺めていたら…数値をキャラクターコードに変換して","を3桁毎に追加してテキスト表示で…と考えてましたら、ん?
ゲーム側メモリーに表示用(キャラクタコード)が無いか調べてみることに…すると、ありました!!

テキストデータらしき値が格納されるアドレス(一瞬fpsの表示も…。)
[:(MName::th16.exe)+0xA6D98:]+0xC08

試しに…
[subject]ハイスコア  [  '+' _mem,_[\:(MName\:\:th16.exe)+0xA6D98\:]+0xC08,0x28,00,0 '+'  ]/現在値/_:calc,0x00,0,999999990,unsigned
(表示側と入力側でアドレスが違うケースになる訳ですが)
(瞬間fpsのデータも表示されるけど…可能です])


(別の表示テキストにも使われてるのでNGです。検証不十分ですいません。)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.559)
投稿日 : 2017/08/25(Fri) 20:09
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : IZnKtS23N5677tM5YlLUK.
参照先
>>555 仔猫さん
>添付1:こんな感じで表示ができて必要な時以外はカンマの表示はしない(99、999、9,999)
結論ですが「<#$Idx,%'d#>」で表示できます。間にシングルクォートが入る。カンマと間違えやすい。

英語圏の数値表現は kiro, mega, giga と3桁ごとで
(コンピュータのファイルサイズなどは2進数を基準に1000→1024倍ごと、漢数字は万、億、兆の4桁ごと)
多くは通貨の表現に用いられます。

修正パッチでは「vsnprintf」を自前で用意していますので利用可能な書式ですが、
パッチ無しでは無理だと思います。

※追記
HowToSSG に無い書式についてはgoogle先生に「C99 printf」と尋ねると見つかると思います。
C99 に無い書式については Microsoft拡張の「%C」大文字の「C」でUNICODEの1文字をANSIへ変換して出力とか。

※そういえば追記 (2017.09.01)
「%hd」で2バイトの符号付整数型、「%hhd」で1バイトの符号付整数型がありました。
他には「%s」でアドレスから文字列とか、「%S」でUNICODE文字列とか。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.560)
投稿日 : 2017/08/25(Fri) 20:31
投稿者 仔猫in軒下◆KCezBilYINU
ID情報 : h1dPu6JCr39YBbllw9sFO0
参照先
>>559 変態紳士さん
レスありがとうございます。

なんとー!!(変態紳士さんなら作っていてもおかしくないとは思ってましたが…)
最初から期待通りの機能があるとは…カンマで区切って表示可能だったのですね(これは便利…)

E [subject]ハイスコア6  [ <# *[.0x00.]*10,%'d #> ]/現在値/_:calc,0x00,0,999999990,unsigned

これで桁が多いゲームなどに利用できます。

添付:表示テスト@がdipperさん方式、Aがamateurさん方式、Bが仔猫方式、CとDがゲーム側の表示領域から拝借、Eが変態紳士さんの機能を使った表示

追記:
>>561 amateurさん
fepも使えるのですか!情報ありがとう。
これで完璧です。

追記2:
>google先生に「C99 printf」と尋ねると見つかると思います
勉強になります。知らない記号がちらほら…。%Idとか。

>>559
>「%hd」で2バイトの符号付整数型、「%hhd」で1バイトの符号付整数型がありました。
>他には「%s」でアドレスから文字列とか、「%S」でUNICODE文字列とか。
hを付けるとバイト指定になるわけですか!これも知らない書式でした。
1byte取り出しには"& 0x000000FF"でマスクする方法を思いつきましたが、byte単位の表示方法があったわけですね。
(09/06追記)

添付2:宿題提出…(一応完成?ということで更新終了です。ミスがありましたので差し替え09/02)
プログラム改造は歴代解析者の方々の作られたSSG(過去問)を参考にしてます。
Way2倍と弾数2倍はすばらしかったです。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.561)
投稿日 : 2017/08/25(Fri) 20:41
投稿者 amateur◆kR..xsXL6RU
ID情報 : Q..Z4oZ5GKM6/bs/odeo9/
参照先
>>559 変態紳士さん
修正パッチ適用でこんな便利な書式が使えるのですね。これで何の問題もなくカンマ区切りが解決です。
教えていただいて有難うございます。

>>560 仔猫さん
 <# アドレス書式, 書式, 入出力変換属性 #>
と、[io_fep]の出力値への演算が適用可能ですので、
 [subject]ハイスコア [ <# *[.0x00.],%'d,fep #> ]/現在値/_:calc,0x00,0,999999990,unsigned
上記の書き方でも良さそうですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.562)
投稿日 : 2017/09/03(Sun) 04:54
投稿者 amateur◆kR..xsXL6RU
ID情報 : f8B4an9BvZos6XKe848pe1
参照先
スレッドトップのSRPG Studio用のSSGを更新しました。
(更新内容)
・「★【必須】基本データ」の項目を開くと、種族(性別等)のデータを含め自動的に全データのオフセットが選択されるように修正。
 (従来は種族(性別等)のデータだけは自動選択の対象外だった)
・「★【必須】基本データ」の各項目のオフセット自動選択の手法を見直し(以前より信頼性が向上した、と思います)
・味方・敵・同盟の各ユニットデータのオフセットが自動選択されるように修正。
 (「(必須)ベースアドレス確定・汎用?」の項目を開くだけでOK)
・所持アイテムのアドレスオフセットが自動選択されるよう修正。
 (「(必須)ベースアドレス確定・汎用?」の項目を開くだけでOK)
・現在MAP名(セーブすると記録される名称)の表示機能追加。
・味方・敵・同盟の各別に、全ユニットの現在HP一括変更機能追加。(事前に「現在HPのアドレス補正」項目の操作必須)
・味方の全ユニットのコマンドに「ストック」を表示させる機能追加(一部効果のないユニットがある? 原因は不明)

今まではオフセットを手動で選択する必要のある箇所が多かったのですが、
ほとんどその必要は無くなったと思います。
残りでアドレス補正に手動操作必須なのは「現在HPのアドレス補正」の項目くらいでしょうか。
(これも味方・敵・同盟を問わず、いずれか1人の箇所に現在HPを入力すれば足りますが)
これでSSGの使い勝手は以前より向上したと思います。

ただし、Ver1.084、1.109、1.145 の3つでしか動作確認していないので、1.070以降の全Verで正常動作するかは分かりません。
検証するのが面倒ですし、そもそも1.070等のゲームが見つからないので・・・
仮にオフセットが自動で正しく選択されない場合は、手動でリストからオフセットを選択してください。

それと、対応Verですが、一応「1.145」には対応しているようです(現在の最新Verは 1.149)。

追記(9/4)
SRPG Studio用のSSGをさらに更新。
・「基本データ」に「状態」(ステート)を追加。
・味方・敵・同盟の各ユニットデータに、「状態」項目を追加。残りターン数や状態の種類を変更可能。
 (状態が無しのユニットに何らかの状態をSSGで追加したり、状態の数を増やしたりはできません)
・味方・敵・同盟の各別に、全ユニットの全状態を一括解除する機能追加。不利なものだけでなく有利な状態も解除される。
・所持アイテム(武器)に、「追加ステート」の項目追加。
・「基本データ」→「武器データ」の各武器に「追加ステート」の項目追加。
  (基本データの方を変更しても既に入手済みの所持アイテムには反映されないと思います)

追記2
SRPG Studio用のSSGをさらに更新。
・味方・敵・同盟の各ユニットデータに、状態を全て解除する項目追加(各ユニット毎に解除可能に)
・所持アイテム・状態項目のオフセットを手動で選択できなかった不具合修正。
 「(必須)ベースアドレス確定・汎用?」の項目を開くと設定されるように修正しました。
・味方・敵・同盟の各ユニットデータの一番上に「☆所持アイテム・状態項目のオフセット再設定」項目追加。
 所持アイテムや状態項目が正常動作していない場合にONにしてください。
 ゲーム起動後のセーブデータロード前や、
 ストーリー説明時などユニットがマップに表示されていないタイミングで必須項目等を開いても、
 所持アイテムや状態項目のオフセット自動選択が正常機能しないので、
 ユニットが表示されている通常マップ時に、追加したこの項目をONにしてオフセットを再設定してください。

それと、通常マップ時でも所持アイテム・状態項目のオフセットが間違って選択される場合を発見したので、そこも修正しました。
所持アイテムのオフセットを自動設定させるのは難しい・・・
検索条件式をアレコレ弄り回して今回は何とか余計なアドレスがヒットしないようできましたが、
逆に、古いVerだと正しいアドレスがヒットしないのではと心配です。(適当に幾つかのVerでしか検証していない)
状態項目のオフセットは、所持アイテムのものに+0x50 するだけでOKの筈なので、
所持アイテムのオフセットさえ正しく設定できれば問題なさそうですけど。

対応Verについて、「1.149」でも一応動作確認できました。
※SRPG StudioのVer「1.150」と「1.151」でも動作確認(9/19追記)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.563)
投稿日 : 2017/09/19(Tue) 22:44
投稿者 amateur◆kR..xsXL6RU
ID情報 : nViXZvF/3ZKsoDcAM4oGU/
参照先
スレッドトップのヴァーレントゥーガのSSGですが、
戦闘中のデータの「戦闘中戦死した全ユニットの消失・EXP減少フラグを無効に」について、
余計な処理(全ユニットのHPが10000になってしまう)が入っていたので修正しました。
他は何も変更ありません。

それと、今頃気づいたのですが、難易度をSSGで変更しても、セーブ&ロードで元に戻るみたい?ですね。
セーブすると変更後の難易度になってる(該当セーブデータの表示の一番左の[H]や[L]といった箇所が書き換わる)ように表示されるのですが、
ロードすると元に戻っているという・・・
これはどうしたら良いのか分からないです。
例の面倒臭いリンクリストのデータを辿らないといけないとかならお手上げ・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.564)
投稿日 : 2017/10/02(Mon) 14:34
投稿者 NEExploiT◆Li46agv7Gxg
ID情報 : /I7.6T167xI.9CjUtqbfm/
参照先
ttp://zell999.blog.fc2.comにて公開されている
アクションゲームツクール製「ぶるーすきんの森」を解析してみました

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.565)
投稿日 : 2017/10/02(Mon) 21:56
投稿者 amateur◆kR..xsXL6RU
ID情報 : SIa49vdJMRY1QoB.CmYrn0
参照先
>>564 NEExploiTさん
SSGありがとうございます。
早速試してみたところ、当方の環境でも動作しています。
アクション系は普段ほぼプレイしないせいか(年取ると反射神経が・・・)今まで知らなかったのですが、
アクションゲームツクールなんて製作ツールがあったんですね。

ググってみたら、RPGツクールシリーズと同じくエンターブレイン製・・・
と思ったら、実際の製作会社はスマイルブームですか。
ここの会社、私は「SMILE GAME BUILDER」で初めて知ったのですが、
プチコン3号とか、色々作ってるんですね。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.566)
投稿日 : 2017/10/03(Tue) 21:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : 0lwzr3pLD3Fw8NYwYt0xY0
参照先
スレッドトップのヴァーレントゥーガのSSGについて、
最新版の「Vahren.exe」ver7.00(10月1日更新分)では全く動作しなくなりました。
「最終更新、今後はバグ修正のみ」と作者さんがコメントされていたのですが、
ここに来て大幅な仕様変更が入るとは完全に予想外でした。
8年間気づかなかったミスを修正、開発環境の大幅変更といった事情らしいですが・・・

最新版を少し見てみたところ、エントリーポイントからベースアドレス(.data内)までの経路の一部修正程度では済まないようでして、
.data内の構造も結構変わっていそうな感じでした。
バグ修正があっても経路の一部修正程度で済むだろうと楽観していたこともあり(6.85r以降、これまでは実際そうだった)、
再び抜本的な解析・SSG修正をする気にはとてもなりませんので、SSG更新は打ち切りということにします。

個人的には以前のVerの「Vahren.exe」を使っておけば別に困らないので、
もう一度本格的に解析し直す気力が湧かない、という事情も。
また、開発環境の大幅変更のせいで未知のバグがある可能性もあるとのことで
例え対応したとしても再び動作しなくなりそうな。

そもそも需要あったのか分からないですし(自分用に作ったのをアップしただけ)、
別にこんなこと説明する必要もないのかもですが、一応書いておきます。
もし、どうしてもSSGが使えないと困るという方がいらしたら、
6.85rから7.00(8月28日更新分)までのいずれかのVerの「Vahren.exe」を削除せずに保存しておくことをお勧めします。

このゲーム、拡張シナリオ(システムを共有する事実上の別ゲーム)は多いし、
フリーゲームではかなり有名なのに、何で今までSSGがアップされた形跡がないか、
その理由が何となく分かった気がします・・・
苦労してSSG作っても延々続く頻繁なアップデートで使えなくなったら、それはまあそうですよね。
作ってる途中にVerアップでそれまでの作業無駄になるとかもあったのでは。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.567)
投稿日 : 2017/10/11(Wed) 22:30
投稿者 amateur◆kR..xsXL6RU
ID情報 : HehK6Df7Zz5e2gl5oUPg71
参照先
スレッドトップのSRPG Studio用のSSGについて、
スイッチ変数や、その他の変数確認用の項目を追加しました。(一番下にある「その他の変数」にあります)
スイッチ変数(フラグ?)は、値が「0」でON、「1」でOFF、のようです。(ウディタではフラグ変数は「0」でOFF、「1」でON、と逆なので注意)
ゲームによっては、例えば5ターン毎にしかセーブできないような場合があるのですが、
このスイッチ変数?を操作することで、本来セーブできないターンでもセーブ可能になったりします。(「セーブ許可」等の項目名だと思います)
ただし、これはターンの最初にセーブ可能になるだけで、
ユニットを行動させた後にセーブ可能にはなりません。
(ユニット行動後にセーブ可能にするフラグは未だに分からない…)

一応、オフセットは「必須」項目を開閉すると自動で選択されるようにしていますが、
間違っていたら手動でリストから選択してください。
「その他の変数確認」の方は、幾つかのオフセット(のポインタ)にデータが分かれているようで、
大体、自動選択されたオフセット(ポインタ)から6個分くらいが変数格納用みたいです(Verやゲームによって違うかも)。
なので、選択したオフセットから6個のポインタ分のデータを表示するようにしていますが、
6個とは限らないかもしれないので、オフセットを変更して色々試してみてください。


先の3連休中、手持ちのPCの一台をWin7からWin10に無償アップグレードして(実は手動なら今でも可能だったのですね)、
Win10で初めてSSGを書いてみました。
アップグレードは一難去ってまた一難で、色々大変でしたが、
というか今も謎の不具合(OSと引き継いだアプリの相性問題?で突然PCがフリーズする)で悩まされていますが…
この件はその内、雑談板の方にでも書くかもです。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.568)
投稿日 : 2017/10/12(Thu) 21:56
投稿者 amateur◆kR..xsXL6RU
ID情報 : WjF8AHJ24AvZfoJ7ad/qU0
参照先
SMILE GAME BUILDER用SSGを更新。
各キャラの「スキル」→「習得済みスキル数」に不具合があったので修正しました。
それと、回復スキルの回復量の仕様が分かりました(多分)ので、そこも修正しました。
実際の回復値は、「回復量」(固定値)と「回復割合」(最大HPに対する%)による値との合算となります。多分。
また、SMILE GAME BUILDERの最新Ver「1.8.1.0」に対応していることを確認しました。

それと、SRPG Studio用のSSGについて、SRPG Studioの最新Ver「1.158」での動作を確認しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.569)
投稿日 : 2017/10/21(Sat) 19:03
投稿者 amateur◆kR..xsXL6RU
ID情報 : LLXatbJXkePaCPiAfQtNg1
参照先
次の金曜日発売予定の「VenusBlood-BRAVE」のバトル体験版で、SSGを作ってみたのでアップしておきます。
よろしければお試しください。
Unity製かつ、マスターアップ後に公開された体験版なので、
製品版でも動作する可能性は結構高そうな(前作は体験版用SSGが製品版でも動作したようです)。

VBシリーズ前作と同じくUnityですが、Unityのバージョンが上がった(?)ためか、
経路が微妙に変わっています。(七星さんのUnity用解析SSGがそのままでは動作しなくなっていました)
一応、自分で適当に改変して使えましたので(このスレの>>52の同じく七星さん作のUnity用解析ツールはそのまま動作していますし)、
大体何とかなりましたが。

また、前作と同じく体験版ではユニット名やアイテム名がメモリ上でも伏字になっているものが多かったですが(ゆえに予め完全なリスト作成は不可能)、
ここのスレッドトップのSRPG Studio用SSG等と同様の手法を使い、
ユニット名やアイテム名についてはリスト抽出機能を使ってリストに表示させているので、
アドレスがずれていない限りは、製品版では伏字無しでアイテム名等が表示されると思います。

前作でもそうだったのですが、今作も私は購入予定はなく、
体験版もこれ以上プレイするつもりがないので、
SSGにこれ以上の機能追加はしません。後は製品版をプレイする方にお任せということで…
(しばらくの間、余った時間はコンシューマーのゲームやるつもりなので、SSG書く時間が多分ありません)

追記(10/21)
添付SSGを更新。プロセス捕捉箇所の記述が不適切だったので修正しました。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.570)
投稿日 : 2017/10/21(Sat) 19:57
投稿者 amateur◆kR..xsXL6RU
ID情報 : LLXatbJXkePaCPiAfQtNg1
参照先
ARCGameEngine, RPGツクールMV, Unity 汎用」のスレッドで七星さんがアップされているUnity汎用SSGですが、
>>569で書いたように、「VenusBlood-BRAVE」体験版ではUnityのバージョンが上がったためか、
そのままでは動作しなくなっていたので、応急手当的な修正方法を一応書いておきます。
なお、動作しなくなっていたのは、「mono_root_domain」の箇所です。
ただし、私は上記SSGの仕組みを理解しておらず、これで十分なのかは自信ないので参考程度に。

57行目の、
[define Delimiter][:[:{mono_root_domain} + 0x50:] + 0x08:]
を、
[define Delimiter][:[:{mono_root_domain} + 0x54:] + 0x08:]
に修正。

230行目からの下記箇所の「0x0050」を「0x0054」に、「0x0140」を「0x0144」に修正。
[group]MonoDomain
[size]4
[subject]*static_data_array :calc,0x0050,1
[subject]**static_data_class_array:calc,0x0140,1
[subject]:split,line,0,90,10
[subject]static_data_array[next]/next:calc,_[:[.0x0050.]:],1
[subject]static_data_array[size]/size:calc,_[:[.0x0050.]:] + 0x04,1
[/size]
[/group]


252行目の、下記の「0x0050」を「0x0054」に修正。
[define data][:{mono_root_domain} + 0x0050:] + [:{array}:] + 0x[!$Val!]

253行目の、「0x0140」を「0x0144」に修正。
[define MonoClass][:[:{mono_root_domain} + 0x0140:] + [:{array}:] + 0x[!$Val!]:]

以上のように修正すれば多分「VenusBlood-BRAVE」体験版(おそらく製品版でも)で動作するようになると思います。

一方で、上記のように修正するとUnityの旧バージョン(?)では動作しなくなるので、
私は下記のようにして、新旧の両方のUnityで動作するように改変して使わせていただきました。

274行目の [/involve] のすぐ下に次のような項目を挿入し、

[allocate]1, 0x100, L
[subject]☆【必須】「mono_root_domain」のオフセット確定(開いてすぐ閉じる):dir
[subject]オフセット1【 0x<# {mono_root_domain}=>ad0; $ad0+0x50=>ad1; cnt=30;\
while(*($ad1+4)!=0 && $cnt-- )($ad1+=4); [:Memory::1:L]=$ad1-$ad0,%02X #> 】:dir
[back]
[subject]オフセット2【 0x<# {mono_root_domain}=>ad0; $ad0+0x140=>ad1; cnt=30;\
while(!(*$ad1!=0 && *($ad1+4)==0) && $cnt-- )($ad1+=4); [:Memory::1+0x4:L]=$ad1-$ad0,%02X #> 】:dir
[back]
[back]

上記で修正した箇所の「0x0050」や「0x0140」を、[:Memory::1:L] や [:Memory::1+0x4:L] に置き換える、という手法です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.571)
投稿日 : 2017/10/31(Tue) 00:10
投稿者 amateur◆kR..xsXL6RU
ID情報 : Xq2nDCN6oBWcE.OKn4W6c/
参照先
SRPG StudioのSSGを更新しました。
・「基本データ」→「武器データ」の各武器のデータに「武器オプション」を追加。
  「HP吸収」等のオプションを追加・変更可能にしました。
・各ユニットデータの所持アイテム(武器のみ効果あり)にも同じく、「武器オプション」を追加。
  所持アイテムの「武器オプション」を書換えてもセーブには反映されません。
・SSGの情報欄に若干記述を追加。

それと、SRPG Studioの最新Ver「1.159」に対応していることを確認しました。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.572)
投稿日 : 2017/11/02(Thu) 02:19
投稿者 七星◆MH.ms4.V3i2
ID情報 : H/JWZdpve2emNqRE9yzuF0
参照先
>>570 amateurさん
ご無沙汰しております、投げっ放しがちな所を度々フォロー頂いて有り難うございます
修正方法のお陰でフィールド追加をすぐ特定できました、Unity 5.6から取り込まれたようです
ふとVBBスレッドを閲覧しなければ気づかない所でした、そういえばバルドスカイゼロとか古いの考慮してない…

取り急ぎ添付スレッドのSSGを対応させましたが、とりあえずシームレスに扱える様…といった具合です
mono_domain_add_class_static_data関数が冒頭でstatic_data_arrayを参照してるのでソレ基準に、デコンパイラにdnSpyも追記
SSG設計が古く組み直したいが、修正パッチの内容も追い切れていないので本格的にはまた後日(いつやるのか

デスクライバの方が汎用性は高いものの、不正アドレスの処理改善を
事前チェックか例外ハンドラによるアンワインドか悩み悩み、結局どちらも時が過ぎ…
いつのまにやらネーミングリスト要素の先頭トリムされるようになったのかしら
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.573)
投稿日 : 2017/11/02(Thu) 22:29
投稿者 amateur◆kR..xsXL6RU
ID情報 : 9IxY7bEKBzqw1pcIXgWs3.
参照先
>>572 七星さん、お久しぶりです。
ご多忙の中、Unity汎用SSGの修正ありがとうございます。
新旧VerのUnityで動作するようになりました。
余計なことというか、結果的に修正を催促したようになってしまい、申し訳ありません。
ただでさえお忙しそうなところ、ご負担をかけてしまったのではないかと・・・

修正内容を拝見して、流石というか、オフセットもエクスポート関数から参照できるんですね。
個別SSGの方でも件のオフセット部分はこの関数を使って汎用的に書くのが良さそうな。
>>570に書いた私のは泥臭いというか、思い付きのテキトー手法(理論的裏付け全くなし)ですから、
今後は七星さんのスマートな手法を使わせていただこうかと。

それと、修正していただいたSSGを読んでいて気付いたのですが、
いつの間にか「or」という演算子が追加されていた?のですね。
これはビットごとのOR演算子「 | 」と同じ?と思ったら、そうでもないようで。。。
少し動作確認したところ、「A or B」と書くと、「A」が「0」でない場合は、「A」、
「A」が「0」の場合は、「B」、「A」「B」ともにゼロの場合は「0」、こんな感じでしょうか。
ほぼ毎日掲示板見てるのに、こんな演算子が追加されているとは気づかなかった私・・・
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.574)
投稿日 : 2017/11/03(Fri) 02:45
投稿者 七星◆MH.ms4.V3i2
ID情報 : H/JWZdpve2emNqRE9yzuF0
参照先
>>573 amateurさん
多忙といわれると疑問なところですが、時間が足りないといえば左様でしょうか
作業時間はとれるものの、設計が決まらずぐだぐだ悩んでいると光陰矢の如しという感じで…

static_data_class_arrayは適当な参照が見当たらずstatic_data_array基準で、この間に増えるとまたズレます
exeバージョン=Unityバージョンぽいですが、dll解析にexeバージョンを参照するのも何ですし
従来のmono.dllにはバージョン情報がなく、VBBのにしても少なくとも2系の筈が1.0.0.1と謎ましいです


関数中でフィールドを参照していれば、大抵は構造体アドレスがレジスタに格納され

10028279 8B 75 08 mov esi, dword ptr [ebp + 8 ] ; フレームポインタ経由でスタックから第1引数をロード
1002827C 8B 46 54 mov eax, dword ptr [esi + 54h]; 引数のMonoDomain*domainから指定フィールドをロード

といった具合にフィールドオフセットもアセンブルコードに現れますが、万能ではなくトレードオフですね

致命的なのはオフセットが7bitを越えるとオフセットに加え命令も変化します、それでも8bit以下ならエンディアン的に互換性がありますが
冒頭参照で前処理が入り込む余地がないように見えても、後記されたソース次第ではレジスタ退避やスタック確保でプロローグが変化したり
ソースは年単位で不変でも、コンパイラバージョンや最適化設定でも生成コードが変わり得るので、オフセットが変わらない場合は逆効果です

もう一つはハードコードに比べアドレス解決速度が低下します(デバッグモードの改善でさほどでもないですが
ゲームがバージョンアップしても、エンジンのバージョンアップは稀であろうので非効率かもしれません


or(及びand)は変態紳士さんが論理演算子(||,&&)の短絡評価を実装してくださった折
これ幸いとばかりに私の要望で追加して頂いたもので、真となるオペランド自体を返します
Pythonの論理演算子を模して、条件式=真式や偽式=0の条件演算子(?:)を簡約できます
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.575)
投稿日 : 2017/11/03(Fri) 17:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : Kz2x2mSdonIuWc5YF89mm0
参照先
>>574 七星さん
エクスポート関数の中でも、ずれる可能性はあるのですね。
そういう可能性も頭の隅に置いておき、柔軟に対応するしかないでしょうか。
別のゲームではずれていた、とかならまだ良いですが、
同じゲームのVerアップでそこがずれると厄介ですね。
そういうのは体験版解析では分かりませんので…持ってるゲームなら何とかなりそうですが。

演算子の件、「and」も追加されていたのですね。
こちらも少し動作確認しましたが、
「A and B」と書くと、「A」「B」のいずれか又は両方が「0」の場合は「0」(「A」が「0」の場合は「B」は評価しない)、
「A」「B」の両方が「0」でない場合は、「B」(後ろのオペランド)を返す、という感じみたいですね。
適当にググってPythonの論理演算子の解説を読むと、orやandは条件式の記述に使用するようですが、
SSGの条件式に使う場合は「||」 や「&&」と同じように使えそうな気がしました。(だから(||,&&)の短絡評価と同時に実装された?)


偽式=0の条件演算子(?:)を簡約、とは
(条件式) and (本命の式)
と、
(条件式) ? (本命の式) : 0
が同じ結果になる、という感じでしょうか。
偽式=0の条件演算子、私はよく使うのですが確かに「and」使った方が楽ですね。
アドレスネーミング部では条件演算子の「:」の箇所を「\:」とエスケープさせるのが地味に面倒、かつ陥りやすい罠ですし…
また便利な書き方を勉強できました。。。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.576)
投稿日 : 2017/11/04(Sat) 02:35
投稿者 七星◆MH.ms4.V3i2
ID情報 : H/JWZdpve2emNqRE9yzuF0
参照先
>>575 amateurさん
中は大いにずれ得ます、エクスポートされているのは変数や関数ポインタであり
それ即ち先頭アドレスで、保証されているのはそれだけです(転送という例外はさておき

エクスポート変数といった外部参照されるような構造体ならば
フィールド追加は“配慮によって”既存オフセットを保つよう末尾にされたりしますが
関数で保たれるのは引数と戻り値くらいです(いわゆる関数プロトタイプで宣言されるもの

ですのでアセンブルコード中から解析するならば、ずばり変数やフィールドを返すだけの単純な関数か
対象を冒頭で参照していているような、変化しない・変化の影響を受けにくいものを見極める必要があります
フィールドオフセットの方がアセンブルコードよりも変化しそうもないなら決め打ちハードコードも一つの手です


オペランド自体を返す論理演算子は主にスクリプト言語で採用されており、勿論SSGでも条件式として使えます
通常の論理演算子とは最後的に論理値を返すかどうかだけの違いなので実装がほとんど同じなのです

短絡評価も実装されていると、仰る通り $ptr and *$ptr などは$ptrが0な時点で$ptrが返るので
偽式0と同等かつ、$ptrが0以外のみ第2オペランドが評価されるので所謂ヌルポを防ぎつつ値を取得出来ます
(SSGだと不正アドレスを間接参照しても0が返るだけですが、無用なReadProcessMemoryの抑止にはなります
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.577)
投稿日 : 2017/11/04(Sat) 03:22
投稿者 amateur◆kR..xsXL6RU
ID情報 : Kz2x2mSdonIuWc5YF89mm0
参照先
>>576 七星さん
毎度詳しい解説ありがとうございます。色々勉強になります。
中は大いにずれ得る、やはりそうなんですね。
エクスポート関数使ってるからズレにくそう、と何となく思ってましたが、今後は気を付けたいと思います。
決め打ちで最初から+0x50とか+0x54とか書いておく方が良かった、
つまり、オフセットが変わらない場合は逆効果ということもあり得る、ということですね。
個別SSGの場合は、オフセットは取り敢えず「+0x54」等と書いておいて、
ズレ対策を入れるなら、オフセットをリストから選択して修正出来るような形の方が良いかもですね。

>$ptrが0以外のみ第2オペランドが評価されるので所謂ヌルポを防ぎつつ
ポインタの中身がnull状態で「NullPointerException」、ヌルポってそういう意味のプログラム関係の略語なんですか。
ググって初めて知りました。(言葉自体はたまに聞きますが意味を知らなかった・・・)
短絡評価だと、確かにその例でもポインタが空でエラーみたいな事態は回避できますね。
>SSGだと不正アドレスを間接参照しても0が返るだけ
確かにSSGではアドレスが「0」でポインタが空でも演算エラーにはなってなかったような気がします。
けど、短絡評価で無意味な演算回避にはなる、と。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.578)
投稿日 : 2017/11/05(Sun) 05:12
投稿者 変態紳士◆G9/eqTtPaq.
ID情報 : Jz6HyVXmbnvl88LqcNfrG.
参照先
>>573-577 amateurさん、七星さん
>$ptr and *$ptr
七星さんの案をそのまま実装させてもらいました。

それ以外は三項演算子の真式を省略することが出来ます。

(条件式 ? 真式 : 偽式)
これを
(条件式 ? : 偽式)
こうする事ができます。

この場合は条件式がゼロでなければ条件式の結果を返し、そうでなければ偽式を評価します。
これはGNUCに組み込まれていますがVisualC++では評価されません。
(他のナントカ言語でも使えたり使えなかったりします)

>確かにSSGではアドレスが「0」でポインタが空でも演算エラーにはなってなかったような気がします。
これはずっと続いている仕様です。
ただ任意に中断する事は可能です。
if (条件式) return 0;
これを間に入れると途中の評価内容でゼロを返す事が可能です。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.579)
投稿日 : 2017/11/05(Sun) 22:31
投稿者 amateur◆kR..xsXL6RU
ID情報 : v.o4oWp/ZHdQIZLuQlB2r1
参照先
>>578 変態紳士さん
パッチ更新ありがとうございます。
三項演算子の真式を省略、これは
 (条件式 ? : 偽式)

 (条件式 or 偽式)
と同じ結果になる、ということでしょうか。
先日試したところ、orやand演算子の場合は、
前後のオペランドの箇所を()で括ってアドレスコーディングの分割「;」をその中で使えないようですので、
同じ結果になるようでも、三項演算子で書くのが必要な場合はありそうですね。
色々と機能追加ありがとうございます。

>if (条件式) return 0;
成程、「return」はこういう風に使えるのですね。
パッチ更新で追加していただいた後も使いどころが分からなかったのですが、
ある条件に該当する際に、アドレスコーディングを終了して指定した値を結果として返せるのですね。
「 :] 」→「0x0」 のようにポインタがnullでそれ以降の演算が無意味な場合には、
return 0 で終了(アドレスエラーに)させた方が速度的にも良いこともありそう、です。
勉強になります。今度使えそうな機会があったら試してみようかと思います。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.580)
投稿日 : 2017/11/11(Sat) 19:32
投稿者 amateur◆kR..xsXL6RU
ID情報 : MSxqtAlTmH1smOpGNsfQh0
参照先
SRPG Studio用SSGですが、
SRPG Studioの最新Ver「1.162」のゲームで試したところ、
アイテムやクラスデータ等の基本データへのベースアドレス(ポインタ)特定に失敗するようになっていたので、
スレッドトップのSSGを修正して差し替えました。
Ver1.159までは問題なく使用できていたので、変わったのは1.160以降のいずれかのVerからだと思います。
(所持金等の可変データは修正前でもそのまま動作するので、リスト等にアイテム名などが表示されないだけで一応使えていたのですが)

一応、Ver1.034、1.084、1.109、1.159、1.162(最新)、の各Verのゲームで動作確認したので、
多分、汎用的に使えるだろうとは思いますが、全部のVerで確認するのはあまりに面倒&不可能なので断言はできません。
(Ver1.034はベースアドレスのみ特定できるだけで、可変データ部を含め他は色々動作しないので注意)

※追記
念のため他のVerで動作確認したら、基本データへのベースアドレス特定に失敗してました…
失敗しないよう修正して差し替えました。多分これで大丈夫だと思いますけど・・・
追加で動作確認したVerは、1.121、1.128、1.141、1.158
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.581)
投稿日 : 2017/11/15(Wed) 01:53
投稿者 七星◆MH.ms4.V3i2
ID情報 : H/JWZdpve2emNqRE9yzuF0
参照先 https://github.com/ruby/ruby/blob/ruby_1_9_2/st.c#L1001-L1182
Unityツールを作り直そうと思ったら、いつのまにかRPGツクールVX Aceを解析していた
何を言っているか分か(ry)ということで唐突に資料を置いておきます

といってもNEExploiTさんの二番煎じで、目新しいものは
IDではなくハッシュ算出から始める環境依存の脱却と
命令シーケンスの変更によるメソッドの改竄くらいです

シンボルハッシュ算出は変数名でも共通ですが、SSGコードがちょっと迂遠…
(そしてシリアルアクセスを前提としたスレッドセーフではない

11/16
グローバル変数の変更とマップ遷移を追加、トップレベルのリストを逆順に

11/22
資料と言いつつバグが有ったのと、そこそこの塩梅に仕上がったので専用スレッドに添付となりました
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.582)
投稿日 : 2017/11/15(Wed) 23:25
投稿者 amateur◆kR..xsXL6RU
ID情報 : TvJgvrUpw5BM6PxruK/vO1
参照先
>>581 七星さん
SSGと資料ありがとうございます。
早速適当なVX AceのゲームでSSGを試させていただきましたが、
Ctrlキーを押しながら移動で壁等のすりぬけや
F9キーでのデバッグモード呼び出しはバッチリ機能していました。
アンチデバッグで機能が阻害されないそうなので助かります。

一番上の「iv_tbl」については、ここでリストに表示される「0x4675=Game_Party」等は、
RICKさんのVX Ace汎用SSGでの、例えば
 [define $Game_Party]$key=0x466B; (以下略)
上記で「$key=0x466B」に相当するものでしょうか。
少し気になるのは、上記の例で、添付いただいたSSGでは「0x4675=Game_Party」とリストに表示される場合、
実際の「Game_Party」の「key」は「0x466B」で、
リストに表示される数値に「-0xA」した値になっているようです。

添付したスクショは、「巨乳クエスト・改」体験版で使用した際のもので、
このゲームではRICKさんのVX Ace汎用SSGがそのまま使えるようでして、
RICKさんのVX Ace汎用SSGでは、所持金のアドレスは、下記のように「$key=0x466B」で演算するようですが、
 [define $Game_Party]$key=0x466B; (以下略)
スクショのとおり、「0x4675=Game_Party」とリストに表示されます。
(「0x4675=Game_Party」を選択すると「m_tbl」の一番上に「0x35A0=gold」と表示されるので所持金はこれで良さそうに思うのですが)
これについてはこういう仕様なのでしょうか。
(「m_tbl」でリスト上に表示される値が何を意味するのかも分かっていないのですけど)

ちなみに、別のVX Ace製ゲームで試したところ、
七星さんのSSGでは「0x4685=Game_Party」とリストに表示されるのですが、
そのゲームでRICKさんのVX Ace汎用SSGの、
 [define $Game_Party]$key=0x466B; (以下略)
の箇所を、「0x4685 -0xA」(=0x467B) の値を「$key」として
 [define $Game_Party]$key=0x467B; (以下略)
と修正すれば所持金の項目が正常動作するようになっていましたので、
リストに表示される数値に「-0xA」した値を「$key」とすればOK、という感じがします。
「Game_Party」以外のリストに表示される他の箇所も、「-0xA」した値が「$key」になっているようでした。

いずれにせよ、ツクールVX Ace製ゲームのSSGを作成する際には七星さんのSSGで「key」が分かるようですので、
解析の手間が大幅に省けそうです。

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.583)
投稿日 : 2017/11/16(Thu) 22:14
投稿者 七星◆MH.ms4.V3i2
ID情報 : H/JWZdpve2emNqRE9yzuF0
参照先
>>582 amateurさん
意味は同じですが対象が異なります。キー…実装的にはシンボルIDの値ですが、0x466Bとなるのは大抵“$game_party”です
対してiv_tblのリストはクラス名ですから“Game_Party”のシンボルIDで、m_tblはメソッドの“gold”ですが、メンバ変数は“@gold”です

RubyのシンボルIDは“識別子”に対して一意に割り当てられますが、そのアルゴリズムは定義順のようです。例えば何れも未定義の状態から

$SymbolA = true
class SymbolB
end

のようなソースが評価されるとして、$SymbolAへの代入がクラス定義よりも後になるだけで、シンボルIDは変わってしまいます


No.79にNEExploiTさんのRGSSシンボルテーブルからシンボルIDを列挙するRubyスクリプトがありますが、
前述した実装上の理由から、シンボルIDからの捕捉はゲームバージョンに依存するコードになります

これの脱却を図るため、プロセスメモリからハッシュシードを取得、SSGに移植したrb_memhashでシンボルハッシュを算出してから、
それを使いシンボルテーブルから遡ってシンボルIDを動的解決する下準備を挟むことで、万能となる捕捉を目論んでみました
(シンボルハッシュ=文字列ハッシュで起動毎に変化しますが、ハッシュシードを一致させれば起動毎のハッシュを算出可能

もっとも命令シーケンス変更はメソッド内容がデフォルトの場合しか想定していないので、ある種依存コードです
メソッド処理をすべて書き換えれば良いかも知れないですが…それはそれ、完全汎用な項目として、No.581にマップ遷移を実装してみました


Rubyのメモリ管理はスクリプト言語だけあってかmonoに比べれば簡略化されているので、改良にむけたリハビリ&実験ということで。
Rubyの文字列はUTF-8がデフォルトなので、SSGでマルチバイト文字を扱うのはちょっと面倒くさいですね
コード中の"文字列"とかは上位に文字数、下位はポインタなQWORDを返すとかするとmemmove()等も捗りそうとか考えたものの、
実装に見合うものやら…ANSI以外はu"〜"とかu8"〜"とかか?とか、いっそトランスコード関数を組み込みのが汎用的かとか…
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.584)
投稿日 : 2017/11/16(Thu) 23:01
投稿者 amateur◆kR..xsXL6RU
ID情報 : o3nSTU.iBVk38WNuulRri.
参照先
>>583 七星さん
解説ありがとうございます。
>iv_tblに列挙されているのはクラス名
「$game_party」とはそもそも別のIDだったのですね。似た名前だからと勝手に混同していました。
というか、基本からして全く分かっていなかっただけですね。
頓珍漢なことを質問してしまって申し訳ありません。
>シンボルIDによる捕捉はゲームバージョンに依存するコードになります
「IDではなくハッシュ算出から始める環境依存の脱却」とはそういう趣旨だったのですね。

それと>>581のSSG更新ありがとうございます。
何か、色々便利機能が追加されていますね。
SSG情報欄の解説を読んで試しましたが、本当に所持金やアイテム所持数、ステータス等が変更できました(何これ凄い…)
マップの変更もバッチリ機能しています。
VX Aceの基本的な改造なら、追加していただいた機能だけで何とかなりそうですね。
ここまで出来るのかと感動しております。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.585)
投稿日 : 2017/12/31(Sun) 00:39
投稿者 amateur◆kR..xsXL6RU
ID情報 : vP2x.lM.oI4i7EjYOtSTy.
参照先
スレッドトップのSMILE GAME BUILDER製ゲーム用SSGを更新しました。
・最新Ver「1.9.1.0」でプレイ時間のアドレスがズレていたので修正。(「1.8.10」以前のVerでも動作するはず)
・各キャラの装備に「クリティカル率」を追加

Ver「1.9.0.1」からUnityとの連携が可能となるなど、
「1.8.1.0」から大幅アップデートしたっぽくて、SSGが使えなくなったかな?と思っていたら、
ざっと調べた限り、プレイ時間のアドレスのオフセットが僅かにズレていただけのようでした。
Ver「1.9.0.1」に関してはこのVerのゲームが見つからないので確認できないのですが、
ふりーむ!でもこのVerのゲームは見当たらないので特に問題はなさそうな。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.586)
投稿日 : 2018/01/21(Sun) 03:49
投稿者  
ID情報 : C0i4mWObLyA39Q.B2Mqlq/
参照先
https://necocan-index.rick-addison.com/bbs/patio.cgi?read=166に既に投稿した相談なのですが
ここのスレッドの方がレスポンスを頂けそうなので投稿しました。

もんむす・くえすと Paradox RPGのssgに追記を行いたいのですが
自分の未熟な知識では実装出来ずにお手上げ状態です。どうか知恵を貸して下さい。

ゲームプレイ中にF9キーから起動可能なデバッグモードにおいて用意されている
スイッチ(s[0001-5000])の中で任意のスイッチについてSpoiler上でOnOffが出来たらと思い
上記スレッドのNo.28でamateur◆kR..xsXL6RUさんが示している書式を参考にしながら見様見真似で
以下を初挑戦で書いたのですが(書いてて全く意味を理解していない)

//スイッチ関連
[group]switches
[enabled][:[.0x08.]:] > 1
[subject]スイッチS0001:toggle,_[.0x00.];$base+0x04,02000000,00000000
[/enabled]
[/group]

$base+1*4をどこに組み込んで良いのかがさっぱり分かりません。
どなたか完成形を示して頂けませんでしょうか。相談に乗って頂けましたら有難いです。

宜しくお願いします。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.592)
投稿日 : 2018/01/22(Mon) 02:09
投稿者 七星◆MH.ms4.V3i2
ID情報 : z9zL9z.rnFNg78a4Vj0T80
参照先
>>586
拙作のRGSS汎用SSGでもスイッチ名を確認しながら弄れますが、現行の修正パッチでは不具合が発生するのと
SSGの組み方がプラグイン必須だし複雑なので、最新文法を使いつつスイッチのみを改竄するサンプルを組んでみました
(本来シンボルIDもシンボルテーブルから解決すべきですが、簡略化…この対象なら汎用性は保たれるか?
※導入済みの修正パッチでRGSS汎用SSGが機能している場合には、修正パッチのバックアップをお奨めします

表示範囲を調整するには[repeat]の開始値と終了値を変更します…が
件のスレッドでも言及されているように、操作済みのスイッチまでしかメモリ上にはありません(自動伸張されます
デバッグモードで最後のスイッチを操作(一度操作すればOFFに戻してもOK)してからが良いです

RPGツクールVX Aceのスイッチなら共通コードになるので、不明な点があればこちらのスレッドへでもどうぞ。
まぁその際コテハンくらいは付けて頂けると…。メモリの見方(16進数やエンディアン、2進数)を知っているか
Cの構造体やプログラムソースを読めるか、SSGのアドレスコーディングはどの程度理解されているか等も添えられると幸いです

記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.594)
投稿日 : 2018/01/22(Mon) 04:37
投稿者  
ID情報 : vZzFKNdZ057FqwGM23PYe/
参照先
No.592  七星◆MH.ms4.V3i2さんへ

SSGありがとうございます。

もんぱらスレでも言及しましたが、七星さんの汎用SSGは
本当に目から鱗で、SSGの未来と言いますか可能性を果てしなく感じてしまいます。

No.592のSSGが自分の環境でどう作用するのか、について早速確認作業に入りたいと思います。

確認次第報告に戻ります。
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.595)
投稿日 : 2018/01/22(Mon) 05:33
投稿者  
ID情報 : vZzFKNdZ057FqwGM23PYe/
参照先
N0.594の続き

スイッチSSGの動作確認をして来ました。

宝箱の開閉OnOffスイッチが分かりやすいと自分は感じたので
その挙動に焦点を定めて検証してみました。

そこで気付いた点を述べます。

1、ゲーム内スイッチで箱のOn→Offを指定した場合、指定直後に画面上の箱が閉じて未開封状態へ即更新される

2、七星さんのSSG経由のスイッチで箱のOn→Offを指定した場合、ゲーム内スイッチのフラグは確かに連動してはいるが
  ゲーム内スイッチ画面を開きOFFになった状態を画面表示させない限り、画面上の箱の口が閉じて未開封状態にはならない

という結果になりました。
自分が確認した挙動が、今回七星さんがアップしてくれたスイッチSSGの仕様として正常かどうか判断お願いします。


それから件の汎用SSGについてなのですが、項目をSpoiler上でクリックした時に
その項目が捕捉した実数(例えばactor総数等)が瞬時に計上されるのは良いのですが
本来右側ウィンドウに表示されるはずの項目が何故かほぼ全行空白状態なので
これは七星さんが述べられていた不具合に含まれるものなかな、とぼんやり思ってます。

当然ですがVer6.3 2018.1.19最新パッチ適用済です。

(今後汎用SSGの件については専用スレッドにて質問が発生した場合書き込みます)
記事編集 編集
Re: SSGを投稿したり、ゲーム解析について語るスレ (No.596)
投稿日 : 2018/01/22(Mon) 07:16
投稿者 七星◆MH.ms4.V3i2
ID情報 : z9zL9z.rnFNg78a4Vj0T80
参照先
>>595
汎用SSGの製作過程で左様な現象は確認していたような覚えがあります
これについてはデバッグウィンドウのスイッチ状態に反映されている事から
スイッチを直接メモリ操作しただけでは、キャッシュのようなモノが更新されず
マップに反映されないのではないかと適当な想像をしています(精査した訳ではありません

不具合というのはリストが空になる結果は同じですが、22日付けでは別の要因でした
根が深い問題だったのか、修正パッチのコードパーサが大改修されているのと
加えて拙作のSSGでは明文化されてない構文を使用していたので応急処置を施しました

今一度、修正パッチとRGSS汎用SSGの最新版を試してみてください。これ以後移行のほど宜しくお願い致します
※投稿時点の添付ファイルでは正常に更新できていませんでしたorz 30分くらいに上げ直しました
記事編集 編集
件名 スレッドをトップへソート
名前
メールアドレス
URL
ファイル添付


暗証キー
画像認証 (右画像の数字を入力) 投稿キー
コメント

- WEB PATIO -