GLORIOUS FORCE
「グロリアスフォース」
MSX(要RAM32KB/CasetteTape専用)
コマンド戦闘型RPG
月刊ログイン 1987年7月号掲載:
ソフトウェアコンテストグランプリ作品
「グロリアスフォース」はTAKERUで販売されていたMSX用の良作RPG「ラドラの伝説」の前身となる作品で、こちらもグラフィックのセンスが飛びぬけています。
なんとリストを打ち込むだけでこんなかっこいい画面で遊べます。
このゲームはラドラの伝説のタイトル画面をツイートしたところ、そこで教えていただいたもので、
おこのみ実験場~「投稿ゲーム再発見『グロリアスフォース』」 (psyzans.com)
おこのみ実験場さんで詳細が紹介されています。
(↓参考までにこちらがラドラの伝説のタイトル画面)
■ リスト打ち込み作業
月刊ログイン 1987年7月号に掲載されていたリストをOCR併用で打ち込みました。
印刷は0とOが見分けづらく、OCRでは「0」(ゼロ)を「O」(オー)、8(数字の八)を0(ゼロ)と間違えがちで結構苦労しました。
肉眼だと細さやサイズの違いでオーとゼロの違いは分かるのですが、OCRは制御方法がよくわからないので、OCR変換された後のものを雑誌と見比べながら修正していきました。
(それでも、1から入力するのに比べたら遥かに楽です!)
今回の作業には「Program List OCR」「Scan Tailor」「Dump List Editor」 を使用しました。
手順は
- スキャナで取り込み
- Scan Tailorで画像補正
- Program List OCRでテキストデータに変換
- Dump List Editorでテキスト修正&casファイル化
でした。
ProgramListOCRの使い方はこちら:
Program List OCR 1.0.0リリース!: 808 Midway (seesaa.net)
Dump List Editorはこちら:
PC-8001を懐かしむページ (ojaru.jp)
■ 想像の10倍は強力だったDumpListEditorの機能
DumpListEditorは強力な機能を満載しています。
触ってみるととんでもない便利さにびっくりすると思います。
- MSX-BASICを含めた各種BASICの文法解析(とエラー箇所表示)
- BASICで使用されている変数リスト出力
- テキストとBASファイルの相互変換
- MSXFANファンダムのプログラムチェックデータ出力
- 各種雑誌のダンプリスト方式(ログインも対応)のチェックサム解析(とエラー箇所表示)
- ダンプリストとバイナリファイルの相互変換
- アセンブルソースとバイナリファイルの相互変換
- 行番号やアドレスの抜けチェック
- MSX-BASIC独自の文字コードへの自動変換(全角文字をMSXの文字コードに変換してくれる。コピーペーストでもファイル入出力でもできる。)
元々はP6やP8用だったようなのですが、MSXにも追加で対応されたものです。
MSXユーザーからしても相当な高機能でとんでもない便利ソフトです。
OCRでは誤認識が少ないほうが良い為、
使用する文字種が少ないダンプリストの方が、
BASICリストより楽に完成させることができました。
(どちらも8→0、B↔8を誤認識する場合がありますが、ダンプリストは1↔l、O↔0、S↔5の誤認識を心配せずに済みます。)
とにかく、雑誌を見ながら
修正したら「チェック!」ボタン。
修正したら「チェック!」ボタン。
この繰り返しでどんどん問題が減っていくわけですね。
DumpListEditorが無かったらきっとくじけていたと思います。
■ 変数リストの使い方
該当箇所のエラー表示以外も、変数リストが思いのほか強力でした。
構文解析で変数リストを出してくれるのですが、
例えば、「GOSUB」を打ち間違えて「G05UB」になっていた場合、変数として変数リストに出力されるので一目で分かります。
■ファンダムプログラムチェッカー機能の使い方
また、ファンダムプログラムチェッカー機能があるので、このチェックデータを比較すれば、間違っている行がすぐわかるという寸法です。
そのためには、先に正常に打ち込みを完成した人にプログラムチェッカーデータを教えてもらう必要があります。
で。
これが、今回の本題になりますが、
自分の打ち込んだものと比較してくれる人を募集しております(笑)
宜しければ比較して教えてください。
自分のうちこんだBGFというファイル名のBASICプログラムのチェックデータはこちらになります。
※ 一部余計なコメントが紛れ込んでいたため、2022/03/02 02:20 更新しました。
2022/03/05 本名荒井 (id:fukenko)さんが比較検証してくださいました!
結果、2か所、自分の打ち込み間違いが判明し修正することが出来ました。
ありがとうございます!
参考用に、どういう間違いだったかも掲載しておきます。
OCRだとこういう感じで意外と予想外な誤変換があったりしますね。
1890> 1 0ss3 ※間違い
3060>156 Pwh0 ※間違い
こういった流れも、これから打ち込みをされる方の参考になれば幸いです。
荒井さんありがとうございました!
↓ 修正後のプログラム確認用データ
---------プログラム確認用データ(For MSX FAN) 1000>207 C8H0 1010>255 NI60 1020> 73 Oa40 1030> 38 0lH0 1040>242 T480 1050>231 xqD0 1060>199 xmA0 1070>169 rE00 1080>253 Do80 1090>236 JR30 1100>190 Ori0 1110>143 7i60 1120> 1 el10 1130>127 jCJ0 1140>191 M410 1150>138 MCN0 1160>218 Hj70 1170>143 w310 1180> 15 5kS0 1190>175 E410 1200> 96 R1U0 1210>205 Hj70 1220> 48 e5w0 1230> 74 Mh70 1240>208 twI0 1250>249 cXg1 1260> 4 kIS1 1270> 14 1WS0 1280>165 MUs0 1290> 77 8tJ3 1300> 59 xbi0 1310>184 CV40 1320>106 hWG0 1330>186 wHd0 1340>145 P700 1350> 2 ef10 1360> 57 RIL0 1370>252 8670 1380> 38 GDi0 1390> 40 4s40 1400> 79 6dK0 1410>206 4e20 1420> 19 Z600 1430> 93 JV00 1440>119 e520 1450>153 8GE0 1460>218 Asj0 1470>247 Dt80 1480> 19 UMS0 1490> 47 D4H0 1500> 41 quS2 1510>198 M200 1520> 93 fHr0 1530>186 9530 1540> 34 8dN0 1550> 22 e350 1560>235 7U41 1570>136 bbX1 1580>242 3U60 1590>215 I3F0 1600>245 9D70 1610> 37 JS00 1620> 40 rGE1 1630>224 vU40 1640>196 u341 1650>242 3U60 1660> 19 kq60 1670>227 le91 1680> 64 k6i0 1690> 81 Z610 1700>196 Ch10 1710> 68 DW61 1720> 56 iK31 1730>122 WWs0 1740> 98 kQ30 1750> 92 eA00 1760> 98 fTC0 1770> 51 MMD0 1780>253 YCT1 1790>231 P1w0 1800> 73 BQM0 1810>207 NPJ0 1820> 68 67p0 1830>102 tZP0 1840> 59 2P40 1850>104 CvY0 1860>189 ilA0 1870>206 4A40 1880> 8 9290 1890>166 Rns3 1900>214 cFi1 1910> 67 wVl1 1920>100 rvD0 1930>138 bRp1 1940>195 PsB0 1950>219 ont0 1960>147 qH80 1970>226 uOJ0 1980> 21 o210 1990>165 jwQ0 2000>143 B200 2010>189 wO40 2020>193 TZ60 2030>211 Nu02 2040> 7 R600 2050>241 Tg00 2060>213 7f50 2070> 41 s220 2080> 2 jAA0 2090> 50 dkJ0 2100>207 cN90 2110> 42 OEA0 2120> 47 xM31 2130> 10 Zxb0 2140>245 PbB0 2150> 17 EBr0 2160>194 BDa0 2170>191 2lV0 2180> 65 IYh0 2190> 67 npB0 2200>239 eWG0 2210>206 omF1 2220>199 tCR1 2230>166 Dd00 2240>180 b0S0 2250>199 ORP0 2260>162 hBB0 2270> 67 C260 2280>194 EsY0 2290> 68 ZsY0 2300> 41 XTF0 2310> 19 kJu0 2320>135 Wx10 2330>111 sf10 2340> 79 N300 2350>188 mr10 2360> 73 9c00 2370>190 IjM0 2380> 47 7E00 2390>111 rxG0 2400>198 OLX0 2410>236 oZJ0 2420>176 l3Y1 2430> 61 XI00 2440>208 WH00 2450> 93 4E10 2460> 27 U6B0 2470>210 aO30 2480> 74 WFO0 2490>255 Bdh0 2500>226 P4W0 2510> 99 DYI0 2520> 41 uCa0 2530>152 GjH0 2540>104 Oni0 2550> 37 JS00 2560>113 U510 2570>212 TVF0 2580>232 Jf74 2590>234 6Sn0 2600>179 ndH0 2610> 66 BiD0 2620> 84 0L50 2630>237 ss10 2640> 12 ICB0 2650> 15 5Y10 2660> 39 moi1 2670> 76 t760 2680>133 kKU0 2690> 27 sf30 2700> 25 r760 2710>153 7hL0 2720> 95 dC01 2730> 60 B8k0 2740>240 H430 2750>164 Wl00 2760> 63 p270 2770>164 qA90 2780>143 B200 2790> 51 wZO0 2800> 53 f310 2810> 27 9ws0 2820> 21 4ph1 2830>153 Y9A0 2840> 90 7f00 2850>115 E5g0 2860> 51 Wt10 2870>173 ad50 2880> 19 C620 2890> 35 I260 2900>155 gbg0 2910> 50 rOm0 2920>130 kaf0 2930>171 jMF1 2940>142 n6d0 2950>181 tgJ0 2960> 53 2lg0 2970> 40 QmW0 2980>175 s240 2990>252 4Z30 3000> 80 gIL0 3010>234 f1B0 3020>225 REM0 3030>189 6W10 3040>175 UZ20 3050>229 eNB0 3060> 43 0hg0 3070> 43 rYH0 3080>144 YvM0 3090>226 5oi2 3100> 76 lW11 3110> 60 RTG0 3120> 58 OGo2 3130>210 rvL0 3140> 38 wdD0 3150>206 IJa1 3160> 48 nuB0 3170> 44 or40 3180> 21 twE0 3190> 72 fAf0 3200> 82 hG90 3210>138 0k70 3220>126 mQv0 3230> 93 K750 3240>186 MkE0 3250>210 8MK4 3260>236 NW50 3270>111 wX40 3280>207 Uf30 3290> 50 jXV1 3300> 48 xPO0 3310>229 fj60 3320> 39 n5A0 3330> 41 YZ50 3340>218 pE40 3350>166 oXD0 3360>182 iUD0 3370> 24 SQS0 3380>187 XD60 3390>112 bF20 3400> 39 4e10 3410> 93 JV00 3420> 17 7GW0 3430>186 CHN0 3440>196 PoB0 3450> 78 8p20 3460>226 Zt00 3470> 14 9f30 3480> 49 0DF0 3490> 5 q9f0 3500>128 eA00 3510>187 Cu91 3520> 18 2ow0 3530>169 wDB1 3540>240 dRA0 3550> 46 Vb32 3560>173 iFT4 3570>246 Aw01 3580> 82 R153 3590>131 cZD0 3600>142 t8Z3 3610> 29 7HP0 3620>228 XSg0 3630>171 oF90 3640> 1 P2E0 3650>237 EX53 3660> 35 ew70 3670>143 pDG0 3680>128 AeP0
以上です。
自分が実際に動かして遊んでいるものは、最初の行を
1000 CLEAR:SCREEN1:DEFINTF-Z:DEFSNGA-E,G,M,N,V:ONSTOPGOSUB1510:STOPOFF:GOTO3540
に変更していますが、
チェックデータの方は変更前のプログラムで作成したチェックデータになります。
綺麗ですね~。
今度はちゃんと打ち込みエラーなく動きそうです。
■ プログラムで気になるポイント
プログラムを眺めていて気になったのは文字変数領域のオーバーの可能性です。
LGF(スタートアップ・ロードプログラム)でメモリ範囲宣言CLEAR 80,&HB7FFをしているのですが、BGF(ゲームメインプログラム)で、文字変数の扱いを見ていると文字データの総数が80バイトをオーバーしそうな気がします。
DumpListEditorのBASICコード解析結果の変数リストを参考に軽く調べた感じでは、
■ 内容可変の文字変数:
SA$ VRAMから読み取った4桁の16進数
FNQ(X,Y)=VPEEK(&H1800+X+Y*32)
A$ 汎用。READ、PLAY、MAGIC名
B$ "F2DE2G2RF2GE2C2" 固定?
E$ 敵キャラ名。11文字
S$ メッセージ表示用。一時変数
G$ PLAY BGM
PLAY文やPRINT文で文字列を連結する際の一時エリア■ 内容固定の文字変数:
EX$ "EXIT"
Z$ "ENEMY"
Y$ "YOU DON'T HAVE "
P$ "T255L64V13"
UI$ CHR$(13)
U$ CHR$(34)
NM$(7) FOOD,WEAPON,DRUG,ITEM,MYSTIC,POW,INN
DA$(18) ERROR!,STATUS,MAGIC,ITEM,M.SPEED,LOAD,OPEN,CONTROL,END,ATTACK,MAGIC,ITEM,RUNAWAY,EXAMINE,PUSH SPACE!,COMMAND,HERALD,":SLEEPING...",":AWAKED!"
のような感じでした。
OpenMSX等で文字列変数領域の中身を表示する機能とかあれば分かりそうですね。
OpenMSXのツールコマンドはスプリプトで記述されていて、動作中のメモリの状態等を読み書き出来るみたいなので、文字変数領域のBASICワークエリア解析とかもできそうですよね。
BASICプログラム開発の役に立つので、既にどなたか作ったりしてないんでしょうか?