FEDORA は,月刊ASCII 1983年 7月号に掲載された NEC PC-8001 用のゲームです。
安岡孝一さんが岸和田高校在籍中に作成したものです(当時,安岡さん作成のゲームが時々 ASCII に掲載されており,私は,記事中のマシン語ダンプリストをコツコツと打ち込んで,遊んでいました)。
記事にあるとおり,独特のキー操作のため慣れるまではストレスがたまりますが,一度慣れてしまえばハマってしまう中毒性があります。何しろ20年間も遊んでいるわけですから,恐ろしいほどの中毒性と言えるでしょう。
アーカイブファイル内の fedora.fx を展開し,TransMagic 等で WonderWitch カートリッジに転送して,実行してください。
自機(FEDORA) | 敵(TRILBY) |
自機(FEDORA)をあやつり,弾や破片を避けながら弾を撃ち,敵(TRILBY)をすべて破壊します。
画面上の敵を破壊しても,次から次へと新しい敵が現れてきます。「面クリア」という概念はありません。敵が出てこなくなるまで破壊するとゲーム終了(勝利)です。
自機は3機あり,すべて破壊されるとゲームオーバーです。
自機は画面左上隅から出現します。敵は,画面4隅から出現します。
FEDORA と TRILBYや, TRYLBY
同士が衝突しても,それぞれが破壊され,破片が飛んでいきます。
FEDORA, TRILBY
ともに,この破片に当たった場合にも破壊されてしまいますので注意が必要です。
自機は常に等速度で移動しているので,[A] [B] キーにより進行方向を制御します。(自動車をハンドルで制御する感覚です。)壁に当たると反射します。
[Y4][X4][X1][X2][Y2] キーで,それぞれ進行方向に対して -45度,-22.5度,0度,+22.5度,+45度の角度に弾を発射します。これら前方向に発射した弾は,自機の移動速度の2倍の速度で移動します。
[X3] キーで,進行方向と180度反対の方向(後方)に弾を発射します。後方に発射した弾は,自機の移動速度と等速で移動します(=前方向に発射した弾の半分の速度で移動する)。
自機がやられた場合,しばらくすればまた左上隅から登場しますが,早く登場させたい場合には[Y3]か[Y1]を押します。
[Start] でゲームを終了します。
このようなキー操作なので,左手では弾発射,右手では進行方向の制御を行う感じになります。
ちなみにオリジナルの PC-8001 版では,[F.1][F.2][F.3][F.4][F.5] で前方向への弾,[SPACE] で後方への弾,テンキーの[4][6]で進行方向の制御を行います。左手は,キーボード全体をガバッと押さえる感じにならざるを得ず,独特の体勢が必要でした。
PC-8001 版と同じコツがあります。
何といっても撃ちながら照準を合わせることです。キーを押しっぱなしにすると,弾が連射されますのでこれを利用して少しづつ敵を狙ってみてください(主に後方弾を使うのがおすすめです)。ただし,ずっと続けているとしばらく弾がでなくなってしまいますのでほどほどに。
PC-8001 で使えたテクニックが,WonderSwan 版でも使えるようになっています。
月刊 ASCII 1983年 9月号の TBN に掲載され,存在が明らかになった「FEDORA-2モード(通常とはキー操作方法が違うモード)」を備えています。
実機では,スタートアドレスを &HE000 ではなく,&HDC00
にして,しかも,このときリターンキーを押していない状態だと,FEDORA-2
にするかどうかを聞かれました。(具体的にはmon[RETURN]GDC00[CTRL]-[M]
と入力することになります。)
FEDORA-2 にした後,いつも通り &HE000 からスタートして,[カナ]
キーをロックすると FEDORA-2 モードになりました。
WonderSwan 版では,タイトル画面表示時に [Y1] キーを押すと,キー操作表示が変わり FEDORA-2 モードになります。この状態でゲームを始めると,[X1]〜[X4]で前後左右に移動し,[A][B] で前方,後方に弾を撃つことができるようになります。
個人的には,FEDORA-2 モードより,普通の状態のキー操作のほうが好きですが,どうしても遊び辛いという人は使ってみるとよいかも知れません。
私は FEDORA を他機種に移植するための前提条件として,以下が必要だと思っています。
1) 独特の操作性を再現する。
2) 独特の音を再現する。
3) 独特のタイミングを再現する。
1) のためには,左に6個以上の独立したボタン,右側に2個のボタンが必要です。WonderSwan は,左に8個,右に2個の独立押下可能なボタンを持っているため条件を満たします。
2) のためには,1200Hz の方形波を再生する機能が必要です。WonderSwan は登録した波形を再生する機能があり,かつ,その波形を 1200Hz で再生できるため,条件を満たします。
3) のためには,実機(PC-8001)と比較して,速度的に余裕をもった CPU や,高速な画面処理が可能なハードウェアが必要です。WonderSwan は,NEC の V30MZ(80186 相当) を 3.072MHz で駆動しており,さらに,ほとんど1マシン語命令が1クロックで動作します。画面処理機能としては「スプライト」をもっているので画面描画処理にかかる時間が実機より少なくて済みます。元々 FEDORA は,Z80 の IX レジスタや IY レジスタを多用しており,1マシン語命令にかかる平均時間が長くなっていますので,CPU クロックでは実機より劣る WonderSwan ですが,十分に条件を満たしています。
ということで,WonderSwan に移植することにしたわけですが,まず,FEDORA の解析(Z80の逆アセンブルリストから処理内容を解析)から行ったのですごく時間がかかりました。最初の一年はほとんど解析だけで終わったように思います。それから,変更が必要な部分(PC-8001 の VRAM を意識した当たり判定の部分等) を同等の別処理に変えたりして,少しづつ移植を進めていきました。
最後のほうは,PC-8001 を起動して,テープからプログラムをロードする様子を再現したり,動作のタイミングを調整したりと,細部にこだわる作業が続きました。
一通りできたところで,原作者の安岡さんに動作しているところを記録した動画ファイルでチェックしていただき,公開の許可をいただきました(どうもありがとうございました)。そして,今,ようやく皆様にお披露目することができるようになった次第です。
ゲーム中の音は,FEDORA
の特徴のひとつでもあるので,再現に苦労しています。
PC-8001
版で,ゲーム中の効果音を出す部分は,以下のようになっています。
; ; ; PC-8001 μPD780C-1 3993600 Hz = 1クロック 0.0000002504 s ; ;0DEC9H LD A, 020H ;0DECBH OUT (040H), A ; BEEP ON ;0DECDH LD DE, 32 ; 10 ステート ;0DED0H CALL __WAIT ; 17 ステート + WAIT ; ; 10 + 17 + (26 x 32 + 31) = 890 ; ; 890 x 0.0000002504 = 0.0002228560[s] ;0DED3H OUT (040H), A ; BEEP OFFなので,WonderSwan 上では,BEEP 音(1200Hz の方形波) を出力してから
; ; WonderSwan V30MZ 3072000 Hz = 1クロック 0.0000003255 s ; ; 0.0002228560 / 0.0000003255 = 684.7 クロック
だけ WAIT して,独特の音を再現しています。
PC-8001 の場合は画面表示のための DMA 処理が定期的に行われるため,定期的にCPUが停止してしまい,上記の計算値より10%ほど遅くなっているはずですが,Swan 上で聞く限り,(圧電スピーカの特性のせいか?)かなりそれらしい音が出ていますので「よし」としました。
また,起動時のデモで,テープロードする様子を再現していますが,こちらでも「それらしい音」を出すところにこだわっています。特に,ロード終了直後の「ぴゅーぃっ」という部分まで再現することに執念を燃やしています。プログラムをテープにSAVEする際,SAVE終了時に(リモート端子からの停止信号により)テープデッキが微妙にゆっくり止まります。このとき,SAVEのキャリア音(600Hz)は一定なのですが,テープ送り速度がゆっくりになっていくため,いわゆる「早口」のような高い音で記録されることになります。これを再現してみました(←やりすぎ(笑))。
はっきりいって,Swan の機能をフルに使えば,どんなに弾や敵が多くても一定の速度でゲームが進行するようにすることは可能です。
しかし,PC-8001 版の微妙な難易度は,「弾や敵が多くなると適度に処理落ちして遅くなる」によって実現されていると思っています。そこで,WonderSwan 版では「もっともらしい処理落ち」を再現しています。
PC-8001 では,処理速度について以下のような特徴があります。
さすがに,実機の処理時間を机上で計算するのはつらかったので「それらしい」動作をするように調整しています。
このように適度にスローダウンする処理を入れることにより,PC-8001 版にあった「大量の弾や敵をドット単位で避ける気持ちよさ」が再現できていると思います。
ゲーム中,または,タイトル画面表示中に
[Start]
キーを押すと
PC-8001
で
[STOP]+RESET
(PC-8001
にはメモリの内容を保持したままマシンをリセットする機能がありました)
したかのような画面になります。
この画面で,[Y1]
ボタンを押すと,画面に
SUSPEND
と表示してサスペンドします。
再開は,Meg
のメニューリスト([B]
ボタンで左側に表示される)から
FEDORA
を選べば
OK
です。
サスペンドした時の画面が表示され,その後,PC-8001
でマシン後プログラムを実行するようなデモが表示された後,再度ゲームタイトル画面に戻ります。このとき,PC-8001
ではハイスコアがクリアされるのですが,WonderSwan
版ではあえてクリアしないようにしています。
タイトル画面表示中に [Y2] または [Y4] を押すと,液晶のインジケータセグメントの●が3段階に大きくなっていきます(無表示と合わせて全4段階)。インジケータのサイズが大きいほど,強調表示されるモードになります。
Swan Crystal ではどのモードでも比較的見やすいのですが,WonderSwan Color や,モノクロ WonderSwan の場合には,モードを変えてみて見やすいものを選ぶとよいでしょう。
BMPSaver IL が存在する状態で動かしている場合,タイトル画面表示中,または,ゲーム中に,[Y1] を押しながら [Start] を押すと,通信ケーブルを介して XMODEM で画面キャプチャデータを送信します。
拙作の BMP receiver 等で受信してください。
WonderSwan Color や,Swan Crystal 上で,Resume IL を導入し,かつ,シェルとして GED を使っていると,サスペンドやレジュームがうまく動作しない場合があるようです。これは,WonderSwan Color や,Resume IL が出る以前に作られた GED の制限と思われます(やむを得ない...)。
更新日 | バージョン | バイナリファイル | ソースファイル |
2003/08/17 | 1.00 | fedora100.zip | fedora100_src.zip |
Last update: 2004/01/13 02:46