Shockwaveロストテクノロジー化防止用の自分用(というかエミュ開発者/CCTクリエイター向け)覚え書きメモ。
Adobeにとっては迷惑極まりない話ではありますが(笑)
「部屋づくりマシーン」の改変で用いたキャストのオーバーロード
hh_kiosk_room.cctに実装クラスとインターフェース等を構成する画像が格納されています。
そのままだとプロテクトがかかっていてDirectorでは開けないのでrecover-cctを使ってプロテクトを解除し、CSTファイルにします。
(アンプロテクトについては「技術情報:CCTのアンプロテクト」をご確認ください)
これでDirectorを使ってCSTの編集ができるわけですが、recover-cctを使うと実装されているクラスのコードが全部ぶっとびます。
ぶっとんだらどうなるのかと言うと、例えばこのhh_kiosk_room中のクラスがぶっとんだら部屋の作成ダイアログが開かなくなったりします。
なので基本的に実装クラスが格納されているファイルは触れることができません。
しかし!
あらかじめ自作のCCT読み込ませた上で正規のCCTをオーバーロード(?)させてやるとオリジナルの実装クラスが失われる事なく、正規CCTの内容の内の自分で改変したい内容だけ読み込ませることが可能となります。
どういうことかというと、クライアントが最初に読み込むexternal_variablesの内容中に初期ロードするCCTファイルの一覧が記述されており、例えば「cast.entry.17=hh_kiosk_room」があるとします。
hh_kiosk_roomの中のキャストのうち、改変を施した同名キャストが含まれる自作のCCTが「hh_kiosk_room_ext.cct」という名前である場合、この記述の前に「cast.entry.16=hh_kiosk_room_ext」を追加してやると、hh_kiosk_room_ext.cctの中に存在しないキャストに関しては当然ながらhh_kiosk_room.cctからそのまま利用され、hh_kiosk_room_ext.cctで改変した内容に関してはhh_kiosk_room.cctより優先、つまりオーバーロードさせて利用することができます。
※cast.entry.*の連番は全て修正する必要があります
もっと簡単に図解すると、
こんなカンジ。
先に読み込んだ方が優先される仕様みたいなのでオーバーロードとは言えないかも・・・。
ちなみにvaliable.indexの中の何を改変したのかというと、private.room.propertiesという配列にフリーレイアウト用のモデルの要素を2件追加しただけ。
正規(hh_kiosk_room):
#roomkiosk #variable #index private.room.properties = [ [#model:"a",#club:0,#size:104,#charScale:#large], [#model:"b",#club:0,#size:94,#charScale:#large], [#model:"c",#club:0,#size:36,#charScale:#large], [#model:"d",#club:0,#size:84,#charScale:#large], [#model:"e",#club:0,#size:80,#charScale:#large], [#model:"f",#club:0,#size:80,#charScale:#large], [#model:"g",#club:1,#size:80,#charScale:#large], [#model:"h",#club:1,#size:74,#charScale:#large], [#model:"i",#club:0,#size:416,#charScale:#small], [#model:"j",#club:0,#size:320,#charScale:#small], [#model:"k",#club:0,#size:448,#charScale:#small], [#model:"l",#club:0,#size:352,#charScale:#small], [#model:"m",#club:0,#size:384,#charScale:#small], [#model:"n",#club:0,#size:372,#charScale:#small], [#model:"o",#club:1,#size:416,#charScale:#small], [#model:"p",#club:1,#size:352,#charScale:#small], [#model:"q",#club:1,#size:304,#charScale:#small], [#model:"r",#club:1,#size:336,#charScale:#small]]
自作(hh_kiosk_room_ext):
#roomkiosk #variable #index private.room.properties = [ [#model:"a",#club:0,#size:104,#charScale:#large], [#model:"b",#club:0,#size:94,#charScale:#large], [#model:"c",#club:0,#size:36,#charScale:#large], [#model:"d",#club:0,#size:84,#charScale:#large], [#model:"e",#club:0,#size:80,#charScale:#large], [#model:"f",#club:0,#size:80,#charScale:#large], [#model:"g",#club:1,#size:80,#charScale:#large], [#model:"h",#club:1,#size:74,#charScale:#large], [#model:"t",#club:1,#size:0,#charScale:#large], [#model:"i",#club:0,#size:416,#charScale:#small], [#model:"j",#club:0,#size:320,#charScale:#small], [#model:"k",#club:0,#size:448,#charScale:#small], [#model:"l",#club:0,#size:352,#charScale:#small], [#model:"m",#club:0,#size:384,#charScale:#small], [#model:"n",#club:0,#size:372,#charScale:#small], [#model:"o",#club:1,#size:416,#charScale:#small], [#model:"p",#club:1,#size:352,#charScale:#small], [#model:"q",#club:1,#size:304,#charScale:#small], [#model:"r",#club:1,#size:336,#charScale:#small], [#model:"u",#club:1,#size:0,#charScale:#small]]
※ルームモデル名”s” は公式の時に初期生成されてたウェルカムルーム用の小さいレイアウトなので飛ばして”t”と”u”を追加してます。
あと追加したキャストの中身:
分かりにくい説明だったかもしれんけど、あくまでも自分のド忘れ防止用と、物好きなCCTクリエイター向けの情報でした。
英語版の執筆予定は無いので日本語分かる外人さん、転載して結構ですので適当にヨロシクっす・・・。
なるほどわからん