記事の最期で言及している「DRY US」の PB-100 向けリストを544ステップに縮めたものを門真なむ氏が公開してくださいました。ポケコンジャーナル後期に最高峰の PB-100 系プログラミング技術を誇っていたたかじょゆうき。氏のリストから94ステップを短縮したのは驚異的です(再)!併せて本記事中の僕による「DRY US」に関する不正確な表記を改めています。(2023/04/17)
この記事は20周年プレ企画第五弾です。第四弾では「ぷよぷよ風落ちゲー「ぽあぽあ」の544ステップ版、遂に公開!」を公開しました。4月18日20時18分の20周年記念日の前夜まで、計7回に渡って記事やバージョンアップを用意しています。お楽しみに!
PB-100 シリーズ用固定出題型パズルゲーム「ZERO」
工学社のポケコンジャーナル誌の1992年12月号に掲載された PB-110/120 用ゲーム「ZERO」は、544ステップに収まりながらも、全15面を備える固定出題型パズルゲームでした。その実現の為には、面データを数式から生成するテクニックが使われています。
メモリの限られていた当時のマイコンやポケコンのプログラム作品には、しばしばこの数式から必要なデータを得るテクニックが使われていて、PB-100 シリーズもその例外ではありません。そんな作品達の中でも、ZERO のソレは殊に鮮やかでした。計算結果をゲームに利用するための調整を必要とせずダイレクトに得ていたからです。
ZERO の面データ圧縮の技術をたかじょゆうき。氏自身が存分に解説した「Programmers' Work Shop 人生PROGRAMIX」(ポケコンジャーナル 1994年1月号)は、作品が成立した背景にあるミラクルについて、氏の手応えが溢れる文章となっています。
ノーマルの PB-100 には非対応…!?
一方で僕は、作品がノーマルの PB-100 では動かない点が気になっていました。これは ZERO が Version 2 BASIC から備える STR$
を使っていたことに依ります。この STR$
を置き換える改造を試み、叶わなかった僕は永らく ZERO をノーマル PB-100 で動かすことは不可能だと考えてきました。
私はノーマル初代 PB-100 に対応させるべく挑戦し玉砕した.
そんな折、2020年11月の門真なむ氏によるノーマル PB-100 対応版の発表は衝撃でした。
凄い!
「
私はノーマル初代 PB-100 に対応させるべく挑戦し玉砕した」の一文は、それなりの時間取り組んだ末の降参だったと記憶します。
ようやく時間を持てたところ、ご厚意もあってたかじょゆうき。版を入手でき、両版を比較してどのようなテクニックが使われているのか、読み込んでみました。1992年のたかじょうゆうき。氏が成し得なかったことを如何にして実現しているのでしょう?
また PB-100 プログラマーとして更なる進歩をすべく僕自身の敗因を知りたい、という動機もありました。
STR$
が必ずしもアドバンテージでは無かった!
両版を比較していくと、STR$
の存在がアドバンテージでは無いことが視えてきました。
STR$
からの流れで面データを $
に記憶するたかじょゆうき。版では、"0"
を " "
に置き換えるループ処理が必要であったり、数字同士の和を求める際に一旦 VAL
で数値化する必要があります。
結果的に MID
とループで数値を文字化(ただし 0
は " "
に)していても、面データを配列変数に記憶することでステップ数の差を補えたのでした。
むしろ後者の方がステップ数が有利で、たかじょゆうき。版には無かった親切機能を追加したり、「動作を揃える施策」が成されたり、至れり尽くせりでした。
>
開発フォルダには面を徐々に表示する版が残っており、終盤に余裕が出て瞬間表示を再現したようです。逐次表示の場合、かなりステップ数に余裕が出てくることに気づいて戦慄しました (;'∀')
ご参考「動作を揃える施策」部分の比較
面スタート時に、一瞬で面データを表示している部分の抜粋、比較になります。オリジナルが1行で実現している処理に、STR$
を使わない門真なむ版では3行を要している。にも関わらず、他の部分の最適化で544ステップに収めている。
たかじょゆうき。版の当該部分
3 $=C$+STR$(FRAC TAN VAL(Z$)*1ᴇ10)+A$
門真なむ版の当該部分
3 $=" 123456789→"
4 FOR I=0 TO 9:Z=10*FRAC Z:N(I)=INT Z:H=H+SGN INT Z
5 $=$+MID(Z+1,1):NEXT I
戦略の勝利、成功体験に囚われた敗北
現在の面データを $
に持つか?配列変数に持つか?が栄光と挫折の分かれ目でした。
門真氏の開発の発端に、戦略的な配列変数の検討があったというのも鮮やかです。
ブロックの並び判定や空間圧縮が伴う落ち物では、
MID
で一気に処理できる$
がやはり便利ですね。数字の位置が固定の ZERO では配列に分があるかもと思ったのが、とっかかりだったと思います。
一方の僕の敗因もはっきりとしました。
たかじょゆうき版のように、現在の面データを
$
に格納する実装は、僕にとっては Mr.T と ぽあぽあ544ステップ版で成功体験があり、これに囚われてしまっていたことが、玉砕の原因と分かりました。
門真なむ版のもたらしたもの
たかじょゆうき。版を28年目に改良した、門真なむ版 ZERO によって人類は、ノーマル PB-100 用ゲームの固定出題型パズルというジャンルにおいても、その極限に肉薄した作品を目にすることとなった、と僕は皆様にお報せします。
そしてその他のゲームジャンルでも同様にして高度なゲーム性に至った作品が現れたとしたら、、、
そのとき私たちはようやく、齢20年を経た PB-100 シリーズにおけるゲーム表現の可能性のいくらかを知りえた、といえるのではないでしょうか.
もう齢41年なんですね…ちゃん、ちゃん♪
もうちょっと続くよ
門真なむ氏からは ZERO について、PB-100 プログラミング考古学ともいえる指摘もありました。92年の雑誌掲載からから28年目にして、ぱねぇーっす。
原作では面の状態を文字列変数
$
で管理しているが、自分の方では数値変数N..W (=N(0)..N(9))
を用いている。原作の変数表を見ると、このN..W
部分がごっそり未使用になっているので、開発中はこちらの方法も検討されていたのかも? とちょっと思っていた。
更に、たかじょゆうき。氏の PB-100/110 用シューティング「DRY US」の PB-100 向けリスト(ポケコンジャーナル 1994年11月号)についても、ノーマル機に収める事が出来た、とのことです。これは、激しく公開キボンヌですね…
そういえばたかじょさんの『DRY US』は
DATA
文の使えないPB-100用リストが6??ステップだけど、以前これを558ステップにまで縮めた。タイトルの
さて、プレ企画は残り2回となりました。次は第六弾「6行 RPG ムシハカセへの反響の記録(仮)」になります。