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/