ParaJVE : Parabellum's Java Vectrex Emulator

Official Home of ParaJVE ... A travel through the programming of a Vectrex emulator in java!

Thursday, October 22, 2009

Beta-testing has started...

A quick post to let you know that the beta version has been uploaded, and is now available for users that applied for beta-testing (download site).

If you want to help with the testing, it's never too late : send me an email with your name & surname at vectrex@orange.fr, and I'll provide you with a beta key ASAP. 

Labels: ,

Friday, October 16, 2009

Beta-testers needed...

As said earlier, the next release is nearly there ; but for once I would need some beta-testers in order to help me to tweak the new display settings.

The new version comes with a so called "glow shader", whose purpose is to display a glow halo around the vectors. This shader is optional (because not all 3D cards support OpenGL 2.0 or more), and it is highly user-customisable.

When modifying these user settings, the display performances could be impacted (depending on the window size and the 3D card used, for instance). Also, the visual rendering will vary from one system to another, depending on the monitor attributes (LCD or CRT, brightness, contrast, etc...).

I'd like to bundle several predefined settings (what I call "profiles"), for the users to chose, depending on their preferences.

That's why I'd need some of you to run the emulator on your computer(s) and monitor(s), tell me what profile is good/bad in their opinion (both visually and performance wise). If you feel like it, you could also create your very own profiles (the emulator comes with an embedded editor) and send them back.

With these pieces of information gathered, I can hopefully have a good idea of what is the most user-adapted default settings, and what profiles I should include in the final bundle.

Here are a few pictures of the shader parameters editor:



The beta will be Windows only, and should be available in a couple of days. If you're willing to help, please drop me a line.

Thanks!

Labels: ,

All coding done!

This is it, the programming part for the next version is now completed...

I still have to build and test the emulator both on Linux and Mac OS X. The documentations also need to be updated. And more importantly, the new display settings still need to be tweaked a bit (more on that in the next post).

Following is a comparison of some screens taken on the old and the new versions. Hopefully, you'll find that the full overlays redesign, along with the addition of the glow shader, will make the new display look better! :-)


version 0.6.0

version 0.7.0

All this to say that the release date is quickly closing in! 

Labels:

Tuesday, September 22, 2009

Funny Bug

Just a quick post to show some odd ParaJVE rendering I've got last evening, due to combined bugs...

I was coding a kind of generator for the emulator, so that its GLSL shaders get automatically generated/compiled whenever some significant parameter is dynamically changed (such as the window size, or the filter kernel size and/or values).

The generated shaders obviously had a bug in the coordinates computation (that made the texture lookup fetch texels too far along the X axis).
This bug alone had nothing uncommon... until for some reason I forgot to clear the content of the back-buffer before each rendering loop. This then gave this strange feedback effect that I'd like to share :



It's even more amusing when you see it moving in real-time. But I guess you'll never see it alive, since I'm about to eradicate those nasty bugs... ;o) 

Labels: ,

Tuesday, July 21, 2009

WIP : Game Saves

Also included in the next release will be save game support. With this feature, you will be able to save your current gaming session in a file, and load it back in the emulator whenever you want.

Following are the notes dealing with this enhancement (issue #21 on ParaJVE's tracker).


Emulator State Persistence
ParaJVE can now save and reload its full state (including the vectors work buffer) in small binary files (usually less than 4KB).

There are two kind of save/load features :

Quick Saves

When the user presses F5, the emulator will save its current state in a Quick-Save slot ; this slot will be loaded back when F9 is pressed. Each game has a specific Quick-Save slot (basically derived from its binary CRC), so quick-saving one game will not overwrite the Quick-Save slot of another game.
When Quick-Saving/Quick-Loading, the user is not asked for a file name, as all Quick-Save files are located in the <data/saves/quick> folder.

Standard Saves

When the "Save..." item is clicked in the "File" menu, ParaJVE asks the user a file name where to store its state. This file can be loaded back later, when selecting the "Load..." menu item. Please note that you can only load a save file containing data for the game currently emulated (for instance, you can't load a MINESTORM save if you are running the BERZERK game).

The save/load file selector dialog embeds a preview frame that lets you see the content of the selected save file (cf. picture attachment).

It also provides 3 different file filters :
  • "All Files" : list all the files in the current folder,
  • "ParaJVE save files" : list only the files containing valid ParaJVE save files
  • "ParaJVE compatible save files" : list only the files containing valid ParaJVE save files that match the game currently emulated.

Labels:

Thursday, July 16, 2009

WIP : Overlays & Rendering

With the arrival of the summer, I felt like it was time to provide you with some Work-In-Progress information, so here it is... First, let's start with a couple of snapshots, taken from the current development version :

Well, as you have probably already noticed from the pictures above, I've been quite busy lately with improvements regarding the Overlays and the vectors rendering. This comprehends these three different tasks :

  • Rewriting the OpenGL code responsible for rendering the overlays :

    In the previous versions, the transparent areas in the overlays were obviously too dark (the colors were barely visible, and the vectors drawn in such areas did not have their colors altered enough).

    The new overlays handler now displays textures in a much more colorful way (especially for the vectors showing through the transparent areas), and it also provides different rendering modes, so that every user can select (through a menu) the one that best fits his monitor brightness.

    This task is 100% completed.

  • Improving the overlays texture quality :

    So far, the textures used for the overlays were poor quality pictures found here and there on the Internet, and that I had to alter a bit to conform with the ParaJVE rendering engine. If this was enough for a first shot, it's now clearly not good enough when the emulator is run within a large window (let alone fullscreen).

    Therefore, I've decided to create all the overlay textures from scratch. This is a long-drawn-out job that I've been postponing for too long, but the result is really well worth the pain. So far, I've done 12 overlays (Armor Attack, Berzerk, Blitz, CosmicChasm, HyperChase, MineStorm, Fortress of Narzod, RipOff, Scramble, SolarQuest, SpaceWars, and StarHawk) and there is about 12 more to go before the task is over.

    The only drawback is that the new overlays size will drastically increase (about 10 to 15 times larger than the old ones), but I will pack them all in a single texture file that should not be bigger than 2,5 MB.

    Task completion level : 50%

  • Implementing phosphor glow using a shader :

    In the versions released previously, the physical properties of the vectrex display system are emulated using a "persistence" option that mimics the phosphor afterglow. The result is fair enough, but it misses another specificity of the original display: the phosphor glow around the vectors being drawn.

    As I have finally found some time to learn GLSL (the OpenGL Shading Language), I've started to work on shaders that would help to render the phosphor glow. The current implementation is still in its infancy (as this is a trial & error process, with a lot of parameters to tweak) and the code is far from optimal... But still, the result looks promising, and runs in real-time.

    There's still a lot of work to do for this task, because I need to find the best settings, then a way to dynamically and conditionally change the parameters depending on the users preferences and the OpenGL drivers capabilities (availability of p-buffers, etc...)

    One thing is certain : this "glow" feature will only be available for users that have a 3D card whose driver is compatible with OpenGL 2.0 (or more), because GLSL is not available for older versions of OpenGL.

Labels: