バグ情報
大変申し訳ありません。現在プチコンmkII(SmileBASIC Ver.2.3)において、下記の誤作動が確認されています。
確認された問題は次回更新版の配信にて修正予定です。
また、誤解しやすい動作についても併記しておりますのであわせてご覧ください。
ご迷惑をおかけして申し訳ありません。
2013.02.01確認
SmileBASIC Ver.2.3電子説明書の誤表記
- 32 文字検索置換関数 > INSTR
- ×「変数=INSTR ( 文字列, 検索文字列 [, 開始位置 ] )」
○「変数=INSTR ( [開始位置, ] 文字列, 検索文字列 )」 - 11 BASIC基本仕様 > エラー番号表
- 表に次の項目が表示されませんでした。
「21:FOR without NEXT……NEXTに対応しないFORがあります。」
「22:Illegal MML……MMLに間違いがあります。」
SmileBASIC Ver.2.3の誤動作
- -0(マイナス0)の発生
FLOOR
関数のパラメーターに-524287より小さい数を指定すると、結果が-0
となり、これに対する演算に問題が起こる場合があります。
修正済情報
2012年9月12日配信のDSiウェア『プチコンmkII』不具合修正版(Ver.2.3)により、下記の誤作動が修正されます。ご迷惑をおかけして申し訳ありません。
- 新規に2012年9月13日以降に『プチコンmkII』を購入されたお客様は、最新版がダウンロードされるので、下記の問題は発生しません。
- ニンテンドーDSi / DSi LLをお持ちのユーザー様は、DSiメニューから[ニンテンドーDSiショップ→ショッピングへ→設定メニュー→購入済みソフト→プチコンmkII]の順で更新ができます。料金は発生しません。
- ニンテンドー3DS / 3DS LLをお持ちのユーザー様は、HOMEメニューから[ニンテンドーeショップ→設定・その他→購入済みソフト→プチコンmkII]の順で更新ができます。料金は発生しません。
バージョンは『プチコンmkII』のホームメニュー「プログラムを作る」起動直後の画面で確認できます。
Ver.2.3において修正 (2012.9.12)
電子説明書の改訂
- 2 はじめに > 操作方法
- Rボタンの説明をLボタンと同内容に
- 10 サウンド関係の表 > TALKコマンド > @E 数値
- E9以降の説明を再度追加
- 30 数学三角関数 > ATAN()
- 引数が2個の型と1個の型について説明を分離
- 32 文字検索置換関数 > INSTR
- ×「変数=INSTR( 文字列, 検索文字列 )」
○「変数=INSTR ( 文字列, 検索文字列 [, 開始位置 ] )」
追加「引数:開始位置:0〜文字単位の開始位置」
修正されたSmileBASICの誤動作
- 文字列の比較およびSORT命令の動作に問題
- 文字列の比較(
CHR$
同士の比較など)およびSORT
/RSORT
の結果において、両者の動作の不統一、直感的でない結果が発生します。これらは修正によって辞書順の比較に統一されます。 - COLSET命令で不正な色情報文字列を指定した場合にフリーズ
COLSET
で指定する色情報文字列に、書式より極端に長い文字列を指定した場合に、フリーズが起こる危険性があります。- Aボタンによる命令入力候補の誤動作
- 命令入力支援機能で、本体Aボタンによる改行の直後に正しい変換候補が表示されない、または変換候補が消える場合があります。
- 電子説明書の起動によってコピー範囲の記憶がリセットされる
- 編集モードでプログラムリストのコピー機能を使用中に電子説明書を起動した場合、再び編集モードに戻ったときにコピーした内容がリセットされます。
- 大量の文字列の演算で誤動作
- 文字列に対する演算(
A$+B$
における+
など)が極端に大量に行なわれたときの処理に問題があり、正しい演算結果が返されない場合があります。 - 非パッケージ型ファイルを読み込んでもPACKAGE$が変化しない
- パッケージ型ファイルを読み込んだ後、パッケージリソースを含まないファイルを
LOAD
した場合に、直前に読み込まれたパッケージ型ファイルの情報がシステム変数PACKAGE$
に残ります。本来の正しい動作ではPACKAGE$
はクリアされ”0”
となります。
改訂されたSmileBASICの動作
- PRGNAME$,PACKAGE$をセーブ時にも対応
SAVE
成功時に、システム変数PRGNAME$およびPACKAGE$が更新されるようになります。- COLINITで引数を省略した場合の動作
- 一切の引数を省略して
COLINIT
と記述した場合、全ての色が初期化されるようになります。
また、COLINIT ”BG”
のようにバンク名以降を省略した場合は、指定したバンクの色が全て初期化されます。 - MMLのチャンネル指定省略時について
- チャンネル指定を省略して書き出されたMML構文においては、続いて記述されたチャンネル指定が先頭にさかのぼって指定されます。たとえば
BGMPLAY”C:1D”
ではチャンネル:1で「ドレ」が再生されます。
これはチャンネルにデフォルト値を設けないことにより、チャンネルの重複を極力起こさないための措置ですが、感覚的に意図しないチャンネルが割り当てられる場合もあります。
次回更新時にはこれに対処し最も若いチャンネル:0をチャンネルのデフォルトとして厳密に解釈する予定です。たとえばBGMPLAY”C:1D”
と記述した場合、”:0C:1D”
と解釈されチャンネル:0「ド」とチャンネル:1「レ」が同時に再生されます。このためBGMPLAY”:1C:0D”
と記述すると、”:0:1C:0D”
と解釈されチャンネル:0の重複が起こりIllegal MMLエラーが発生します(この場合正しくはチャンネル:0を先頭にBGMPLAY”:0D:1C”
と書きます。あるいはBGMPLAY”D:1C”
やBGMPLAY”:1C:2D”
と書いてもエラーにはなりません)。
修正されたサンプルプログラムの誤動作
- SAMPLE5
- 日付を跨いだ場合の処理を修正しました。
サンプルプログラムの改訂
- GAME4
- キャラクタ入れ替え時のループ回数に関して、理論上の誤用を修正しました(実質的な動作に変化はありません)。
Ver.2.1において修正 (2012.5.2)
電子説明書の改訂
- 10 サウンド関係の表 > MMLコマンド
- 「マクロ定義に関するコマンド」を追加
- 11 BASIC基本仕様 > 基本要素 > 配列
- 下記注記を追加
文字列用の変数は最大4096個までしか利用できません。配列としての定義と実際に利用できる個数が異なります。最大数を超えるとエラーとなります。
- 26 ファイル通信命令 > LOAD > 引数
- リソース名に「SPS(下画面用SPRITEキャラ)」「BGF(フォント用BGキャラ)」を追加
- 35 グラフィック命令(上級者) > GCOPY > 書式
- ×「GCOPY [ 転送元ページ, ] 始点x, 始点y, 終点x, 終点y, 転送先座標x, 転送先座標y, コピーモード」
○「GCOPY 転送元ページ, 始点x, 始点y, 終点x, 終点y, 転送先座標x, 転送先座標y, コピーモード」 - 39 SPRITE情報取得命令 > SPCHK() > 戻り
- 数値に「b03 アニメ再生」を追加
- 43 サウンド基本命令 > BGMSTOP > 注記
- 下記を追加
なお、トラック番号を省略した場合は、BEEPによる効果音と全てのトラック演奏が停止します。
- 43 サウンド基本命令 > BGMSTOP > 引数 > トラック番号
- ×「0〜7(省略時0)」
○「0〜7」 - 44 サウンド命令(上級者) > BGMPLAY(上級者用) > 注記
- 下記を追加
(トラック番号1〜7を指定するとエラーになります)
修正されたSmileBASICの誤動作
- MMLコマンド中、長さ指定+一部コマンド+数字でフリーズ
- MML構文の中で
BGMPLAY”C4&8”
やBGMPLAY”R2.2”
のように、# + - . & _
などのコマンドを介して、1つの音階や休符に対して複数の長さ指定を行うとプチコンの動作がフリーズしました(本来の動作はIllegal MMLエラーです)。 - MMLコマンド中、無効なイコール記号でフリーズ
- MML構文の中で
BGMPLAY”R=”
のように【休符+イコール記号】やBGMPLAY”C=”
、BGMPLAY”C2+.=”
のように【音階+イコール記号】を記述・実行するとプチコンの動作がフリーズしました(本来の動作はIllegal MMLエラーです)。 - ★記号を保存すると改行コードに化ける
- プログラム内に「
★
」記号(文字コード10)があるとき保存すると、★
記号が改行コード(Л
:文字コード13)に書き換わっていました。 - GCOPY命令で同一座標へのページ間コピーが行なわれない
GCOPY
命令で転送元ページの「始点x,始点y」と転送先ページの「転送先座標x,転送先座標y」が等しい場合、コピー処理がスキップされていました。- GCIRCLEの動作が遅い
GCIRCLE
の描画処理に問題があり、本来期待される動作速度よりも極端に遅く描画されていました。- BGFILLの「スクリーンデータ文字列で矩形塗り」に指定しないキャラが混在する
BGFILL
命令末尾にスクリーンデータ文字列を指定した場合、指定の末尾に余計なキャラが付け足された状態で出力されていました。- MMLのゲートタイムの厳密性に漏れがある
BGMPLAY
で使われるMMLのゲートタイムコマンド(Q
数値)で、発音時間と休符時間の和が正確な総演奏時間にならない場合があり、このため複数チャンネルで異なるゲートタイムを指定した場合などにズレが発生していました。- MMLの<コマンドで誤動作
BGMPLAY
で使われるMMLのオクターブは本来8が最大値ですが、<
コマンドで9相当まで上げることができ、発音処理に異常が発生していました。- VAL関数に不正な引数を指定した場合のエラーメッセージの誤り
- 関数
VAL()
の引数として-
を指定すると(”-”
など)不正なOverflowエラーが発生していました。 - SPHIT命令のY軸判定が甘い
SPHIT
命令で判定される領域はX軸では厳密なのに対し、Y軸では1ドット判定領域が広く設定されていました。- 画面終端でPRINT命令にカンマを用いると表示されない文字が生まれる
PRINT
命令でカンマ記号によるTAB位置補正を使い(例:PRINT A$,”B”
)、文字列が画面終端(x32,y24)に達した直後にTABが始まるように記述すると、文字列の終末が表示されず代わりに空白が表示され、かつTAB位置補正が働かない場合がありました。- VSYNC命令が初回実行時に無視される
- SmileBASIC起動後のプログラム初回実行時(プログラムを書き換えるたびに初回とみなします)、プログラム実行中最初に使われた
VSYNC
命令に限り、ウェイトが発生していませんでした。 - ACLS命令で背景色が1番に指定される
ACLS
命令の実行時、背景色は0番(透明)になるのが本来の正しい挙動ですが、1番(黒)が割り当てられていました。- TALK命令中のエラーによってTALKCHKの戻り値が固定される
TALK
命令による発音中にエラーで中断が起こると、TALKCHK
関数の戻り値がTRUEに固定され、以後再生状態にかかわらず常にTRUEが返されていました。- TALK命令中の電子説明書の表示で異常
TALK
命令による発音中に電子説明書を表示した場合、画面表示に異常が発生することがありました。また、電子説明書表示中も発音が停止しませんでした。- 一部の文字コードの判定に異常
- 文字
¥ ` ~ \ ・ ー
(それぞれ文字コード92, 96, 126, 127, 165, 176)のSmileBASIC内の文字コード処理に問題があり、正しい文字コードと同一視されませんでした(CHR$(96)==”`”
が成立しないなど)。 - 極端に多くの文字列を定義したときに全体に誤動作
- 文字変数 / 文字配列変数にOut of memoryエラーが発生するほど多くの文字列を定義した場合、エラーの表示後あるいは本来のエラー表示が無視された後、文字列に関する挙動が異常になっていました。
- PNLTYPE命令によってVISIBLEの状態が変化する
VISIBLE
命令でコンソール画面を0
(非表示)にした状態でPNLTYPE
命令を使うと、コンソール画面の設定が1
(表示)になっていました。- 実行モードの行末以降にShift+DELキーで異常動作
- 実行モードにおいて、〈入力文字列の終端より右〉にあたる部分にカーソルを配置してShift+DELキーを押すと、予期しない動作が発生していました。
- XOR描画状態のGCIRCLE命令で画面外に描画すると異常動作
GDRAWMD
命令でTRUE(XOR表示モード)に設定した状態で、GCIRCLE
命令で画面外まで描画すると、内部的に誤った位置が描画範囲に判定され、描画を含む以後の動作に異常が発生していました。- SPCOLVECの設定がないSPRITEの衝突判定に誤り
SPCOLVEC
命令で移動速度が定義されていないSPRITEにおいて、衝突判定中の移動速度の計算に問題があり、SPHIT
命令の衝突判定に誤りが発生する場合がありました。- 命令入力支援機能に抜け
- 命令入力支援機能で表示される候補が複数ページにわたる場合、かつ先頭文字がB・G・I・R・Sのうちいずれかの時、候補に表示されない命令がありました。
- ラベルに関連したエラーメッセージに誤り
- 存在しないラベルを指定した場合、本来表示されるべきUndefined labelエラーではなくSyntax errorとして警告されていました。
- 電子説明書の表示後にファンクションキー文字列が変化する
KEY
命令で定義したファンクションキー文字列が、電子説明書の表示後に乱れる場合がありました。
修正されたホームメニューの誤動作
- 「ファイルの管理」でファイル数が少ないときページ送りでフリーズ
- 保存されたファイル数が7個以下のとき、ホーム画面の「ファイルの管理」以降の(名前変更などの)ファイル選択画面表示中に、十字ボタンから次ページを開く操作(右ボタンやL+下ボタンなど)を行なうとプチコンの動作がフリーズ、あるいは誤った画面が表示されていました。
- 「作品を見る」機能実行中にRECVFILE命令の上書き確認が働かない
- プログラム内で
RECVFILE
命令が使われ、その結果受け取るファイルがプチコンmkII内のファイル名と重複している場合、ホームメニューの「作品を見る」機能でプログラムを実行した場合にかぎり警告が表示されず、自動的に上書きされていました。 - QRコード読み込み時の文字表記ミス
- 「QRコード読み込み」機能の使用中、下画面に表示されるメッセージのうち「リソース名」と「ファイル名」が入れ替わっていました。
修正されたサンプルプログラムの誤動作
- CHRED
- 色設定部分の取得に失敗していた部分を修正しました。
- DRWED
- BOX/FILLの使用後のtext機能での描画位置異常を修正しました。
- SAMPLE12
- リソースデータ「MEM:WAVE224」「MEM:EG224」のいずれかが無い状態での「LOAD」機能がエラーを引き起こす問題を修正しました。
サンプルプログラムの改訂
- CHRED
- 初期化時にACLSを実行しない仕様に変更しました(起動直前の情報を引き継ぐため)。
- FILEメニュー表示時に視認性を高めるため、COPY用の取り込み画像を非表示にしました。
- SAMPLE1
- プログラム終了時にキー入力待ちを実装しました。
- SAMPLE3, SAMPLE6, SAMPLE7
- WAITをVSYNCに変更しました。その他ACLS、BTRIGなど対応しました。
- GAME1, GAME2, GAME3
- WAITをVSYNCに変更しました。
改訂されたSmileBASICの動作
- GCIRCLEで角度0を経由した円弧の描画
GCIRCLE
命令は値の小さい角度から値の大きい角度に向かって描画するため、角度0をまたぐ円弧(角度90度~270度を結び右方向に膨らんだ「)」型の半円など)を描画するには、円弧を2つに分ける必要がありました。更新版では開始角>終了角の場合には、開始角<終了角の場合と反対側の弧を描画します。- BGOFS命令の座標オーバー時の補間処理について
BGOFS
命令で設定された(現在位置から補間される)座標位置が仕様上の最小/最大値(0 / 511)を超えた場合、補間処理を単純に最小/最大値に向かって行なう動作(例えば見かけ上スクロールが停止したり逆方向に移動するなどの予期しない動作が発生します)を、より感覚的に正しい挙動に改訂しました。- Rボタンの挙動はLボタンに準じる
- 本体のRボタンの動作を、Lボタン同様にSHIFTキーのショートカットとしました。
- SORT/RSORT命令の対象に文字列を含める
- 文字列に対して
SORT
命令/RSORT
命令を実行した場合、文字コードに従って並び替えます。 - SPCHK()の戻り値にアニメ状態を含ませる
SPCHK
関数の戻りbit3に、アニメ再生の状態を記録します。
改訂されたホームメニューの動作
- QRコード読み込み時の決定にハードボタン割り当て
- 「QRコード読み込み」機能実行中、本体のA/R/Lボタンのいずれかで「決定」動作が実行されます。
- ファイル管理機能でリソース別にページ位置を記憶
- 「ファイル管理」機能全般で同じ操作を連続して行う場合、ファイル選択時に(全リソースにおいて)直前に選択したページを表示します。
徳間書店 (2013-12-21)
連載「プログラムを知れば、ゲームの見方が変わる。ハロー プチコン3号!」
28通りのプログラム道の始め方。その1つはプチコンmkIIです!
プチコンmkII+電子工作「DSiのタッチパネルを自動的にペンタッチするモータ基板の製作」!
日経BP社 (2012-10-22)
売り上げランキング: 6319
第4章 Part3は「ニンテンドーDSiのBASIC『プチコン』でゲームを作ろう!」
プチコンmkIIと電子工作の融合「画面の点滅を読み取ってデータを受信する光センサ基板の制作」! 謎の広告もあります
プログラミング入門第4回は「ドラクエ風RPGに挑戦」!
プログラミング入門第3回は「グラフィック画面を使って『マリオカート』風ゲームを作る」!
プログラミング入門第2回は「BG面を使って『グラディウスII』6面風の高速横スクロールゲームを作る」!
7月号のプチコンmkIIプログラミング入門は「スプライトを使いこなそう」、Reportにも登場「大進化したプチコンmkII」
6月号のプチコンmkIIプログラミング講座は「お手軽BASICを使って迷路で遊ぼう!」
アスキー・メディアワークス
売り上げランキング: 4514
初代プチコンの本ですが、プチコンmkIIでも使えます(VSYNC命令はWAIT命令に置き換えてご覧ください。詳しくはこちら)