flat assembler
Message board for the users of flat assembler.

Index > Tutorials and Examples > Hobby BASIC, a simple yet powerful BASIC interpreter

Goto page Previous  1, 2, 3, 4, 5  Next
Author
Thread Post new topic Reply to topic
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 19 Jan 2021, 20:39
QUIX is a small arcade puzzle game written in Hobby BASIC.

It is the first game of 2025 made with Hobby BASIC, celebrating 10 years of continuous development of the interpreter.
QUIX is an original Hobby BASIC game.

Gameplay:
Create groups of three or more tiles.
Click on a tile to select it as the starting point.
Then, click on an empty spot on the grid to set the destination.
If there is a clear path, the tile will move towards the destination.
Press P to pause the game.

Controls:
Mouse for movement.
Includes music and sound effects.

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\QUIX.BAS.

Windows 10 console screenshot.

Image


Last edited by Picnic on 03 Mar 2025, 22:34; edited 6 times in total
Post 19 Jan 2021, 20:39
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20527
Location: In your JS exploiting you and your system
revolution 19 Jan 2021, 22:26
Running unaudited code directly from the Internet.

Nothing could possibly go wrong. Razz
Post 19 Jan 2021, 22:26
View user's profile Send private message Visit poster's website Reply with quote
DimonSoft



Joined: 03 Mar 2010
Posts: 1228
Location: Belarus
DimonSoft 20 Jan 2021, 14:21
Guys, please, don’t say a word about JS Smile
Post 20 Jan 2021, 14:21
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 22 Jan 2021, 13:12
Crystal is a small puzzle game written in Hobby BASIC.

The objective of the game is to remove all the blocks of the same color by placing them next to each other!

There is a limited number of moves per level.
The gray block cannot be removed!

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\CRYSTAL.BAS.

Windows 10 console screenshot.

Image


Last edited by Picnic on 03 Mar 2025, 22:35; edited 12 times in total
Post 22 Jan 2021, 13:12
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 02 Jul 2021, 09:42
MazezaM is a puzzle game that originated from the Spectrum and has been ported to almost every platform.

The original version included 10 rooms, but I created a remake in Hobby BASIC,
which is a faithful reproduction of the Puzzlescript version, featuring 30 rooms.

The rules are simple:

The goal is to move the character from the left side of the maze to the right.
The character can drag rows of blocks left and right by pushing them.
It’s an interesting and particularly challenging puzzle.

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\MAZEZAM.BAS

Windows 10 console screenshot.

Image


Last edited by Picnic on 03 Mar 2025, 22:36; edited 19 times in total
Post 02 Jul 2021, 09:42
View user's profile Send private message Visit poster's website Reply with quote
pabloreda



Joined: 24 Jan 2007
Posts: 116
Location: Argentina
pabloreda 03 Jul 2021, 00:05
Very nice project picnic!

congrat!
Post 03 Jul 2021, 00:05
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 14 Feb 2022, 11:48
Threesome is a small puzzle game written in Hobby BASIC.

You and two friends are trapped in a building.
The three of you need to move to another room.
You must collaborate to achieve your goal.
To do so, you need to guide the three players to the gray positions.
Place one player on a colored switch to open a door of the corresponding color.
Two doors of the same color need 2 players on the corresponding switches.
You can also move a player between the doors and leave them there.

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\THREESOME.BAS.

Windows 10 console screenshot.

Image


Last edited by Picnic on 03 Mar 2025, 22:37; edited 5 times in total
Post 14 Feb 2022, 11:48
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 30 Nov 2022, 10:01
3x3 RGB Tilt is a small puzzle game written in Hobby BASIC.

The red, blue, and green must reach their respective targets simultaneously.
Tilt the tray and let the fun begin!

Controls:

Use the arrow keys to play.
Press the spacebar to restart the room.
Press 2 to move to the next room.
Press 1 for the previous room.

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\RGBTILT.BAS.

Windows 10 console screenshot.

Image


Last edited by Picnic on 03 Mar 2025, 22:39; edited 9 times in total
Post 30 Nov 2022, 10:01
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 27 Dec 2022, 14:17
SPY is a small puzzle game written in Hobby BASIC.

The game is played on an NxN board, where each tile contains either a number or a skull.
The player can move in all four cardinal directions (up, down, left, right) as well as diagonally.

Stepping on a numbered tile automatically shifts the player by the specified number of tiles in the same direction.
For example, landing on a tile with "4" moves the player 4 more tiles forward.

The game ends if the player steps on a skull tile, crosses their own path, or reaches the board's border without completing the required moves.
The goal is to cross a set number of tiles while avoiding skull tiles and managing limited moves.
Press the spacebar to restart.

About SPY:
SPY is a remake of a game I first developed in 2005 using ActionScript in Flash.
It has been ported to:

Atari ST/STE/TT/Falcon 030 link.
GP2X (Squaresliding) link

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\QUIX.BAS.

Windows 10 console screenshot.

Image


Last edited by Picnic on 04 Mar 2025, 01:09; edited 12 times in total
Post 27 Dec 2022, 14:17
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 12 Jan 2023, 09:55
Blix is a small puzzle game written in Hobby BASIC.

Form columns of same-color tiles by scrolling the rows.
Each scroll costs 2 moves, while clearing a column earns you 1 move.
The game ends when you run out of moves.

Press 1, 2, 3, or 4 to select a level: EASY, NORMAL, HARD, or EXPERT.
Press the spacebar to scroll rows randomly (costs 1 move).
Click the arrow buttons to scroll a row horizontally.

About BLIX:
BLIX is a remake of a game I first developed in 2005 using ActionScript in Flash.
It has been ported to multiple platforms, including:

GP32, GP2X, and Wiz link
Atari ST/STE/TT/Falcon 030 link
Windows, Linux, and Mac link
Intellivision cartridge link1 video
iPhone and iPad link
Android link
GBA link

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN7\BLIX.BAS.

Windows 10 screenshot.

Image


Last edited by Picnic on 04 Mar 2025, 01:09; edited 11 times in total
Post 12 Jan 2023, 09:55
View user's profile Send private message Visit poster's website Reply with quote
al_Fazline



Joined: 24 Oct 2018
Posts: 54
al_Fazline 12 Jan 2023, 15:08
Hello, Picnic. Is there a way to run it on GNU+Linux without wine/emulation? Windows is kinda dated by now, people are switching away from it.
Post 12 Jan 2023, 15:08
View user's profile Send private message Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 13 Jan 2023, 08:05
Hello al_Fazlinem

I'm afraid (i think) that is not possible, Hobby BASIC oriented exclusively to Windows, it heavily uses Windows console functions.
Post 13 Jan 2023, 08:05
View user's profile Send private message Visit poster's website Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 23 Jan 2023, 14:48
ZNAX is a small puzzle game written in Hobby BASIC.

How To Play:
Click on four tiles of the same color to form the largest possible squares or rectangles.
All tiles inside the selected area are removed and replaced with new ones.
The bigger the shape, the more points you earn. But hurry—time is limited!

Controls:
Left Click: Select four same-colored tiles to form a square or rectangle.
Spacebar: Reset the board anytime.
Esc: Return to the menu.

About the game:
ZNAX is a remake of a game I first developed in 2005 using ActionScript in Flash.

Image

It has been ported to multiple platforms, including:

Windows Linux Mac OS link
Amstrad CPC link video
Atari STFM/STE, Falcon 030, Hatari, STEEM link video
Atari XL link link video video
GP2X & Nokia N810 link
GameBoy Advance link
Pocket PC link
Android link
Pyra & Pandora link
Nintendo Switch link video
iPhone link
Javascript link
Steam Deck video
ZNAX by joyrider3774 Github
All about the game and other versions link

It has also inspired other puzzle games, such as Jooleem, which has been ported to multiple platforms.

The game's source code can be found in the folder: EXAMPLES\GAMES\WIN10\ZNAX.BAS.

Windows 10 screenshots.

Image

Image


Last edited by Picnic on 04 Mar 2025, 11:52; edited 39 times in total
Post 23 Jan 2023, 14:48
View user's profile Send private message Visit poster's website Reply with quote
386



Joined: 11 Nov 2023
Posts: 28
Location: Ukraine (Ruthenia)
386 15 Nov 2023, 12:01
Wow! It looks great! Smile

But why the 58,5 KB program running tiny examples uses 397 MB of memory? Sad

Could you reduce it to 39,7 MB or, even better, to 3,97 MB?

My system is Windows 7 x64 SP1.
Post 15 Nov 2023, 12:01
View user's profile Send private message Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 15 Nov 2023, 17:01
It plays great too, I've tested it on different versions of Windows.
Thanks for the feedback 386 I can definitely reduce it to have very low startup requirements.
Anyway, I uploaded a new version.
The memory footprint should be should be around 30 MB now.


Last edited by Picnic on 15 Nov 2023, 22:48; edited 4 times in total
Post 15 Nov 2023, 17:01
View user's profile Send private message Visit poster's website Reply with quote
386



Joined: 11 Nov 2023
Posts: 28
Location: Ukraine (Ruthenia)
386 15 Nov 2023, 22:32
Thanks, Picnic! 30 MB is much better than 397 MB! Smile

Just curious: is it possible to make 3 MB or 300 KB?
Post 15 Nov 2023, 22:32
View user's profile Send private message Reply with quote
386



Joined: 11 Nov 2023
Posts: 28
Location: Ukraine (Ruthenia)
386 15 Nov 2023, 22:36
I'm trying to understand, what you have changed:
Code:
HB_OLD.EXE                                                               HB_NEW.EXE

00469004:  61                    popad                                |  00469004:  4D                    dec ebp
00469005:  93                    xchg eax, ebx                        |  00469005:  F8                    clc 
00469006:  50                    push eax                             |  00469006:  54                    push esp
00469024:  61                    popad                                |  00469024:  4D                    dec ebp
00469025:  93                    xchg eax, ebx                        |  00469025:  F8                    clc 
00469026:  50                    push eax                             |  00469026:  54                    push esp
0046903C:  61                    popad                                |  0046903C:  4D                    dec ebp
0046903D:  93                    xchg eax, ebx                        |  0046903D:  F8                    clc 
0046903E:  50                    push eax                             |  0046903E:  54                    push esp
------------------------------------------------------------------------------------------------------------------------------------------
00469053:  006193                add byte ptr [ecx-6Dh], ah           |  00469053:  004DF8                add byte ptr [ebp-08h], cl
00469056:  50                    push eax                             |  00469056:  54                    push esp
0046906B:  006193                add byte ptr [ecx-6Dh], ah           |  0046906B:  004DF8                add byte ptr [ebp-08h], cl
0046906E:  50                    push eax                             |  0046906E:  54                    push esp
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
004690C5:  0001                  add byte ptr [ecx], al               |  004690C5:  0002                  add byte ptr [edx], al
004690CD:  0001                  add byte ptr [ecx], al               |  004690CD:  0002                  add byte ptr [edx], al
------------------------------------------------------------------------------------------------------------------------------------------
0046920B:  0031                  add byte ptr [ecx], dh               |  0046920B:  0032                  add byte ptr [edx], dh
0046923B:  0031                  add byte ptr [ecx], dh               |  0046923B:  0032                  add byte ptr [edx], dh
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
0046E021:  0031                  add byte ptr [ecx], dh               |  0046E021:  0032                  add byte ptr [edx], dh
------------------------------------------------------------------------------------------------------------------------------------------
00471DDF:  0031                  add byte ptr [ecx], dh               |  00471DDF:  0032                  add byte ptr [edx], dh
------------------------------------------------------------------------------------------------------------------------------------------
0047201F:  6800008005            push 05800000h                       |  0047201F:  6800002000            push 00200000h
0047202E:  6800005800            push 00580000h                       |  0047202E:  6800002000            push 00200000h
00472038:  A300494000            mov dword ptr [00404900h], eax       |  00472038:  A308494000            mov dword ptr [00404908h], eax
0047203D:  6800008005            push 05800000h                       |  0047203D:  6800002000            push 00200000h
00472047:  A308494000            mov dword ptr [00404908h], eax       |  00472047:  A3FC484000            mov dword ptr [004048FCh], eax
0047204C:  6800008005            push 05800000h                       |  0047204C:  6800002000            push 00200000h
00472056:  A3FC484000            mov dword ptr [004048FCh], eax       |  00472056:  A30C494000            mov dword ptr [0040490Ch], eax
0047205B:  6800008005            push 05800000h                       |  0047205B:  6800002000            push 00200000h
00472065:  A30C494000            mov dword ptr [0040490Ch], eax       |  00472065:  A300494000            mov dword ptr [00404900h], eax
0047206A:  6800005800            push 00580000h                       |  0047206A:  6800002000            push 00200000h
00472079:  6800005800            push 00580000h                       |  00472079:  6800002000            push 00200000h
00472088:  6800005800            push 00580000h                       |  00472088:  6800002000            push 00200000h
00472097:  6800100000            push 00001000h                       |  00472097:  6800000100            push 00010000h
004720A6:  6800100000            push 00001000h                       |  004720A6:  6800000100            push 00010000h
004720B5:  6800100000            push 00001000h                       |  004720B5:  6800000100            push 00010000h
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
00472034:  C08EFFFFA30049        ror byte ptr [esi+00A3FFFFh], 000000 |  00472034:  C08EFFFFA30849        ror byte ptr [esi+08A3FFFFh], 00000049h
0047203F:  008005E8B18E          add byte ptr [eax-714E17FBh], al     |  0047203F:  0020                  add byte ptr [eax], ah
                                                                      |  00472041:  00E8                  add al, ch
                                                                      |  00472043:  B18E                  mov cl, 8Eh
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
    
Post 15 Nov 2023, 22:36
View user's profile Send private message Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 15 Nov 2023, 22:46
Hobby BASIC uses one main internal structure for all data types, 88 bytes in size.
This practically means that, for example, every 1 mb of memory I allocate, I get about 12000 elements (strings, variables, arrays, labels, etc.)
More than enough for a simple toy interpreter.
But maybe I should let the user decide the size of memory they want to use.

I changed a few values in memory allocation calls at startup. That's all. Smile


Last edited by Picnic on 16 Nov 2023, 12:00; edited 3 times in total
Post 15 Nov 2023, 22:46
View user's profile Send private message Visit poster's website Reply with quote
386



Joined: 11 Nov 2023
Posts: 28
Location: Ukraine (Ruthenia)
386 15 Nov 2023, 22:54
Quote:
But maybe I should let the user decide the size of memory they want to use.
Wow! That would be extremely super!

Users do like to decide! Smile
Post 15 Nov 2023, 22:54
View user's profile Send private message Reply with quote
Picnic



Joined: 05 May 2007
Posts: 1405
Location: Piraeus, Greece
Picnic 15 Nov 2023, 23:01
It's easy to implement, i'll think about that. Thanks again for your feedback 386. Quite useful !
Post 15 Nov 2023, 23:01
View user's profile Send private message Visit poster's website Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  
Goto page Previous  1, 2, 3, 4, 5  Next

< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.