「易双六 PTC」開発記
2013年正月明けに 3DS と共にプチコンをダウンロード購入。最初から作るものは決めていた。可能ならば、自作の(Web版の)『易双六』を移殖したい…。
しかし、その前には数々の困難が待ち受けるのであった。
■ |
接触篇
|
『プチコン』には興味があった。でも、私が持ってる ニンテンドーDS は私の親が『脳トレ』用に買った DS Lite。DSi ウェアのプチコンはできない。
私には甥達がいて彼らは DSi LL を持っている。彼らが持ってる DSi で私の作ったゲームが動かせるというのは、そろそろモノゴトをわかりはじめた彼らに、「ニート」で引け目を感じている私にとって魅力的だった。
が、彼らの DSi はペアレンタル・ロックで、ネットにつなげないため、ダウンロードで何かを購入することもできない。それじゃあ、意味がないよ。
3DS が発売されたが、「目に悪い」かもしれないという理由で彼らは買ってもらえないらしい。でも、3DS LL が発売されて、彼らの親も根負けしたのか、 3DS を彼らは所有することになった。
また、ペアレンタルロックだよなぁ。…と期待せずに、2013年正月、やってきた彼らの 3DS を触ると、買ってもらったばかりだからか、一つの 3DS (LL) にはロックがかかっていない!
しめた!
早速、プチコンをインストールしてあげて、そのあと、プチコンのプログラムの詳細を見る。…こ・れ・は、彼らには早いかな…とは思うが、私も小学校高学年のころにはポケコンを触ってたように覚えているし…まぁ、とにかく、私はプログラミングできるだろう…と、私も 3DS LL の購入を決めた。
一つ入れられて、私にもできそうとわかったので、甥達の親(私の兄)を説得して、もう一人の 3DS にもプチコンを入れてもらえた。
私が買うのは、安くなった中古の DSi LL でも良かったが、彼らがすでに 3DS になっていたので、プチコンのバージョンアップ等で置いてかれるようなことがないように 3DS にしたのだった。
■ |
発動篇
|
買った 3DS LL が届く前に、ニンテンドーポイントカードを買っておいて、届いたらすぐにネット設定をして、プチコンmkII を速攻でダウンロード購入。
いろいろ試す。「こやつ、動くぞ。」でも、制限も多いことに気付いていく。
ググって過去の記事を読むと、プチコンは mkII になって、QRコードでソースの受け取りができるようになり、一気に PC での開発環境が整った感がある。その分、PC が使えない「お子様」を置いてけぼりにする「オッサンホイホイ」的要素が高まったとも言えなくないが、私のような意図を持っている者にはありがたい新仕様だ。もっとも、そこまでできて SD カードや無線でファイルをやりとりできない謎仕様でもあるのだが。
最初に PC だけでできることとしてタロットの絵を小さくすることに取り組んだ。タロットカードは小アルカナを含めればかなりの枚数になる。画面が小さいから絵が小さくていいといっても、枚数があるから、データはそれなりの大きさになる。GRP 面は 256 色だが、カードを引いたときにはスプライトで移動させたいから、カード一枚は 16 色でなければならない…と、まぁ、そういった制限を満たすよう Image::Magick という Perl モジュールを使いながら、色数を少なく、絵自体は小さくできた。
プチコンに渡すデータ形式だが、「パッケージ」という機能があるらしいが、枚数が多いんで 4枚の GRP に収まりはしない。プチコンで、何が早いかもわかってなかったが、今さら文字列処理にそんな時間もかかるまいという「幻想」を持って、絵はとにかく RESTORE & DATA 文で読み出してGPSET していけばよかろうと、PRG にした。(それが jrftarot.prg として『易双六 PTC』のアーカイブについてくるものである。)
スタックライブラリみたいなのは、3DS LL が届く前にワクワクしながら仕様は決めていて、届いたその日には完成していたが、絵のような少し大きいデータを扱うと、文字列の 256 バイト制限に引っかりはじめたりして、めげたりながらも、何とか方法を見つけ、プチコン内で、好きな位置にカードを表示できるところまで来た。
このころになると、この程度の文字列処理がとても遅いことに気付いている。 GPSET などのあまり使わないグラフィック部分が遅いというのはよくある話で、 GPUTCHR を使って描けるよう、16色のカードを 256色の並びに色分解するといった処理も試したが、GPSET を使ったほうがよほど速い。ここで文字列(配列)処理といった部分にも現代ではビックリするぐらいウェイトがかかっていることに気づく。(内部で、8bit …はないにしろ 16bit 機でもエミュレートしてるのか?ってぐらい。)
BG や SPRITE をうまく使うしかない。ただ、ここで今度は逆の誤算をする。 SPRITE は SPU0 から SPU7 の 8 面あるのだが、そこでの「キャラクタ」は64 個しか登録できない…だから、SPU0 面は 8x8 の「キャラクタ」を 8x8 しか登録できないと考え、SPRITE に、ゲーム盤に置いておくカードを描くことはできないな…と考えたのだった。
違った。CHRSET "SP" で登録するのは確かに 8x8 のキャラクタだが、SPRITEのキャラクタは 16x16 ごとで数えるため、8x8 のキャラクタなら、一面に16x16 個描けるのだ。(その替わり、CHRSET "SP", N, A$ としたら、SPSET L, N / 4.. と、面に書くときの番号を 4 で割ったのが読み出すときの番号という不便仕様になっているのだが。)
これがわかるまで、BG 面と SPRITE 面を使いわけながら描画するという複雑なプログラムを書いていた。
■ |
激動篇
|
この点の誤解が解けてやっと見通しがたったころ、一つのプログラムは9999行まででなければならないという制限に悩むことになる。
今回のプログラムは、動くことも大事だが、甥達のマシンで動く、そんなことはないかもしれないが、ヒョイとその気になったら、読めるようにもしておきたい。だから無理な圧縮はしたくない。
しかたなく、まずグラフィック描画部分を分けた。でも、怪我の功名か、このおかげで初期化部分がものすごく軽くなった。あれ?これ、ロードがムチャクチャ早い?
昔のフロッピー時代の感覚からか、ロードやセーブはとても時間がかかるだろうという認識があった。それが、下手にスプライト書き換えとかしたりするより、どうもロード一発のほうが早そうだ。
グラフィック部分をいちいちロードしなおすという処理でも、十分カードが早く描ける。これにスプライトを組み合わせれば、まぁまぁの速度では動くようだ。
さらに HELP (マニュアル)部分を分ける。今度は、外部プログラムを使うEXEC を使う。今度はベラボウに遅い。HELP がちょっとではとてもじゃないが釣り合わないということで、HELP を変に充実させてしまった。HELP だけなら行数の制限も気にしなくていい。
分割に悩みつつ、QRコード生成コマンドに、文法チェッカを付けたのもコーディングスピードの上昇にかなり役立ったと思う。
そして、配布物の準備がほぼ整い、今、この記事を書いている。
■ |
飛翔篇(仮)
|
…といったところで、今回の記事はおしまい。公開後に何かあれば続きを書くかも。
■ |
配布物
|
■ |
関連
|
初公開: | 2013年02月21日 04:29:47 |
最新版: | 2013年04月22日 16:54:32 |
2013-02-21 04:29:42 (JST) in JRF 作成ソフトウェア プチコン | 固定リンク | コメント (9) | トラックバック (1)
トラックバック
他サイトなどからこの記事に自薦された関連記事(トラックバック)の一覧です。
» JRF のソフトウェア Tips:「易双六 PTC」開発記 (この記事)
» STACKLIB: プチコンmkII用スタックライブラリ from JRF のソフトウェア Tips
プチコン(mkII)の SMILE BASIC には、いわゆる関数定義の方法はないが、 GOSUB & RETURN はある。GOSUB は、変数に入ったラベル名でも OK な優れものだが、引数を取れないので、引数や戻り値をどうやって返すかは、(自分で) 決めておく必要がある。 普通には、A1=A:A2=B:GOSUB @F1:PRINT R といった感じで、 A1,A2,A3... に引数を入れ... 続きを読む
受信: 2013-02-21 04:45:02 (JST)
コメント
投稿: JRF | 2013-02-21 04:57:34 (JST)
固式の判定ミス他、細かいバグ修正と stacklib_ptc がらみの記事を書いてて気付いた部分の改変。
投稿: JRF | 2013-02-23 09:36:43 (JST)
youscout_ptc-20130223.zip。
投稿: JRF | 2013-02-23 13:54:11 (JST)
アニメーション時の位置決めや内部ルーチンの改良。あと特に「テスト ノ メイキュウ」にヒドいバグ(ワープしちゃうところ)があって、その修正のため、更新を急いだ。本当は、3月1日ぐらいに更新しようと思ってたんだけど…、更新がたてつづけになって申し訳ない。
あと、上述の 1M バイト制限、今回から引っかかった。zip は 1048972 バイトでギリギリ、アウト。ただ、圧縮方式に bzip2 が使える最近の zip だと、1046940 バイトでギリギリ置ける。今回のみ、その方式の zip を作った。そのリンクが↓。
youscout_ptc-20130225.bz2.zip。
投稿: JRF | 2013-02-25 14:41:13 (JST)
前の 0.03 は急いだのが悪かったようで、バグがかなり残っていた。それを修正した。
MOVE or STAY を尋ねるときに、START ボタンでタイトルに戻ろうとするとハングってたのを修正。そのために、G_PAGE, SP_PAGE, BG_PAGE というグローバル変数にいちいち今どのページかを保存するようにした。
トークンの拡大アニメーションを足した。
仕様レベルの大きな変更として、「大アルカナの影響」を 1.5 倍などにすると出る端数を切り上げる処理を足した。
あと、1M 制限に対応するため、思い切って、QRコードの「バージョン」を上げて、一枚の情報量を増やして枚数を減らした。ただ、一辺が 565 px あるので、800x600 のディスプレイだと苦しく 1024x768 だと、コードだけなら表示できるといったところか、これ以上大きくすべきでないだろう(といっても今「バージョン」22 で、最大 24 だからもう難しいのだけど。)。(bzip2じゃない)普通の deflate な zip で、1025231 バイトにできた。それも下にリンクを貼っておく。
youscout_ptc-20130301.zip。
投稿: JRF | 2013-03-01 01:54:41 (JST)
投稿: JRF | 2013-03-01 18:59:58 (JST)
細かな改良のみ。HLP_VIEW に \P を追加。また、上卦のソードと下卦のコインのスペースのカード表示位置を中央に寄せた。
今回の zip 版は 1030675 バイト。
youscout_ptc-20130305.zip。
大きなバグ等がなければ、次の更新は、3月14日以降、できれば甥達の春休み後にしたい。もちろん、バグ等が見つからずにここで更新終りになれば幸いだが、目の前で他者にやってもらう機会があると、必ずといっていいほどバグか改善案が出るものなので…。
投稿: JRF | 2013-03-05 20:09:28 (JST)
YSCHELP のバグ修正と細かな改良。甥には「テスト ノ メイキュウ」だけやってもらうことができたので、そこに関して改良。
今回の zip 版は 1034305 バイト。
youscout_ptc-20130413.zip。
投稿: JRF | 2013-04-13 16:07:55 (JST)
上の記事のキー打ちミス修正。
投稿: JRF | 2013-04-22 16:57:42 (JST)