μniverse is on hiatus, which should be kinda obvious from the lack of updates on the devlog or github repo.
But it’s not dead. I’ll never lose interest in making this game. I will return to it some day, and likely rewrite it using ImpactJS, which may be the best $100 I’ve ever spent on software.
In the meantime, there are a ton of amazing-looking open-world space exploration/trading/fighting games in the works:
- Elite: Dangerous (YES!!!)
- Star Citizen
- Infinity (still crossing my fingers for this one…)
- Limit Theory
- And a lot more that I’ve lost track of.
I couldn’t think of a third subtitle.
Warning: This post is almost exclusively about programmer-things. Meta-programmer-things (tools. not meta-programming. yeesh). Unless you are a developer, the only way to proceed is with an applaudable/horrific degree of curiosity. I salute thee.
Ah, github. I can’t begin to tell you how ubiquitous it has become for me. I use version control for nearly every project I work on, and throw the least-embarrassing code on github.
That includes μniverse. And yes, the repo is public.
I’m the type to commit early and often, like every good little code-scout was taught. When I’m active, I make commits more frequently than a typical twitterer’s tweet frequency (tweequency?). It’s a good habit to get into for safety’s sake alone, but if you leave descriptive messages, your commit history can even tell a story.
Yesterday, I realized that’s exactly what I’m trying to do with this devlog. You can now see the most recent commits directly on the sidebar of this site. But how’d I do it?
camelCaseis so 2003, I know, but I’m just following jQuery’s naming conventions.
iframethat does all the work for you, if you’re happy with the available themes to choose from.
So, if you’re a developer who’d like to show the latest commits for a project on your site, there are a few options you have. Check out the readme and give it a whirl — it’s pretty easy to use.
Obligatory Live Demos
Animated notifications are superior.
This is the first and default animation, but you can imagine that the motion might not be as pleasant when an enemy ship threatens you or a passenger becomes unruly.
Also, randomly-generated dude totally looks like Hulk Hogan.
What’s the point of having a badass Faster-than-Light (FTL) Drive if time is of no consequence?
It was always planned, but until now the game didn’t have any notion of time. You could pick up any taxi job and fly all around the sector a dozen times and the passenger would still gleefully pay you in full once you reached their destination station:
But now time passes when you move between star-systems, and taxi missions have deadlines. Missing a deadline means losing your fare, and being lazily demoralized by your passenger:
Your ship’s FTL Drive is now equipment that you can upgrade from a station hangar — each upgrade doubles your speed when travelling between systems, and there are 3 levels total (two possible upgrade purchases).
The faster your FTL Drive, the less time it takes to travel from star to star.
Needless to say, you’re going to want to look for jobs that are “on the way” and within your ship’s capacity. Taxi missions list their corresponding FTL level requirement to reduce time wasted inspecting missions that are unlikely to succeed, and to encourage the player to upgrade their ship. Passengers that are in a hurry will pay you more.Below: The Missions screen on a Pirate station. Those red dots indicate fugitives.
When you select a mission from the Missions screen, a starmap that highlights the destination and your current mission destinations is displayed, along with a beeline ETA of the selected mission’s star system.Below: Viewing selected mission details.
The small green circle is the passenger’s destination.
The yellow circle is a mission you have already accepted.
Future note: I’m planning on passengers getting upset and demanding to be dropped off at the nearest star system if you miss their deadline. If you take long enough or ignore their requests, they may also become unruly — a threat to your ship and crew — which is a special feature I’ll be talking about in detail in a future post.
I’ve been playing around with different ways to fake the atmosphere of a planet in a 2D canvas context.
That’s interactive, by the way, so mess around with it (Chrome/Chromium is recommended!). Clicking on/around the planet changes the “angle” of light. You can get some pretty nifty looking results. I made this to determine what were reasonable parameter-ranges to use to generate plausible-looking planets.
The way I get the sort of “volumetric” look for the atmosphere is really simple: I just stack many semi-opaque layers of the same gradient-filled-circle over the planet, each one having a radius slightly bigger than the previous.
I actually threw this together using with a JSFiddle which you can view/hack here.
Of course, I still need to figure out how to combine this with a surface/cloud texture (procedurally generated or otherwise…).
"High", as in altitude. Again, no apologies.
If you’re old enough to have been a highschooler before the average cell phone had an app store, then this probably looks familiar:
That of course is a depiction of the ubiquitous TI-82/3+ game “Drug Wars”.
It was a simple and extremely … er … addictive game. Buy low, sell high, don’t get caught, and don’t get robbed on the way to the suburbs to drop your stash of cocaine.
Now, as it turns out, this was inspired by a DOS game from the early 80s. Of course, there have been many variations, but I’m willing to bet that the one for the TI-83 has been played by more highschoolers of my generation than any of the “modernized” versions (/me wrinkles his nose at ‘mafia wars’).
Frontier: Elite II, a game from 1993, introduced black market goods to the space-trading from the first game. Whether it was influenced by DOS Drugwars is a mystery to me, but I know it was at least as fun to be a dealer in space as it was to be when I should have been memorizing trig equations (okay, it was definitely more fun — lasers).
So, of course, I had to include black market goods in μniverse.
There is only one illegal good so far in the pre-alpha: generic narcotics. I may add other goods that have special properties, such as firearms, nuclear waste, non-compliant computer hardware, unidentified alien technology… it’s easy to come up with ideas. But for now, just droogs.
Currently, the only penalty for transporting illegal goods — as seen above — is for the goods to be “confiscated” by the ITG (Intergalactic Trade Guard).
I should note that so far, there are two kinds of space stations you can encounter: ITG stations (below, left) and what I’m calling “Pirate” stations (below, right), which are not “protected” by the ITG.
Every time you enter an ITG station, there’s a chance your ship will be searched. Pirate stations, however, are “safe”. Thus, it should go without saying that prices for illegal goods at ITG stations are significantly higher than they generally are at Pirate stations.
To make things more interesting, I intend to introduce a “Smuggler” crewmember, whose presence aboard your ship will reduce the likelyhood or rate of discovery of illegal goods and later, fugitive passengers — a topic I’ll be discussing in a future post.
Today I’m working on some boring-but-necessary UI cruft. Specifically, dialog overlays. I’m going to need them for mission briefings and alerts for when you’re caught harboring fugitives, among other things that are more fun to talk about (patience…).
This called for the need to word-wrap a string, and since Akihabara doesn’t seem to have that built in to its text-blitting functions, I needed to implement it myself.
There were some pseudo-code examples listed on Wikipedia for word wrapping but they weren’t really complete, so I just bit the bullet and — gasp — figured it out myself. In hindsight I realized how obvious the solution was:
(That’s CoffeeScript, by the way. If you’re a JS programmer but not familiar with it, check it out. It’s life-changing.)
And now a little #meta.
So, there’s no built-in way to do syntax highlighting with tumblr. /me shakes his fist at the sky
Of course, a little hacking will go a long way.
I’m using gists according to this guide because it worked out of the box with CoffeeScript, but there are many different solutions out there.
- A popular library used around the web, but I never liked the way it looked by default and there wasn’t any built-in CoffeeScript support.
- Seemed like the cleanest solution but didn’t work with CoffeeScript (my code was detected as perl. /me shudders).
- Another popular solution; this is what stackoverflow uses. I may actually use this in tandem with gists later, if it supports CoffeeScript. It would be tedious to create a gist for every last snippet of code I want to post.
Yes, there will be puns. I apologize for nothing.
The most recent addition to the game was the heads-up-display for your ship in flight mode. It’s a subtle addition but it’s the sort of thing that makes it feel like, yanno, a game. I’m happy to say that it doesn’t act as a big distraction or take away from any “immersiveness” that the game might (accidentally) already have.
Right now, the only info the player needs to see are their shield levels. The way I chose to display this was an unassuming, white vertical bar. When you take damage, the bar shrinks accordingly. The important bit is that it does so in an animated fashion — any time the bar is shrinking, the ‘S’ (label for ‘shields’) shakes proportional to the amount the bar is moving.
Once your shields are below a critical threshold, the bar turns red, and the ‘S’ continues to shake along with the bar until your shields are repaired. I usually hate UI-nags but I make an exception for imminent death.
What isn’t pictured is that the camera also shakes whenever you take damage. The reason for this is two-fold: 1) This helps indicate that you took damage, but it also 2) can disorient you, much like it would happen if you were at the controls and a burst of plasma breaches your hull.
Along the same line, I’m considering having your craft be propelled by the shots as well, but I’m afraid that might be too jarring for the average player. Maybe in a sort of “expert mode”. ;)
This is a concept image for a procedurally-generated gas-giant-like planet in the game. You probably see this dude over on the left right now, too, but I wanted to talk briefly about it.
Right now, planets are rendered as a single circle filled with a radial gradient that is offset from its center. This is pretty effective for giving the illusion of a sphere, but it’s a boring non-textured sphere.
Currently what I’d need to add to the game would be an extra layer or two of inverted radial gradients for “atmosphere effects” (the blue lighting) and an overlay texture that is either canned or also procedurally-generated. When I figure out how to do this I’ll make a technical post explaining my technique.
Oh and yeah, I realize that the lighting is unrealistic — gas giants have clouds that align perpendicular to their axis of rotation, which corresponds to their axis of orbit around their star. Unless the axis of the planet got thrown off bigtime — which does occasionally happen with planets like Uranus — it doesn’t really make sense. Our camera would have to have been rotated, too.
That reminds me; while I wont be going to great lengths to make the game universe realistic, I’ll try to keep them somewhat-correct. More on that later.