Download: https://github.com/EkBass/BazzBasic/releases/tag/BazzBasic_1.1
# News and changes
These changes are about the current source code. These are effected once new binary release is published
## Mar 2026
## 22nd Mar 2026
Released as version 1.1
## 22nd Mar 2026
At Rosetta code I got inspired to create pendulum animation.
https://github.com/EkBass/BazzBasic/blob/main/Examples/pendulum_animation.bas
## 21st Mar 2026
BazzBasic-AI_guide.md is a tutorial for modern AI's. With it, AI can easily teach the user how to use BazzBasic.
Just download the file, attach it as project file or via prompt to AI and you are cool to go.
https://github.com/EkBass/BazzBasic/discussions/26
---
Unfortunately, the GamePad support I planned didn't make it to version 1.1
The reason is that the SDL2 library has been having problems for some time, especially with Bluetooth gamepads.
I didn't want to do something half-hearted, so the gamepad support is now on hold until SDL2 gets its library back in condition.
Instead, I added three other functions that I've had in mind for some time: BASE64ENCODE, BASE64DECODE and SHA256
## 21st Mar 2026
Added JSON support: `ASJSON`, `ASARRAY`, `LOADJSON`, `SAVEJSON`
```vb
DIM data$
data$("name") = "Alice"
data$("score") = 9999
data$("address,city") = "New York"
LET json$ = ASJSON(data$)
' Output: {"name":"Alice","score":9999,"address":{"city":"New York"}}
DIM back$
LET count$ = ASARRAY(back$, json$)
PRINT back$("name") ' Alice
PRINT back$("address,city") ' New York
SAVEJSON data$, "save.json"
DIM loaded$
LOADJSON loaded$, "save.json"
```
Added `BASE64ENCODE`, `BASE64DECODE` and `SHA256`
```vb
LET encoded$ = BASE64ENCODE("Hello, World!")
PRINT encoded$ ' SGVsbG8sIFdvcmxkIQ==
LET decoded$ = BASE64DECODE(encoded$)
PRINT decoded$ ' Hello, World!
LET hash$ = SHA256("password123")
PRINT hash$ ' ef92b778... (64-char lowercase hex)
```
---
## 14th Mar 2026
## Sound system fix — parallel audio playback
**Problem:** The old implementation loaded MP3/OGG/FLAC files with `Mix_LoadMUS()` which uses the SDL2_mixer's global Music channel — only one sound at a time.
**Fixes:**
- All sounds are now loaded with `Mix_LoadWAV()` → play on their own Mix_Channels in parallel
- `SDL_INIT_AUDIO` added to `SDL_Init()` call in `Graphics.cs`
- `SoundManager` calls `SDL_Init` + `SDL_InitSubSystem` to ensure audio subsystem even without `SCREEN` command
- `SDL_AUDIODRIVER=directsound` set in `Program.cs` to work around WASAPI issues (Nahimic middleware causes "Invalid Handle" error in WASAPI)
- `PlayOnceWait` gets 50ms delay before polling loop due to DirectSound startup delay
## 7th Mar 2026
Added HTTP support for LOADIMAGE
### LOADIMAGE with url
LOADIMAGE now supports loading via HTTP.
```
Added WAITKEY() function.
## WAITKEY
Halts the execution until requested key is pressed.
```vb
' Wait just the ENTER key
PRINT "ENTER"
PRINT WAITKEY(KEY_ENTER#) ' output: 13
' Wait any of "a", "b" or "esc" keys
PRINT "A, B or ESC"
PRINT WAITKEY(KEY_A#, KEY_B#, KEY_ESC#) ' output: depends of your choice of key
PRINT "Press any key..."
LET a$ = WAITKEY()
PRINT a$ ' output: val of key you pressed
```
## 2nd Mar 2026
Added SHELL feature
```vb
' SHELL arg$, timeout$
' Sends a command to the system command interpreter
' Param *timeout$* is optional. If not given, standard 5000 milliseconds used for timeout.
' with default timeout option
LET a$ = SHELL("dir *.txt")
PRINT a$
' sets timeout to 2 seconds
' 1000ms = 1 second etc.
LET a$ = SHELL("dir *.txt", 2000)
PRINT a$
```
