Jon McCain
  - software - articles - about - contact  

Fishbowl

When I was building my MAME machine I realized there was one problem. Since there is no mouse or keyboard then you needed a way to be able select a game to play using the joystick and buttons. I found several programs out there that could do this.  But I wanted something that had just a very basic layout - just the text and a picture. I was appalled at how complex some of them were and how large they were.

I also needed it have simple way to change the settings remotely since my goal was to put a wireless card in the machine and map to a shared folder on it and use vnc if I needed actual gui access.  So I wanted everything in just a single ini file that I could edit on my pc and copy it over to the arcade machine.  Being a programmer and itching to mess with c# I took matters into my own hands and Fishbowl was born.

Here are some screen shots.











Basically the settings are just defining a list of games.  You can have as many lists as you like.  You use the joystick to move up and down to select a game.  Press the fire button to call mame to play the game. Moving the joystick left and right lets you go to other lists.  Pressing the "esc" button  takes you a special menu that lets you exit the fishbowl program so you can get to windows (usefull if you have connected via vnc) or shutdown the machine.  By the way the keys  follow the standard mame rules but the progrram is not hardcoded to only run mame.  There is a setting that defines the program  to run so techincally you use this to run other game emulators.

There is nothing to install.  All you need are fishbowl.exe and fishbowl.ini.  If you have pictures you need to copy to whatever image folder you specified in the fishbowl.ini file.

The Fishbowl.ini File
Each section [ ] defines a list.  The section name is the name of the list.  There are two special section names which are built in and thus can not be game lists.

First lets define what some things on the screen are.


[settings]
rotate=0
errorx=200
errory=850
defaultlist=favorite

rotate -This lets you rotate the whole screen.  This is needed if your screen is mounted sideways. Choices are in degrees and are 0,90,180,270.
errorx and errory -This defines the x and y position of the error/key choices box. You will have to experiment to find the correct numbers for your screen. It should be noted that everything on the screen has an x/y position setting.  So this is screen is totally customizable. Your layout can look completely different than mine.
defaultlist - This is the list the program goes to first.  This will refer to an ini section name.

[esclist]
esclistx=220
esclisty=460
esclistw=400
esclisth=100
1=Exit To Windows|exit||
2=Shutdown Windows|shutdown||

esclistx and esclisty - This defines the x and y position of the esc list box.  
esclistw and esclisth - This defines the width and height of the esc list box.

The actual list are the numbered keys. They are pipe (I) delimtted list and follow the format
#=description|command|arguments|working directory

description - The text that appears in the list
command - The command to execute. This can be a program name. Two special built-in commands are exit and shutdown. Exit makes fishbowl.exe stop running. Shutdown issues a windows shutdown command and turns itself off.
arguments - Command line arguments to pass to the program
working directory - The working directory of the program

A Regular List

[list1]
x=200
y=200
w=450
h=550
desc=Complete
desc_x=200
desc_y=100
nextlist=
prevlist=race
emulatorexe=d:\Mame32v103\mame32.exe
emulatorpath=d:\Mame32v103
;arguments=-noka -rol
;-rol in the argument to rotate left (mame)
;-noka to not enforce aspect
image1_x=900
image1_y=200
image2_x=900
image2_y=600
imagepath=d:\Mame32v103\snap
sorted=Y
;#=description|commandtorun|gamename|arguments|workingpath|image1|image2l|category1|category2|category3|category4
|category5|category6|category7|category8|category9|category10
1=Outrun||outrun|||outrun.png||fav|race
2=Galaga||galaga|||galaga.png|galaga-panel.jpg|fav
3=Pac Man||pacman|||pacman.png|
4=Pole Position 2||poleps2a|||polepos2.png||fav|race


Any section not named settings or esclist is treated as a list.  A list is a set of games to play. You select one and hit the "fire" button the program will make that game run.  Technically this is not limited to games.  You can actually specify any program to run.  For this example we have a list named list1.
x,y,w,h - X and y are the position on the screen to place the list .  W is the width on the list box. H is the height.  If the number of items in the list is too big to fit in the list box then the list will scroll up and down.
desc - This is a string that describes this list
desc_x and desc_y - The x and y position on the screen to put the description string
nextlist - When you move the joystick to the right the program will go to this list.  If nextlist is blank then nothing will happen.
prevlist - When you move the joystick to the left the program will go to this list.  If prevlist is blank then nothing will happen
emulatorexe - This is the full name of  the program to run if you do not specify a commandtorun on list item (see below).
emulatorpath - This is the working directory to use if you do not specify a workingpath on the list item (see below)
arguments - These are command line arguments to pass to the program if you do not specify any in arguments in the list item.
sorted - Set this to Y to have the list sorted by the description

The actual list items will begin with a number.  Each line is a pipe (I) delimitted list.
#=description|commandtorun|gamename|arguments|workingpath|image1|image2l|category1|category2|category3|category4|category5
|category6|category7|category8|category9|category10

description - This is what shows up one the screen
gamename - The mame game name.  This passed to the mame program as an arguement.

image1 and image2 - you can have up to 2 images on the screen. The must be in the folder specified by imagepath and thier positition is controlled by image1_x ,image1_y,image2_x and image2_y.
category - each item can have to 10 categories.  This can be any word you choose. These are used to build virtual lists.

A Virtual List

[favorite]
x=200
y=200
w=450
h=550
desc=Favorites
desc_x=200
desc_y=100
virtual=list1|fav
nextlist=race
prevlist=
sorted=Y


Instead of making list of items that is really just a subset of another list you can create a virtual list.  This is a list that pulls most of its settings froma real list.  This is specified with the key named virtual.  It is set to a pipe delimitted list the has the format name|category.  So you can have a full master list and then make a smaller lists based on the categories.  Such as a favorites list or a racing list.  Depending on your categories, some items might show up on muliple lists.  


Download
OS: Windows 2000 and higher
Requires: Dot Net 2.0
License: Freeware

fishbowl.zip