PB-100の宇宙の中の人
PBロッキーの日記

PB-100用プチRPG『ムシハカセ』僅か6行のプログラムに凝縮した少年の成長譚…!?

Aka_whisper 氏のツイートを元に、初期出荷バージョンのSGNにまつわるバグの回避法を追記しました。この度の情報提供を心よりありがとうございます。(2020/2/7)

Pocket BASIC シミュレータでの実行画面

2006年に2ちゃんねる掲示板の『PB-100は氏ね』スレッドに CASIO PB-100 用ゲーム 『ムシハカセ』を投稿したのは実は僕でした。今回は完成が近づきつつある PB-100 プログラム公開用 CSS ライブラリ『hamura.css』のデモを兼ねて、このブログに収録します。

僅かに6行で実現したプチ RPG の魅力を hamura.css の素晴らしい表現力とともにお楽しみください。ちなみにプチ RPG の命名は509さんでした。スレッドの皆様に頂戴した反響の数々、大変ありがとうございました。

物語(適当)

今日もあなたは幻の超レアムシキング、ゴールデンヘラクレスオオカブトを求めて、害獣も出没してちびっこにはちょっぴり危険な裏庭の先の森へと駆けていくのであった。

遊び方

ゲームの始め方と再開の仕方
ゲームの進捗操作
初めて遊ぶshift1、または VAC の後に shift0
害獣にやられた後に再開するD=1 してから shift0
クリアしてから再開するD=1 U=0 してから shift0

フィールドを探索!

RUN DEG
A 1 24      

左から、現在の地形を表すキャラクター、X 座標、HP。

4で左へ、6で右へ移動します。これ以外の数字ボタンを押すとまずいです。この問題は6行では解決が難しいです、すみません。

地形の一覧
表示解説
Aスタート地点で回復地点の自宅。座標 12 にあるよ。おやつを食べてのんびりすると HP が最大値まで回復するぞ。
_裏庭から続く平地。お母さんには「この先の森には行くな」って言われているんだけどね。
¥森。「オオカブトは自宅から50歩ほど行った大きな森の中でドツボカズラの樹液を吸っている」ってみんな噂しているよ。

害獣と遭遇!

RUN DEG
J 1 24 30   

左から、害獣を表すキャラクター、X 座標、HP、害獣の HP。害獣との遭遇は移動後に限らず、屋外に居る場合に起こります。

オートバトルです。逃げる時は 5 を押し続けます。害獣の HP を0以下にしたら勝利です。最大 HP が少し上昇します。

害獣の一覧
表示解説
a荒くれウサギ。とっても攻撃的な奴なんだ。
Jドツボカズラ。人間を襲うこともある危険な食虫植物だよ。こいつの樹液はオオカブトの好物なんだって。
'幻の超レア虫キング、ゴールデンヘラクレスオオカブト。小さい身体なのにとってもパワフルなんだ。

エンディングの演出にほんの少しだけ凝っていますので、お時間の許す方は是非最後まで付き合いください。ボス以外の害獣が2種類しかいない点は心残りです。

プログラムリスト

実機用リスト

P0
D=D+SGN A*(A-5:D(SGN D)=1:P=EXP FRAC LN D:O(RAN#+.05)=4+P:P(LN D)=3
Q=B+6:H=INT P*5:$=KEY:$="0"+$:A=VAL($):IF U=4;PRINT " Get♥":END
D(P)=Q*4:$="_¥A,aJ '":PRINT :PRINT MID(P-U,1);D;G;:IF P-U<5 THEN 1
PRINT H;:IF H<1;PRINT "Win":B=B+.5:M(P)=4:I(SQR D)=8:GOTO (P+U)/4
C=RAN#↑RAN#↑RAN#+π:IF KEY="5";IF C≧4;PRINT "Ec":GOTO 1
IF G>0;D(C)=D(C)-INT (RAN#*M(C):GOTO 3
P1
VAC :GOTO #0

P1 は変数のクリア以上のことはしていないので、実機には必ずしも入力の必要はありません。入力しない場合 VAC の後に shift0 でゲームを開始します。

初期出荷バージョンのSGNにまつわるバグの回避法

PB-100 の最初期に出荷されたものには SGN にまつわるバグがあります。SGN の数式中での位置関係によっては意図した計算結果にならない、というもので詳しくはこちらで解説しています。

この度は Aka_whisper 氏より回避法をご教示いただきました。

P0
D=SGN A(A-5)+D:D(SGN D)=1:P=EXP FRAC LN D:O(RAN#+Z)=4+P:P(LN D)=3
P1
VAC :Z=.05:GOTO #0

バグに対策したことで一行あたりの文字制限を超えたため、.05 を変数 Z に代入することで文字数を稼いでいます。または O(RAN#+.1)=4+P にしても一行に収まります。この場合、害獣の出現率が倍になります。

Pocket BASIC シミュレータ用リスト

[P0]
1 D=D+SGN A*(A-5:D(SGN D)=1:P=EXP FRAC LN D:O(RAN#+.05)=4+P:P(LN D)=3
2 Q=B+6:H=INT P*5:$=KEY:$="0"+$:A=VAL($):IF U=4;PRINT " Get\ht":END
3 D(P)=Q*4:$="_\\A,aJ '":PRINT:PRINT MID(P-U,1);D;G;:IF P-U<5 THEN 1
4 PRINT H;:IF H<1;PRINT "Win":B=B+.5:M(P)=4:I(SQR D)=8:GOTO (P+U)/4
5 C=RAN#^RAN#^RAN#+PI:IF KEY="5";IF C>=4;PRINT "Ec":GOTO 1
6 IF G>0;D(C)=D(C)-INT(RAN#*M(C):GOTO 3

[P1]
1 VAC:GOTO #0

PB-100 シミュレータの入手

Pocket BASIC シミュレータは開発者の Bernie 氏の Web サイトからダウンロードいただけます。Windows OS で動作します。また Windows CE 版を滝本飛沫氏の Web サイトからダウンロードいただけましたが現在はリンク切れです。一旦 web.archive.org の URL をご案内しておきます。

2006年公開時点からのシミュレータ用リストの変更点

2006年の公開時点では、実機では動いたのにシミュレータでは動かない箇所があった為、リストの1行目を変更していました。この問題は最新の version 0.12 では解決していた為、本記事執筆にあたってシミュレータ用リストを実機用と等価にしました。

2006年版での変更点

P(LN D)=3
↓
P(SGN(D-1))=3

最後に

さて hamura.css の表現力にも手応えを感じております。いよいよ重い腰を上げて『ぽあぽあ 544ステップ版』の公開に着手します。ではでは。