この記事は20周年プレ企画第二弾です。第一弾では「トロネコの大冒険4」の19年ぶりのバージョンアップを公開しました。
4月18日20時18分の20周年記念日の前夜まで、計7回に渡って記事やバージョンアップを用意しています。お楽しみに!
PB-100 シリーズの為のタイニー RPG 制作ノート
PB-100 におけるタイニーRPGは、544ステップの中に、戦闘と成長、世界の探索と謎解きといった RPG の諸要素をなんとか入れ込みつつ、加えて作者のこだわりを出せるかに注目したい、魅力的なジャンルと考えています。
拙作「トロネコの大冒険4」では、3D 表現と数式で生成した広大なダンジョンをアピールポイントにしました。数式で生成する強みを活かした裏面もこだわったポイントです。
このあおりを受けたのが、戦闘と謎解きです。とはいえ、他のタイニー RPG を見渡しても、それなりの謎解き要素を入れ込めた作品は無いので、この点は今後の課題として一旦脇に置きます。
また、謎解きのみのアドベンチャーでしたら「Is this love?」(たかじょゆうき。ポケコンジャーナル 1995年8月号)という優れた作品が存在します。
さて、あおりを受けた戦闘についてです。
ミニマムな戦闘を実装する
トロネコの大冒険4では、戦闘は申し訳程度と諦めて、どこまでも省ステップなものに仕上げることに注力しました。
そこで生まれたのが、プレイヤーと敵が交互に攻撃を行うのではなく、ランダムで攻撃側が決まるシステム。これは「BATTLE GIRL」(たかじょゆうき。ポケコンジャーナル 1992年10月号)で採用されていたものを参考にしました。
更にコマンド入力を廃して逃げたくなったらキーを押す、というオート戦闘にしました。コマンド入力を廃したのは大きく省ステップに貢献しました。
ちなみに「BATTLE GIRL」では、戦闘にも作者のこだわりがみられ、肉体攻撃と精神攻撃と逃走から選択するシステムでした。
副次的に、戦闘にスピード感が生まれ、よりスリリングになった点、どちらかの連続攻撃が発生して変化がついた点は、大変にお得でした。
このシステムはプチRPG「ムシハカセ」そして4月18日に公開する新作「5行 RPG(仮)」でも採用していて、僕の RPG 作品の定番となりつつあります。
5行 RPG でのブレイクスルー
更に5行 RPG では、逃走入力式オートバトルを極めて短く記述するブレイクスルーに遭遇しました。そもそもこのブレイクスルーが無ければ5行に詰め込んで作品を完成させることが出来なかったのでありますが。
ブレイクスルーで得た知見を活用することで、より多くのこだわりを盛り込んだタイニー RPG 作品が可能になりました。しつこく掘り下げ続けることで、2003年のトロネコの大冒険4発表時には思いもよらなかった地点まで辿りつくことが出来たと思います。
『ムシハカセ』のバージョンアップの過程で、勝利、敗北、逃走成功を一つの条件式で判定するコード等々、ヤバいブレイクスルーが幾つもあった。
ここで得られた知見を『トロネコの大冒険』につぎ込めば、タイニー RPG が次のステージに進む手応えが確かにある。
コード例による確認
それでは、コード例を用いて省ステップを確認してみます。
変数 | 内容 |
---|---|
A | プレイヤーの攻撃力 |
B | 敵の攻撃力 |
H | 敵のHP |
I | プレイヤーのHP |
J | T=2の時に破壊される |
T | ターン |
ターン制と非ターン制
次の通り、交互の攻撃(ターン制)よりも常にランダムな攻撃の方が、若干のステップ(;T=1-T:
の分)が稼げます。
' 交互に攻撃する
10 T=INT( RAN#*2
20 H(T)=H(T)-INT RAN#*A(T)
:PRINT H;" vs";I;
:IF 0<H(T);T=1-T:GOTO 20
' ランダムで攻撃する
10 T=INT( RAN#*2
20 H(T)=H(T)-INT RAN#*A(T)
:PRINT H;" vs";I;
:IF 0<H(T) THEN 10
コマンド入力式と逃走入力式オートバトル
最初のリストは 0 で逃走を試みる、1 で戦闘を継続する、サンプルです。
もうひとつのリストは、オートバトルで 0 で逃走を試みるサンプルです。ウェイト処理を講じなくてはいけませんが、逃走入力式オートバトルの方が短くなりそうです。
' コマンド入力式(ランダムで攻撃する)
10 T=2
20 H(T)=H(T)-INT( RAN#*A(T)
:PRINT H;" vs";I;
:T=RAN#*2
30 IF KEY="0";IF T<1;PRINT "ESC":GOTO 99
40 IF KEY="1" THEN 20
50 GOTO 30
' 逃走入力式オートバトル(ランダムで攻撃する)
10 T=2
20 H(T)=H(T)-INT( RAN#*A(T)
:PRINT H;" vs";I;
:T=INT( RAN#*2
30 IF KEY="0";IF T<1;PRINT "ESC":GOTO 99
40 GOTO 20
ちょっとした工夫点
トロネコの大冒険4では、上記コード例のようにプレイヤーと敵で50%づつの確率ではなく、若干、プレイヤーの攻撃確率を上げています。あからさまでない程度に攻撃確率を多くした方がユーザーの爽快感に良いだろうと考えました。
いずれは、敵毎に攻撃の頻度や、ダメージのバラつき方に変化を付けて、個性を持たせた作品を作れたら、と思います。
明日公開の第三弾は落ちモノゲーム「Mr.T」の制作秘話です。お楽しみに!