Fuze Basic - First Impressions
Root / Programming Questions / [.]
seggiepantsCreated:
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?
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 ENDPROCconspicuous 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?
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.
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 Pythonwhatever 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
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.
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.
justice4seggie
When 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 community
there'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 childrenI 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