26
March 1999
Intro
StarLaunch is a
multi emulator frontend / launcher for Win9X
It is written in
Visual Basic 6. If you think Visual Basic is a crappy language
that only stupid people use, i hope this app helps to disspell
that paradigm.
Internally, it
supports Genesis, Snes, Master System, Gamegear, Nintendo 64,
Gameboy, Nes, Virtual Boy, PC Engine, and Mame roms. It includes
example files for setting up NeoRage and Callus in Arcade mode,
you can add any emulator you like to arcade mode. You can also
add support yourself for any roms that have matchable extensions
(there's a MSX rom demo included, if you're interesed. Setup
instructions should be in the quickstart.htm file).
I rewrote
StarLaunch for two reasons:
I couldn't do much more without doing a rewrite, my code was all
sloppy and messy.
Visual Basic is NOT a crap programming language, if you use it
right.
(There are ways to optimize VB, damnit, you people don't look
hard enough)
What's
new in 3.1X
Changes from the
previous version
- Read only files in archives
wouldn't delete properly, crashed SL (TeleKawaru), fixed.
- A few bugs regarding skins
were fixed.
- Arcade scanner was not
responding to an enter keypress, fixed.
- DC class was unstable on
some computers, because the desktop DC wasn't released
early enough, fixed.
- Mame mode couldn't launch
roms due to a typo, fixed.
- Arcade and Mame mode
wouldn't work with the launch exe, fixed.
Additions
- Updates board, StarLaunch
will prompt you on saturday to check the board.
- Link updater, links to
StarLaunch's homepage, skins page, etc. are updated if
they change.
- Drive summaries
- About window now has an
auto-frameskip, instead of a timer :)
This is basically a bugfix
release.
Features
list
- HTML based
display system! This is the first frontend to do so, and
it's one mega big experiment. If you don't like it,
please let me know why! I'll try to improve it as much as
possible!
- Reads
internal rom names for lots of rom formats, and uses
them. You can add simple ones that aren't supported
internally.
- Customizable
configuration for all emulators within StarLaunch.
- Individual
configuration saved for each rom.
- Multi-folder
system, you can browse around your hard drive.
- As it uses
IE to display summarized rom details, you can play music,
and add screenshots.
- You can use
your own icon bitmaps with emulator groups!
- Comes with
support for: BrSms, Callus, DBoy, fMsx, fwNes, Genecyst,
Hu6280, Kgen98, Mame, NeoRage, Nesticle, Notepad, Snemul,
Snes9x and ZSnes, and you can add your own if you need
to!
- Displays the
contents of zip, arj, lha and rar files without
unarchiving them! (To my knowledge, it reads all zip,
arj, lha, and rar archives. This is done through VB's
File I/O, and some structs. It lists the contents of rar
archives faster than unrar.dll!).
- Supports
Unzip32.dll, and unrar.dll for proper long filename
handling in zip and rar archives.
- Displays
text files in the webbrowser when selected
- Plugins!
I've already written a Snes9X Keyboard definition plugin,
to show you that the implementation works!
- Has proper
coolbuttons, written using SetCapture and ReleaseCapture
(Win32 API).
- Faster file
databases. Does not use MS Access, or any other third
party system, it's my own, hence memory requirements for
the database are as low as possible. Doesn't scatter .gdt
files everywhere like previous versions.
- Skins! The
interface is customizable! You can move objects around
the main window, choose pictures for coolbuttons, set
colours and fonts, etc. StarLaunch's coolbuttons also
include colour ignoring / semi-masking, and automatically
generating the brighter and darker mousedown / mouseover
images at runtime. Try out the EVA, and Steam Hearts
skins!
- DirectSound
mixing, if your sound card supports it. This is only
useful if you have something like WinAmp playing in the
background, as it DOES lock out all normal windows noises
(unless someone can tell me how to grab the windows
message that gets sent to play a sound.. :) ), but
StarLaunch will ask DirectX to mix up to 4 samples in
realtime. This means that if you have WinAmp running in
DirectX, Media Player 5, or any other MM app that uses
DirectSound in normal or priority mode, StarLaunch sound
effects will play over the music! (Thanks a lot to
Patrice Scribe for writing his DirectX and Win32 type
libraries!)
- Proper
'priority hack' support. I have never seen
CreateProcess() yield any faster results unless your
computer has been set up strangely. StarLaunch lets you
specify the priority class, and optionally boost the
thread priority class. Most importantly, it lets you
start the emulator in exclusive mode, which should give a
greater priority boost than any other priority hack.
- Online help!
- Auto scans
for arcade roms! (includes NeoRage / NeoBeta and Callus
support)
- Seperate
Launch exe, for those of you running StarLaunch on
systems with less than 32mb of ram, or for emulators that
need lots of ram.
Comparing
builds: DirectSound vs. Non-DirectSound
The
DirectSound build requires DirectX 6 or above.
I don't know
what'll happen if you tried to use it without DirectX 6. It'll
probably run, knowing MS's standards.. :)
I built two
copies of StarLaunch, one uses DirectSound, one doesn't. For most
of you, you probably won't even look at the DirectSound version,
unless you run WinAmp in the background.
The DirectSound
build is the one i actually run, and test. The other version is
essentially the same, but i swap the DirectSound parts with the
PlaySound API. The DirectSound build is marginally bigger,
basically due to error messages.
However, the
DirectSound version is a lot more efficient in terms of timing.
There is no function to check if the API is still playing a
sound, hence at critical moments (eg. Starting an emulator,
shutting down StarLaunch), sounds are played sync. With
DirectSound, StarLaunch will play the sound async, and continue
processing until it has to stop playing. At that point, it'll
wait for all sounds to stop, and then continue. This means that
loading things are faster under the DirectSound build
(essentially, it's the same code, but it makes better use of
multitasking under the DirectSound).
Actually, the
fastest performance from StarLaunch is to not specify any sounds
at all for the scheme, which means deleting the Sounds.slData
file :)
Known
glitches
- If IE
crashes, out of StarLaunch's process, it somehow
cascades, and StarLaunch crashes, and this can have
unpredictable results.
- If IE ever
crashes, save any work while the GPF dialog is up, and
restart your computer immediately with a double
ctrl-alt-delete.
- This isn't
really a glitch, but CPU usage will increase slightly
when you display app modal forms. This is because i wrote
my own show modal form functions, because VB's sucked,
and there's no way to halt execution of a function
without either chewing some processor time (this is less
than 1% on my K6), or splitting my functions up so much
that i couldn't tell which was which :) Take a guess
which way i went.
- StarLaunch
can only load PCM encoded wave files in the DirectSound
build. This is because i have absolutely no idea how to
ask windows to decompress the wave file. Preferabally, if
there's a simple way of just passing a pointer and ccb,
that'd help (since i have those with DirectSound :) ).
- Online
help's not finished, i never got around to doing it, and
it's soo boring to write.. :)
- Plugins will
not be shelled for PostProcessing if you use the Launch
exe. This is because doing this would overcomplicate the
launch.exe incredibly, would add quite a lot to the exe,
and i couldn't think of any situation where a plugin
needed to post process (maybe in the case of an ace
wrapper plugin, or something similar, but you could clean
up in the next preprocess.)
System
requirements
- Any computer
running Win9X.
- StarLaunch
uses between 6 and 8mb of ram. IE uses 6mb+ of ram on top
of this. You should have at least 16mb ram free just
to run StarLaunch (ie. If you have 16mb of ram on your
computer, you'll be in swapfile hell. 32mb+ is
strongly suggested.)
- 4mb Hard
drive space for the program itself (requirements increase
if you look at lots and lots of directories), and
probably about 5mb for the VB runtimes.
- HiColour
display in Windows.
StarLaunch WILL run under 256 colours, but it looks
terrible.
- 640x480
display, but 800x600+ is suggested.
StarLaunch is written for normal screen font scaling (not
large fonts, or small fonts).
- Mouse.
StarLaunch can be used solely from the keyboard, but i
don't recommend it, as it's hard to work out which
control is selected in parts of the program. You also
can't edit skins without a mouse.
If you're running
emulators like ZSnes with Super FX games, or NeoRage, your
computer's fine for running StarLaunch.
Notes
about memory usage
- The IE
engine is not that memory efficient [ though neither is
Netscape :) ], so when you run your emulators, expect
quite a lot of disk swapping.
- It seems
that even if unload the parent window of the WebBrowser
control, it still occupies memory. MS seems to have tied
down the WebBrowser control to the running process.
If you find that StarLaunch and IE together are using too
much ram, use the seperate launch exe to minimize ram use
by StarLaunch to about 4mb, and to kill IE's process.
This is enabled in Setup, under Priority.
- StarLaunch's
memory usage peaks when you open the setup window. This
is because every plugin in shelled at this point, as
StarLaunch asks them for information to identify
themselves, and to tell StarLaunch how it should pass
some options to them.
- Using more
graphic and layout intensive skins means more memory
used. Larger skins also use more memory, of course.
Easter
Eggs
There are a few
Easter Eggs in StarLaunch. Though they're not THAT spectacular :)
Here's some hints:
- About
window, Double clicking on some things will make a
textbox appear, enter something, and it'll let you change
the spin rate of the text.
- If you load
a skin too big for your resolution, you can always use
the standard Alt-F4 to shut down StarLaunch. :)
Stuff and
Information
- What's the
longest expression for a variable in StarLaunch?
-Umm, probably this:
Emulators(cmbEmuCategory.ListIndex).Emus(Emulators(cmbEmuCategory.ListIndex).DefaultEmu).EmuName
:)
- What's the
longest function name?
-Err:
For standalone Subs:
AssignStupidlyBigArcadeTypeToDatabase
(No kidding)
:)
- How does the
exclusive mode dos thinggy work?
-After reading some MSDN docs, i realised that the
apps.inf file can be modified to force Windows to handle
a dos session in exclusive mode, and after trying it, it
worked, so i'm using it. If you want to learn more, it's
in the msdos application support chapter in the win9x
user reference.
Thank
yous and hellos
See StarLaunch's
About window. It looks nicer than this text.
VB Glitch
and Watch list
This is a list of
bugs and things to watch for in VB (or the components i used)
that i came across while programming this frontend, it might be
useful for some of you.. :)
- File deletes
are cached, while the Open statement isn't. It's possible
to have your file disappear while accessing it, if you
didn't specify lock write.
- You can pass
a struct to a function SOMETIMES, and not all the time.
It's strange, but you can pass an address pointer, so i
do that instead in some situations.
- Calling Cls
on a usercontrol will reset it's relative text alignment
(SetTextAlign), and leak memory.
- The MouseUp
event releases capture of mouse messages.
- A form is an
object, not a control, so you can't do set ctrl = frmMain
if ctrl is dimmed as a control.
- GetDIBits
returns colours in ARGB format, not ABGR as VB uses.
- Invoking the
Navigate method on a webbrowser will automatically enable
any owner forms of any webbrowsers in your app.
- Anything
retreived from the GetAttribute function of the
WebBrowser returns an object, not a string, or whatever.
- BeginPaint
sometimes page faults. Don't know why, so don't use it :)
- Bitmaps
created with CreateCompatibleBitmap don't always have
anti-aliased text rendered to them with TextOut (font
smoothing), however bitmaps created with
CreateDiscardableBitmap do.
- Remember
that when you use CopyMemory that BStrs are unicode :)
- When
defining an external function, ByVal will convert strings
to ascii before sending them, ByRef passes the unicode
pointer.
- Windows
Media Player 5 has this lovely habit of asking all
DirectSound buffers loaded in the system to play when you
whack the play button on it. :)
- Does anyone
know how to create a StdPicture object without using
LoadPicture, or LoadResPicture?
Contacting
me
If you like this
app, send me an email! If you really like it, send me some anime
pictures, or buy me a portable mp3 player. :)
It's really
unlikely that i'll have a lot of time in the future to work on
this, or any programming related apps, i'm studying Med at UWA
(in Australia, of course), and i'm going to be really busy from
now on... Hence i'm releasing the source code, so you can read it
:)
Email: Dave Hng -
ryuunosuke@earthcorp.com
ICQ: 866854
Web: http://www.earthcorp.com/StarFox/