プチコンmkII で見つかった、既知の不具合の一覧です。おもに Twitter や 2 ちゃんねるの報告から情報を集めてます。ここは見つかって間もない第一報的な情報も扱っているので、公式サイトで公開されている公式バグ情報も参照してください。
mkII では修正済みの旧プチコンのバグについては「旧プチコンの既知の不具合」をごらんください。
ファンクションキーで改行を含む文字列を編集モードに流し込むと改行されないことがある。また、100文字より長い文字列を編集モードに流し込むと101文字目以降がはき出されないことがある。
具体的には以下の様になる。
改行 | 文字数 | 入力モード | 結果 |
---|---|---|---|
あり | 100文字越え | 上書き | 改行されず、100文字までしかはき出されない。BEEP 2が鳴る。 |
あり | 100文字越え | 挿入 | 改行されるが、100文字までしかはき出されない。 |
あり | 100文字未満 | 上書き | 改行されるが、はき出されない。 |
あり | 100文字未満 | 挿入 | 正常 |
なし | 100文字越え | 上書き | 100文字までしかはき出されない。 |
なし | 100文字越え | 挿入 | 100文字までしかはき出されない。 |
なし | 100文字未満 | 上書き | 正常 |
なし | 100文字未満 | 挿入 | 正常 |
INPUT A に対し − と入力すると Overflow エラーで止まってしまう。
SORT,RSORTを使用したとき、並び替えの範囲が21以上で数値が同じ項目があり、その結果で別の配列を並び替える場合、同じ項目のある部分に対応する部分の並ぶ順番がころころ変わる。
- CLS
- CLEAR:DIM A(21),B(21)
- FOR I=0 TO 20
- A(I)=I
- B(I)=I%4
- NEXT
- SORT 0,21,A,B
- FOR I=0 TO 20
- PRINT A(I),B(I)
- NEXT
下のプログラムがエラーにならない。
- ?CHKCHR(””,0)
- ?CHKCHR(0,””)
ただし、両方の引数を文字列にするとエラーが出る。
- ?CHKCHR(””,””)
CONTでプログラムを再開しようとするとき、一部のプログラムでCONTした瞬間に行番号つきのSyntax errorになる。
そこの行番号でおかしな文法があれば話は別だが、特におかしな文法がない場合がある。
エラーになったらプチコンの仕様で再開できなくなるため、RUNでやり直すしかない。
BGMPLAY の MML で、チャンネル指定を省略したとき、V2.0 ではチャンネル 0 が使われていましたが、V2.1 では、和音を鳴らす際に異常な挙動となります。
以下のプログラムを実行すると、V2.1 では和音にならず「ドレミファソミファソラシ」とつながって鳴ってしまいます。
- BGMPLAY ”CDEFG:1EFGAB”
チャンネル指定を行うことで問題なくなります。
- BGMPLAY ”:0CDEFG:1EFGAB”
また、トラック内で単音の場合も問題ありません。
- BGMPLAY ”CDEFGFEDC”
取扱説明書の、10 サウンド関係の表 TALKコマンド(こちらについてはv2.3で修正)
の2つのページの終わりがなくなっている
BGMSTOP では、演奏が終わったあとの音の余韻を止めることができない。もし BGMPLAY でエンベロープのリリースタイムの設定を誤り余韻が長い音を鳴らしてしまうと、それをプログラムから簡単に止める手段がないので、自然に鳴り終わるまでしばらくうるさい状態が続いてしまう。
緊急で音を止めたい場合は、電子説明書を開閉するとなんとかなるようです。
- ’ リリースタイム カ゛ セ゛ロ (キケン)
- BGMPLAY”@147@E127,0,0,0CDEFG”
SPOFS で拡大したスプライトが一定枚数 (15~20枚 ぐらい以上) 重なると、重なった部分のグラフィック画面が、横ライン上に一時的に (大量に重なっている間のみ) 欠けて見える。バグというか、ハードウェアの限界?
- ACLS
- FOR I=0 TO 99
- GLINE RND(256),RND(192),RND(256),RND(192),RND(256)
- NEXT
- FOR I=0 TO 31
- SPSET I,100,0,0,0,0
- SPSCALE I,200
- NEXT
- @LOOP
- FOR I=0 TO 31
- SPOFS I,RND(32),RND(32),60
- NEXT
- WAIT 60
- GOTO @LOOP
VISIBLE 命令でグラフィック画面を隠した直後に描画すると、旧プチコンとは異なり一瞬グラフィック画面が表示されてしまう。たとえば、以下のプログラムを実行すると、一瞬画面が白くなる。
- ACLS:VISIBLE 1,1,0,0,0,0:GCLS 15
どうも、VISIBLE の表示状態が反映されるのが旧プチコンとは違って 1 フレーム遅れているもよう。WAIT 1 をはさむと白いのは見えなくなります。
- ACLS:VISIBLE 1,1,0,0,0,0:WAIT 1:GCLS 15
「文字列+STR$(配列(変数))」とすると、ごくまれに STR$ が文字列の 1 文字目を返すことがある。「A$=STR$(配列(変数)):A$=文字列+A$」とすると回避できる模様。社長のつぶやきによると、文字列まわりまたは CLEAR 命令の不具合が潜んでいる可能性があるとのこと。
SYSBEEP を FALSE にしていると、システム音は何も鳴らなくなるはずだが、ダイレクトモードにおいて「A」(リターンキー) と「Y」(BS キー) の押下のみ、キークリック音 (ブチブチ) が鳴る。実行中は鳴らないので、そういう意味では問題ありません。
BASIC 画面からホームメニューに戻ると基本的にすべての設定が初期化されるが、BGMSET や BGMSETD で設定した MML による BGM (128 ~ 255 番) の内容だけは残ったままになっている。ただし、基本的に MML 領域が不足することをしていない限り実害はないと思われます。
N コマンドをタイやスラー、ポルタメントでつなげようとしても、Illegal MML エラーになる。ただし、説明書にはできるとは特に書いていないので、できたら便利なのだが仕様かもしれない。
- BGMPLAY ”N60&N80” ’エラー
- BGMPLAY ”N60_N80” ’エラー
縦 64 ピクセル、拡大率 100% よりも大きい (つまり、縦幅が 65 ピクセル以上) のスプライトが画面の上下からはみ出すと、反対側から顔を出してしまう。拡大していなくても、回転により縦幅が長くなった場合も同様。以下は再現用のテストプログラム (Twitter より引用)。
要は画面の縦幅 192 ピクセルに対して、見えていない部分の縦幅が 64 ピクセルしかなく、それを超えると反対側から出てくるという状況。バグではなく、DS のハードウェアによるスプライトの仕様の可能性もあります。
PC で ptc ファイルを直接書き換えるか、非純正の QR コード生成ツールを使い、ファイル名がサンプルプログラムのいずれかと被っている QR コードを作成すると、プチコン上で読み込めてしまう。この場合、サンプルプログラムが上書きされて消えることはなく、QR コードから保存した同名のプログラムと共存した状態となってしまい、以下のような状況になります。
これはバグではなく、不便な仕様。ボタン押した瞬間だけ有効になる BTRIG、BUTTON(1) 関数などが、1/60 秒 (1 フレーム) の瞬間でしか有効にならない。したがって、VSYNC 2 以上で処理を回していたり、処理落ちしたりすると、ボタンの入力取得が漏れてしまうタイミングが発生するので事実上使えない。
また、キーボードを表示した状態では、L ボタンの入力を取りこぼしやすい (キーボードの表示切り替えによる処理落ちが発生するため)。WAIT の直後ぐらいで値を読み取ると大丈夫そうです。
逆に VSYNC や WAIT を使わずに処理を回すと、1/60 秒の間はフラグが残り続けるので、FOR 文で時間調整をする場合も注意。
COLOR で背景色を指定していても、同じ位置にスプライト・BG 面・グラフィック面のどれか一つでも描画されていたら背景色が表示されない、もしくは欠けてしまうので、COLOR の背景色で他の面をマスクしつつコンソール表示をさせるという使い方が出来ない。
CLS 命令に「コンソール背景色に対応した色を BG パレットの 0 番にコピーする」機能を追加すればコンソール面とコンソール背景色を同じ優先順位にすることが出来る…かもしれない。
PCM のドラム音色 (@128, @129) の定位が中央になく、音によって勝手に左や右に割り振られている。これが意図しないものである場合、それぞれの音ごとに P コマンドでパンポットの修正が必要です。また、たとえば P64 (本来の中央) で右寄りで鳴る音の場合、P0 (本来の左端) にしても、完全に左にならない。本格的にデータを作る人にとってはあまり歓迎されない仕様です。たとえば、定位の割り振られていないドラム音色を @130, @131 で使えるようになると良さそうなのですが。
例えば、SUBST$(”ABCD”,1,2,””) は "ABCD" を返すが、これは "AD" を返して欲しい。
SPSCALE命令で拡大した際、拡大した部分の当たり判定(SPHITSPなど)が行われなくなる。デフォルトのサイズ部分のみ、判定が行われる。
これはSPCOLでいちいち当たり判定を定義する必要があるという不便な仕様でした。SPSCALEを行った際にいちいち定義し直すのは面倒なので、当たり判定も引き延ばすなど、どうにかしてほしいものです。
BGMPLAY 1~7,”MML” の使い方でこの命令を呼ぶと、なぜか Out of Range エラーになってしまう。トラックが 0 の場合のみエラーとならない。→ Web 版説明書の間違いのようです。電子説明書には、MML を直接鳴らす場合、トラック 0 しか使えないと書かれています。
- BGMPLAY 1,”CDE”
ということで、短い MML をトラック 0 以外で鳴らしたい場合、BGMSET を使いましょう。
- BGMSET 128,”CDE”
- BGMPLAY 1,128
BGMPLAY 命令で MML を複数トラック鳴らした場合、チャンネルを使い切っていないにもかかわらず、一部チャンネルの音が欠けてしまう場合がある。
再現テストプログラムの QR コードは以下の通り。A ボタンで音が鳴ります。2 行目の BGMPLAY 命令のトラック番号 (1 つめの引数) を 1 にすると、チャンネル欠けは大幅に軽減される。7 にすると、まったくチャンネル欠けが無くなります。
…ということでしたが、これは仕様でした。社長の Twitter によると、マニュアルに載っていない仕様として、PSG (@144~@150) の音色は同時発音数 6 音まで、ノイズ (@151) は同時発音数 2 音までという制限があり、上記 QR コードのサンプルプログラムの場合、この制限に引っかかって音が欠けています。
PCM 音源の音色 (@1~@128) は、仕様通り 16 音鳴ります。波形メモリ音源の音色 (@224~225) も PCM で鳴っているため同様の仕様です。したがって、矩形波を 7 音以上同時に鳴らしたい場合、波形メモリ音源に PSG 相当の矩形波を定義し、PSG の代用または併用すると良いことになります。波形メモリはデフォルトで @144 (PSG デューティ比 50%) 相当の矩形波が定義されているので、そのまま代用すればリストが長くなることはありません。ただし、PCM/波形メモリの音色は、PSG と比較して若干音量が小さいため、全体的なベロシティ (音量) の調整は必要です。
なお、PSG と PCM 両方が鳴っている場合でも、同時発音数は合わせて 16 音となります。それを超えた場合、PSG が優先されて鳴ります。詳しくは、社長のツイート (その1, その2, その3)、およびプチコン公式サイトにある解説資料 (付録) をご覧ください。
文字列の比較(CHR$同士の比較など)およびSORT/RSORTの結果において、両者の動作の不統一、直感的でない結果が発生します。これらは修正によって辞書順の比較に統一されます。
COLSETで指定する色情報文字列に、書式より極端に長い文字列を指定した場合 に、フリーズが起こる危険性があります。
命令入力支援機能で、本体Aボタンによる改行の直後に正しい変換候補が表示されない、または変換候補が消える場合があります。
編集モードでプログラムリストのコピー機能を使用中に電子説明書を起動した場合、再び編集モードに戻ったときにコピーした内容がリセットされます。
文字列に対する演算(A$+B$における+など)が極端に大量に行なわれたときの処理に問題があり、正しい演算結果が返されない場合があります。
パッケージ型ファイルを読み込んだ後、パッケージリソースを含まないファイルをLOADした場合に、直前に読み込まれたパッケージ型ファイルの情報がシステム変数PACKAGE$に残ります。本来の正しい動作ではPACKAGE$はクリアされ”0”となります。
SAVE成功時に、システム変数PRGNAME$およびPACKAGE$が更新されるようになります。
一切の引数を省略してCOLINITと記述した場合、全ての色が初期化されるようになります。また、COLINIT ”BG”のようにバンク名以降を省略した場合は、指定したバンクの色が全て初期化されます。
チャンネル指定を省略して書き出された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”と書いてもエラーにはなりません)。
日付を跨いだ場合の処理を修正しました。
キャラクタ入れ替え時のループ回数に関して、理論上の誤用を修正しました(実質的な動作に変化はありません)。
Rボタンの説明をLボタンと同内容に
E9以降の説明を再度追加
引数が2個の型と1個の型について説明を分離
×「変数=INSTR( 文字列, 検索文字列 )」 ○「変数=INSTR ( 文字列, 検索文字列 [, 開始位置 ] )」 追加「引数:開始位置:0~文字単位の開始位置」。 ただし、開始位置の指定は電子説明書にあるこの順序ではなく、「変数=INSTR ( [開始位置,] 文字列, 検索文字列 )」です。
取扱説明書の、「10 サウンド関係の表 → TALKコマンド」の内容が途中で途切れている
これはバグではないですが、QR コードの読み込み時、ファイル名が表示されるのが 1 枚目を読み込んだときのみで、保存時にファイル名が表示されず、その頃にはファイル名なんていちいち覚えていないのが不便という声が多いです。
1 枚目を読み直すのがおっくうな場合、プログラムを作るモードから FILES 命令でファイル一覧を見て、そのリソース種類 (PRG など) の中で一番末尾にあるファイルが最後に保存したファイルなので、そこで判断すればとりあえずだいたい何とかなります。
BGMPLAY 命令や BGMSET 命令、BGMSETD 命令で MML を記述する際、タイ/スラー記号 (&) の直後に数字を記述するなど、# + − . & _ などの記号を介して長さ指定を複数記述すると、実行時にプチコンがフリーズしてしまう。
たとえば、こんな感じに書くと止まってしまいます。本来は Iligal MML エラーで止まるのが正しい動作です。
- BGMPLAY ”C2&4”
- BGMPLAY ”C2+4”
- BGMPLAY ”C2.4”
ちなみに、& をタイとして使う場合、以下が本来の正しい記述です。
- BGMPLAY ”C2&C4”
BGMPLAY 命令や BGMSET 命令、BGMSETD 命令の MML で「休符+イコール記号」「音階+イコール記号」のように、無効なイコール記号を記述すると、実行時にプチコンがフリーズしてしまう。以下はフリーズする一例です。本来は Iligal MML エラーで止まるのが正しい動作です。
- BGMPLAY ”R=”
- BGMPLAY ”C=”
- BGMPLAY ”C2+.=”
プログラム中に「★」記号を直接含むプログラムをセーブしてロードすると、改行に置き換えられてしまう。
- PRINT ”ツノタ゛★ヒロ”
ロードするとこんな感じになるので、動かなくなります。
- PRINT ”ツノタ゛
- ヒロ”
とりあえず、文字列であれば CHR$(10) でしのぐのが一番のようです。
- STAR$=CHR$(10)
- PRINT ”ツノタ゛”+STAR$+”ヒロ”
GDRAWMD 1 (XOR 描画) に設定しているときに、GCIRCLE 命令で画面外にはみ出す位置・大きさの円を描くと、はみ出した部分が変な位置に描画されたり、以降正常に動作しなくなったり、フリーズしたりする。
- ’ チュウイ! コレヲシ゛ッコウスルト フリース゛ シマス。
- BGMPLAY 2
- GDRAWMD 1
- FOR I=0 TO 100 STEP 4
- GCIRCLE 80,80,I,255
- BEEP:WAIT 8
- NEXT
実行モードにおいて、行末 (入力中の文字列の終端) で Shift+Del キーを押すと、誤動作やフリーズを起こすことがある。発生頻度はあまり高くないように見えますが、やらない方が良さそうです。
ファイルが 1 ページ分の数 (1~7 個) しか保存されていない状態で、ホーム画面の「SD カードに保存」や「名前変更」などのファイル選択画面を表示し、「十字キーの右」や「L + 下ボタン」で本来存在しないはずの次のページに送ろうとすると、完全にフリーズするか、もしくは文字化けした謎のファイルが表示される (謎のファイルを選択しても、未選択状態として扱われ何かできるわけではない)。
QR コード作成の際、確認画面で表示される「リソース名」と「ファイル名」が入れ替わって表示されている。表示の問題だけで特に実害はありません。
MML で、ゲート設定 (Q) が短いと、特定よりも短い音符の音が鳴らなくなる。1 フレーム未満の音になると鳴らないようです。Q0 だと全く鳴りません。また、テンポ設定は現象に影響しません。以下は音が鳴らない例。
- BGMPLAY ”Q0 @147 L1CDE”
- BGMPLAY ”Q1 @147 L32CDE”
- BGMPLAY ”Q2 @147 L64CDE”
上記ではプツプツした音が鳴るか鳴らないかでどうでもいいのですが、実使用では、以下のようにエンベロープのリリースタイムを使いたい場合にも全く鳴らなくなるという悪影響があります。
- BGMPLAY ”Q0 @147 @E127,1,1,110 L1CDE”
- BGMPLAY ”Q1 @147 @E127,1,1,110 C16 R2 C24 R2 C32”
- BGMPLAY ”Q2 @147 @E127,1,1,110 C32 R2 C48 R2 C64”
( 192 / 音長の数値 ) * ( Q の数値 / 8 ) の計算結果が小数になる音を鳴らした場合、音符の長さに誤差が発生してしまう。たとえば、同じ 16 分音符を鳴らす場合、Q6 と Q7 でずれが発生する。以下が誤差が重なってズレが確認できる例。
- A$=”@147L16[CDEFGAB<C>]”
- BGMPLAY ”Q6”+A$+”:2Q7”+A$
BGFILL 命令のスクリーンデータ文字列指定版では、複数のキャラクターを並べて指定できるが、埋めるキャラクターの数が指定した数の倍になる。
以下のコードでは、4 のキャラで埋めるはずが、4,0 の 2 キャラで繰り返され市松模様となってしまう。
- BGFILL 0,0,0,10,10,”0004”
今度は以下のコードを実行すると、本来は 4,8 の 2 キャラの繰り返しが正しいが、キャラ番号 4,8,0,0 の 4 キャラのパターンで描画される。
- BGFILL 0,0,0,10,10,”00040008”
なお、指定した以降のキャラは、前回指定したものがそのまま適用される。 例えば、上のコードを実行後に以下のコードを実行すると、キャラ番号 6,8 の2キャラのパターンで描画される。
- BGFILL 0,0,0,10,10,”0006”
暫定的に対処するなら、1 キャラ分の塗りつぶしでは文字列指定版を使わないようにし、2 キャラ分以上を塗りつぶしたいならこんな感じになります。
- BG$=”00040008”
- BGFILL 0,0,0,0,0,BG$+BG$ ’シュウセイハ゛ン カ゛ テ゛タラ ケス
- BGFILL 0,0,0,10,10,BG$
GCOPY 命令で、転送元と転送先の座標が同じだと、転送が行われない。以下の再現手順は Twitter の報告 より引用。
- CLEAR:ACLS
- GCOLOR 15
- GPAGE 0,1,1:GCLS 0
- GLINE 0,0,255,191
- GPAGE 0,0,0:GCLS
- GCOPY 1,0,0,255,191,0,0,FALSE
GCIRCLE で円弧を描く場合、角度 0 をまたぐ円弧を描けない (1 回で描く方法がない)。開始角と終了角を入れ替えても円弧は変わらず、0~360 の範囲外の角度は無視されてしまう。これは不具合扱いとして、次のバージョンで改善される予定だそうです。
電子説明書を出入りすると、各ファンクションキーの 3~4 文字目のみ、デフォルトの設定に戻ってしまう。
RECVFILE 命令を「プログラムを作る」モード内から使用した場合、受信ファイルがすでに存在していると上書き確認のメッセージが表示される。しかし、「作品を見る」から実行したプログラム内からこの命令を使用した場合、上書き確認が行われない。
PRINT VAL(”−”) でなぜか Overflow エラーに。本来は 0 を返すのが正しいと思われます。 修正したようですが、エラーの種類が変わっただけです。0を返す仕様の初代との互換性に問題があり、修正できたといえるのか微妙です。
初回実行時、およびプログラムを書き換えた直後の実行時、1 回目の VSYNC 命令が無視される。2 回目以降は正常に機能する。下記は再現用のプログラムで、1 回目の実行のみすぐに終了します。前回の VSYNC 命令を実行した時間が終了をまたいで記憶されているわけではないようです。
- ACLS:VSYNC 1000:PRINT ”オワリ”
VISIBLE でテキスト画面を消している状態で PNLTYPE を実行すると、旧プチコンとは違ってテキスト画面が再び見えるようになってしまいます。再び VISIBLE で消す必要があります。
- ACLS
- VISIBLE 0,0,0,0,0,0
- PRINT ”ミエテルヨ!!”
- WAIT 60
- PNLTYPE ”OFF”
- @LOOP
- GOTO @LOOP
MML でオクターブを 本来の上限である 8 より大きくしようとすると、エラーにならず、9 オクターブまであげることができてしまう。
- BGMPLAY ”O8<ABC”
- BGMPLAY ”<<<<<<<<<<BC”
この時点でまぎれもないバグなので何が起こってもおかしくないのだが、さらにこの状態では A (ラ) や B (シ) 以降の音が、音程の変化の無い効果音に変わる。
- BGMPLAY ”<<<<<<<<<CDEFGBC”
最初に A が来たときは銃声のような音が、A#~B# が来たときはピアノのような音がする。また、音の長さが高さに影響する (短いほど高くなる)。なお、@Dは効く (これらは、@で音色をしない場合で検証)。
プチコンmkII では、動作速度や各種グラフィック命令が旧プチコンよりも高速化されているが、GCIRCLE の描画速度のみ旧プチコンより 10~20% 程度遅くなっている。これは公式サイトのバグ情報によると、不具合だそうです。
プログラムリスト上に直接記述した ¥ ` ― \ ・ ー のいずれかの文字と CHR$(キャラクターコード) が同じ文字と認識されない。たとえば、INSTR や == での比較に影響がある。
- PRINT INSTR(”ABC`”,”`”) ’4 (OK)
- PRINT INSTR(”ABC`”,CHR$(96)) ’−1(NG)
- PRINT ”`”==CHR$(96) ’0 (NG)
- PRINT ASC(”`”) ’96(OK)
- PRINT CHR$(96) ’` (OK)
文字列変数に入れみてもこんな感じで別扱いに。
- A$=”`”:B$=CHR$(96)
- PRINT A$==B$ ’0(NG)
- PRINT A$==”`” ’1(OK)
- PRINT B$==”`” ’0(NG)
この問題は、一度プログラムを保存して開き直すことで発生しなくなる。
命令文入力支援で、入力支援の候補が 1 ページに収まりきらない場合、「>>」が表示されてページをめくることができるが、ページとページの間の 1 候補が抜けている。
たとえば、G と入力した場合の入力候補はこんな感じだが…。
2 ページ目に行くと、最初にあるはずの「GOTO」が無いことがわかる。
PRINT 命令で、以下の条件がそろった場合、カンマ指定で出力した文字列の最後の文字が表示されない。
以下が再現手順。2 ちゃんねるより引用しました。
- CLS:TABSTEP=4
- LOCATE 0,23
- A$=”A”*32
- PRINT A$;A$,A$
ダイレクトモード (実行モード) で、上ボタンを押し過去のコマンド入力履歴を表示した状態でスタートボタンを押して RUN させると、その項目以降の履歴が密かに削除されてしまう。
GOTO などでラベルを文字列変数で指定したとき、ラベルが存在しないと「Syntax Error」エラーになる。「Undefined Label」エラーが正しいはず。
GPAINT 命令で、塗りを指定した場所がすでに塗り色と同じ色だった場合、関係ない場所も塗られてしまう。
以下の通りにすると再現できます (Twitter より引用)。
- GCLS
- GCIRCLE 128,96,50,2
- GPAINT 0,96,4,2
- GPAINT 0,96,4,2
実行した結果は、以下の通り (Twitter より引用)。
TALK 命令で合成音声の再生が終わる前に、不正な TALK 命令 (TALK”ABC”) で Illegal function call エラーを起こして、強制的に再生を中断させると、現在合成音声が再生されていないのにずっと TALKCHK() 関数が TRUE を返し続けてしまう。
この状態は、RUN や CLEAR、ACLS 命令でも復旧しないが、新たに TALK 命令による合成音声の再生を正常終了させると元に戻る。
ACLS 命令を一度でも実行すると、以降 BG のパレット 0 番の背景色の変更が反映されなくなる。以下は再現用テストプログラムの QR コード (Twitter より引用)。
どうやら、かわりに BG パレット 31 番が背景色となってしまうようです (Twitter での報告より)。
MML の隠し機能であるマクロ機能で、マクロ定義の中にポルタメント (_) が含まれていると、それを使用した箇所以降、MML の再生がおかしくなる場合がある。
再現用プログラムの QR コードはこちら。マクロ「A2」と「BD」の最後のほうにあるポルタメント (_) を取り除くか、タイ (&) に変更すると正常に再生されるようになる。単純にポルタメントを使うと必ずおかしくなるわけではないようです。
旧プチコンから存在する謎挙動。BGOFS の自動補完スクロール機能で、たとえば、(0, 0) 座標から (-1, 0) 座標に自動スクロールさせると、なぜかスクロールが 1 周してしまう。
- BGFILL 0,2,2,10,10,10
- BGOFS 0,0,0
- BGOFS 0,−1,0,60
Out of Memory エラーが発生するほどたくさんの文字列変数 (配列含む) を定義すると、エラーまたはエラーが無視されたあと、文字列を扱ったあらゆる挙動が異常になるようです。
SPCOLVEC 命令で移動速度が定義されていないスプライトにおいて、SPHIT 命令の衝突判定時、移動速度の計算に誤りがあり、衝突結果が間違っている場合があるようです。
SPHIT 命令の当たり判定において、横幅は正確だが縦幅が実際よりも 1 ピクセル大きく判定されている。
サンプルの「GAME3」(SAMPLE STG) の動作が速すぎる。これは、VSYNC にすべき部分が実質機能していない WAIT 0 になっているから。VSNYC 1 に置き換えるといい感じになります。旧プチコンでも VSYNC 0 になっていて、この変更をすると処理落ち地獄になるので、意図的に外していたものが mkII の高速化によって速すぎる事態になったものと思われます。
サンプルの「DRWED」で、BOX または FILL を描いた直後に B ボタンで TEXT 入力に移行すると、テキストカーソルの位置がおかしくなり、場合 (最後に BOX や FILL を描いた座標) によっては、Out of range エラーでプログラムが停止してしまう。
これを回避するには、438, 445, 459 行目の 3 箇所で使用している変数 MX を別の適当な名前 (MX2 とか) に変更する。
サンプルの「SAMPLE12」(波形メモリ音色作成ツール)で、何も保存されていない音色番号の音色データを Y ボタンを押してロードしようとすると、Division by zero エラーが発生してプログラムが停止する。
エラー時に保存されていなかった音色データは再実行するとすべて初期化されてしまうので、もしそれが不便に感じて回避したい場合は、プログラムの以下の 2 箇所に赤字で示した行を追加する。
- MEM$=””
- LOAD NE$
- IF MEM$==”” THEN RETURN
- MEM$=””
- LOAD NW$
- IF MEM$==”” THEN RETURN
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.326 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:00 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30