プチコン3号およびBIGで見つかった、既知の不具合の一覧です。
ソフトの性質上、またユーザーがよく訓練された人たちということもあって、「配信直後のゲームソフト」として見ればすごい勢いでバグが見つかりましたが、最新バージョンではほぼ修正されています。
プチコン3号やBIGで不具合を発見したときは、このページのコメント欄にコメントするか、このページを直接編集して加筆・修正してください。
現在バージョン表記は Ver.x.x.x で統一しています。
Ver.3.6.0 以降の不具合情報が掲載されています。
最終更新: 2021/08/09 (月) 14:34:51
目次
外部リンク
実行すると、SmileBASIC の強制終了やハングアップ、恒久的なメモリリークなど、重大な問題を引き起こす場合がある不具合をまとめています。
注意
掲載されているプログラムは危険です。実行するとハングアップ、強制終了、メモリリークするものが含まれています。
これらのプログラムは検証以外の目的で実行しないでください。未保存のデータは実行する前に保存しておいてください。
Ver.3.6.2 で確認
下記のプログラムを実行すると変な挙動が発生します。
- DIM inR[1024],inI[1024]
- DIM outR[1024],outI[1024]
- FFT outR,outI,inR,inI
- outR=SETARY(0) ’outRの配列操作
- IFFT outR,outI,inR,inI
- END
- DEF SETARY(F)
- DIM A%[F]
- RETURN A%
- END
このプログラムを実行すると本来なら5行目でエラーが発生するはずですが、何故か発生しません。その後、DIRECTモードで、
- ’警告:このコマンドを実行するとハングアップします。ただしHOMEボタンは反応します。
- ?FREEMEM
というように、 FREEMEM を確認しようとすると、プログラム実行中の状態になったまま終了できなくなります。 VIEWER から実行すると真っ黒な画面でハングアップしますが HOME ボタンは反応します。
Ver 3.6.3 で確認
Ver 3.6.3 現在でも INC 命令において発生します。
- ’警告:このプログラムを実行するとハングアップします。
- INC DATE$,”B”
なお、INC 命令においては空文字列を指定したときはハングアップしません。 ほかの変数操作命令は安全です。
- ?SHIFT(DATE$)
- ?POP(DATE$)
- PUSH DATE$,”B”
- INC DATE$,””
- ’3.6.3では正常にエラーになる
- DATE$[0]=”B”
- TIME$[99]=”B”
Ver 3.6.3 で確認
本来は関数で、戻り値のない命令形での使い方は存在しません。
引数を±1未満の数値にするとハングアップします。(それ以外はエラーになる。)
- ’警告:このプログラムを実行するとハングアップします。
- CONTROLLER 0
- CONTROLLER 0.9
上記の不具合には当てはまらないものの、意図した仕様とは思われない挙動をまとめています。
Ver 3.6.3 で確認
たとえば、親機
- MPSTART 2,”1000”
に対して、子機
- MPSTART 2,”1001”
- MPSTART 2,”1099”
- MPSTART 2,”10んこ”
で接続が成立してしまう。 具体的には、文字列長と先頭2文字が一致すればあとはどうでもいいらしい。
プチコン3号 Ver.3.6.3 で確認
スマイルツールのお絵描きツール(PRG:SYS/SBGED)でUNDOを使用した時、X=511とY=511の領域だけ元に戻らない。
プログラム中のGSAVE命令とGLOAD命令で、幅と高さの指定が誤っていることが原因。
プチコンBIG Ver.3.5.0 で確認
BGLOAD では、配列の後に正の数値を指定すると、配列の全要素に加算してからキャラ番号として描画します。しかし、プチコンBIGでは正しく動作しません。加算されるのではなく、絶対的にその数値に変化してしまうようです。(すなわち BGFILL )
プチコン3号 Ver.3.5.0 で確認
プチコンBIGで作成されたTXTファイルを、プチコン3号に保存してPRGファイルとして上書きすると、以下のプログラムでは正常に読み込むことができません。また、メニューからの読みこみ (SHIFT + LOADキー) も正常にできません。
- LOAD ”PRG3:ファイル名”,FALSE
TXTリソースとして読み込むはできるようです。
- LOAD ”TXT:ファイル名”,FALSE OUT CONTENT$
確認状況不明
Wii Uのインターネットブラウザーには、起動中のソフトのスクリーンショットをアップロードする機能があります。しかし、その機能を使いDIRECTモードでTVとGamePadそれぞれに異なる表示をするモードにした状態でプチコンBIGのTV画面のスクリーンショットを撮ると、おかしい画像がアップロードされてしまいます。
保存した際の画像の縦横比と、表示時の縦横比が合っていないような感じの画像がアップロードされます。
TV画面なので本来ならサイズは1280×720になるはずなのですが、854×480(FWVGA,GamePad画面のサイズ)になっています。
EXIF情報やファイル名は正常です。
派生して、全体が前回HOMEボタンを押したときのスクリーンショットで上半分がおかしい画像が撮れるようになることもあります。上半分は少しだけ透けて下半分の画像の続きが見えます。その状態になると、2画面に同じ表示をするモードでもおかしくなり、いつスクリーンショットを撮ろうとしてもその状態のスクリーンショットが撮れるようになります。
Ver.3.6.3 で確認
SPANIMで、Spriteの「Z座標」を相対値で変化させる際に、本来の上限/下限を越えてしまう現象があります。
検証用プログラムを用意しました。
実行すると、ワンパクとダミーとハカセが表示されます。
ワンパクは本来のZ座標奥側最大値、ダミーは本来のZ座標手前側最大値を表しています。
十字ボタンの上を押すごとにSPANIMを使ってハカセが奥側へ、下を押すごとに手前に動きます。LRボタンは微調整です。(ここでもSPANIMで動かしている)
どちらか一方に繰り返し動かし続けると、どこかでハカセが画面から消えます。(Zクリッピングの範囲からはみ出てしまうため?)
例として、
- ’これを一定方向に繰り返すと、Z座標が本来の範囲を超える
- ’3D立体視にも影響が出る
- SPANIM 0,”Z+”,-8,100 ’手前
- SPANIM 0,”Z+”,-8,-100 ’奥
などのような相対指定で奥行きを移動させ続けると、本来の範囲である奥1024~手前-256の制限を超えてしまいます。
3DS/3DSLL/New3DS/New3DSLLのような3D立体視機能のあるハードでは立体視に影響が出ます。
(特に手前方向。視差が大きすぎて正常に立体感をとらえられなくなる。無理に見ようとすると目に悪影響を及ぼす危険性がありますので注意してください。)
Wii U/2DS/New2DSLLでは立体視がないため3D立体視には影響が出ませんが、Z座標がある一定の値(+1536以上、-512以下)を超えたあたりでZクリッピング範囲と思われる範囲からはみ出してしまうため、2D表示にしていてもそのSPRITEが見えなくなってしまいます。
Ver.3.6.3 で確認
例えば、
- DEF TEST OUT
- END
のようなプログラムを実行した際、
- Out of code memory in 0:1
のように表示されます。内蔵ヘルプでは
12:Out of code memory (コード領域のメモリー不足)
とあります。このような場合は Syntax error の方がエラーの意味としては正しいと思われます。
Ver.3.6.3 で確認
「作品を見る」でプログラムを実行している際にエラーが発生すると、次に実行しようとしたプログラムが実行されず、すぐに戻ってしまう問題です。
必ず実行されないわけではないようです。その条件は不明です。
再度実行すれば問題ありません。
Ver.3.6.3 で確認
INPUT および LINPUT で入力待ち状態にて START ボタンなどで中断したのちに CONT で再開する場合に、想定する動作をしないというものです。
具体的には、INPUT と LINPUT ともに入力の再開ができないのと、両命令の挙動に差異があるということです。
ことを留意しておく
これは、それぞれのモードで以下の命令を実行して、入力待ちの状態で中断したあと、CONT で再開した場合の挙動をまとめたものです。
実行した命令 | DIRECT で検証 | EDIT で検証 |
---|---|---|
INPUT A | Can't continue | エラーなし |
INPUT A$ | Can't continue | エラーなし |
LINPUT A$ | Can't continue | Uninitialized variable used |
- A=30
- INPUT A
- PRINT A
数値を入力した場合はその数値が表示されるが、中断して CONT した場合は 30 が表示される。
Ver.3.6.3 で確認
SORT による整数型配列のソート結果がおかしいという不具合。
負数が含まれる配列で、かつ絶対値が大きい値が含まれると発生しやすい。
たとえば、このようなプログラムで発生します。
- DIM ARY%[8]
- ARY%[0]=1<<31
- ARY%[1]=-128
- ARY%[2]=128
- ARY%[3]=NOT (1<<31)
- SORT ARY%
- FOR I=0 TO LEN(ARY%)-1
- ?ARY%[I]
- NEXT
また、FOR-NEXT などで括って複数回ソートさせると値によっては「順番が変わる」ことがあります。
なし
Ver.3.6.3 で確認
文字列型の引数を渡しているにもかかわらず、Type mismatchエラーが発生します。
このバグを引き起こす「特定のヌル文字列」は2種類存在します。
- ?VAL(””*1)
- ?VAL(DIALOG(””,”INPUT NUMBER”))
- ’乗算ヌル文字列は変数格納後も不正な状態
- A$=””*1:?VAL(A$)
一度、文字列を変数に格納し、長さがゼロの場合はVAL関数に渡さないように処理する。
Ver.3.6.3 で確認
FREEMEMが明らかに残っているにもかかわらず、整数型配列に対するPUSH命令で『Out of memory』エラーが発生することがあります。
(他の型での発生の有無は分かりません)
発生条件は正確には分かりませんが、PUSHする配列の要素数が多いほど場合発生しやすいと思われます。(目安として数万要素)
問題の発生するプログラムを、別のプロジェクトフォルダにコピーして実行すると問題が発生しなくなるなど、不可解な点があります。
(そのため、問題が発生するプログラムを掲載できません)
問題が発生した直後のFREEMEMの値には法則がありません。
50 キロバイト程度で発生するときもあれば約 646 キロバイト( 646,740 バイト)で発生することもあります。
CO まで打ち、入力補完の CONT をタッチした際、すばやくタッチペンを離さないと CONTROLLER( と入力されてしまう。
Ver 3.6.2 で確認。Ver 3.6.3 で修正。
BEEP の添え字に関係なく発症します。 HOME ボタンを含めた全てのボタンが反応しなくなります。 また、その状態でスリープモードにすると画面が真っ黒になったまま戻りません。 絶対に発生するわけではなく、 モードや BEEP の回数によっても発症したりしなかったりするようです。
+ | 起こらない例 |
どちらもEDITモードで、
|
+ | 起こる例 |
DIRECTモードで、
EDITモードで、
|
Ver.3.5.1 で確認。Ver.3.5.2 で修正
A=100:PRINT A とすると、100.00000000と表示される
FORMAT$() などの文字列関数を使用して表示する
プチコンBIGから仕様を引っ張ってきたために起きてしまった不具合のようです。
Ver.3.6.0 で修正
コンパイル時に強制終了なので、例えすぐに実行されなくても瞬時に強制終了します。
- WAIT 120
- OPTION
次の内容はこちらでお願いします。
SmileBASIC の不具合またはこのページそのものに関係のないコメントはこの場所ではせず、掲示板でお願いします。 荒らしはしないでください。