Sunday, June 3, 2012

プチコンにBUBBLE BALLを移植

MSXFANに載ってたBUBBLE BALLというゲームを移植してみました。

十字ボタンで自機を操作し、はねまわるバブルをひたすら避けるゲームです。バブルはだんだん増えていきます。リプレイはABXYボタン。31万点でエンディング。



最後までたどり着ける人がいるのでしょうか。がんばっても7〜8万点しかいきませんでした。

QRコード:BUBBLE BALL
背景は6重スクロール。MSXと同じように、プチコンのBGF0をでキャラクタ書き換えをしてみました。
オリジナルはマシン語バリバリでしたが、プチコンの性能でカバー。
音がやや違う気もしますが、音方面にはうといので。。
スプライト衝突の練習になりました。

(分かる人向け)オリジナルはたしかファンダムライブラリー5にあったとおもいます。

Wednesday, May 23, 2012

プチコンでナイトレース

プチコンへその昔MSX・FANに掲載されていたNIGHT RACEを移植してみました。

赤い自機を左右キーで操作し、ひたすら青い道を進んでいきます。道をはずれるとゲームオーバー。リプレイはAかBかXかY。

見た目は地味ながらオリジナルはマシン語が使われており、画面のダイナミックなスクロールに使われています。プチコンではBGOFSでできてしまいます。
リストが短いけどわりと面白かったので移植。


【ニコニコ動画】【プチコン】NIGHT RACE

QRコード
NRACE

プチコン無印(Ver.1.2)のときに作ったものですが、いまさらながら公開。ニコニコとか見ていると大作やらすごいのが続々出ているので気が引けますが。

Thursday, April 12, 2012

プチコンmkIIでスプライトを3Dっぽく動かしてみる


なんとなくできるかなとおもって、スプライトを3Dっぽく動かしてみることにしました。某ハードの某ゲームの某おまけモードに影響を受けています。




3Dっぽく見えるためには、手前のものが手前に見えなくてはなりません(あたりまえですが)

プチコンのスプライトは優先順位を0〜3で設定できますが、今回の用途では足りませんでした。スプライトが管理番号が若いほど手前になることを利用し、奥から手前に向けて座標でソートをかけ、手前からスプライト管理番号を割り当て直しています。ここでRSORT命令の威力が炸裂しています。

3D表現には、日経ソフトウェア2011.7月号の「ニンテンドーDSiのBASIC「プチコン」で3次元コンピュータグラフィックスに挑戦!」の記事がとても参考になりました。

玉が7×7個なのは、内容が三角関数の嵐のため、それ以上だとスピードが苦しくなるからです。それでもそれなりに動いてくれるプチコンmkIIはすごいですね。

(追記)
QRコード

操作はSELECTキー以外すべて使います。
分かりにくい所で、Xが"II"を飛び出させて、Yで引っ込めます。たまに変な動作になりますが。

※実は1つだけ玉の表示の優先順があってないです。このおかげでQR公開してませんでしたが、要望があったのでまあいいかとアップしました。

Friday, April 6, 2012

プチコンでLOTLOTLOT

プチコンにLOTLOTLOT(YUKI♥氏作)を移植してみました。
青と赤の手を動かして、部屋の中身を入れ替えて、動き回る水色の玉が「OVER」ではなくより高い点数の所へ落ちるようにするゲームです。リプレイはSTARTボタン。
画面上の玉がうろちょろする様をみるのが楽しいです。


QRコード
1/4

2/4

3/4

4/4


プチコンVer1.2のときに作りましたが、あまり速くなく6FPS程度でした。mkIIだと10FPS程度です。それなりに動くようにがんばってみましたが、今のところはこの程度です。
オリジナルのMSX版は目測で20FPS以上なので、Z80+VDPは速い。
もうちょい速ければタッチペンで遊べるように改造してみたかったのですが。

LOTLOTLOTを紹介しているページがいくつかありました。
TPM.CO SOFT
石とMSX

ファミコン、アーケードにも移植されていました。
ロットロット(wikipedia)

Sunday, March 18, 2012

プチコンでいろんな円を描いてみる

とあるMSXのプログラムに、小さい円〜大きい円をグラフィック画面に描き、それをスプライトに定義するものがありました。

移植しようとしてプチコンでGCIRCLEしてみると、MSXとは見た目と異なる円ができ、半径=0のときは何も描かれません。

半径0はまあよいとして、見た目が大幅に違うのはいまいち。興味もあり、自前で円を描いてみることにしました。

調べてみると、アルゴリズムが何個も。 今回確認したのは以下:
  1. プチコンのGCIRCLE
  2. 微分/SOFTIST:円、楕円の描画(アルゴリズム) (一番遅い)
  3. 三角関数(すべての角度について、x=x0+r*cos(a)、y=y0+r*sin(a))三角関数
  4. ブレゼンハム(Bresenham)の円描画/伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham
  5. ミッチェナー(Michener)の円描画/Comparing Circle Drawing Algorithms
  6. ピタゴラスの定理(x^2+y^2=r^2)/Comparing Circle Drawing Algorithms
  7. ブレゼンハム 中点分岐を用いた円描画アルゴリズム/伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham
  8. ピタゴラスの定理(値のより近いピクセルを選択する方式)/Comparing Circle Drawing Algorithms
  9. 直径の長さが正しくなる円描画/伝説のお茶の間 No007-10 円描画(2)
プチコンで実装してみた図。
横は左から半径0〜9。縦はアルゴリズム

MSXで円を描いてみる。
MSXのプログラム
MSXでの実行結果(FS-A1WX)

これだけやって、MSXとぴったりなのはなし。どうも8.(ビタゴラ2)が近いようなのでこれを採用。半径0は補正すればそっくりになるかも?
(プチコンのGCIRCLEとおなじものもなし。。3.(SIN/COS)の四捨五入版が近いかも)

どうしても自前で円を描画したい、という人はそういないとおもいますが、記録のためQRコード。



Saturday, March 17, 2012

プチコンでラスタースクロール

sin関数を利用して画像を変形させる擬似ラスタースクロールです。
プチコンmkIIのお勉強のために、強化されたグラフィック機能で遊んでみました。
mkIIは速い。画像は使い回し。

画像だけにしようかとおもいましたが、実際に動いている方が分かりやすいですね。
RASTER 1/1枚

こんなことが簡単にできるようになるなんて、隔世の感があります。

画面をはみ出すようなラスタースクロールを見てると、Xak-ガゼルの塔-のオープニングを思い出します。。ちょっとしたいい年ですね。

「MSX」はMSXライセンシングコーポレーションの登録商標です。

プチコンmkIIのgcopyバグ?

gcopyで遊んでいると、思い通りにいかない場合があった。 
転送先のx座標が0のときにgcopyがうまくいかないっぽい。
以下、検証用のリスト。
---
GCOLOR 15
GPAGE 0,1,1:GCLS 0
GLINE 0,0,255,192
GPAGE 0,0,0:GCLS 0
GCOPY 1,0,0,255,192,0,0,FALSE
---
QRコードに変換する気力はなかった。。

 裏画面(PAGE1)に描いた斜め線が表画面(PAGE0)にコピーされてほしいのに、コピーされない。 転送先のx座標を1にすると、コピーされる。 ???

いろいろやってみると、どうも転送元のx,y座標と転送先のx,y座標が一致しているとだめらしい。上記リストで
  • GCOPY 1,1,0,255,192,0,0,FALSE
  • GCOPY 1,0,1,255,192,0,0,FALSE
  • GCOPY 1,1,1,255,192,0,0,FALSE

はいずれもコピーされる。

(追記)
なんでそうなるか想像してみた。
同じページ間で転送元座標=転送先座標の場合は、転送してもしなくても結果は同じ(むしろ重なっていると何かおこるかも??)なので転送を省略してるような気がする。このとき、異なるページ間の転送かどうかの考慮が入っていない。。。のかもしれない。