スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
公開: --年--月--日, カテゴリ: スポンサー広告

RCOファイルの構造(20) opening_plugin.rco

opening_plugin.rcoファイルはcoldboot(本体起動画面)とgameboot(ゲーム起動画面)に関連するリソースファイルである。 他のRCOと比較すると多数のアニメーション関連の記述が存在しており、唯一SlideOut要素とLock要素という効果のはっきりしない要素が使われている。 CTF制作では主にcoldbootで表示される画像の変更、gamebootの再生時間の変更などがよく行われている。

更新: 2011-02-16

5.00と5.50の相違点

無し

ちなみに6.xx系のRCOは何故かResurssiklunssiを使っても変換できない(Don't working!とか表示される)ので、調べられない。誰か私に分けてくれpatpat氏が自力で変換したらしきものを入手した。

XML構成

Tree要素構成

ImageTree要素

Image name="tex_logo"
coldbootで使われている『Sony Computer Entertainment』というテキストの画像。
Image name="tex_psp_logo"
gamebootで使われている『PSP™ Playstation®Portable』というテキストの画像。

ModelTree要素

Model name="mdl_00"
coldbootで使われているモデルデータ。テーマ設定で『クラシック』を選択中にPSPを起動した時にXMB表示前にうねるようにウェーブが表示される。

ObjectTree要素

ツリー構成は以下の通りで9種類のPage要素により構成される。

  1. Page name="page_movie"
    • Plane name="white"
  2. Page name="page_psp_logo"
    • Plane name="psp_logo"
  3. Page name="page_pagame"
    • Plane name="psgame"
  4. Page name="page_app"
    • Plane name="clear"
  5. Page name="page_bg"
    • Plane name="back"
    • Plane name="glow"
    • Plane name="glow_A"
    • Plane name="glow_B_top"
    • Plane name="glow_B_mid"
    • Plane name="glow_B_buttom"
  6. Page name="page_3d"
    • ModelObject name="model"
      • Group name="camera_target"
  7. Page name="page_logo"
    • Plane name="logo"
  8. Page name="page_sound"
    • Group name="sound"
  9. Page name="page_solidwave"
    • Group name="solidwave"
Page name="page_movie"
gamebootに関連する要素。このPage要素への子要素の追加は無効
Page name="page_psp_logo"
gamebootに関連する要素。『PSP™ Playstation®Portable』というテキストの画像はここで読み込まれている。
Page name="page_pagame"
POPS(PS1)のgamebootに関連する要素。子要素である Plane name="psgame" はPOPS起動時に表示されるスプラッシュ画像を表示させるためのPlane要素である。
Page name="page_app"
詳細不明。
Page name="page_bg"
coldbootに関連する要素。背景を構成する画像を読み込んでいる。
Page name="page_3d"
coldbootに関連する要素。起動時に表示されるウェーブ(モデルデータ)を読み込んでいる。
Page name="page_logo"
coldbootに関連する要素。『Sony Computer Entertainment』というテキストの画像はここで読み込まれている。
Page name="page_sound"
coldbootに関連する要素。詳細不明。このPage要素への子要素の追加は無効
Page name="page_solidwave"
coldbootに関連する要素。詳細不明。このPage要素への子要素の追加は無効

AnimTree要素

ツリー構成は以下の通りで39種類のAnimation要素により構成される。

Animation name="anim_model"
coldbootでのウェーブの動作に関わるものと思われるが詳細は不明。テーマ設定『クラシック』におけるウェーブの動作だろうか?
<Animation name="anim_model">
    <Lock unknownInt0="0xffffffff" />
    <Delay time="3500" />
    <FireEvent object="event:native:/anim_model_finished" />
</Animation>
Animation name="anim_sound"
起動音関連のアニメーション。ちなみに"event:native:/playsound"の前のDelay要素のtime属性値を大きくすると、その分音の再生が遅れる。例えばXMB表示後に起動音を再生させることも可能。
<Animation name="anim_sound">
    <Delay time="51" />
    <FireEvent object="event:native:/playsound" />
    <Delay time="4000" />
    <FireEvent object="event:native:/anim_sound_finished" />
</Animation>
Animation name="anim_logo"
Animation name="anim_logo_solidwave"
coldbootの核となるアニメーションと思われるが詳細は不明。テーマ設定『標準』、『クラシック』でこれらは切り替わっているのだろうと考えられる。多分anim_logoが『クラシック』、anim_logo_solidwaveが『標準』ではないかと。
また、このAnimation要素は複数のFireEvent要素を子要素に持っており、それぞれの役割は以下のとおりと考えられる。
  1. "event:native:/system_bg_plane_show" でXMB背景が表示される
  2. "event:native:/system_bg_model_show" でXMBウェーブが表示される
  3. "event:native:/system_bg_solidwave_init" でXMBウェーブの加速動作(このときウェーブの速度が通常の何倍も速く波打つ)。
  4. "event:native:/system_bg_solidwave_slow" でXMBウェーブの減速動作(これにより、通常の動作へ)。
  5. "event:native:/anim_logo_finished" で終了しXMB関連のRCO(topmenu_pluginなど)の読み込みに移行する。
Animation name="anim_camera"
詳細不明。
Animation name="anim_camera_target"
詳細不明。
Animation name="anim_gameboot_movie"
gameboot再生のアニメーションで、下の方のDelay要素のtime属性値を大きくするとその分ムービー再生時間が延期され、PMFファイルの再生時間を超過するとその分はループ再生される。要は"event:native:/anim_gameboot_movie_finished"がムービー停止の命令で、この命令を実行するまでの時間を遅延させている仕組み。
<Animation name="anim_gameboot_movie">
    <Lock unknownInt0="0xffffffff" />
    <FireEvent object="event:native:/system_bg_plane_hide" />
    <FireEvent object="event:native:/system_bg_model_hide" />
    <Fade object="object:page_movie" duration="0" accelMode="0x0" transparency="0" />
    <Fade object="object:page_movie" duration="100" accelMode="0x0" transparency="1" />
    <Delay time="300" />
    <Recolour object="object:psp_logo" duration="200" accelMode="0x0" red="1" green="1" blue="1" alpha="1" />
    <Delay time="700" />
    <Delay time="1500" />
    <FireEvent object="event:native:/anim_gameboot_movie_finished" />
</Animation>
ちなみに最初の命令でsystem_bgを非表示に切替えているが、system_plugin_bg.rcoファイルの一部の箇所に要素を追加しているとこのとき非表示にされずに映り込んでしまう。これらはsystem_bgの下にgamebootムービーが表示される位置関係にある(CSS風に言うとXMB背景の方がz-index値が大きい)。
Animation name="anim_gameboot_solidwave"
詳細不明。
Animation name="anim_appboot_movie"
詳細不明。
Animation name="anim_month_num"
これは"anim_month_01"から"anim_month_30"まであって背景カラーを『月ごと』に設定するとその月に合わせたアニメーションを実行している。

その他

編集の注意点

ObjectTree要素、AnimTree要素それぞれにおいて注意すべき点を挙げておく。

ObjectTree要素
デフォルトで存在する要素は一切削除してはならない。また、onLoad属性値の"nothing"以外の値を変更してはならない。どれか一つでも削除または変更した場合、関連する場面においてフリーズを引き起こしてしまう。
例えば画像を非表示にしたい場合などは要素ごと削除するのではなくimage属性の値を"nothing"に、alphaScale属性の値を"0"に変更するなどで対処すればよい。
AnimTree要素
デフォルトで存在するFireEvent要素は削除及び内容の変更をしてはならない。削除・変更した場合、関連する場面においてフリーズを引き起こしてしまう。

POPSのスプラッシュ画像

繰返しの説明になるが、ObjectTree要素直下のPage name="page_psgame"の子要素Plane name="psgame"はPOPSと呼ばれるPS1ゲームを起動したときに表示されるスプラッシュ画像を有効にするための要素である。この要素自体は削除してはならないが、サイズ・色の変更・アニメーションの追加、また要素の追加は全て有効。

ちなみにPlaystation対応のゲームディスクからイメージデータを抽出しEBOOT.PBPへ変換したものの場合、EBOOT.PBPへの変換時にSPLASH.PNGを組込んでいない場合は何も表示されない。

また、このスプラッシュ画像の表示時間はこのRCOファイルでは変更する事は不可能で、opnenig_plugin.prxファイルを編集する必要がある(要Descramble)。この時間の初期値は1500(約1.5秒に設定)である。アドレスは5.00, 5.50が24で、6.20, 6.31, 6.35が4C(ただしこちらは実際に変更して試してないので違うかも、誰か試したら情報下さい)。

需要あるか知らないけど一応PRX Editor用のiniファイルを編集したので(opening_plugin.ini (INI設定ファイル, 0.7KB)必要ならどうぞご自由に。使い方はまあ、書かなくても分かるだろうと期待(?)している。

gameboot.pmfの再生時間変更

以前別の記事でRCO Editorを利用しての方法を書いたが、ここではRcomageを利用して取得したXMLの編集での変更方法について書き記す。

まずgameboot.pmf再生に関わるAnimation要素及び子要素全てを以下に示す。

<Animation name="anim_gameboot_movie">
    <Lock unknownInt0="0xffffffff" />
    <FireEvent object="event:native:/system_bg_plane_hide" />
    <FireEvent object="event:native:/system_bg_model_hide" />
    <Fade object="object:page_movie" duration="0" accelMode="0x0" transparency="0" />
    <Fade object="object:page_movie" duration="100" accelMode="0x0" transparency="1" />
    <Delay time="300" />
    <Recolour object="object:psp_logo" duration="200" accelMode="0x0" red="1" green="1" blue="1" alpha="1" />
    <Delay time="700" />
    <Delay time="1500" />
    <FireEvent object="event:native:/anim_gameboot_movie_finished" />
</Animation>

このアニメーションの一連の動作は以下のように処理されると解釈できるだろう。

  1. まずLock要素によりユーザー操作受付を無効とする。
  2. 次に連続するFireEvent要素によりXMB背景を非表示とする。
  3. 以上の処理と並行してgameboot.pmfの再生が開始される。
  4. Delay要素による待機時間(約0.3秒)の後、Recolour要素により『PSP™ Playstation®Portable』のテキスト画像(通称PSPロゴ)が表示される。
  5. Delay要素による待機時間(約2.2秒)の後、最後のFireEvent要素によりgameboot.pmfの再生が強制的に打ち切られ、起動したソフトウェアの読込みが開始される。

以上のことから、gameboot.pmfの再生は FireEvent object="event:native:/anim_gameboot_movie_finished" の命令を実行するまでの時間をそれ以前のDelay要素のtime属性値を変更する事で調節できることが分かる。どのDelay要素を対象とするかは自由に決めてよい。また三つあるDelay要素の二つを削除して一つに纏めても特に差支えない。以下にその変更例を示す。

<Animation name="anim_gameboot_movie">
    <Lock unknownInt0="0xffffffff" />
    <FireEvent object="event:native:/system_bg_plane_hide" />
    <FireEvent object="event:native:/system_bg_model_hide" />
    <Fade object="object:page_movie" duration="0" accelMode="0x0" transparency="0" />
    <Fade object="object:page_movie" duration="100" accelMode="0x0" transparency="1" />
    <Recolour object="object:psp_logo" duration="200" accelMode="0x0" red="1" green="1" blue="1" alpha="1" />
    <Delay time="2500" />
    <FireEvent object="event:native:/anim_gameboot_movie_finished" />
</Animation>

この例の場合、待機時間無しにPSPロゴが表示動作を開始するのでその調整についてはRecolor要素のduration属性値を変更する、またはRecolor要素以前のDelay要素を削除しないなどで対処すること。

ちなみに前半二つのFireEvent要素以前にDelay要素を追加すると、gameboot.pmfファイルの再生開始を遅らせることができる。その間はXMB背景も表示されたままとなり利用者がフリーズしたと勘違いを起こす可能性があるので推奨しない。

起動時のRCOファイルの読込み

これはopening_plugin.rcoファイルを編集していて何となく感じたことだが、起動時のRCOファイルの読込みは以下の流れではないかと考えている。なお、PRXファイル等その他のものはここでは無視している。

  1. opening_plugin
  2. system_plugin_fg
  3. system_plugin_bg
  4. topmenu_plugin
  5. system_plugin

感覚的にopeningとsystem_fg.rcoはほとんど同じような気がする。coldboot開始直後にfgのPage要素の "page_btnnavi" が既に有効になっている印象。あとはtopmenu_plugin.rcoとsystem_plugin.rcoの読込みのタイミングは結構タイムラグが大きい感じがする。

関連するリソース

公開: 2011年01月25日, カテゴリ: RCOファイルの構造