ザナドゥのパレットを「盗む」、色コピーで模写への道
なんか不穏なタイトルですが、ゲームで使用されている色を取得し、
それをパレットとして模写するという私的な試みです。色トレス、という言い方もされるのですが、これは誤用で、本来「色トレス」はかつてアニメがセル画で制作されていたころに、色の境を、色の絵の具でセルの表に手描きでトレスすることです。
ザナドゥといってもいろいろありますが、リバイバル・ザナドゥです。しかもイージー版。PC-9800シリーズ用でした。ゲームそのものについては、そのクリアに至るまでの艱難辛苦(イージー版なのに!?)を別記事で書きたいと思っていますが、今回は絵についてのみ。
プロジェクトEGGで購入しプレイ。
https://www.amusement-center.com/project/egg/cgi/ecatalog-detail.cgi?contcode=7&product_id=1455
スクショを取ります。640*400。
それを自作のプログラム・Marsで2倍表示し(まあ気分の問題です)、縦横2ドット間隔でスキャンしていきます。
今までに使われていない色が出て来たら、それを配列に保存し、画面右に短冊形に表示します。
その結果がこれ。PC-9800(VM以降)はアナログRGB出力による4096色中16色同時発色表示が可能だそうで、その独特の制約が、魅力的なグラフィックを産みだしていたのだと想起させられます。
画像が縮小表示されているから分かりにくいかもしれませんが(↓クリックして拡大してね!)、メッシュ(ドットパターン)を使用して、単なる中間色ではない、テクスチャを伴ったグラデになっています。スーラの点描ぽくもある。
この16色しか使えない、という制約の中では、どの色を選ぶか、というのが大事ですが、その秘密を手にしたい、と思ったわけです。しらみつぶしに色を調べるという、ある意味イージーな方法をとっちゃったわけですが、そのおかげで、
・全イラストにおいて、緑系の色は使用されていない
・システム(ログの文字部分とか)に使われている白も、時にはRGB各255になったり238になったりしている(見ているほうは気づかない)
・水色とくすんだ黄色を掛け合わせて、灰色を表現している
などなどの発見がありました。ただ単にきれいだな~と見ているだけでは気づけなかったでしょう。感じるな、考えろ。
で、800*800に右横200を加え、加えた部分にパレットを描いて、その色を拾う形でPainterで模写したのがこの結果だよ!!
そういえば、HuluでデビルマンとCASSHERNを見比べたのですが(謎ラインアップ)、CASSHERNは全カットにわたって、使う色を制約している、言い換えればパレットがあったなあ、と。
いまは、何色でも使える時代なのですが、パレット制約、という試みが、なにか(自分として)新しい表現を産みだすのではないか、と、思うだけは思いつつ、この記事は終わりです。
あ、ついでだから、Marsでのスクリプトを残しておきますわ~色を拾うためにMarsを改造したりもしたのですけど、それはまた今度。
というか、Marsって何、って言われそうですが、HSP(ホットスーププロセッサー)で作ったアドベンチャーゲーム作るためのソフトです。
寝てる間に、パレットを拾いきれるように、配列にファイル名を突っ込んでループさせてます。
!arcadeon
!acsize 640,400
!screen 1280,800
; これで2倍で表示していることになる
;
!sdim 4,20
; 16色(1から16 0は欠番 保険として20まで) RGB
; そして、ファイル名ずらずら
;
;------------------------------
!sdim $ファイル名
;
xana_shop_A
xana_shop_B
xana_shop_C
xana_shop_D
xana_shop_E
xana_shop_F
xana_shop_G
xana_shop_H
xana_shop_I
xana_shop_Z
;
xana_skill_A
xana_skill_B
xana_skill_C
xana_skill_D
xana_skill_E
xana_skill_F
xana_skill_G
;
end
;
!endsdim
;
;
;
$ファイル名カウンタ=0
#次のファイルへ
$読み込み名=$ファイル名.$ファイル名カウンタ
$読み込み名+.bmp
!bg $読み込み名
!gmax 1
!gsel 1
!clrchr
!clrtxt
*
;
$色番号=1
; 色番号は1~16
$色赤.1=0
$色緑.1=0
$色青.1=0
;
;$色赤.2=119
;$色緑.2=119
;$色青.2=119
;
;$色赤.3=153
;$色緑.3=51
;$色青.3=119
;
!fsize 10
!text 0
;
!color $色赤.1,$色緑.1,$色青.1
!box2 420,0,200,10
!txtpos 420,10
w
・R 0・G 0・B 0
; 以上はシステムが常に使う色
;
;
;リピートの中にリピートを入れられないという○仕様なので、gotoで書くわ
;
!speed 0
!priority 0
!await 0
;2ドットずつ精査
;
$縦ドット=4
!await 0
#縦精査
$タイトル=・縦ライン
$タイトル+$縦ドット
!title $タイトル
;
$横ドット=0
#横精査
!gsel 0
!pos $横ドット,$縦ドット
!getrgb $赤,$緑,$青
$タイトル=・
$タイトル+$縦ドット
;$タイトル+・
;$タイトル+$横ドット
;$タイトル+・
;$タイトル+$赤
;$タイトル+・
;$タイトル+$緑
;$タイトル+・
;$タイトル+$青
;!title $タイトル
; 過去の色番号と照合
; このループさえrepeat loopでは作用しない
;
$カウンタ=1
#色検査
;!await 0
;
!if $赤=$色赤.$カウンタ
!if $緑=$色緑.$カウンタ
!if $青=$色青.$カウンタ
;同じ色があります
!goto #色検査終了
!endif
;
$カウンタ+1
!if $カウンタ>$色番号,#過去に色は無かった
!goto #色検査
;
#過去に色は無かった
;ここにくるのか?
$色赤.$カウンタ=$赤
$色緑.$カウンタ=$緑
$色青.$カウンタ=$青
;そうだよ、配列に新しい色を代入しなきゃだわ
!color $赤,$緑,$青
$臨時=$色番号
$臨時*20
!gsel 1
!box2 420,$臨時,200,10
$臨時+10
!txtpos 420,$臨時
!fsize 10
!text 0
w
!mes
・R
$赤
・G
$緑
・B
$青
!endmes
*
$色番号+1
!if $色番号>16,#精査終了
;↓
#色検査終了
;
;!gsel 1
;$横ドット/2
;$縦ドット/2
;w
;!point $横ドット,$縦ドット
;$横ドット*2
;$縦ドット*2
;*
;
;--------------
$横ドット+2
!if $横ドット>799
$横ドット=0
;
!else
!goto #横精査
!endif
;
$縦ドット+2
!if $縦ドット>799
;!if $縦ドット>6
!goto #精査終了
!else
!goto #縦精査
!endif
;
#精査終了
;
$読み込み名=$ファイル名.$ファイル名カウンタ
$読み込み名+_pallet
!gsave0 $読み込み名
;
$ファイル名カウンタ+1
;
!if $ファイル名.$ファイル名カウンタ=end
!txtpos 20,20
すべて終了しました
!stop
!endif
;
!goto #次のファイルへ
;-------------------------------------
!txtpos 20,20
終了しました
!stop
;
そう、だいぶんスピード遅いのですよね・・・かつてのBASICみたいなもん、といえば、そのスピードが想像できるでしょう・・・