Gravitas is a gravity-simulating space game I originally released on Xbox Live Indie Games, and developed using XNA.
Nearly six years ago I spent a few hours porting the game to MonoGame, but never took it further.
I recently decided to try and revive it, again. This time it took less than an hour to update it to MonoGame 3.8.5 and .NET 10.
As a small aside, my day job is mainly as an iOS developer. I’ve spent a lot of time working on CI and doing a lot of work to optimize the build time. Every job I’ve done that has involved mobile development has had problems with slow build times - that’s why things like hot reload and previews are so important.
A clean build of Gravitas on my Mac takes just two seconds.
Things to do
Before I can actually release it, there are some things I need to do.
Some issues are either because of the XNA to MonoGame porting, or just evolution in MonoGame:
Broken match options screen.
Weird duplicate UI in game.
Some issues that were in the original release that I always wanted to deal with:
Camera zooms in and out too quickly.
Some text hangs off the screen.
Some scoring glitches - you can get a double kill when the second kill is a suicide.
There are practical considerations about releasing it on more than just an Xbox:
— This upcoming video may not be available to view yet.
Daedalic Entertainment and Gamexcite have announced downloadable content for Star Trek: Voyager - Across the Unknown, including some that is already out now.
In my earlier post about the base game, I noted a few things I’d like to see in a DLC. Very little detail has been confirmed and I don’t really expect much of the specifics of my suggestions to make it.
However, one thing has been confirmed: a mode featuring the U.S.S. Equinox. And honestly I’m happy to see any extra support.
The first DLC is available now with the rest coming throughout the year. Hopefully if it is successful, there will be more.
DLC 1: Delta Chronicles – available now.
New missions, recruitable heroes, six new technologies and four NPC ships.
DLC 2: U.S.S. Equinox - soon
Contains a completely new, playable ship along with crew, technology and more.
DLC 3: later this year
Contains more missions, heroes, technologies and NPC ships.
DLC 4: New sector - later this year
Contains a whole new sector with storyline, missions, characters, NPC ships and technologies.
Both were inspired by the content of Gary Rosenzweig’s Advanced Lingo for Games book. But where Supremacy was a slight refinement and rebranding of a complete game, Q War takes one behaviour (the implementation of the bullet sprites from both the “Space Invaders” and “Space Rocks” games) and builds a different game, complete with “original” graphics.
I believe I worked on Supremacy first as a learning exercise, and then started Q War. But I made Q War available first. The only hard evidence I have is the remains of the Shocklive! site in 2001:
8th February - Site created! Q War, a two level action shooter is playable
18th February - A Completely re-done Q War has been uploaded!
14th March - Supremacy, a new fun strategy game is now available!
Each level puts you in control of a ship that can fly around and shoot, with limited shields that deplete as you take fire. The game supports one or two players working cooperatively.
The game is split into multiple levels, connected by a map screen between each one where you choose your next destination. Starting in the top left, the goal is to reach the bottom right. Levels can be blank, or they can contain obstacles — either an asteroid belt you need to survive for a set time, a powerful enemy station that is shooting at you, or a pair of enemy ships to defeat. Any combination of those can appear in a single level, including all three at once.
Online features
Q War features two online features.
Maps
The map is loaded from the map.txt file along side the game file on the server. An example map.txt file:
Firstly, that format is the default way Lingo serialised an object. That is an array of four elements, each of which is an array of six strings.
I think the game technically predates JSON (Wikipedia says it was first specified in March 2001). It certainly predates JSON being widely used for anything. As such, Director and Lingo do not support JSON and instead use their own format. However, for string arrays, the syntax just happens to be the same.
Each string controls one map cell with the following rules:
If it contains an “a”, the level contains asteroids.
If it contains an “s”, the level contains a station.
If it contains a “1” the level contains one enemy ship.
If it contains a “2” the level contains two enemy ships.
It seems the order does not matter.
The map is also absolutely required to be exactly 6×4. It just uses direct indexing and would crash otherwise (I think technically it could be bigger without a problem).
The reason the map is loaded from a file is so I could provide multiple maps. In fact, I had it so the maps were generated by a PHP script:
First the layout of asteroids was chosen from four possible layouts. Then each cell had a random chance of also gaining ships and a station. Finally, the first cell is always blank, and the last cell has a station and two ships.
And astute readers may not the $rand == 5 and $rand == 6 cases duplicated. I only noticed this while writing this post.
High score table
The reason why the maps were variable is because it also had an online high score table.
You could enter your name, and it would keep track of the high scores for the current map, including keeping solo and coop separate.
There were two different implementations of the high score server script, and considering the two shows some of my developing understanding of how to design systems (if not really any serious consideration of security).
Highscore server script version 1
<?phpinclude('../connect.php');if(!$mode){$mode="Single";}if(!$player){$player="<i>No Name Entered</i>";}if(!$score){$score=120;}if($score<1000){$score="0$score";}connect();$sql="SELECT * FROM qwar ORDER BY number DESC";$result=mysql_query($sql);$row=mysql_fetch_object($result);$num=$row->number;$sql="INSERT INTO qwar_".$mode."_".$num." VALUES('$player', $score)";$result=mysql_query($sql);print"Done\n";functioncheck(){connect();$sql="SELECT * FROM qwar ORDER BY number DESC";$result=mysql_query($sql);$row=mysql_fetch_object($result);$time=$row->time;$num=$row->number+1;if($time<time()){$time=$time+604800;$sql="INSERT INTO qwar VALUES($time, $num)";$result=mysql_query($sql);$sql="CREATE TABLE qwar_Coop_$num (name varchar(30) DEFAULT 'No name given', score smallint(5) unsigned DEFAULT '0')";$result=mysql_query($sql);$sql="CREATE TABLE qwar_Single_$num (name varchar(30) DEFAULT 'No name given', score smallint(5) unsigned DEFAULT '0')";$result=mysql_query($sql);createMap();}}?>
In the first version I hadn’t really got database design at all.
The check function was called periodically to check if a new map should be generated (probably as part of some other page load).
If 7 days (604,800 seconds) had passed I generated a new map and I created a new table for the new high scores (actually two tables; one for single and for coop) I also stored the number that was part of the name for the tables so I knew which tables to store scores in.
Other than that, I just stored the name and score into the relevant table. It relied on the amazing feature PHP had back then called register_globals which just dumped GET and POST values into variables with the same name.
This obviously meant you could just craft a very easy GET request to post whatever score you wanted. Oddly enough, I don’t think anyone actually did.
Highscore server script version 2
<?phpinclude('../connect.php');if(!$mode){$mode="Single";}if(!$player){$player="<i>No Name Entered</i>";}if(!$score){$score=120;}connect();$time=time();if($score<12000and$HTTP_SERVER_VARS["REMOTE_ADDR"]<>'80.137.161.246'){$sql="INSERT INTO qwar VALUES(NULL, '$player', $score, '$mode', '$time')";$result=mysql_query($sql);}print"Done\n";?>
For version two, some things are better. Firstly, the high scores are now in a single table with extra columns of mode and time.
And… that was it. Everything else was the same.
Except for some reason I was blocking high scores from one specific IP address. I cannot remember why. Maybe someone actually did try cheating?
I did actually make one extra addition a few years later. Another parameter that identified what website you were on so it was possible to host the game in different places with unique high score tables. I even blogged about it:
This game predates Galaxia, and as such it predates my online name “GalaxiaGuy”. Back then I used the name “Admiral Q”, a reference to the STCCG card Military Privilege which includes the quote: “Starfleet Admiral Q at your service!”
As such, I naturally named everything with a “Q”.
There are a few old posts on this blog mentioning Q War. Notably, my 2004 references spell it “QWar” rather than “Q War”. This is obviously wrong since the title screen clearly renders it as two words, but apparently past me was less bothered about such consistency.
Graphics
Unlike Supremacy, the graphics are “original”. And by original, I mean I didn’t just get them from the Lingo book and conceived of them myself. In reality they are lovingly based on existing Star Trek material.
Player ships
Player 1Player 2
The player ship is the Bajoran Raider from Star Trek: Deep Space Nine. Weirdly, the original has a pair of struts connecting to the wings, but I’ve filled in the gap in the middle essentially making the wings wider.
I also added a tint to the ship which is blue and green for player one, and red and yellow for player two.
I would later reuse the ship graphic for Gravitas.
Enemy ships
Working this out took some time.
As a small aside I would like to call attention to the excellent Star Trek website Ex Astris Scientia by Bernard Schneider. In this case his Starship Gallery was an invaluable resource without which I would not have found the source of this ship.
The enemy ships are Vidiian ships, specifically the “Vidiian ship 3” from that link.
Possibly to introduce a bit more colour to the game, or maybe just to hide the source, I drastically changed the colour from the original brick red to the weird lilac cyan combo.
Enemy station
The space station is the Renegade Borg Ship from the Star Trek: The Next Generation episode Descent (the one with Lore and Hugh).
The only change I made was to make it green.
And honestly, I’ve always thought this shape makes much more sense as a station than a ship.
Asteroids
The asteroids actually are completely original creations I made in Paint Shop Pro 5, and for whatever reason I remember exactly how I made them.
Generate some random noise.
Apply Gaussian blur.
“Cut out” an asteroid outline.
Apply a circular gradient to add shadow.
Colourise.
Fonts
The main title and menu font is Trek Generation 1, which continues my theme of using Star Trek fonts in Shockwave games.
In this specific case, it was a surprise to me. For as long as I can remember I thought I’d used Copperplate Goth Bold (which does look similar) but when I actually explored the original source, I was wrong.
Like Supremacy, some time after the initial release, I added the message “Brought to you by Galaxia”. Galaxia being another game I developed.
The future
Once DirPlayer has better support for my games, one of my goals is to recreate the Shocklive! site complete with both Supremacy and Q War. This would include a new, safer high score system to replace the original.
— This upcoming video may not be available to view yet.
9o3o is a web-based version of Flashpoint Archive which provides a way to play old browser content without installing anything locally.
It has long had support for Flash content via Ruffle but has recently added support for DirPlayer, which means Shockwave content is now playable through it.
— This upcoming video may not be available to view yet.
I recently bought Star Trek: Voyager - Across the Unknown, a story-driven survival strategy game developed by Gamexcite and published by Daedalic Entertainment.
In fact, I pre-ordered it. Pre-ordering is something I tend to reserve for things I feel the need to signal support for that might otherwise struggle. I was a big fan of Star Trek in the 90s and early 2000s, and while recent Star Trek has been more of a mixed bag for me, I was excited for a new game based on this era, even if some of that is nostalgia.
It is surprising that anyone would base a game on a TV show that last aired nearly 25 years ago, and probably a bit of a gamble. That said, the last Star Trek: Voyager game I played was Elite Force, which was projected to sell 700,000 units but reportedly only sold around 300,000 worldwide which was considered an underperformance. Across the Unknown has already sold 100,000 units; whether that meets its presumably more modest target I can’t say, but it at least suggests I’m not alone in my nostalgia for this era of Star Trek.
Spoiler warning: The rest of this post contains spoilers for the game (and, in case it matters, Star Trek: Voyager).
Gameplay summary
The game is strongly structured around the major events of the show like the Kazon, the Borg, the Hirogen, the Borg again, which you encounter in order. These can’t be avoided, but how you handle them is up to you. Smaller, less significant events from the show are scattered throughout as optional encounters that you have to seek out.
In terms of feel, it’s a bit like Fallout Shelter (I mean the ship overview even looks like Fallout Shelter). Resource management is the foundation, with the most significant resource being morale. If it gets too low crew will mutiny. You make the decisions, whether to be diplomatic or aggressive, whether to embrace dangerous technologies like Borg research, and the game features roguelike elements, so each run plays out differently, with crew members permanently lost if things go wrong.
Advice to new players: If you leave a sector while someone is off the ship, they will be gone forever. The game technically warns you of this but is a bit understated, and sometimes you may have even missed that someone was off the ship. In my current run I guess I’ll never know what happened to Tom.
The game also covers ship management (repairing and constructing rooms, managing energy and life support), exploration, away missions, and ship-to-ship combat. The combat is a bit basic, but to be honest I think that fits in with the way combat has always worked in the show. In fact it is interesting how much Star Trek games have focused on robust combat mechanics when it was never really like that on-screen.
My thoughts
The introductory mission with the Caretaker is a bit long and a little annoying to play more than once, though you can influence things - including ending the game early by simply using the Caretaker’s array to go home.
Initially it feels like you follow the show’s story very closely, which can feel restrictive. But there is more flexibility than it first appears. You can recruit Seska, recruit a Kazon, lose Chakotay, and end up with zero, one, or more of human Torres, Klingon Torres, and “real” Torres. And of course you get to choose what happens to Tuvix.
The dialogue is not amazing, but somehow quaint. There is generally no voiceover except for the sector introductions by Tim Russ and Robert Duncan McNeill.
The game is hard. There are three difficulties - “Adventure”, “Survival”, and “Years of Hell”. I initially tried “Survival”. I thought it was quite easy and things were going well, until everything fell apart. I’ve since dropped to “Adventure” and I’d recommend it as a first playthrough since it is the best for exploring “what if?” scenarios.
Should you buy it
If you are a fan of Star Trek: Voyager, absolutely. If you are a fan of Star Trek of this era and want more video games based on it, then also absolutely. If you are a fan of Star Trek in general and are at least moderately interested in roguelikes or resource management games, then probably. Otherwise, it’s harder to say. On its own merits, without being based on Star Trek: Voyager, I’m not sure how well it stands up.
If you are a fan of the show, some of the elements are strongly telegraphed. For example, while fighting the Kazon you find out there is a traitor on the ship. If you watched the show you know who it is, and that can’t be changed. You can influence what happens, but you already know who to trust. This continues throughout the game, and many of the optional side missions are even named after the relevant episodes so you can see what is coming. It’s an interesting choice. Part of me wants to see what a playthrough by someone who hasn’t seen every episode several times would look like.
Suggestions for improvements
It would be nice if the player could control the ship right from the start while trying to find Chakotay and the Maquis. Some mechanics could remain locked, but it could be a good way to tease the player with what they can achieve by briefly showing them a fully functioning Voyager.
The away team mechanics are pretty cool but there aren’t enough missions. It would be good to see more of them, and perhaps with a bit more secrecy - currently you can see all the required specialties before starting a mission, which makes things a little too gameable. There’s also an opportunity to introduce random events during missions. The Star Trek CCG is structured around missions and dilemmas, where dilemmas represent generic1 things that could go wrong on a mission that the crew have to deal with. Something like that could work well here. Similarly, most space locations are just random resource gathering, and it would be interesting to see some kind of minigame introduced there too.
More randomness in general would be welcome. My ideal would be the ability to choose how closely the story matches the show when starting a run: what if Seska isn’t the traitor, or the crew encounter the Hirogen before the Kazon, or some entirely original events are introduced? On a similar note, playing with different ships could be interesting. Some suggestions I’ve seen are a harder mode based on the U.S.S. Equinox or Defiant-class, or an easier mode in a Galaxy-class ship. Probably beyond scope for a DLC, but someone suggested a version based on navigating the Delphic Expanse from season 3 of Enterprise, which I’d happily play.
Okay, most of them aren’t generic and some care would be needed to not introduce some absurdity. Finding out the universe only has seventy trillion years left and working out what you should do about it, while trying to retake Voyager from the Kazon, would be weird. ↩︎
— This upcoming video may not be available to view yet.
DirPlayer 0.4.1 has been released. The headline changes are hardware-accelerated graphics, major performance improvements, and custom font parsing and rendering.
That last one is particularly relevant to Supremacy, as the previous version had broken fonts. I’ve updated the JS polyfill on the Supremacy page to the latest version, and the game does look noticeably better as a result. Most of the fonts now render properly, and all of the buttons are readable.
Unfortunately, it still isn’t quite playable. The runtime error that stops progress is still there, but it seems simple enough I may try to fix it myself. Which means learning some Rust…
Supremacy is a Risk-style turn-based strategy game I wrote in Macromedia Director and originally released in 2001. It supports both single player (against AI opponents) and local multiplayer.
You can find it in Flashpoint under the name “Supremacy”.
— This upcoming video may not be available to view yet.
I recently posted about Flashpoint Archive, a way to play old Shockwave (and other) content. I have just discovered another option DirPlayer.
What is DirPlayer?
DirPlayer is written in Rust and compiled to WebAssembly and is available two different ways:
As an extension from the Chrome Web Store. This is useful for visiting any old or archived sites and just automatically loading the Shockwave content.
As a single JS polyfill. This allows people hosting the content on pages they can still edit to make their Shockwave content available to any modern browser.
Current status
At time of writing, version 0.3, has just been released. I’ve tried Supremacy in it. There is good news, and bad news.
The good news is the game launches. The fonts don’t work properly, and some buttons do not have colours making them hard to read, but you can actually start a game. Sadly, there is then a runtime error.
But I’ve decided to add Supremacy back on to the site in its original location and included the DirPlayer polyfill, which I hope to keep updated as development continues.
— This upcoming video may not be available to view yet.
I started programming from a young age. One of the earliest programming projects I worked on that I was pleased with was a version of Risk called “Supremacy”.
Shockwave was a technology created by Macromedia as a sort of companion/competitor/successor to the then ubiquitous Flash1.
Back in late 2000, I managed to get access to Macromedia Director1, the authoring software, and started playing around with it.
This was back when I was learning much of my programming from books (there was less available on the internet then). So I bought “Advanced Lingo for Games” by Gary Rosenzweig (Lingo being a bespoke programming language created just for Director).
I made the game available on a website called “Shocklive!” on March 14, 2001 (and apparently released an update on March 18 with “no known bugs and better AI”).
Today, the game has been submitted to the Flashpoint Archive and should be available soon.
Random trivia
Since it has been almost 25 years since I worked on the game, my memory has gaps. But I do still have the source code, so here are some things I can either remember or have worked out.
The name
Early in development I called it “Domination”, which is why the main file for the game is called dom.dcr.
Risk mechanics
It really is a bare bones version of Risk (mostly because it was designed as a programming tutorial and at best as a jumping off point to do more).
It has the original 42 countries from Risk, and uses the base rule: reinforcements equal to a third of your country count. It does not have continent bonuses however. This makes it much harder to snowball and as a result games tend to take longer (see the video).
It also does not use dice - every battle just gives attackers and defenders an even chance to win. This, combined with the fact that it also has no cards further lengthens games.
The computer player names
The default computer players are named after famous fictional AIs:
Deep Thought - The super computer from the Hitchhiker’s Guide to the Galaxy that determined the Answer to The Ultimate Question of Life, the Universe, and Everything was 42, and which went on to design an even more powerful computer, the Earth.
Orac - A sophisticated artificial intelligence from the British sci-fi TV series Blake’s 7.
Ziggy - The super hybrid computer from the sci-fi TV show Quantum Leap that runs Project Quantum Leap.
Zen - The master control computer of the Liberator, also from Blake’s 7.
Hal - The artificial intelligence and main antagonist in 2001: A Space Odyssey.
K-9 - The robot dog that was a companion in Doctor Who.
Title background
The background image is a Vietnamese girl holding an AK-47. I believe I sourced it from somewhere implying the girl was undergoing training to be part of some militia or military.
I still have the original copy and when I did a reverse image search I found it, with the description:
a Vietnamese high school girl practises taking aim with an AK-47 assault rifle during military training for students in Hanoi September 8 2000 high school and university students in communist ruled Vietnam take part in such training every year as part of a national defence programme"
Fonts
The main title font is Romulan Eagle. It sounds Star Trek based (which definitely makes sense with my interests at the time) but I honestly cannot remember anything about it. I have no idea where I found it. Possibly from the internet, possibly from a CD (CDs full of fonts were popular then).
The body font is Tahoma a standard Microsoft font which was apparently the standard screen font for Windows XP.
Also included in the project for some reason is Monaco, a font by Apple that was standard on Macs at the time. Which is a bit odd since I was using Windows at home and Acorn Computers at school.
Galaxia branding
Some time after the initial release, I added the message “Brought to you by Galaxia”. Galaxia is another game I developed (from which I got the online name I’ve been using ever since - GalaxiaGuy). I was working on a new version of Galaxia (which I tried a few times) when I first started this blog. The old Galaxia posts are still available.
Life on this blog
In fact, the game was available for a while directly on this blog. Sadly, this is no longer the case.
Screenshots
Some in game screenshots:
Opening in the project in Macromedia Director on a Windows XP VM:
All the links say “Adobe”. It was Macromedia at the time. It shall live forever in my heart as “Macromedia”. ↩︎↩︎
— This upcoming video may not be available to view yet.
I’ve just found out about Flashpoint Archive, an application for playing old content created using Flash, as well as other obsolete browser technologies.
The core functionality is provided by sandboxed versions of the plugins that run the content, a proxy server for games that need to believe they are run over the internet, and a launcher allowing you to browse and launch content - all wrapped up in a neat package.
And for the true archivists, there is a version that embeds all the content for download that, at the time of writing, is 2.28TB.
I’m interested in this for a couple of reasons.
Firstly, the preservation of history. I would like everything we create as a culture to remain available in some way (which is why I also support the Wayback Machine and the Internet Archive). I’m also of the right age that much of this was some of the most popular content available on the internet when I started using it.
But also, I myself have some stuff I’ve produced that is hard to access in modern browsers. Specifically, some Shockwave and Silverlight games.
So, for the near future I’m going to do what I can to get my games added to the archive.