Post Viewer - 20151112.HTM

A New EV Nova Ship Plugin

The first time I stayed awake until the sun came up was the night I got my color Macintosh IIsi. I was maybe ten or eleven years old, and I’d just gotten a space exploration game called Escape Velocity. It was fascinating in its openness and the range of ways you could play it. Years later in high school, Ambrosia Software released its second sequel, Escape Velocity: Nova, and my friends and I were hooked all over again.

EV Nova screenshot

Due to a recent unexpected bit of downtime, I found myself playing EV Nova once again with my friend, and decided it was about time I expanded it a bit by filling a perceived gap from the first game. One of my favorite ships was the Courier, a light freighter able to move quickly between star systems while carrying a reasonable amount of cargo. EV Nova had quick ships and it had freighters, but it didn’t have a quick, small freighter, so I decided to design one by combining the original Courier with EV Nova’s iconic freighter, the IDA Frigate.

Building the Ship

To create my franken-ship, the IDA Courier, I first started in FreeCAD to build a 3D model of what the ship would look like. EV Nova uses 64-frame sprite sheets to display the ship on the screen, and I knew there was no hope of consistently drawing a ship at different angles that many times, so a model would be necessary for rendering.

FreeCAD screenshot

Next, with the model completed, I brought it into Blender so that a texture could be UV mapped onto the CAD model. This process involves “unwrapping” a 3D object onto a 2D plane, filling that 2D plane with artwork, and then re-wrapping it around the object. It’s a rather arduous process, but seemed to be the quickest way to get what I was after at the time. In hindsight, I should have probably imported the ship as multiple objects and then applied a texture to each.

With the texture mapped onto the ship, it was time to render the scene, position lights to match how a ship in EV Nova is normally lit, and then take 64 screenshots of the ship rotated by increments of 5.625 degrees.

Blender screenshot

Next, I used EVNEW to open EV Nova’s data files and get an example sprite sheet out for a ship. With this in GIMP, I simply pasted each of the screenshots over the existing ship and then applied a number of filters and tweaked the brightness, contrast, and color levels until the art style matched up nicely.

Graphic Resources

EV Nova uses a number of graphic resources to render a ship. In addition to the initial 24-bit bitmap sprite sheet, a 2-bit black and white bitmap mask is necessary to determine which pixels of the sprite sheet are recognized. This is called the “rleD.” The mask can be loaded in as a 24-bit bitmap so export settings don’t need to be adjusted frequently, and EVNEW will flatten it out to the necessary 2-bit format. Next, a grayscale bitmap and accompanying 2-bit mask are needed, which in most cases determine the rleD’s opacity per pixel (black opaque, white transparent). This is called the “rle8.” The ship sprite’s rle8 is going to follow slightly different rules for whatever reason (maybe it’s used to display ionization?), so just be sure it matches with the rle8s of other ships. Once these rleD and rle8 resources are in, two additional sets will need to be made for the ship’s blinking lights and thrust.

Example of an rleD image and mask
An rleD image and mask

Example of an rle8 image and mask
An rle8 image and mask

target pict example

Next, a number of “pict” resources are needed for the ship’s shipyard image, detail image, and targeting computer image. These are also 24-bit bitmaps, and their sizes are best found by just exporting the resources from another ship and then editing in GIMP. To find these images, check the “ship” resource for an existing ship, which should include the IDs of the corresponding pict resources.

description pict example

Data Resources

Lastly, the ship needs a “ship” resource to provide ship stats, a “shan” resource to describe how the sprite sheets should be interpreted, and two “desc” resources for in-game text when you’re shopping for the ship or attempting to hire it as an escort.

Example of a ship resource

Again, these resources are best created by copying them from a similar existing ship and then updating their IDs to a number that EV Nova doesn’t use. The ID of the ship resource should match the ID of the shan resource, and the ship resource dialog will generate appropriate IDs for the rleD, rle8, pict, and desc resources based on its own ID. One exception is that the ship detail image is user-defined within the desc resource.

Example of a desc resource

Testing the Ship

With all of the resources in place and with their IDs correct, EVNEW will save the plugin out to a .rez file that can be placed in the Nova Plug-ins folder of your EV Nova install. If the ship doesn’t show up in the game, I would recommend building a debuglog (place a file called debuglog.txt in the main EV Nova folder, then launch and quit the game) to see if anything is throwing errors, and then check your ship resource against others to ensure that you haven’t got availability bits or a high tech level blocking your ship’s availability.

in-game screenshot of resource testing

Creating your Own EV Nova Plugins

While this has by no means been a comprehensive walkthrough of how to create a ship, it should get you moving in the right direction should you want to enjoy a bit of nostalgia and expand the game. Resources like the EV Nova Bible and EVNEW should prove invaluable, and the Nova Reference Plus is great if you need information on existing game data. Development for EV Nova is a bit of a lost art with little information to be found in Google searches; however, I would be happy to answer any questions.

Also, feel free to download the IDA Courier plugin as an example for your own plugin creation. In addition to two variants of the ship, it contains seven ship-specific outfits and makes for a good example of how to create special items for sale in the outfitters.

Last Updated: 2024-05-16 - Questions? Feedback? Send me a note!