トップページ > 記事閲覧
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」を数値にしようとすると'='でストップしますが
文字列を最後まで数値に出来なくとも正常に解釈した、となる様マシンコードを書き換えています
記事編集 編集
件名 スレッドをトップへソート
名前
メールアドレス
URL
ファイル添付


暗証キー
画像認証 (右画像の数字を入力) 投稿キー
コメント

- WEB PATIO -