SmileBASIC

Previous updates

Bug Fixes in Ver. 3.5.2 (June 24, 2017)

BASIC Interpreter-related

Severity: High

TXT, DAT or GRP files cannot be loaded if they are generated with SmileBASIC for Wii U then overwritten with SmileBASIC (for Nintendo 3DS)
SmileBASIC may stops responding with each of the following condition
  • Use FORMAT$ instruction to display more than 1024 digits of a real number
  • Attemp to load any of TXT, DAT or GRP files which are generated with SmileBASIC for Wii U then overwritten with SmileBASIC (for Nintendo 3DS)
  • Execute FFT/IFFT in a low memory room
  • Do SHIFT or POP a string which was computed to multiple a number by a null string
  • A name of a function is referred by VAR() as an array element is given to READ instruction’s parameter
  • ‘%’ character is used in a caption string as attempting to display a file-name entry dialog by DIALOG instruction
  • Execute RUN command after GOTO or GOSUB instruction is executed to jump to a specific label within a DEF clause where any error happens beforehand
  • Execute CONT command after terminating a running program in the direct mode. RUN command should never been executed in this circumstance
  • Huge number of characters like 1M characters are given to BGMPLAY instruction as a parameter
  • PCMSTREAM instruction is given a null array
  • Execute RUN command after a particular COMMON DEF is called in the direct mode. The SMILE TOOL has to be run after a program which calls a COMMON DEF clause in a different program slot was executed
  • A particular user-defined instruction is called in the direct mode after executing CLEAR command. That user-defined function has any global array
  • Execute SPHITRC to DISPLAY 0 which is the touch screen after all 512 sprites were assigned on DISPLAY 0 which is the upper screen

Severity: Middle

Decimal is also displayed by attempting to display integer
Content displayed on the screen goes wrong and the editor does not work after executing PRINT instruction in the DIRECT mode while the online help being displayed
‘Syntax Error’ happens instead of ‘Incompatible statement’ by executing XON WIIU instruction
GCIRCLE or GPIE instruction takes longer time to process a gigantic radius and a program cannot be terminated while it is in process
PROJECT instruction can take ‘.’ as a project name but it should not
PROJECT() returns a string ‘###’ while a working project is a default one
Contents of an array or string functions are unexpectedly permutated as repeating to create/release huge size of arrays or string functions
‘Subscript out of range’ error occurs as attempting to copy an array with no elements (zero-element) by COPY instruction
Leaking memory happens when DEF instruction has a wrong sentence structure
SPCHK cannot detect a termination of an animation which has no sprite setting parameter changes between frames specified by SPANIM instruction
Noise is made periodically while PCMSTREAM instruction is being executed
In case a movement speed for sprite collision detection is not set by SPCOLVEC the movement speed, which was calculated automatically for sprite collision detection is not cleared up after an XY-axis animation set by SPANIM ended

Additions/Changes in Ver.3.5.2 (June 24, 2017)

New Instructions

  • XON COMPAT(Change to 3DS/WiiU compatible mode)
  • XON 3DS(Change to 3DS exclusive mode)

Bug Fixes in Ver. 3.3.2 (August 10, 2016)

BASIC Interpreter-related

Severity: High

Vulnerability due to checking given parameters found in BGSCREEN instruction
Screen display is corrupted if a GRP file is loaded by LOAD instruction with a strings or an array specified in the second or third arguments then the application stops responding as it goes
In an infinite loop with WHILE or GOTO instruction a LOAD function with an nonexistent file and FALSE parameter specified causes a program unstoppable by pressing the STOP or START button in an error dialog
RINGCOPY instruction may bring SmileBASIC a forced termination if an negative number is set to a “copy destination offset” argument

Severity: Middle

PRGNAME function returns a corrupted file name if a program is loaded with a length of both a project and a file is 14 characters long
MIN or MAX function returns unexpected values if an array with zero elements is specified
CHKFILE function returns incorrect value if any file(s) included in a DLC project which does not exist or not yet purchased are specified
BACKTRACE instruction does not work properly in the DIRECT mode
FILES and LOAD instruction fails if PROJECT instruction points to the SYS folder as a default project

MENU and UI-related

Severity: Middle

Incorrect characters on “á” key top
Incorrect definition of the standard sprite #166

Compatibility notes until Ver.3.3.2 (As of August 10, 2016)

  • If the newly added instructions have already been defined, duplicate function errors will occur.
  • (The newly added instructions are: BGMPAUSE, BGMCONT, SNDSTOP, CLIPBOARD, GOFS, BIN$, DLCOPEN, BIQUAD, BQPARAM, FFT, IFFT, FFTWFN, PCMSTREAM, PCMPOS, PCMVOL, PCMSTOP, PCMCONT, and ARYOP. The new system variables are: MILLISEC and EXTFEATURE.)
  • Previously, when loading a text file, &H0D was converted to &H0A. However, from Ver. 3.3.0, this conversion will no longer be made.
  • Fixed so that the Z-coordinate will also be tracked when setting SPLINK. Due to this change, the display priority for the link source (child) when using SPLINK will change.
  • Up until Ver. 3.1.0, the SQR function was mistakenly also registered as the SQRT function. This was deleted in Ver. 3.2.0.
  • Instruction and function checks are now stricter. If an argument was incorrectly specified, up until Ver. 3.1.0 the argument was ignored, but from Ver. 3.2.0 an error may occur.
  • In the sample game GAME3JUMP, the BG priority has been changed from 0<1<2<3 to 3>2>1>0. Therefore, when creating a program using the GAME3JUMP map data, unexpected behavior may occur.
  • A function was added that gets empty management numbers in the SPSET instruction. Due to the addition of this function, processes that handle sprites (e.g. SPOFS, SPHIDE) will return an error when the SPSET instruction is not passed. When using a sprite, it must first be converted to SPSET.
  • Up until now, there was a bug in which if SPCHR was used during SPHIDE, the sprite’s state would become SPSHOW. The new version has been fixed so that even if SPCHR is used, the sprite’s state will not become SPSHOW (the sprite will not be displayed).
    Therefore, programs in which display is controlled using only a combination of SPHIDE and SPCHR, the sprite’s state will no longer become SPSHOW (the sprite will no longer be displayed).
    Please add SPSHOW after SPCHR to display the program.
  • The Origin X and Y coordinates for sprites with a definition number greater than 2048 that are installed as standard are adjusted to a more general position. The center of the diagram seen from the top becomes the origin and is not limited to the footing of the base axis.
    Therefore, the home coordinate for sprites with a definition number greater than 2048 will change (mainly image types that are viewed from directly above).
    For example, as the origin of images, such as a fighter plane, has changed from the bottom to the middle of the image, the behavior of programs that use rotation may differ to the previous version.
  • Sprites for which the origin position has changed
    1473 Block Parts
    2161-2163 Pickle
    2165-2167 Shovel
    2169-2171 Blinking Hammer
    2177-2179 Slingshot
    2181-2183 Hook
    2185-2187 Small Sword
    2189-2191 Knife
    2193-2195 Super Sword
    2197-2199 Wooden Cane
    2201-2203 Steel Stick
    2205-2207 Super Cane
    2209-2211 Axe
    2212-2215 Shield
    2218-2221 Wooden Bow
    2222-2225 Steel Bow
    2227-2229 Arrow
    2230 Throwing Star
    2237-2239 Frying Pan
    2241-2243 Whisk
    2245-2247 Kitchen Knife
    2249-2251 Wooden Spoon
    2253-2255 Wooden Fork
    2286 Balloon String
    2308-2309 Big Thorn
    2322-2323 Footprint
    2324-2328 Reversi Piece
    2329-2334 Dice
    2335-2337 Rock-Paper-Scissors
    2338-2345 Cursor
    2346-2347 Aim
    2348-2351 Triangle Mark
    2352 Flag
    2353 Warning
    2364-2366 Bat
    2367-2370 Golf Club
    2372-2374 Table-Tennis Racket
    2376-2378 Baseball Glove
    2380-2382 Racket
    2383-2388 Sports Equipment
    2389 Darts
    2392-2393 Bowling
    2395-2410 Car
    2412 Checkered Flag
    2421-2436 Boat
    2437-2452 Frog
    2453-2460 Jellyfish
    2461-2464 Fish
    2465-2472 Spider
    2473-2480 Mouse
    2481-2484 Cockroach
    2485-2488 Bee
    2489-2492 Butterfly
    2494-2499 Musical Note
    2500-2511 Zodiac Sign
    3225-3228 Umpire’s Flag
    3229-3230 Effect
    3233-3242 Speech Balloon
    3243-3270 Option, Shmup Enemy, Spiky Ball, Worm
    3271-3274 Bomb
    3275-3278 Power-Up
    3279-3282 Broken Pieces
    3299-3341 Shmup Player Craft, Enemy Robot
    3341-3415 Shield, Effect, Laser, Bullet, Bubble, Water Droplet, Icicle
    3424-3431 Explosion Effect
    3432-3434 Dragon
    3435-3436 G Boss
    3465-3470 Large Enemy, Submarine
    3476-3479 Stretching Hand
    3480-3494 Hakase, Wanpaku, Kanzaki, Intelli, Dummy
    3495-3500,
    3504
    Shrimp General
    3507-3511,
    3513-3514
    Crab Lord
    3515-3520 Block

Bug Fixes in Ver. 3.3.1 (June 15, 2016)

BASIC Interpreter-related

Severity: High

If a DIALOG instruction with 1 frame timeout is used in an endless loop, the program does not stop with the START button, and the HOME button must be used to forcibly stop the program.

Severity: Middle

In the keyword suggestions, a keyword that does not exist, ‘CONVOL,’ will appear.
If the 3DS cover is opened or closed while a processing is stopped for a long time with the WAIT or VSYNC instructions, the executed WAIT/VSYNC instruction is cancelled.
If an array saved as graphic data with GSAVE is saved in DAT format, when attempting to load it as GRP format using LOAD, it cannot be loaded successfully.
When executing DIALOG, ACLS, and so forth, the cursor momentarily appears at the top of the screen.

MENU and UI-related

Severity: High

The editing color for the Option screen cannot be changed.

Severity: Middle

When a program is executed from Browse Projects, and the program ends in an error, until Ver. 3.2.1 you could press the A button to return to the TOPMENU, but in Ver. 3.3, that is not possible.
You cannot use the Sort feature when the copy destination is selected with file copy.

Issues with the Sample Program and Smile Tool

About the Smile Tool

The Smile Tool program is old.

Bug Fixes in Ver. 3.3.0 (April 26, 2016)

BASIC Interpreter-related

Severity: High

The system variables become faulty by specifying the system variable in INC and DEC instruction. This causes the system to get crashed when any of the system variables are referred
The system crashes or the screen layout is disordered when the TOPMENU buttons are pushed right after a program runs (The larger program the higher probability)
The system is likely to crash when a length of a calculated strings is resulted to be extraordinary long (more than 4,000,000 characters) by multiplying a string and a value

Severity: Middle

“An integer DIV a real” gives a result of “An integer / INT (a real)” not “An integer DIV INT (a real)”
Writing a line to call an undefined instruction/function in a program and CHKCALL is executed before that line then it gives TRUE in spite of the instruction/function is undefined.
RSORT is not executed as expected with specifying a starting position.
Wrong character is assigned to &H1F0, &H387, &H2014 and &H2018.
In the editor mode TO, STEP and a minim sign to a negative number is not color-coded.
Occasionally SmileBASIC does not quit by pushing HOME button while a program is running.
SPHITINFO does not result correct information when SPHITSP or SPHITRC specify the lower screen. (SPHITINFO works correctly to detect One-to-One collision)
The error message is vague when there is insufficient space in the SD card to download a program.
VAL function gives a different result by supplying a particular string consisting of numbers and non-numbers following after. The result is different between a length of the string supplied is less than 10 and more than 11.
While the screen mode is set to 4 with XSCREEN, Clipping range becomes broken when the clipping range is cleared by either GCLIP, SPCLIP or BGCLIP. This can be prevented by setting the clipping range to the whole screen manually.

MENU and UI-related

Severity: Middle

In NETWORK MENU the file list shows a public key in garbled characters when a published program is revoked.

Additions/Changes in Ver.3.3.0 (April 26, 2016)

New Instructions

  • BGMPAUSE (Pause BGM)
  • BGMCONT (Resume paused BGM)
  • SNDSTOP (Stop all sounds)
  • MILLISEC (Millisecond version of MAINCNT)
  • CLIPBOARD (Get/Set clipboard contents)
  • GOFS (Get/Set graphic screen display offset)
  • BIN$ (Convert a numerical value to a binary number string)
  • DLCOPEN (Declare content for the Classic IP Open Usage Project)
  • EXTFEATURE (System variable that returns support status for extended instructions)

Additional Instructions
– Paid (Advanced Sound Processing Unit)

  • BIQUAD (BiQuad filter)
  • BQPARAM (Generate BiQuad parameters)
  • FFT (Perform Fourier transform)
  • IFFT (Perform inverse Fourier transform)
  • FFTWFN (Create an FFT window function)
  • PCMSTREAM (Play back a PCM stream)
  • PCMPOS (Get the playback position in a PCM stream)
  • PCMVOL (Set the volume of the PCM stream)
  • PCMSTOP (Stop playback of the PCM stream)
  • PCMCONT (Resume playback of a stopped PCM stream)
  • ARYOP (Perform arithmetic operations on arrays collectively)
  • RINGCOPY (Copy as a ring buffer)
  • <Note>
    Although these instructions may be suggested for input, they will give a “DLC not found [instruction name]” error if executed when the additional features have not been purchased.

Additions to Existing Instructions/Features

  • BGSCREEN (Addition of character size specification)
  • BGLOAD (Character number of the screen data to be loaded can now be offset)
  • FORMAT$ (Addition of %B [binary number])
  • SPDEF (Definition number and U,V coordinates of the definition data to be loaded can now be offset)
  • SPLINK (Addition of feature for getting link destination ID)
  • MICSTART (Addition of 2 [8-bit signed] and 3 [16-bit signed] for second argument)
  • ACLS (Addition of options for preserving GRP, SPDEF, and font settings)
  • LOAD (Addition of option for specifying the coordinates to load when loading GRP)

Paid DLC: “Advanced Sound Processing Unit”

  • A “Purchase DLC” button has been added to “Purchase Additional Features” in the TOP MENU.
    Purchasing the advanced sound unit via this button will allow you to develop audio-optimized BASIC programs, such as software synthesizers and effectors.
  • Price: $5.00 for the US, $6 for Canada and $75 for Mexico

Fixes in Ver. 3.2.1 (August 5, 2015)

Issues with the BASIC Interpreter

Severity: High

When loading and executing another program in the slot currently being executed with the EXEC instruction, if the BACKTRACE instruction is used after stopping the program with the STOP key, the normal trace information is not output, and at worst SmileBASIC may hang.
When stopped due to an error in the DEF definition or using STOP, if referencing or assigning the local variables in the DEF after calling the DEF instruction/function in DIRECT mode, SmileBASIC will hang.
In a program that jumps across multiple slots with the EXEC instruction, if the program jumps to the EXEC call slot two or more slots before a slot with the EXEC instruction and uses the GOTO/GOSUB/DEF instruction call at the jump destination, SmileBASIC will hang.
(For example, if the DEF instruction is used in EXEC “PRG1:FOO”→EXEC “PRG2:BAR”→EXEC “PRG1:FOO”→FOO, SmileBASIC will hang.)
On a New 3DS, if the BEEP instruction is frequently* called, SmileBASIC may hang.
* “Frequently” refers to a specification such as WHILE 1:BEEP:WEND

Severity: Medium

When drawing an arc using GCIRCLE, in some cases the arc is not drawn as intended.
(There are no issues with drawing a full circle.)
If the end of an OUT parameter in a statement is omitted, the program does not function correctly.
Workaround: Do not omit the end of the argument in the OUT parameter (do not end an OUT parameter with a comma.)
Names consisting of more than 32 characters cannot be used for variable and label names in user-defined instructions and functions.
In constant literals, the values for #BGROT90, #BGROT180, and #BGROT280 are incorrect.
When attempting to use SPCHR to turn additive synthesis off for a sprite that has the additive synthesis attribute turned on, it will not be turned off.
(There is no problem resetting SPSET.)
After a program is aborted using the STOP instruction or STOP key, if an instruction is executed and continued in DIRECT mode, an error occurs with instructions that cannot be executed in DIRECT mode.

Issues with the Menu Screen

Severity: High

If you press the HOME button after opening the SmileBASIC Web Tutorial in your browser and quit the program without restarting SmileBASIC, SmileBASIC does not quit and the 3DS must be restarted.
(There is no problem with returning to SmileBASIC from the browser.)

Severity: Medium

If you press the L or R buttons while searching or replacing on the Editor screen, the button for search/replace is replaced by the Function key icon.
When copying from the FILE MENU, the Skip and Change buttons on the Select Process dialog box do not respond when there is an existing file.

Issues with the Sample Program and Smile Tool

About the Smile Tool

The Smile Tool cannot be used with WIDTH 16.

Fixes in Ver. 3.2.0 (June 17, 2015)

Issues with the BASIC interpreter

Severity: High

(Workarounds are temporary.)

SmileBASIC hangs when assigning internal variables in MML.
If a constant character string is used in an argument for a function, and that argument is used directly as the first argument for the INC instruction in the function, SmileBASIC will hang.
Workaround: After copying the argument to a different variable, specify that variable in the first argument for the INC instruction.
When 0 or 4 are specified in the third argument of the XSCREEN, and BGPAGE is executed on a display that no BG is assigned to, SmileBASIC will hang.
When a coordinate value of greater than 32768 or less than -32768 is used on GLINE and a normal drawing is not drawn, SmileBASIC may hang.
When a user-defined statement or function is called in DIRECT mode and an error occurs in the statement or function, if the same user-defined statement or function is called again in DIRECT mode, SmileBASIC will hang.
When the DEF instruction is executed using the same name as a loaded instruction or function, SmileBASIC may hang.
When a syntax error occurs in a user-defined statement or function, if the erroneous user-defined statement or function is used again in DIRECT mode, SmileBASIC will hang.
If the width in the function for the BGLOAD instruction is wider than the BG screen width, SmileBASIC will hang.
If the COPY instruction is executed without a function while the program is running, SmileBASIC will hang.
If a large program or a program with a large number of DEF and DATA statements is executed, memory will be corrupted and SmileBASIC will hang.
(The criterion for occuring data corruption is as follows: a program size of one megabyte, 900 DEFs, 200,000 actual and 340,000 integer DATA statements, and one million character strings per slot.)

Severity: Medium

(Workarounds are temporary.)

The SPSET function type does not run correctly with DISPLAY 1.
Workaround: When using a function type, run it on DISPLAY 0 or XSCREEN 0, 1, or 4.
If a comment with REM is attached to the end of an IF statement, the next line will be interpreted as the THEN continuation.
Workaround: Attach a comment with an apostrophe (‘).
If 0 or 512 are specified in the second argument in the XSCREEN instruction, the BGPAGE settings will be ignored on the display for which a sprite has not been assigned.
Workaround: Avoid specifying 0 or 512 in the second argument.
After specifying or assigning a constant string for a user-defined statement or function argument/OUT variable is a character string, if the first argument of PUSH, POP, SHIFT, or UNSHIFT is specified directly, a type mismatch error will occur
If the magnification is actual size on GPUTCHR (the scale value has been omitted or 1,1 is set) and the right side of the drawing range is bleeding from the draw clipping, the drawing will not be as intended.
When the Z coordinate is obtained using BGOFS, in the value returned the actual value and the sign are inverted.
If SPCLR is performed on a sprite for which the Z coordinate was specified on SPOFS, and SPSET is then performed again, even though Z = 0, the Z coordinate is displayed as the Z coordinate set previously.
Workaround: After performing SPSET, set the Z coordinate again on SPOFS.
When using GCIRCLE, if attempting to draw a circle that is outside of the drawing range, part of the circle may be broken and an irregular arc may be drawn.
If character strings specified as parameters stop as an error inside statements or functions, memory leak may occur.
If a CONTINUE instruction is used between a REPEAT instruction and an UNTIL instruction, rather than jumping to the location of the UNTIL instruction, the code will jump to the location of the REPEAT instruction.
If FORMAT$(“%D”,&H80000000) is set, the correct result will not be returned.
(Only occurs when &H80000000 is displayed on %D.)
In DEF, global variables and local arrays with the same name cannot be defined.
If three Y coordinates using GTRI have the same value, an abnormal color may be drawn.
If the resource type is specified when using FILES, a memory leak will occur.
If the resource type is omitted and the project is specified when using FILES, only TXT type files are obtained
Up to eight tracks should be able to be played at the same time using BGMPLAY, but only up to four tracks can be played.
If the assessment range was specified using SPHITSP and SPHITRC for DISPLAY 1, collision detection may not function correctly.
During wireless communications, the value with the repeat function cannot be obtained correctly with the BUTTON function.

Issues with the Menu Screen

Severity: High

(Workarounds are temporary.)

On the screen displayed when selecting a file from “Browse Projects,” touching “TXT” at the touch screen while touching the Y button at the same time will cause the program to forcibly stop.
If a file name is changed multiple times using “Rename” from the FILE MENU, the program will forcibly stop.
(If the file name is changed more than 20 times, the program is likely to forcibly stop.
If a dialog box is repeatedly displayed in an extremely high speed loop, the program cannot quit.

Severity: Medium

(Workarounds are temporary.)

In EDIT mode, if the keyboard is switched to Graphic Character mode after touching the Search button, the Search End button is replaced by the Search button.
When displaying a long file name on a dialog box, the file name may bleed from the screen.
When attempting to download a file from the server that has a filename that already exists, the rename file button may not respond.
If DAT is pressed immediately after switching to the Select File screen and Y is then pressed, the display layout will break.
When using MPSTART, if acting as host system for the second time in a row or more, terminal names may display abnormally in the dialog box when waiting for terminals to connect.

Additions/Changes in Ver. 3.2.0 (June 17, 2015)

Addition of constant literals

  • Handles alphanumeric characters that begin with hashtags (#) as constant literals.
  • Constant literals are interpreted as the constant values they correspond to while compiling.

Handling of numerical constant expressions

  • In previous versions, terms were calculated even when all constant expressions were executed, but from Ver. 3.2 they are calculated before execution, and are now handled as one constant.
    Due to this change, even instructions that can use only constant values (DATA statements) can now use expressions if they consist of only constants.
    (However, please note that this change is for handling only numerical constants, so if a character string contains a conventional operator, it will be handled as an expression.)

Batch execution of sprite and BG callbacks

  • A callback routine can be set for each sprite and BG using the SPFUNC and BGFUNC instructions.
  • The set callback routine will be called together using CALL SPRITE or CALL BG.
  • The sprite management number and BG layer number corresponding to a callback can be obtained using a CALLIDX system variable
  • A subroutine (label) or user-defined statement can be set for a callback.

Additive synthesis for a sprite

  • If bit5 is turned on using an attribute, the sprite is rendered as an addition.

Addition of console characters

  • Kanji equivalent to JIS level 1 were added as console characters. (Misaki font is used as the font.)

New instructions

  • FADE (Screen fade control)
  • FADECHK (Checks that fading animation has ended)
  • SPUSED (A function that returns whether a sprite is in use or not)
  • SPFUNC (Sets sprite callbacks)
  • BGFUNC (Sets BG callbacks)
  • CALL SPRITE/CALL BG (Executes sprite/BG callbacks)
  • FILL (Sets array elements all at once)

Addition of Functions for Existing Instructions and Functions

  • SPCHR (U, V, W, H, and ATTR can be omitted)
  • SPPAGE (Setting values can be obtained)
  • SGPAGE (Setting values can be obtained)
  • GPAGE (Setting values can be obtained)
  • DIALOG (Special mode and File Name Input mode have been added)
  • TALK (Changes pitch and volume)

Gold Member Rights

  • The Purchase Additional Functions button has been added to the TOP MENU.
    By purchasing Gold Member Rights from here, you can increase the number of files that you can upload to 100 and the maximum file size to 20 MB.
    (If you upload more than 10 files while your Gold Membership is valid, you can download all uploaded files even after your membership expires. However, as your number of uploaded files will therefore be greater than 10, in order to upload new files you will need to either delete existing files or become a Gold Member once more.)
  • Price: 100 yen for 30 days; 500 yen for 180 days

Other items

  • A basic file menu has been added to DIRECT mode and EDIT mode.
    If you press the L or R button, SAVE/LOAD/File Name will appear on the top of the touch screen. If you touch SAVE or LOAD, you can save or load the slot that you are currently editing.
  • Colors have been added to built-in instructions in EDIT mode.
    The background color for EDIT mode can now also be set from the Option screen.
  • The sort order on the file selection menu has been changed to alphabetic order.

Fixes in Ver. 3.1.0 (March 4, 2015)

Issues with the BASIC interpreter

Severity: High

(Workarounds are temporary.)

When using the GCOPY instruction, if specifying both start and end point coordinates outside the graphic page area, SmileBASIC may hang.
If the UNSHIFT instruction is used for string arrays, memory may be corrupted and SmileBASIC may hang
If the length of the result in an expression that strings*numerical values is longer than 1073741824, SmileBASIC will hang.
If you use the SPSET instruction in the sprite specified in the first argument in the SPLINK instruction and specify the argument in the SPLINK instruction again, the link will break and if you operate the sprite after that, SmileBASIC will hang.
If a variable definition or DEF…END are specified between a label name and a DATA statement, when attempting to restore and read that label, an internal error may occur and SmileBASIC may hang
Workaround: Do not write code other than DATA statements immediately after a label for RESTORE.
SmileBASIC hangs when assigning internal variables in MML.

Severity: Medium

An illegal MML error may occur for music that uses MML, even though the syntax is correct.
When the volume is set to 0 using BGMPLAY, music is played at the default volume.
An error will not occur even if an expression that is not a variable name is specified in a location for a variable name by assigning an array.
(In previous updates, an error would occur after patching.)
If the POP and SHIFT instructions are used for string arrays, a memory leak will occur.
After pressing the START button on the 3DS, if “Create Programs
with SmileBASIC” is selected from the TOP MENU, the RUN command is executed immediately after SmileBASIC is displayed
If the CHKFILE instruction is used from the program that is assigned to the Smile Tool, an out of range error will occur.
Workaround: Specify a SLOT, such as “PRG0:”, in the file name.
An error does not occur for a sprite that does not have SPSET set even if various operations are performed.
When a variable (SPRITE variable 7) is specified for a SPANIM instruction animation target, SmileBASIC does not function correctly.
When a string array is declared in a FOR…NEXT loop or other loop syntax, a memory leak will occur.
Workaround: Move the array declaration outside of the loop.
If a GPAGE instruction is used after executing the GCLIP instruction, the drawing clipping area is reset.
When the border color is specified with the GPAINT instruction, the filling of complicated shapes may fail.
Part of the settings at the touch screen (console color and various graphic settings) will not reset with the ACLS instruction

Issues with the Menu Screen

Severity: High

On the Select a File screen, the OK button may be enabled even if a file is not selected, and if it is pressed, SmileBASIC may hang.

Severity: Medium

(Workarounds are temporary.)

If you upload a project that contains a file with a file size of 0, it will fail to download.
Workaround: Delete the file with a file size of 0 from the project, and upload the project again.
Periods cannot be entered in file names.
On the menu from which a project and/or a file can be selected, a file selection made with the Control Pad cannot be confirmed with a double touch.
On the menu from which a project can be selected, it is sometimes not possible to press Select File.
If a file with a 14-character file name is uploaded to the SmileBoom server, the last character will be deleted.
(There are no issues when uploading projects.)

Additions/Changes in Ver. 3.1.0 (March 4, 2015)

If a label is used in an expression, it is handled as a string

  • @foo is handled in the same way as “@foo”.
    Previously, in order to add labels as instruction arguments, strings had to be added, but labels can now be specified directly.

    Old
    COPY A,"@FOO"
    New
    COPY A,@FOO

    (Please note that label literals in regular expressions are now interpreted as string constants. Label type values have not increased.)

  • As labels will be handled as strings in expressions, the following can also be specified:

    A$=@FOO*3 '@FOO@FOO@FOO

Addition of ELSEIF

  • The ELSEIF keyword can now be used in an IF statement.
    For example:
    IF COND1 THEN
    ELSEIF COND2 THEN
    ELSEIF COND3 THEN
    ENDIF

    (Unlike ELSE IF, ENDIF is one word.)

Additional Instructions

  • CLASSIFY (Returns either an ordinary numerical value, infinity, or not-a-number [NaN])
  • GTRI (Draws a triangle on the graphic screen and fills it with a color)
  • GPUTCHR (Draws a character string on the graphic screen)
  • BGCOLOR (Gets and sets the BG display color)
  • HARDWARE (System variable for determining the environment)

Addition of Functions for Existing Instructions and Functions

  • GCIRCLE (Addition of a function to draw an arc)
  • SPHITSP (The sprite range can now be specified to detect a sprite collision)
  • SPHITRC (The sprite range can now be specified to detect a sprite collision)
  • SPCOL (A parameter can be obtained in the OUT format)
  • SPSET (Addition of a function for searching for empty sprite management numbers and assigning numbers to them)
  • SPDEF (Addition of a function to copy sprite character definition templates and fix parameters)
  • BGANIM (Addition of display colors to animation targets)
  • CHKLABEL (Addition of an option to search global labels if a label is not found within DEF)
  • PRGEDIT (If -1 is specified for the line number, the last line is specified)
  • PRGINS (If 1 is specified in the second argument, a line is inserted after the current line)
  • BGMSTOP (Addition of a function that can also stop special sounds that normally do not stop)

Other Changes Related to BASIC

  • Fixed font (Kana and some other characters are now easier to read)
  • Sprites that are operated but do not have SPSET set will now return an error.
  • In sprite collision detection, the meaning of mask value 0 was changed from “Always collide” to “Ignore collision detection.”
  • Font reset was added to the ACLS instruction result.
  • Detailed reports of MML-related errors are now output.
  • The X coordinate of the LOCATE instruction will be accepted up to the right side of the screen +1.
  • In the command history of DIRECT mode, it is no possible to return to the column currently being input.

Addition of functions to the TOP MENU

  • Added the “SmileBASIC Web Tutorial” button, which opens the web browser to view the tutorial.
  • Added the “Browse Samples” button to specially start the built-in samples.
  • Added the “Reset All Settings” button to “Options.”

Fixes in Ver. 3.0.2 (January 7, 2015)

Issues with the BASIC Interpreter

Severity: High

If less than -32768 or more than 65536 integers are used in DATA statements and reading of real number variables is attempted, SmileBASIC may hang.
When arrays are defined with DIM and VAR, if you specify strings in elements, SmileBASIC will hang.
If POP or SHIFT are used, SmileBASIC will hang.
If RSORT is used, a memory leak will occur; if used repeatedly, SmileBASIC will eventually hang.
If STOP is used in DEF…END and undefined variables are used in DIRECT mode, SmileBASIC will hang.
Normally, characters that cannot be used in file names can be used in file instructions (SAVE, LOAD, RENAME, DELETE, and CHKFILE.)
If you specify labels in READ instruction parameters, or omit parameters, SmileBASIC will hang.
If string type local variables that have not been initialized are returned as user-defined function return values, the values will be corrupted.
(This problem does not occur with numerical value type local variables.)
If a space is not inserted after RUN and NEW, and an uninterpretable character (Kana and so on) is input, SmileBASIC will hang.
SmileBASIC will hang if an instruction that is defined using DEF in DIRECT mode is used.
If you change a file name back to its original name with the RENAME instruction, the file disappears.
If the BEEP instruction is used frequently, SmileBASIC will hang.
If a syntax error occurs while a multi-statement is executing after a variable has been defined in DIRECT mode, the next time that variable is used, SmileBASIC may hang.
When attempting to load a data format that cannot be loaded, SmileBASIC will hang.
(For example, when loading a file that was saved as an array in .grp format.)

Severity: Medium

An error will not occur even if an expression that is not a variable name is specified in a location for a variable name by assigning an array.
(All of the assigned expression will be ignored.)
The WAVSETA default reference pitch is different to the WAVSET reference pitch (the value is 66; 69 is the correct value.)
If 0 is passed to the RND argument (RND(0)), an erroneous value is returned.
When a constant array for bitmap data or palette data is specified with GLOAD, images are not drawn correctly.
If a user-defined function is stopped with the STOP instruction or due to an error, the local variables are not released and a memory leak will occur.
The SPHIDE effect is disabled depending on the SPANIM character animation.
The sprite definition number cannot be obtained using SPCHR OUT.
Graphic pages other than pages 0, 4, and 5 cannot be initialized with ACLS.
Sprites that use SPHIDE may be SPHITSP and SPHITRC collision detection targets.
If you draw a circle with a radius of 0 using GCIRCLE, an out of range error will occur.
Some places may not be painted with GPAINT that does not have a border color specified.
Synchronization using the VSYNC and WAIT instructions may deviate from system drawing synchronization.
(Easy to confirm when the device is in an unsteady and/or flickering state.)
An external label cannot be specified using RESTORE in a user-defined statement.
There is a mistake in the instruction input support function (indication of the order and a space at the end of the keyword.)
When scrolling on the console screen, only Z information (depth) will not scroll.
After executing an ACLS instruction, the maximum number of sprites and BGs that can be used is halved.
In user-defined statements, local variables with the same names as previously-defined global variables cannot be defined.
If internal variables are used in the BGMPLAY N command, the volume will be lower than the specified sound.
The stored order of the return values in BGOFS, BGHOME, and BGSCALE are inverted.
If ELSE is written after the PRINT semi-colon (PRINT; ELSE), a type mismatch will occur.
If DATE$ and/or TIME$ is used in an expression, a memory leak will occur.
(There is no problem with directly using TIME$ or DATE$ as an instruction or function parameter.)
After starting the Smile Tool, there is no way to release the memory used by the tool, and as a result a memory leak will occur.

Issues with the Menu screen

Severity: High

When attempting to use the copy function in “Manage Projects/Files” to overwrite an existing file, the file may be corrupted.
If you press the HOME button while a BASIC program is running and start Miiverse, you cannot progress past the Miiverse login screen until the BASIC program quits.
SmileBASIC hangs if you press the Y button on a dialog box when selecting a file on the server.
When holding down the L and R buttons to start SmileBASIC, the screen may not transition.
When double-clicking “Manage Projects/Files” > “Delete” > [desired folder] > “OK”, SmileBASIC stops.
SmileBASIC hangs if the D-pad/analog stick is pressed when there are no work list items.
SmileBASIC freezes if the Circle Pad Pro is calibrated while the XON EXPAD is still attached.
It may not be possible to press the “Return” button on the FILE MENU Rename screen.

Severity: Medium

After executing MPSTART, the device becomes a terminal and if the wireless switch is turned off on the host system selection screen, the display is abnormal.
When accessing the TOP MENU after executing XON EXPAD and then closing the 3DS cover, the “Circle Pad Pro has been disconnected” dialog box will occasionally overlap with the TOP MENU.

Issues with the Sample and Smile Tool

Sample Program

There are BG surfaces that are not displayed on the BG priority list (hidden by the previous BG) in the sample program GAME3JUMP.

Smile Tool

When rotating an image with the MAP editor in the Smile Tool, a different image will appear.
Latest updates