スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

To Heart2 ささらのイベントCGの真相

すみません、急な仕事をはじめいろいろとあったため記事や返事が遅れてしまい・・・・本当に申し訳ないです。
先日のガンプラ製作記事で応援や拍手のコメントを頂けるとは正直全く思っていなかったので、この点も深く感謝。
とにかくこれからも頑張っていこうと思いますので、よろしくお願いします。


さて・・・・いろいろと脱線気味ですが、メインはあくまでコンバータです。
というわけで、7周年企画その3を・・・・といいたいところですが、このコンバータには一つ重大な障害があって・・・
絶対に無理というわけでは無いのですが、その前に一つ済ませておきたいことがあって・・・今回の記事はその点について加工と思います。



ToHeart2 XRATED_aa0
具体的には・・・・To Heart2 Xratedのヒロイン、久寿川ささらルートのイベントCGのタイマー機能による変化についてです。

さて・・・・彼女のCGですが、4月1日と4月13日に条件付きでCGが変更されます。

4月1日:PCの内部時計が09時00分~09時59分にイベントCGが変更になります。

4月13日:PCの内部時計のミリセカンドが00の時にイベントCGが変更になる?




今回はとある方から非常に入念な解析をして頂いたので、こちらはこれも合わせて紹介しようと思います。
公開に関しては本人から許可を頂いてはいないのですが(連絡が取れないときがあるので)、今回の解析は非常に優れていて・・・このまま誰の目に触れさせないでおかないことは、あまりにも惜しい内容で・・・
このゲームが出てから既に10年・・・これ以上の解析は恐らくは望めないので、ここに備忘録として記事を書こうと思います。


さて・・・・4月1日(内部時計が09時00分~09時59分にイベントCGが変更)は割と簡単。


●該当箇所の復元スクリプト ここから●
GetSystemTime(reg0,reg1,reg2,reg3)
IfV(reg0 == 9,*addr0x0000003C)
SetFlag(999,0)
Goto(*addr0x00000048)
*addr0x0000003C
SetFlag(999,1)
*addr0x00000048

●該当箇所の復元スクリプト ここまで●

こちらは確かに時刻のようです。

これをONSで再現しようとtime命令をするのが唯一の方法かと。

time %var,%var,%var :3つの数値は時、分、秒です。
これを具体的にプログラムを組み込むと、こうなります。

time %21,%22,%23
if %21 != 9 mov %v028080, 1:mov %s_0401, 0:lsp2 99,":c;image/v028080.jpg",400,300,100,100,0,255
if %21 == 9 mov %v028081, 1:mov %s_0401, 1:lsp2 99,":c;image/v028081.jpg",400,300,100,100,0,255


%v028080はイベント絵の既視判定、%s_0401はテキスト制御用のこちらで設定した変数ですね。
これで上記の条件は満たせると思います。


問題は、4月13日
PCの内部時計のミリセカンドが00の時にイベントCGが変更になる・・・これは基本的に再現不可能。
ONSで最小の時間の取得は1秒単位。再現はこの地点で無理。

さらに・・・こちらが調べたら、これ以外にも条件があるという話も。
00のほかにゾロ目(00、11、22・・・)もOKとか、さらに他の数値でもOK、とか。
そもそもどうやってミリセカンド単位の情報を取得できるのか?
時間計測を補助するアプリを用いないと不可能です。
ここまで来ると、ある種の都市伝説です。

ここでオリジナルのプログラムでの解析ですが、以下の通りになります。



●該当箇所の復元スクリプト ここから●
M(16,NULL,NULL,NULL)
GetFlag(999,reg0)
IfV(reg0 == 1,*addr0x00001B28)
V(1,2811,0,30,NULL,NULL,NULL,NULL)
Goto(*addr0x00001B52)
*addr0x00001B28
V(1,2811,1,30,NULL,NULL,NULL,NULL)
*addr0x00001B52
VV(28,NULL,NULL,30,NULL)
SetMessage2("「いらっしゃいませ、旦那様――」\k\n",1,25)

●該当箇所の復元スクリプト ここまで●


こちらでやっているのは
正確には疑似乱数の取得のようです。

では、実際に時刻とは一切関係のない
確立の問題なのかというと違うようです。

さわり程度にrand関数について調べた結果として2点。
(情報の解釈が間違っていましたらすみません)

・擬似乱数生成をするための「シード値」は
 デフォルトでは「現在時刻」を使用している。

・rand 関数が返す値の範囲設定で擬似乱数の
 循環周期の長さが変わる。

自分には分かりませんが2点の内容を正しく
理解している方なら返値の範囲によって
時刻に併せる調節も可能なのかなと感じました。


ちなみに ToHeart2.exe で返値の範囲指定は
rand()%65535 となっていました。

範囲については参考サイトからの転載ですが

>C言語のrand関数の使い方
>rand()%6はrand()を6で割ったあまりを出力する演算子で、
>rand()%6は0から5の整数の乱数を返す。
>よってrand()%6+1は1から6の乱数を出力するのである。

とのことなので0から65534のようです。

ONSも内部では同じrand関数のように見えますので、
同じようにしてみるのも一つの手かもしれません。


語弊が無いようにするため、頂いたコメントをほぼ原文で抜粋。
必要な情報全てが明らかになっていないので、これだけで正解は得られない訳ですが・・現状ではこれが最も詳細な情報です。
決定打では無いのかもしれませんが、ここまでのアプローチはかつて無かった筈です。



こうなると実際にプレイした感覚も合わせるのが正解に近づく方法かと。

プレイした方の感想によると、10回くらい試してみると特殊なCGになるという意見が最も多いようです。
こちらも実際にプレイしてみても同じでした。
2回続いて特殊なCGが出たこともありましたし・・・こうなると、ミリセカンドが00の時にというのは誤りと思われる。
1/100の確立なら、2回続けては確率論からしてまずありえませんし・・・・
感覚的には1/10と考えた方が妥当です。

ここで目に付いたのがとある攻略サイトでの情報。

「ミリセカンドの末尾が0の時にイベントCGが変更になる」

この情報のソースは不明ですが、感覚的に考えるとこれが最も近い。


・・・でもこうなると、タイマーがどうこうではなく1/10の確立を再現させるのが正解か?
という訳でプログラム上でこのようになる。

rnd %21, 10
if %21 != 0 mov %v028110, 1:mov %s_0413, 0:lsp2 99,":c;image/v028110.jpg",400,300,100,100,0,255
if %21 == 0 mov %v028111, 1:mov %s_0413, 1:lsp2 99,":c;image/v028111.jpg",400,300,100,100,0,255


極めてシンプルですね。
単純な乱数で1/10になるという、なんとも芸の無いやり方です。
「今までの解析は何だったのか!」とお怒りの方もいるかと思います。
・・・ただテストプレイ上では、これが最も近かったです。

「もっとオリジナルに近くぅ~~」といっても、実際にアプローチの方法が無いし1/100秒を正確に計測できる方はいません。
「そんな事は無い!」という方はデジタルストップウォッチで10回連続でボタンを押して10回とも末尾が0になる動画を送っていただきたい・・・そうすれば信用しますがストップウォッチに細工でもしない限り、まず無理かと。

結論だけで見るとあっけない感じかもしれませんが・・・何だかちょっとした冒険でもしたかのような紆余曲折でした。
ご意見があればお待ちしておりますが・・・Ons上での再現となると、これ以上は難しいのかもしれません。




・・・これだけでは記事としては不十分なので、中途版のコンバータver0.2を公開いたします。
実際に上記の記事の内容を試すことが出来るように、ささらルートを攻略可能にしました。
興味のある方はお試し頂ければ、と思います。



ToHeart2 XRATED_aa1
これだけでは寂しいので、さらに花梨ルートをクリアできるようにしました。
当初は全く興味が無かったキャラですが、いざデバッグをすると結構愛着が湧くものです。

これで残りはるーこ、瑠璃・珊瑚、優季のみとなりました。

・・・・それにしても2キャラ攻略できるようにするだけなのに、苦労が耐えないのはさすが東鳩。
記事の部分は今回の記事の主題ではあるものの、手間が掛かった箇所は実は別の部分。
本当の苦労した箇所は2つで、一つは立ち絵表示命令の改変。

花梨、瑠璃・珊瑚ルートでは立ち絵表示命令の仕様がさらに変更。
相変わらず何の必要があってこんな仕様にするのかさっぱり解らない・・・・・
自分のプログラムの理解度の低さが災いして、ここでさらに悪戦苦闘しました。

もう一つはフラグの管理。
毎度ながら面倒くさい。
どちらのルートも場所によってはゲーム中の1日分を先に進むために数時間を要することも・・・・
なかなか苦労をさせられます。

今回頂いた解析用のプログラムは相当優秀な物で、さらに生かす方法も考えたいところですが先に7周年企画その3の作品もありますし・・・いろいろと思案中です。


余談ですがゲームが出てからもう10年になりますが、今回取り上げたささらを担当した声優さんが今年の6月に結婚するなど、スタッフの去就については今でも話題に上る作品です。

しかも偶然というか・・・・製作中の一つ、ヨスガノソラでも・・・

ToHeart2 XRATED_aa3
ヒロインの一人、渚 一葉も同じ方がやっています。
何十ものゲームの声優として出演された方ではないのでここで重なるのは偶然とはいえ、多少数奇なものを感じました。
10年の間にもいろいろあったのでしょうが、とにかく幸せであることを祈ってます。



さて次回ですが・・・・しばらくはホビー絡みとの両立を試みてみたいと思います。
もちろんユーザーからの反応によって方向性を変更することは十分に考えますので、しばらくは見守っていただけたらと思います。
・・・それでは。


スポンサーサイト

comment

Secret

No title

更新お疲れ様です
私のコメントでToHeart2のコンバーターが
大げさ?なことになっててびっくりしました
ささらのCGに関しては物語に支障が出るわけでもないので
気にされなくても良かったのですが
しっかり対応していただいて感激です
ありがとうございます
今年の冬は気温が安定していないようなので
外出する際には体調に気をつけてお過ごしください

No title

> C-7様

> 私のコメントでToHeart2のコンバーターが
> 大げさ?なことになっててびっくりしました

今回の件で、解析をしたのは自分ではなく(かなりレベルが高い内容なので、この点は率直に凄い)、こちらは情報収集と感覚的に近似値を探っただけで、自分としては大したことはしていないので・・大事ではないです。
ただ・・・こういった労力を日の目を見ない形で終わらせるのはあまりにも・・・ということで記事にした次第です。
(あと、4月13日のテキストの引用が間違っていたので、直してあります。)
ささらのCGに関しては一種の都市伝説レベルで諸説が飛び交っていたので、一応の決着を付けなければならないのは避けては通れないかもしれません。
単純な乱数処理にしてしまったのは心残りではありますが、実際にプレイしてみると違和感はあまり無いと思います。

現実に大事だったのは・・・本文の通り、実際にささらルートをコンバータで動かす作業の方だったので・・・残ったキャラも、そう簡単にはいかないのだろうなと思うと、ため息物です。

> 今年の冬は気温が安定していないようなので
> 外出する際には体調に気をつけてお過ごしください

最近はむしろ室内の方が・・・模型関連を扱おうとすると、エアブラシを使う際は換気を考えて窓は開けなければならないうえ、塗料が付かないよう服は薄着に・・・せめて、納得のいくものが作れることを祈るばかりです。

プロフィール

HARU

Author:HARU

ブログ開設にあたって
管理人HARUへのメール
メール等ご連絡はこちらにお願いします。
haruharu【アット】gmail.com
アクセスカウンター
最新記事
最新コメント
カレンダー(月別)
04 ≪│2017/05│≫ 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
コンバータリンク集
今まで製作したコンバータのリンク集です。(ブランド別)
=Alcotシトラス様=
・死神の接吻は別離の味

=AXL様=
・恋する乙女と守護の楯
・キミの声が聞こえる
・Princess Frontier
・ひだまり
・Like a Butler
・Like a Butler(体験版)
・かしましコミュニケーション
・かしましコミュニケーション(体験版)

=C-side様=
・赤線街路~昭和33年の初雪~(リニューアルしました!)

=Ciel様=
・フォルト!!
・フォルト!!(体験版)

=CLAPWORKS様=
・もろびとこぞりて

=etude様=
・秋空に舞うコンフェティ

=feng様=
・青空の見える丘
・あかね色に染まる坂
・星空へ架かる橋

=Frontwing様=
・めがちゅ!(リニューアルしました!)
・きみはぐ
・そらうた(Vista対応版)
・ほしうた

=LiLiMi様=
・昇龍戦姫 天夢
・Aion Garden
・あい☆きゃん
・女神大戦

=mixed up様=
・StarTrain
・夏空少女

=PrincessSugar様=
・姫様限定!

=Ricotta様=
・プリンセスラバー!
・ワルキューレロマンツェ

=sugar pot様=
・WIZARD GIRL AMBITIOUS

=あかべぇそふとつぅ様=
・こんな娘がいたら僕はもう・・・
・その横顔を見つめてしまう~a profile~完全版

=キャラメルBOX様=
・処女はお姉さまに恋してる 2人のエルダー

=キャラメルBOXいちご味様=
・とっぱら~ざしきわらしのはなし~

=きゃんでぃそふと様=
・つよきす3学期
・つよきす full edition

=コットンソフト様=
・ナギサの

=すたじおみりすペレット様=
・チュートリアルサマー

=ステージなな様=
・ナルキッソス3rd~Die Dritte Welt~

=チュアブルソフト様=
・あまなつ

=ねこねこソフト様=
・<特集>ONSを通じて、ねこねこソフトの歴史を振り返る。
・Scarlette(スカーレット)
・ラムネ

=ゆずソフト様=
・ぶらばん!おためしばん
・ExE!おためしばん

=暁Works黒様=
・ボクがワタシになった理由~女装計画~

相互リンク
・PSP-君でもできること
管理人:さくりん様

・m-akita's Home Page
管理人:m-akita様

・奥行きの無い世界で―
管理人:ろーえんど様

・ゲーム関連日記
管理人:tales fan様

・ざれの日々の駄文置き場
管理人:ざれ様

・PSPの限界
管理人:さらぶれっど様

・fuの戯言日記
管理人:fu様

・おこのみ!R-18
管理人:エゴ様

・THE PSP攻略+α ~SONYへの挑戦状~
管理人:七次元様

・Herbasブログ
管理人:Herbas様

・ふもっふの暇人日記
管理人:モフ様

・たったひとつの冴えたやり方
管理人:NGSW様

・Snake00の移植日記
管理人:snake00様

・暇人の戯言
管理人:暇人様
検索フォーム
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。