Tuesday, April 30, 2013

プチコンで香港

昔MSX・FANという雑誌に掲載されていた「香港」というゲームをタッチペンで遊ぶのにピッタリだと思ったので、プチコンへ移植してみました。さくさく遊べていい感じです。




操作は、上下左右でカーソル移動、Aで牌を取り、XでUNDO、開始/リプレイはANY KEY。ゲーム中はSTARTボタンでゲーム画面を上画面、下画面に移動できます。上画面のときは、ボタンのみで操作できます。
下画面のときは、タッチペンで操作できます。開始/リプレイは画面どこでもOK。牌を取るときは、タッチで選んで、タッチで取ります。このときタッチで選んでからそのまま(0.2秒以上)タッチし続けると、牌を取るので楽です。

ルールは、1牌目(TAKE OFF! が緑の牌)はどの牌でも可。その後、取った牌から一定の順番に牌を取っていきます。順番は東->南->西->北->白->發->中です。牌がすべてなくなればクリアとなり、エンディングデモがあります。牌の下に2つ空白があると、牌が落下するのでゲームオーバーとなります。



元のMSX版のリストからDATA文を打ちこんで使っていたり、円もGCIRCLEだと雰囲気が違うので自前で描画したりしているので、冗長です。もっと短く、速くできます。
ですが、上下画面で同じスプライト・グラフィック・パレットを利用し、パレットもSPRとGRPで同期したりする手法が遅まきながら分かってきました。

COLOR SPRITESや5ビットパレットをプチコンで利用する(べたべたな)技術も投入し、いろいろ勉強になりました。

なおMSX版香港では斬新な手法で牌の管理をしています。そのあたりも忠実に再現しています。

MSXはSCREEN5(256 x 212)で作られていたので、プチコンのGRP(256 x 192)に収めるために牌の大きさとかあちこち微調整してます。

Saturday, February 2, 2013

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

twitter界隈でラスタースクロールがはやっていたので、乗り遅れでしまいましたがつくってみました。
前に横方向の(疑似)ラスタースクロールを作ってたのですが、今度は横+縦です。もはやラスター関係ないですが、疑似ラスタースクロールということで。

中途半端に何かを意識している画面。。


 ○ッジ○ーサーには似てないし、○ari○Kart64とも違うし、その上遅いし、やっつけ感にあふれています。

こんなのとは違い、プチコン界の方々が作ったものが素晴らしすぎます。
togetter - プチコンでラスタースクロール

QRコード:

Monday, December 24, 2012

プチコンでTiny BASIC

プチコン版Tiny BASICを作ってみました。

Tiny BASICとはその昔作られた、OSがほぼ無いようなPCでRAM容量数KBで動くBASIC処理系です。英語版のwikipediaが詳しいです。

プチコン版を作るにあたり、各種Tiny BASIC(※1)がある中で、Palo Alto版を元にインタプリタ型とし、最も命令が少なそうなものを参考にしました。

プチコン版Tiny BASICの勇姿




処理速度。。。?プログラムによりますが、ループと計算を多く繰り返すようなプログラムでは、プチコン上で実行する速度に比べ、100倍以上遅いです。
動画の後半にある素数を求めるプログラムで、プチコン版だとは25個でTIME=12。Tiny版では7800くらい。(TIME:MAINCNTLのカウント値)




Tiny BASIC for Petitcom 起動後の画面。
現在はバージョン1.0alphaです。
Tiny BASIC on SMILE BASIC !


プチコン版Tiny BASICの仕様
  • プログラムは99行まで
  • プログラムは先頭に行番号が必要
  • 変数はA〜Zの26個(数値用、文字列変数はない)
  • コンソールで命令の直接実行も可能
  • プロムラム実行中、Xボタンで中断可能

命令一覧
HELPコマンドの実行結果です。使える命令が分かるようになっています。
プチコン版TinyBASICのHELP

補足説明
  • GOTO命令の飛び先には、変数を指定できます。
  • LINENOシステム関数は実行中の行番号を返します。GOTOと組み合わせると、なんちゃってGOSUB〜RETURNが実現できます。
  • LIST命令でPAUSEパラメータが指定されると、LIST表示は1画面毎に停止し、キー入力(EnterかAボタン)を待ちます。
  • SAVE、LOAD命令はパラメータに数値を指定します。プチコンの"GRP:TBn"(nは指定した数値)というファイルで保存されます。
  • MEM命令は、プログラム可能な行数の残りを表示します。

オリジナルにあって、プチコン版にない機能
  • コントロールキャラクタの表示 (^Lだとか^Gだとか)
  • GOSUB〜RETURN
  • 配列変数@
  • 数値、変数の2バイト整数演算(演算はプチコンの数値変数による演算そのままなので)
  • ほかにもいろいろあるかも

その他
プログラムの入力は、プチコンのLINPUT命令を利用しています。簡易な実装にはもってこいの命令で、ほぼオリジナルと同じような機能となるようです。しかし32桁しか入力できない、カーソル移動が無いためLIST結果の編集ができないなど、BASIC入力環境としての使い勝手はいまいちです。というわけで現在はbeta版作成中。

beta版以降の夢:
  1. LINPUTよりましなスクリーンエディタ
  2. GOSUB〜RETURN
  3. 配列変数 @
  4. FOR〜NEXT
  5. ほか



作った後に思いましたが、プチコンのSMILE BASICでTINY BASICを動かすのは
  • 車輪の再々...々発明
  • まさに屋上屋
  • いまどき行番号?
などいろんな意味で時代に逆行している感がありますが、それでも作って動くと楽しいのです。



TinyBASIC(alpha) for Petitcom




Saturday, December 8, 2012

プチコンでWIDTH80

プチコンでWIDTH80を実現します。1行に80文字を表示します。
そもそも256ピクセルしか無いところにムリヤリそれっぽく見えるようにしているだけで、その上特定の機種に依存しているため、あまり使えません。



 一部を虫眼鏡で拡大したところ


DSiの画面。虫眼鏡を通したため周辺が歪んでいます
なおこのプログラムはDSiのサブピクセルの仕様を利用(悪用)しているため、DSiでしか意図通りに表示されません。3DSでは、おかしな表示になり文字に見えなくなります。理由は、下の図のとおり、1ピクセル内のサブピクセルの並びがDSiと異なるためです。

DSiのサブピクセルの並び

B
 

G
 

R
 

3DSのサブピクセルの並び
   B   
   G   
   R   

3DSでは3D表示のため、左右方向のサブピクセルにはできなかったのかも知れません。
虫眼鏡でデバッグしていて、3DSで表示できなくて切ない気分を味わいました。

QRコードです。
SUBPXL2
WIDTHを1〜128まで変えられます。WIDTHに応じて、表示する方法を変えています。
WIDTH32までは通常、WIDTH40までは6x8っぽく、それ以上はsubpixel表示です。

サブピクセル関係は、機種依存が判明したため、ここでおわり。

Sunday, December 2, 2012

プチコンでサブピクセルレンダリング?

プチコンでサブピクセルレンダリングと題しましたが、たいしたことはなく、サブピクセルを利用して小さな文字を表示してみるテストです。

DSiの上画面

サブピクセレンダリングとは、おおざっぱにいうと、1ピクセルを構成するRGBをそれぞれ1ピクセルに見立てて、画面を描画することです。

サブピクセルレンダリングの利用例として、MacOS8.5とかClearTypeだとかで、液晶ディスプレイ上でのみ文字がキレイにみえるようにする、特殊なアンチエイリアシングのような技術があります。今でもMacOSXなど各種OSでの表示やテレビなどにも利用されているようです。

次は拡大画面。
文字部分の拡大
"ABCabc123%"という文字が上に横方向に縮小されて表示されます。フォントは、その下に表示されているプチコンのフォントをそのまま使っています。
変な色ですが、なんとか文字が読めるのではないでしょうか。

DSiの液晶は(少なくとも家にあるDSiは)、液晶の1ピクセルにサブピクセルが3つB,G,Rの順番に並んでいます。2つ目の画像を拡大すると見えるかもしれません。(蛇足ながら、B,G,RはBlue,Green,Redの略です)

プログラムでは、プチコンのフォントを読み取り、フォント定義の各ピクセルについて、1サブピクセルを使う様にパレットを定義し、GPSETしています。

例えば、"A"のフォントの1列目は"000F0000"なので、大文字を点灯、小文字を消灯とすると"bgrBgrbgr"となります。"bgr〜"が9個あるのは1ピクセルが3サブピクセル(BGR)で構成されており、8ピクセルの表現に3ピクセル=9サブピクセル必要なためです。

ただ今のプログラムでは制約がきつく、1ピクセルに1パレット割り当てるため、10文字を表現するのが上限です。(1文字あたり3列*8行=24ピクセル必要なので、FLOOR(256/24)=10(文字))

表示を割り切れば、所詮BGR3ビットの組み合わせなので、8パレットを使うと好きなだけ表示が可能になると思います。計算では FLOOR(256/3)=85 となるので、プチコン画面でMSXのSCREEN0,6,7が(変な色で)再現できるかもしれません。

自分のプチコンで見てみたいという物好きな人がいるかもしれませんので、QRコードです。

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)のときに作ったものですが、いまさらながら公開。ニコニコとか見ていると大作やらすごいのが続々出ているので気が引けますが。