LoginLogin

Fuze Basic - First Impressions

Root / Programming Questions / [.]

seggiepantsCreated:
To quote chat... "AAAAAAAAA"

The Fuze Workstations look really cool like a computer from the 80s, which is quite fitting because they all ran BASIC. They're kind of overpriced tho, $100 for just the case without the Pi in it.

According to Nintendo Life http://www.nintendolife.com/news/2018/10/fuze4_nintendo_switch_will_let_you_code_your_own_games_on_switch_from_april_next_year, Fuze 4 Switch is now delayed to April 1, 2019. I guess it is no worry my game book is so far behind schedule now. (Doesn't look like their own page has the updated date yet. It was supposed to be out end of November). I am thinking that SmileBasic Switch will probably beat them to the market now. I also saw a thread response on their Fuze 4 Switch page saying that the program would be closer to Python than Fuze Basic. So maybe diving into the computer version to get a head start was a waste of time. However if it is more like Python that might help differentiate it from Smile Basic so both could co-exist. What are your thoughts, was anyone else waiting for Fuze 4 Switch?

>April 1st Anyway if it's supposed to be like Python, why don't they just use Python?

the resources.zip from November 12, 2018 contains a few demo programs one of them is "switchDemo.fuze"
PROC setup
PROC intro
PROC runCodeAtLine(0)
PROC runprog1
PROC runCodeAtLine(nextprog)
PROC runprog2
PROC runCodeAtLine(nextprog)
PROC runprog3
PROC runCodeAtLine(nextprog)
PROC runprog4
PROC runCodeAtLine(nextprog)
PROC runprog5
PROC runCodeAtLine(nextprog)
END 
//
DEF PROC runprog1
linenum = 0
WAIT (.2)
PROC highlightkey("run")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
WAIT (.1)
PROC clearscreen
INK = White
fontSize (textsize)
plotText ("Hello World ", screenx + (8 * textsize), gHeight - ((10 * textsize) * linenum))
UPDATE 
linenum = linenum + 2
WAIT (.2)
plotText ("READY>", screenx + (8 * textsize), gHeight - ((10 * textsize) * linenum))
UPDATE 
WAIT (1)
ENDPROC 
DEF PROC runprog2
linenum = 0
WAIT (.2)
PROC highlightkey("run")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
WAIT (.1)
PROC clearscreen
INK = White
fontSize (textsize)
WHILE (10 * textsize) * linenum < gHeight LOOP 
  plotText ("Hello Nintendo", screenx + (8 * textsize), gHeight - ((10 * textsize) * linenum))
  UPDATE 
  linenum = linenum + 1
REPEAT 
WAIT (.3)
PROC highlightkey("escape")
playSample (keyclick(RND (3) + 1), 0, 0)
COLOUR = Black
RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
FOR n = 0 TO 3 LOOP 
  scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
  UPDATE 
REPEAT 
WAIT (.1)
linenum = linenum - 4
plotText ("ESCAPE AT LINE 2", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
UPDATE 
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
linenum = linenum + 2
plotText ("READY>", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
WAIT (1)
ENDPROC 
DEF PROC runprog3
text$ = "Hello Nintendo "
linenum = 0
textsize = textsize+1
WAIT (.2)
PROC highlightkey("run")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
WAIT (.1)
PROC clearscreen
INK = White
fontSize (textsize)
tx = screenx + 8
FOR i = 0 TO 340 LOOP 
  FOR n = 0 TO LEN (text$) - 1 LOOP 
    letter$ = MID$ (text$, n, 1)
    plotText (letter$, tx, gHeight - (10 * textsize) * linenum)
    tx = tx + 8 * textsize
    IF tx > gWidth - 8 * textsize THEN 
      linenum = linenum + 1
      tx = screenx + 8
    ENDIF 
    IF linenum * 10 * textsize >= gHeight THEN 
      COLOUR = Black
      RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
      scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
      UPDATE 
      linenum = linenum - 2
    ENDIF 
  REPEAT 
  UPDATE 
REPEAT 
FOR n = 0 TO 4 LOOP 
  COLOUR = Black
  RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
  scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
  UPDATE 
  WAIT (.05)
REPEAT 
linenum = linenum - 4
PROC highlightkey("escape")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotText ("ESCAPE AT LINE 3", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
UPDATE 
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
linenum = linenum + 2
plotText ("READY>", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
WAIT (1)
textsize=textsize-1
ENDPROC 
DEF PROC runprog4
text$ = "Hello Nintendo "
PaperOn
textsize=textsize+1 
PAPER = Red
INK = White
linenum = 0
WAIT (.2)
PROC highlightkey("run")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
WAIT (.1)
PROC clearscreen
fontSize (textsize)
tx = screenx + 8
FOR i = 0 TO 240 LOOP 
  FOR n = 0 TO LEN (text$) - 1 LOOP 
    letter$ = MID$ (text$, n, 1)
    plotText (letter$, tx, gHeight - (10 * textsize) * linenum)
    tx = tx + 7 * textsize
    IF tx > gWidth - 7 * textsize THEN 
      linenum = linenum + 1
      tx = screenx + 8
    ENDIF 
    IF linenum * 10 * textsize >= gHeight THEN 
      COLOUR = Black
      RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
      scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
      UPDATE 
      linenum = linenum - 2
    ENDIF 
  REPEAT 
  UPDATE 
  WAIT (0.01)
REPEAT 
FOR n = 0 TO 4 LOOP 
  COLOUR = Black
  RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
  scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
  UPDATE 
  WAIT (.05)
REPEAT 
PaperOff 
linenum = linenum - 4
PROC highlightkey("escape")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotText ("ESCAPE AT LINE 3", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
UPDATE 
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
linenum = linenum + 2
plotText ("READY>", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
WAIT (1)
textsize=textsize-1
ENDPROC 
DEF PROC runprog5
text$ = "Hello Nintendo "
PaperOn 
linenum = 0
textsize=textsize+1
WAIT (.2)
PROC highlightkey("run")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
WAIT (.1)
PROC clearscreen
fontSize (textsize)
tx = screenx + 8
FOR i = 0 TO 240 LOOP 
  PAPER = RND (30)
  INK = RND (30)
  FOR n = 0 TO LEN (text$) - 1 LOOP 
    letter$ = MID$ (text$, n, 1)
    plotText (letter$, tx, gHeight - (10 * textsize) * linenum)
    tx = tx + 7 * textsize
    IF tx > gWidth - 7 * textsize THEN 
      linenum = linenum + 1
      tx = screenx + 8
    ENDIF 
    IF linenum * 10 * textsize >= gHeight THEN 
      COLOUR = Black
      RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
      scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
      UPDATE 
      linenum = linenum - 2
    ENDIF 
  REPEAT 
  UPDATE 
  WAIT (0.01)
REPEAT 
FOR n = 0 TO 4 LOOP 
  COLOUR = Black
  RECT (screenx, 0, gWidth - getImageW (kb), 10 * textsize, 1)
  scrollUp (screenx, screeny, screenw, screenh, 10 * textsize)
  UPDATE 
  WAIT (.05)
REPEAT 
PaperOff 
linenum = linenum - 4
PROC highlightkey("escape")
playSample (keyclick(RND (3) + 1), 0, 0)
WAIT (.1)
plotText ("ESCAPE AT LINE 3", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
UPDATE 
WAIT (.1)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
linenum = linenum + 2
plotText ("READY>", screenx + 8 * textsize, gHeight - (10 * textsize) * linenum)
WAIT (1)
textsize=textsize-1

wait(1)
cls
Print "Cheers!"
end
ENDPROC 
DEF PROC highlightkey(keypressed$)
plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
UPDATE 
shifted = FALSE
FOR shiftcheck = 0 TO maxshifted LOOP 
  IF ASC (keypressed$) = shifted(shiftcheck) THEN 
    shifted = TRUE
    BREAK 
  ENDIF 
REPEAT 
IF ASC (keypressed$) = 34 THEN shifted = TRUE
FOR ID = 0 TO maxkeys LOOP 
  IF keypressed$ = keyboard$(ID) THEN 
    setAlpha (70)
    COLOUR = White
    RECT (keyboard(ID, 0), keyboard(ID, 1), keyboard(ID, 2), keyboard(ID, 3), 1)
    IF shifted = TRUE THEN RECT (keyboard(lshiftID, 0), keyboard(lshiftID, 1), keyboard(lshiftID, 2), keyboard(lshiftID, 3), 1)
    setAlpha (255)
    UPDATE 
    BREAK 
  ENDIF 
REPEAT 
ENDPROC 
DEF PROC clearscreen
rgbColour (30, 20, 20)
RECT (gWidth - 8, screeny, 8, screenh, 1)
boxstep = int( -8 -(scale / 100))
wait(0.1)
FOR n = gWidth TO screenx STEP boxstep LOOP 
  scrollLeft (screenx, screeny, screenw, screenh, -boxstep)
  UPDATE 
REPEAT 
rgbColour (0, 0, 0)
RECT (screenx, screeny, 8, screenh, 1)
boxstep = int(8 -(scale / 100))
wait(0.1)
FOR n = screenx TO gWidth STEP boxstep LOOP 
  scrollRight (n, screeny, screenw, screenh, boxstep)
  UPDATE 
REPEAT 
ENDPROC 
DEF PROC cleareditor
COLOUR = Red
boxstep = 8 - (scale / 100)
wait(0.1)
FOR n = getImageH (kb) TO (gHeight - getImageH (fcs)) STEP boxstep LOOP 
  RECT (0, n, getImageW (fcs) - 1, boxstep, 1)
  UPDATE 
REPEAT 
COLOUR = DarkGrey
boxstep =  - (8 - scale / 100)
wait(0.1)
FOR n = (gHeight - getImageH (fcs)) TO getImageH (kb) STEP boxstep LOOP 
  RECT (0, n, getImageW (fcs) - 1, boxstep, 1)
  UPDATE 
REPEAT 
ENDPROC 
DEF PROC intro
setMusicVol (musicvol)
playMusic (tune1, 99)
plotImage (fcs, gWidth / 2, logoy)
timer = MICROTIME
WHILE MICROTIME - timer < 7500000 * (scale / 150) LOOP 
  PROC bouncybouncy
  UPDATE 
  frame = (MICROTIME - timer) / 1000
REPEAT 
PROC clearballs(5)
FOR n = logox TO (getImageW (fcs) / 2) STEP -2 LOOP 
  scrollLeft (0, 0, gWidth, gHeight, 2)
  UPDATE 
REPEAT 
plotImage (fcs, getImageW (fcs) / 2, gHeight - getImageH (fcs) / 2)
intro = FALSE
WHILE musicvol > 30 LOOP 
  WAIT (0.01)
  musicvol = musicvol - 1
  setMusicVol (musicvol)
REPEAT 
ENDPROC 
DEF PROC bouncybouncy
FOR n = 0 TO maxballs LOOP 
  ball(n, 4) = ball(n, 4) + ((g / 1000) / 100) * frame
  ball(n, 3) = ball(n, 3) - ball(n, 4)
  IF ball(n, 3) <= 0 THEN 
    ball(n, 4) =  - ball(n, 4) * .9 + (RND (1) / 3)
    ball(n, 3) = 0
  ENDIF 
  plotSprite (ball(n, 0), ball(n, 1), ball(n, 3), 0)
REPEAT 
ENDPROC 
DEF PROC clearballs(speed)
FOR n = 0 TO maxballs LOOP 
  setSpriteAngle (ball(n, 0), RND (360))
REPEAT 
counter = maxballs
WHILE counter >= 0 LOOP 
  FOR n = 0 TO maxballs LOOP 
    advanceSprite (ball(n, 0), speed * (scale / 100))
    IF SpriteOut (ball(n, 0)) = TRUE AND ball(n, 6) <> 99 THEN 
      ball(n, 6) = 99
      counter = counter - 1
    ENDIF 
  REPEAT 
  IF intro = TRUE THEN 
    IF logoy < gHeight - getImageH (fcs) / 2 THEN logoy = logoy + 1
    plotImage (fcs, logox, logoy)
    COLOUR = White
    RECT (gWidth / 2 - (getImageW (fcs) / 2) - 1, logoy - (getImageH (fcs) / 2) - 1, getImageW (fcs) + 2, getImageH (fcs) + 2, 0)
    IF kby < getImageH (kb) / 2 THEN kby = kby + 2
    plotImage (kb, kbx, kby)
    UPDATE 
  ENDIF 
REPEAT 
ENDPROC 
DEF PROC setup
updateMode = 0
//FULLSCREEN = TRUE
setMode (1000,600)
scale = (100 / 1920) * (gWidth / 100) * 100
textsize = int(gwidth/500)
PAPER = White
CLS 
PaperOff 
DIM keyclick(3)
keyclick(0) = loadSample ("enterkey.wav")
keyclick(1) = loadSample ("key0.wav")
keyclick(2) = loadSample ("key1.wav")
keyclick(3) = loadSample ("key2.wav")
tune1 = loadMusic ("tune1.wav")
musicvol = 80
fcs = loadImage ("fcslogo.png")
scaleImage (fcs, scale)
kb = loadImage ("kb.png")
scaleImage (kb, scale)
setImageOrigin (fcs, getImageW (fcs) / 2, getImageH (fcs) / 2)
setImageOrigin (kb, getImageW (kb) / 2, getImageH (kb) / 2)
logox = gWidth / 2
logoy = gHeight / 2 + (getImageH (fcs) / 2)
kbx = gWidth / 2
kby =  - getImageH (kb) / 2
screenx = getImageW (fcs)
screeny = 0
screenw = gWidth - getImageW (fcs)
screenh = gHeight
maxballs = 140
g = 9.807
frame = 16
DIM ball(maxballs, 6)
FOR n = 0 TO maxballs LOOP 
  ball(n, 0) = newSprite (1)
  loadSprite ("gem" + CHR$ (48 + RND (5)) + ".png", ball(n, 0), 0)
  setSpriteSize (ball(n, 0), scale)
  ball(n, 1) = RND (gWidth * 0.85) + gWidth * 0.05 // x position
  ball(n, 2) = 0 // x direction
  ball(n, 3) = gHeight + RND (gHeight) // Height = 10 metres
  ball(n, 4) = 0 // ball velocity
REPEAT 
intro = TRUE
DIM keyword$(100)
count = 0
text$ = ""
WHILE text$ <> "QQQQ" LOOP 
  READ text$
  IF text$ <> "QQQQ" THEN keyword$(count) = text$
  count = count + 1
  maxkeywords = count - 2
REPEAT 
// Keywords
DATA "FONTSIZE", "LOOP", "REPEAT", "END", "PRINT", "INK", "PAPER", "CLS", "RND", "COLOUR", "PLOT", "RECT", "CIRCLE", "FOR", "TO", "STEP", "DIM"
DATA "WHILE", "UNTIL", "DATA", "PROC", "DEF PROC", "ENDPROC", "CLS2", "UPDATE", "TIME", "MICROTIME", "IF", "THEN", "ELSE", "ENDIF"
DATA "AND", "OR", "NOT", "MOUSEY", "MOUSEX", "TOUCH", "MULTITOUCH", "LEFTCLICK", "MIDDLECLICK"
DATA "QQQQ"
DIM operator$(100)
count = 0
text$ = ""
WHILE text$ <> "QQQQ" LOOP 
  READ text$
  IF text$ <> "QQQQ" THEN operator$(count) = text$
  count = count + 1
  maxoperators = count - 2
REPEAT 
// Operators
DATA "!", "$", "^", "&", "*", "(", ")", "-", "+", "=", "[", "]"
DATA ";", "<", "<=", ">", ">=", "/"
DATA "QQQQ"
DIM systemvariable$(100)
count = 0
text$ = ""
WHILE text$ <> "QQQQ" LOOP 
  READ text$
  IF text$ <> "QQQQ" THEN systemvariable$(count) = text$
  count = count + 1
  maxsystemvariables = count - 2
REPEAT 
// System variables
DATA "WHITE", "BLACK", "BLUE", "LIGHTBLUE", "RED", "PINK", "LIGHTPINK", "GREY", "DARKGREY", "LIGHTGREY", "SILVER", "MAROON"
DATA "PURPLE", "TEAL", "AQUA", "NAVY", "RASPBERRY", "ORANGE", "YELLOW", "LIGHTYELLOW", "DARKGREEN", "GREEN", "BRIGHTGREEN"
DATA "BROWN", "LIGHTBROWN", "OLIVE", "LIGHTGREEN", "GOLD", "CYAN", "LIME", "TRUE", "FALSE", "GWIDTH", "GHEIGHT"
DATA "LCONRUMBLE", "RCONRUMBLE", "LCONSTICKX", "LCONSTICKY", "DISTANCE", "LIGHT", "LCONSHAKE", "RCONSHAKE"
DATA "LCONPAD", "RCONPAD", "RCONSTICKX", "RCONSTICKY", "TWIDTH", "THEIGHT", "INKEY", "PI"
DATA "TILTX", "TILTY", "TILTZ", "ACCELX", "ACCELY", "ACCELZ", "LCONBUTTON", "RCONBUTTON"
DATA "QQQQ"
maxlines = 100
text$ = ""
count = 0
DIM progs$(maxlines)
WHILE text$ <> "ENDEND" LOOP 
  READ text$
  IF text$ <> "ENDEND" THEN progs$(count) = text$
  count = count + 1
REPEAT 
DATA "[PRINT][ ][{34}Hello World{34}][?]"
DATA "[END][?]"
DATA "[??]"
DATA "[LOOP][?]"
DATA "[TAB][PRINT][ ][{34}Hello Nintendo {34}][?]"
DATA "[REPEAT][?]"
DATA "[END][?]"
DATA "[??]"
DATA "[LOOP][?]"
DATA "[TAB][PRINT][ ][{34}Hello Nintendo {34}][;][?]"
DATA "[REPEAT][?]"
DATA "[END][?]"
DATA "[??]"
DATA "[FONTSIZE][(][3][)][?]"
DATA "[LOOP][?]"
DATA "[TAB][INK][ ][=][ ][WHITE][?]"
DATA "[TAB][PAPER][ ][=][ ][RED][?]"
DATA "[TAB][PRINT][ ][{34}Hello Nintendo {34}][;][?]"
DATA "[REPEAT][?]"
DATA "[END][?]"
DATA "[??]"
DATA "[FONTSIZE][(][3][)][?]"
DATA "[LOOP][?]"
DATA "[TAB][INK][ ][=][ ][RND][(][30][)][?]"
DATA "[TAB][PAPER][ ][=][ ][RND][(][30][)][?]"
DATA "[TAB][PRINT][ ][{34}Hello Nintendo {34}][;][?]"
DATA "[REPEAT][?]"
DATA "[END][?]"
DATA "[??]"
DATA "ENDEND"
//
maxkeys = 116
DIM keyboard(maxkeys, 3)
DIM keyboard$(maxkeys)
FOR n = 0 TO maxkeys LOOP 
  READ key$
  READ x, y, w, h
  IF key$ = "34" THEN key$ = CHR$ (34)
  keyboard$(n) = key$
  keyboard(n, 0) = x * (scale / 100)
  keyboard(n, 1) = y * (scale / 100)
  keyboard(n, 2) = w * (scale / 100)
  keyboard(n, 3) = h * (scale / 100)
  IF key$ = "lshift" THEN lshiftID = n
REPEAT 
DATA "escape", 8, 256, 72, 57
DATA "1", 85, 256, 57, 57
DATA "!", 85, 256, 57, 57
DATA "2", 148, 256, 57, 57
DATA "34", 148, 256, 57, 57
DATA "3", 211, 256, 57, 57
DATA "£", 211, 256, 57, 57
DATA "4", 274, 256, 57, 57
DATA "$", 274, 256, 57, 57
DATA "5", 338, 256, 57, 57
DATA "%", 338, 256, 57, 57
DATA "6", 401, 256, 57, 57
DATA "^", 401, 256, 57, 57
DATA "7", 465, 256, 57, 57
DATA "&", 465, 256, 57, 57
DATA "8", 528, 256, 57, 57
DATA "*", 528, 256, 57, 57
DATA "9", 591, 256, 57, 57
DATA "(", 591, 256, 57, 57
DATA "0", 655, 256, 57, 57
DATA ")", 655, 256, 57, 57
DATA "-", 718, 256, 57, 57
DATA "_", 718, 256, 57, 57
DATA "=", 781, 256, 57, 57
DATA "+", 781, 256, 57, 57
DATA "backspace", 845, 256, 85, 57
DATA "home", 935, 256, 57, 57
DATA "tab", 9, 192, 72, 57
DATA "Q", 88, 192, 57, 57
DATA "q", 88, 192, 57, 57
DATA "W", 153, 192, 57, 57
DATA "w", 153, 192, 57, 57
DATA "E", 218, 192, 57, 57
DATA "e", 218, 192, 57, 57
DATA "R", 283, 192, 57, 57
DATA "r", 283, 192, 57, 57
DATA "T", 349, 192, 57, 57
DATA "t", 349, 192, 57, 57
DATA "Y", 414, 192, 57, 57
DATA "y", 414, 192, 57, 57
DATA "U", 479, 192, 57, 57
DATA "u", 479, 192, 57, 57
DATA "I", 544, 192, 57, 57
DATA "i", 544, 192, 57, 57
DATA "O", 610, 192, 57, 57
DATA "o", 610, 192, 57, 57
DATA "P", 675, 192, 57, 57
DATA "p", 675, 192, 57, 57
DATA "[", 740, 192, 57, 57
DATA "{", 740, 192, 57, 57
DATA "]", 805, 192, 57, 57
DATA "}", 805, 192, 57, 57
DATA "#", 870, 192, 57, 57
DATA "~", 870, 192, 57, 57
DATA "page up", 936, 192, 57, 57
DATA "lshift", 9, 129, 97, 57
DATA "A", 114, 129, 57, 57
DATA "a", 114, 129, 57, 57
DATA "S", 181, 129, 57, 57
DATA "s", 181, 129, 57, 57
DATA "D", 246, 129, 57, 57
DATA "d", 246, 129, 57, 57
DATA "F", 313, 129, 57, 57
DATA "f", 313, 129, 57, 57
DATA "G", 379, 129, 57, 57
DATA "g", 379, 129, 57, 57
DATA "H", 445, 129, 57, 57
DATA "h", 445, 129, 57, 57
DATA "J", 511, 129, 57, 57
DATA "j", 511, 129, 57, 57
DATA "K", 578, 129, 57, 57
DATA "k", 578, 129, 57, 57
DATA "L", 644, 129, 57, 57
DATA "l", 644, 129, 57, 57
DATA ";", 710, 129, 57, 57
DATA ":", 710, 129, 57, 57
DATA "'", 776, 129, 57, 57
DATA "@", 776, 129, 57, 57
DATA "enter", 841, 129, 85, 57
DATA "page down", 936, 129, 57, 57
DATA "ctrl", 9, 68, 68, 57
DATA "\", 83, 68, 57, 57
DATA "|", 83, 68, 57, 57
DATA "Z", 147, 68, 57, 57
DATA "z", 147, 68, 57, 57
DATA "X", 210, 68, 57, 57
DATA "x", 210, 68, 57, 57
DATA "C", 274, 68, 57, 57
DATA "c", 274, 68, 57, 57
DATA "V", 337, 68, 57, 57
DATA "v", 337, 68, 57, 57
DATA "B", 401, 68, 57, 57
DATA "b", 401, 68, 57, 57
DATA "N", 464, 68, 57, 57
DATA "n", 464, 68, 57, 57
DATA "M", 528, 68, 57, 57
DATA "m", 528, 68, 57, 57
DATA ",", 591, 68, 57, 57
DATA "<", 591, 68, 57, 57
DATA ".", 655, 68, 57, 57
DATA ">", 655, 68, 57, 57
DATA "/", 718, 68, 57, 57
DATA "?", 718, 68, 57, 57
DATA "rshift", 782, 68, 84, 57
DATA "up", 872, 68, 57, 57
DATA "end", 936, 68, 57, 57
DATA "run", 9, 10, 72, 52
DATA "file", 89, 10, 72, 52
DATA "edit", 169, 10, 72, 52
DATA "pref", 248, 10, 72, 52
DATA " ", 328, 9, 224, 53
DATA "media", 558, 10, 72, 52
DATA "help", 638, 10, 72, 52
DATA "delete", 714, 5, 84, 57
DATA "left", 806, 5, 57, 57
DATA "down", 870, 5, 57, 57
DATA "right", 935, 5, 57, 57
maxshifted = 18
DIM shifted(maxshifted)
FOR n = 0 TO maxshifted LOOP 
  READ ascval
  shifted(n) = ascval
REPEAT 
DATA 33, 34, -93, 36, 37, 94, 38, 40, 41, 95, 43, 123, 125, 126, 58, 64, 60, 62, 63
ENDPROC 
DEF PROC runCodeAtLine(linenumber)
PaperOff 
PROC cleareditor
fontSize (textsize - INT (scale / 100))
ink=red
cursorx = 30
cursory = gHeight - getImageH (fcs) - 10
text$ = ""
count = 0
RECT (cursorx + (textsize * 8), cursory - (textsize * 10), textsize * 8, (textsize * 10), 1)
UPDATE 
WAIT (0.5)
WHILE progs$(linenumber) <> "[??]" LOOP 
  IF MID$ (progs$(linenumber), count, 1) = "[" THEN 
    count = count + 1
    WHILE MID$ (progs$(linenumber), count, 1) <> "]" LOOP 
      IF MID$ (progs$(linenumber), count, 1) = "{" THEN 
        temp$ = ""
        count = count + 1
        WHILE MID$ (progs$(linenumber), count, 1) <> "}" LOOP 
          temp$ = temp$ + MID$ (progs$(linenumber), count, 1)
          count = count + 1
        REPEAT 
        text$ = text$ + CHR$ (VAL (temp$))
      ENDIF 
      IF MID$ (progs$(linenumber), count, 1) <> "}" THEN text$ = text$ + MID$ (progs$(linenumber), count, 1)
      count = count + 1
    REPEAT 
  ENDIF 
  found = FALSE
  FOR n = 0 TO maxkeywords LOOP 
    IF text$ = keyword$(n) THEN 
      found = TRUE
      INK = Raspberry
      BREAK 
    ENDIF 
  REPEAT 
  IF found = FALSE THEN 
    FOR n = 0 TO maxoperators LOOP 
      IF text$ = operator$(n) THEN 
        found = TRUE
        INK = Raspberry
        BREAK 
      ENDIF 
    REPEAT 
  ENDIF 
  IF found = FALSE THEN 
    FOR n = 0 TO maxsystemvariables LOOP 
      IF text$ = systemvariable$(n) THEN 
        found = TRUE
        INK = BrightGreen
        BREAK 
      ENDIF 
    REPEAT 
  ENDIF 
  IF found = FALSE AND LEFT$ (text$, 1) = CHR$ (34) THEN 
    INK = LightBlue
    found = TRUE
  ENDIF 
  IF found = FALSE AND ASC (text$) >= 48 AND ASC (text$) <= 57 THEN 
    INK = Yellow
    found = TRUE
  ENDIF 
  IF found = FALSE AND text$ = "TAB" THEN 
    found = TRUE
    text$ = "  "
    PROC highlightkey("tab")
    UPDATE 
    WAIT (0.1)
  ENDIF 
  IF found = FALSE AND text$ = " " THEN found = TRUE
  IF text$ = "?" THEN 
    linenumber = linenumber + 1
    PROC highlightkey("enter")
    COLOUR = DarkGrey
    RECT (cursorx + (textsize * 8), cursory - (textsize * 10), textsize * 8, textsize * 10, 1)
    UPDATE 
    cursory = cursory - (textsize * 10)
    cursorx = 30
    WAIT (0.1)
    playSample (keyclick(0), 0, 0)
    COLOUR = White
    RECT (cursorx + textsize * 8, cursory - (textsize * 10), (textsize * 8), (textsize * 10), 1)
    PROC highlightkey("enter")
    UPDATE 
    plotImage (kb, getImageW (kb) / 2, getImageH (kb) / 2)
    UPDATE 
    WAIT (.3)
    text$ = ""
    found = FALSE
    count = 0
    PRINT 
  ENDIF 
  IF found = TRUE THEN 
    FOR n = 0 TO LEN (text$) - 1 LOOP 
      keypress$ = MID$ (text$, n, 1)
      IF text$ <> "  " THEN PROC highlightkey(keypress$)
      cursorx = cursorx + (textsize * 8)
      COLOUR = DarkGrey
      RECT (cursorx, cursory - (textsize * 10), textsize * 8, textsize * 10, 1)
      UPDATE 
      plotText (keypress$, cursorx, cursory)
      COLOUR = White
      RECT (cursorx + (textsize * 8), cursory - (textsize * 10), textsize * 8, textsize * 10, 1)
      UPDATE 
      playSample (keyclick(RND (3) + 1), 0, 0)
      WAIT ((RND (1) / 10) + 0.03)
      UPDATE 
    REPEAT 
    text$ = ""
    found = FALSE
    count = count + 1
  ENDIF 
REPEAT 
linenumber = linenumber + 1
nextprog = linenumber
ENDPROC
conspicuous lack of blank lines. Edit: retracted; there is exactly one

Looking at FUZE Basic after SmileBASIC just gives me uncanny valley vibes... What's the point if we don't have beautiful names like GSPOIT? But more seriously, some of this stuff feels weirdly inconsistent. It looks like COLOUR is a built-in variable to set the color for things like RECT(), but then we have fontSize(n) which sets the font size. Why is that a function instead of a variable? Why are some built-in functions written in ALLCAPS while others are in camelCase?

if you look at that pre-tokenized program data that's fed into the highlighter, FONTSIZE is in caps... DATA "[FONTSIZE][(][3][)][?]" DATA "[LOOP][?]" I think it's the author's stylistic choice. I wish they made the stylistic choice of indenting properly.

Ouch, that sample code is hard to read without proper indentation, white space, and comments. Sample programs really should have good style and usage for others to learn from. Looks like both SmileBoom and Fuze are both guilty on that front. Anyone else notice you can't download from their site without creating a login anymore? I only wanted to check if I had the latest version or not. I was kind of hoping there would be a new version with dynamic memory allocation. Thanks for posting the cool find.

I noticed that login wall, but fortunately there's a back way: /bin/?C=M;O=A

Here's a real noggin-toggler: Fuze4NS is apparently the winner of a 2019 "Tech for Teachers Award" (collected by the Teach Second and Technology & Innovation magazines)
Tech for Teachers is a unique awards scheme, with genuine classroom impact at its heart. In order to succeed, entries must be as effective as they are innovative, demonstrating real benefits for teaching and learning, value for money, and long-term potential. Following a call-out to individuals and organisations throughout the sector, inviting them to submit their very best products and resources for consideration, shortlists were drawn up in each of five, curriculum-linked categories. Our expert panel then assessed these using a clear list of criteria, in order to bestow five-star, four-star and three-star prizes in each category.
okay, so most of the things up there look genuinely useful (but probably not practical for adoption), are good ideas, or are at least rehashes of progressive learning software that has been happening for a while. It's still mostly a jumble of university projects, I think. What they have in common is that it was a call for submissions, so only groups that were looking for free advertising applied. The stated purpose of the award is to try and get educators to allocate their already tight budgets on untested products, with the assumption that their sampling and awards procedure makes the best tools apparent. Now, we know that FUZE market themselves as educational technology because that's where they see a market, but while I do remember SmileBoom running SmileBASIC workshops for children using a switch build, the closest I remember with FUZE was having a workshop for their old FUZE hardware while showing a promotional image of the Switch on a screen for some reason.
>gain familiarity with the syntax used by both BASIC and Python
whatever the hell that means. Sounds like they just wrote the description from some of the early marketing blurbs. (they also got the 3* award for their workshops last(-last) year) If I say anything more this will just get more slanted so I think I'll stop there. Would be cool if FUZE cared enough to give an honest update rather than whatever they're doing.

I don't know how you figured out the login work around, but thank you. I was wondering about the python references too. I think they are just to get some points with more modern developers. I bet it is mostly the same as the pc/raspberry pi version. (By the way if any Fuze people read this Fuze Basic has graphical problems if you try to remote desktop to it running on Raspberry pi, on the PC it throws an error when switching to edit mode for every unoccupied memory card slot). I think the education market is their real bread and butter. I would bet they make most of their money with school presentations. Academia is also full of C.V. fillers, I wouldn't worry much about an award for an unreleased product, I am sure it is unfortunately common practice.

​I found this on the Fuze website this morning, I think it is real this time. A 4Gb download, hope my memory card has enough space. Latest NEWS FUZE4 Nintendo Switch will be able from the Nintendo eShop from the 30th of August. Please keep an eye on fuzearena.com from the 23rd of August for updates https://www.fuze.co.uk/nintendo-switch.html

Yeah i have it. Is there a way to save data like in smilebasic?

I am soooo disappointed in Fuze 4 Nintendo Switch. I waited how long for THAT! They refuse to admit they are a BASIC dialect, except when it is beneficial to advertising. Which may just be comical if that were the only problem. Also if they didn't bully people on their forum who call it BASIC which they did to me. Their forum administration is Orwellian. If they don't like what you wrote, they will move it to another thread. Call the thread something counter to what you said, and add a reply pretending that is what you were saying in a creepy revisionist history way. Then they will hide/delete the thread when you tell them that was not cool and to stop scapegoating you. I deleted my account after that. I just downloaded their update this morning, hopefully they fixed the keyboard at least. Of course there is still a bunch of other problems.
  • There is no console
  • Print doesn't work without an update.
  • Input obscures and blurs what you are asking for input on.
  • Trying to read the keyboard in a loop causes a Stack Overflow (sounds like adding update in the loop may help).
  • You can only have one code file per project
  • Code and Data files are tied to a project and cannot be shared.
  • Sharing is by friend code only
  • Poorly thought out api functions like string search only finding the first occurence of one string in another, and being useless if you want to search for further occurrences.
  • Their Metroidvania demo still crashes after you fall in a pit but you get a different error and have to try to move a bit more now.
There is probably more but after banging my head on Hello World and being stymied by a lack of a console for mugwup I decided to put it away and hope they fix things in the future. I was going to make a salty Twitch stream about it, should I? Or has the moment passed. I did make github project that made mugwump in over ten different languages that actually work including its direct predecessor Fuze Basic if anyone wants a link. It was going to show just how odd and broken Fuze 4 really is.

That's unfortunate to hear. I haven't tried Fuze 4 yet. There's a certain application I've been looking to build on the switch for a while now and I was imagining some potential features Fuze might have that SB4 wouldn't due to branding, but I might be out of luck. I think maybe the delays point to problems in development and they perhaps rushed the software out to store. I plan to buy it anyway.

I would love to watch a salty stream. And I know others that would too. things that fuze promises to add later: - box2d/box3d - everything things that fuze still doesn't have as far as i can tell: - elseif - continue - correct bounds checking - textmode console layer - a faster parser - usable filesystem - switch/case - dynamic call - bugfixes - library support They can't pull the "it'll get even BETTER!" card and the "we're a small team" card and make all kinds of crazy promises and have problems all over the place Some selected fun from our collection: https://cdn.discordapp.com/attachments/249354815367413761/616619797202862091/unknown.png https://cdn.discordapp.com/attachments/249354815367413761/617088719618310185/unknown.png https://cdn.discordapp.com/attachments/249354815367413761/617784430492254217/unknown.png https://twitter.com/Jayenkai/status/1167507958932131840 https://twitter.com/Jayenkai/status/1167413415041753090 niconii also wrote some very good opinions on interaction between Fuze and SmileBoom and how unfortunate it is that Fuze failed to research their only competitor and, unlike SmileBoom, are apparently not too happy about users mentioning a competing product. and 12Me21 has written on problems that come with having community managers that represent the product commercially... we have a lot of stuff, too much to even put anywhere.
justice4seggieWhen we noticed that the thread Seggie made ([archived]) was hidden/deleted, a few of us in their discord server changed our nicknames to "FREE OUT SEGGIE" and "justice4seggie" as a joke If questioned, I wanted to 1) figure out what happened 2) have the thread restored because I was interested in reading it Here's how that exchange went after MikeDX DMed me: https://cdn.discordapp.com/attachments/356471942640828416/622089749057896448/unknown.png https://cdn.discordapp.com/attachments/356471942640828416/622091231635308545/unknown.png https://cdn.discordapp.com/attachments/356471942640828416/622091309628522517/unknown.png Obviously, it's not my place to decide what happens to another user; I just wanted to know why the thread was gone. So I stopped playing that game when the passive-aggressive illusion choices started.
bonus issue with the communitythere's also lots of really cool ageism in community: someone called snail an "impatient child" for going AFK on discord https://cdn.discordapp.com/attachments/249354815367413761/619529749999386627/unknown.png and I remember at least one very excited forum poster made a whole lot of jokes about beating children

Well looks like I'll stick to SB4. BC. Fuze looks like it is (and will be) one big mess.

I tried. Oh boy, did I try. But it's now been over a month since I last touched it. I've released 20 games on PetitCom4 since its May release. Literally one a week. Similarly, I've just about managed to release one game on Fuze. And, boy, did I rant!! It's been a month since I last touched Fuze. I'm a coder who likes a challenge. I've coded games on oodles of platforms, and am currently coding four. count them.. FOUR games a week. One in PetitCom4, one in PHP, two in JavaScript. I'm also frequently coding Level Generators which I usually do using BlitzMax, just to add extra complexity, and a whole other language to the whole thing. I'm hopping and bouncing from language to language, Bracket, endifs, $ at the start or the end of variables, arrays in all manner of different ways.. and I'm coping admirably. But Fuze.. .. Fuze I couldn't do. I really was hopeful..

Thanks for sticking up for me, it warms my heart. To be fair to them, I did ask to be deleted, and they didn't edit my posts which were a bit rant-y. They did however, try to spin my posts to their own benefit, and hide the thread when they decided it made them look bad. I wasn't comfortable with that sort of action and I saw it as a chilling effect on being able to speak freely so I left (vote with your feet as it were). Also to be fair, if they were based on nearly any other language I probably would have called it a new language. Unfortunately for them, BASIC runs the gamut from line number variants on 8 bit microcomputers and punch card machines all the way up to Visual Basic.Net today. It is a gulf wide enough to comfortably sail the QE2 through, and I think they fit pretty nicely somewhere around QBasic/QuickBasic which is not bad in and of itself. It also doesn't help that the syntax is nearly identical to Fuze Basic. I am rather puzzled that they were going to make a mugwump for me. I wasn't asking for that. I just wanted things like print and input to work correctly. I am a believer in starting small with a new language and working your way up. Hello World was step 1, something like guess the number or mugwump was step 2. I could have jumped straight into graphics, but I wanted to get a good foundation first. It is how I recommend other people do it, and I am not too good to eat my own dog food. That unfortunately doesn't work when they don't have the correct setup to run the console and graphics looks like an easier route.

I finally made a Mugwump game in Fuze 4. I did have to make it graphical or make my own terminal system and graphical was easier. Let me know if anyone is interested, maybe I could port it to SmileBasic 3DS or Switch. Here is the code if you want to download it. May not do too much more with the program I was getting stack overflow on just a tiny bit of recursion just the other day.. NS1ZXMNDS2 Please let me know if I have a type-o in the share code. It sounds like they are going to have a player-only version, and have a call for projects, if anyone wants to work for free for them. They demand a title screen, comments to their specifications and how big your tab stops must be, all for the prize of nothing -- er exposure. No one asked for it, but I ported it to 3DS SmileBasic, the key is: 52RXDK8V additionally, here is a key for Switch SmileBasic: 44J4DB3WD