EV Nova was a formative game for me. One thing I noticed about it, and wanted to document, was that there are a lot of what I’ll call name collisions: names that are almost the same but refer to different things. Did I miss any? Leave a comment, I’ll add it.
Temmin Shard / Shard (faction)
Temmin Shard is a character in a side quest. However, “Shard” is also used to describe a faction formed when you win the Fed campaign and everyone else comes after you.
Krane / Kane (incl. Port Kane, Kania, and the Kane band)
Omata Kane invented galaxy-spanning hypergates and a bunch of things are named Kane in her honor, including earth’s artificial ring, the Kane Band. There’s also a Port Kane in the Kania system. Krane is the sociopath leader of the secret fed faction that you work for in some campaigns. Very different people.
Glimmer / Gli-Tech / Gli-Tech-Nia
Both are companies that make missiles. Huh? Gli Tech also owns an entire planet, called Gli-Tech-Nia. But wait, Glimmer is also the name of a star system. Surely this piece of fluff for Gli-Tech-Nia clears it up:
Associated Guild Of Free Traders / Free Traders
Two opposing pirate factions that fly the same ships. One is hostile by default, the other isn’t. No idea which one though; and feds don’t care which one you blow up either. According to Word Of Atmos this is intentional.
Polaris / Polaron Cannon / Polaron Torpedo
Polaris are one of the game’s major factions. Polaron refers to a Federation weapon. But the weapon is pink… the color of Polaris technology. And the Polaris have a Polaron Torpedo which is pink but apparently unrelated. Maybe Polaron refers to some specific scifi gubbin, but then that’s still colliding with the Polaris.
Vella / Vell-os
Vell-os are a race of psychic transhumans and mostly extinct, Vella are a neighboring Arouran subfaction.
Wraiths / Wraith Cannon / Wrathii
Wraiths are a race of sentient space-monsters, Wrathii are pink projectiles that the Polaris fire out of a Wraith Cannon. Also the Wraiths are right next to the Polaris.
TOWCB / TCTLIDS
The Ones Who Came Before are your standard ancient race of aliens trope, TCTLIDS are The Creature That Lives In Deep Space harvested for drugs, an abandoned plot hook that somehow remained in the timeline preamble.
Hovertank is an honest attempt to bet big open 3d environments with AI agents running around working in Godot, using HTerrain and Godot Detour. I hope this is helpful for anyone who wants to make something similar in the future.
Create a new inherited scene from the “world” scene.
Add an HTerrain element to your level. Make sure it’s collision layers are 1 and 8.
Create a data directory in the levels folder
Apply a tileset to your HTerrain by dragging tileset.tres into the texture set slot, or making a new one from scratch.
Edit the terrain to your heart’s content using the generator and the tools.
You’ll need to repeat the next steps each time you edit the terrain mesh
From the “Terrain” menu up top, select “Generate mesh (heavy)” and select an LOD of 4. At least that’s what I’ve been using.
It will create a node called “HTerrain_fullmesh.” This is the node that the pathfinding library uses to actually determine where AIs can go. Hide this mesh; if you need to see the navmesh turn on “visible collision shapes” and you’ll see it (and it may lag real bad!)
Note that the flattened areas have nice clean navigation, but the more sloped areas don’t. You can use the flatten tool to cut paths across the map. Make sure you enable “pick” on it, it’s much nicer that way.
The prefabs folder has enemies with preconfigured weapons you can just drop right into the scene. You’ll want to drag them a bit closer to the ground though.
You can also place buildings this way. Careful not to accidentally parent stuff to random entities you’ve already placed – entities in Hovertank expect to be parented to the world.
You can set up objectives by adding the “ObjectiveMarker” component to an entity.
When all of the entities with objective markers are destroyed, the player has won the level. You can add the objective marker to any enemy or building.
The incursion spawner will spawn the entity you provide in “spawn” whenever there’s an incursion with the selected severity. Put one of the monsters in there by dragging its tscn file in to the spawn field (only monster at time of writing is our friend Kochab) (Incursions were removed, but you can see how it worked in older commits — Ed)
Add your level to the list
Add an entry to the big literal with all of the levels pointing to your level’s TSCN file, give it a name and a description, and it should show up in the dropdown in the main menu.
Godot’s High Level Networking tutorial (and book chapter) do a great job of explaining a peer-to-peer networking setup. However, many games want to be server-authoritative, and to set up a multi-area game, you sort of need to. Luckily, you can use the same primitives to build a server/client game. This is just sort of a brain dump of my notes that may be helpful in navigating the MPEVMVP source. Feel free to post any questions you have about it; I love to talk about this stuff.
The technical requirements that deviate from the basic tutorial they hand out are as follows:
Server-authoritative client/server game
Multiple levels that players can switch between
Players are able to join a match in progress
In case you haven’t tried it, the project is here: https://github.com/eamonnmr/mpevmvp. The gameplay is similar to Asteroids (and, well, similar to Flythrough.Space): it uses RigidBodies to simulate movement, you can shoot other players to force them to respawn, and you can press “J” to initiate a hyperjump after you’ve pressed “m” to select a star system from the map.
Godot’s Networking Golden Rule
A remote call (rpc, rset) is going to be called on the remote node with the same node path. That includes name of the node, the name of the parent, etc, all the way to the root node. You can set a child node’s name with set_name but if a similarly named child already exists, an @number will be added to your node. This is a major source of bugs for networked projects, so be careful. You cannot set a node to a name with @ in it. So in effect, you cannot use Godot’s auto-incremented names (since they append @increment) to sync between the client and the server. For this reason, I used a uuid library for generating node names.
The need for the same structure on client and server despite the fact that the server held a whole universe while the client only cared about one system is a major source of complexity in the codebase.
I implemented the Client and Server as singletons that exist on both sides. The reason for this is that it makes it really readable; when the client needs to send something to the server you write Server.rpc and when the server needs to send something to the client, you use Client.rpc. Besides this line of communication, I’ve used rpc and rset within various nodes to update and alter the client versions of themselves. This always happens inside an is_network_master block, to ensure that it’s being called on the server version of the game.
The one thing we do need to gather from clients is input, and for that each client has a PlayerInput node, network_master’d to them. They rset_id input up to the server. The server copy of the player nodes looks at this remote copy of the player_input to determine it’s behavior, then pushes its state back down to all clients.
Suppose you want to have multiple different levels/worlds/rooms in your game. The trick is that you need to mesh the following two constraints:
Node paths need to be the same between client and server (see discussion above)
The server needs to have different node paths for each level
The trick, then, is to send the client to the new level by loading the appropriate level and making sure it’s named appropriately. There’s one wrinkle though: different 2d physics worlds need to use a Viewport class, but you don’t want to add additional viewports on the client for performance reasons (tried it, it was way too slow.) My solution was to add an extra layer of nodes called “universes” in the comments which are a Node2d on the client but a Viewport in the server. They are managed on the server by ServerMultiverse and on the client by ClientUniverse. Client Universe cares about a single “universe” child whereas ServerMultiverse handles multiple children.
Sending Entities/Switching Levels
In order to join a match in progress or switch to a level that already has stuff in it (or, indeed, switch a player into a level) we need a robust way for the server to move fully-formed nodes to the client. Godot does not provide a generic “send this node” method, so we need to write one for ourselves. The approach I took was:
Assume that the ent will be instanced from the same scene that the ent on the server is
Write a “serialize” and “deserialize” method that allows it to dump a dictionary with all of its important state and recreate itself from that dictionary.
Make sure the node on the client side is assigned the same name as the one on the server side.
So when a client’s level is switched, they dump the current level and recreate the new one by loading in the scene and then, node by node, deserializing the state sent from the server. As it turns out, this means that any state can be synced freely, and it enables us to dispense with the lobby entirely and let players join and leave at will.
Sync In Multiple Levels
Each level owns the process of syncing its state to clients in that level. Scenes within the level can declare a method that serializes their state for a net frame, and the level gathers all of those up and sends them. The client receives the frames from the server, and the individual scenes use the content of those frames to interpolate their position. To save bandwidth, I only do this for ships and guided projectiles, everything else moves deterministically. This whole process is derived from the teaching of (and better described by) this video.
Because we’re using the player’s presence in a level to determine if we should update entities in that level for that player, when a player’s avatar is destroyed the world seems to stop for that player until they respawn. This might be desirable in some games, but I think most games at least want to show the player the immediate seconds after their own demise. So what we do is replace the player with a ghost.
Tooling & Workflow
GDScript is based on Python 3 and the most basic syntax resembles it. ‘func’ in place of ‘def’, no ‘self’ and no list or dict comprehensions or other advanced features. It feels like the python of basic python tutorials. However in exchange for this, you get one thing python 3 does not offer: true static typing. In Python 3 you can offer a type hint for a function argument but it is not truly enforced. GDscript enforces the types at compile time and boy does it ever catch a lot of bugs. You also get the ability to define classes with typed members, similar to what you get in Python with Pydantic. Overall I like gdscript and the things I miss aren’t dealbreakers.
The lack of a vi mode for the editor hurts. I know I could just use the godot plugin for vi, but I actually really like staying inside Godot’s editor. Despite the slightly crowded layout, it’s really very nice. The autocomplete to node paths is a killer feature that makes dealing with complicated trees less of a pain.
Building a multiplayer game in Godot is possible but by no means easy. The high level multiplayer API despite its gotchas works well, but you need to implement the sync logic yourself. This shouldn’t be too surprising as games have very different needs when it comes to net code. I hear that a similar mechanism for frame based sync and lerping is going to be more built-in in godot 4, which would be sweet. The puppet system (which I initially used; you can see a version in the tutorial) seems to be useful only for very low latency situations, so I regret that it’s a first-class feature because it may lead people down a rabbit hole of net code that will not work for most games.
EVMVMVP is the awkward initialism for my latest project; a multiplayer EV-like. You can download it here, and look at the source code here. I know I said I shouldn’t do it, but I really wanted to learn Godot and having a multiplayer server with multiple levels seemed like a really interesting problem to tackle. Implementing a bunch of stuff I already know pretty well but in a new engine and language has been a fun ride. I’ve jotted some notes down about the project so far. I’ve saved a deep technical discussion of Godot for another post.
Using an engine is well worth it
After flythrough.space I decided that I wasn’t going to build too much from scratch next time, not was I going to fight against tooling. The options I considered for FTS where Panda3D and BabylonJS. However over the course of that project also tried out Unity and Godot for small side demos and ended up liking Godot (and it’s permissive license and thriving community) enough to go all-in. In retrospect this was the absolute right move and I regret nothing.
Working With Onyx’s Sprites
I’ve been staring at these sprites on and off for something like fifteen years, itching to put them into a game. The original models used to render them are long gone, but Onyx (in a tutorial) explained how to separate out the engine glows. Working with these sprites feels like stepping out of time. They’re from the 90s. There are dithering tricks here I wouldn’t even imagine. They use a tiny palette but they’re so damn weighty. Present. Metallic when they need to be, plastic when they want to be. They tend towards the Star Wars / Used Future look. They invite stories to be written about them. And the planets are just absolutely lush too. Something about that limited palette…
Testing with real people is essential
I’ve been nagging more people to play this one. On the one hand, it’s much easier to convince someone to play your game if you can play it with them. On the other hand, you really need to do that testing or you will (like I did) find out that the sync method you’re using is totally busted and you need to replace it with interpolation. Furthermore, you’ve got no idea if your game is fun to anyone but yourself unless you subject it to ruthless testing by people who will give honest feedback. It becomes very easy to get settled in and work around horrible UI issues you’ve coded because “well, I know how it works.”
The ability to test solo is essential
Wrangling people for a test is hard. You need to be able to fire up an instance of your server and client with minimal effort or you’re going to wait too long and leave a bunch of bugs that you’ll be scrambling to fix when you finally get people around to test with. And absolutely nothing is more frustrating than the stars aligning for a test only to have a showstopper rear its head at the worst possible moment.
I had a conversation with a coworker about EV games and roguelikes. They made a claim that I’m not sure is true but definitely opened my eyes-they thought that the star maps in EV games probably had been procedurally generated-once.
Actually hand-crafting a full EV map is a bit of a process. One thing I never finished doing in FTS was populating all of the systems.
Meanwhile, Mag Steel glass has developed a really cool universe generator spreadsheet. I figured I could leverage it to make a map. Traditional EV games require you to specify exactly who spawns in what star system and FTS carried on that painful tradition. For this one I had simpler rules; factions had starting locations and then grew “influence” where planets (or stations) would belong to them and their ships would spawn. If two areas of influence overlapped, they’d fight.
Document enough for people to get up and running locally
Port forwarding is a lost art. There was much grumbling when my friends and I went to go start a game of Valheim; luckily I’d learned to properly port forward as part of this project! If you need a server for people to play your game, you can’t rely on your master server; you’ve got to give people an option to join localhost and put it in your manual/readme. Having images in the readme also helps show people what your project is about; this is especially important for games.
You don’t get cross platform for free
Using cross platform technology does not absolve you from cross platform testing. All of your target platforms might have the same features but they may all have different bugs for you to work around. I’m developing on linux out of what is probably just bloody mindedness at this point, so when I did my live demos on windows I often learned exciting new things like ‘your sound exports are busted’ or ‘only one computer can be assigned to a given port by a given router’ or ‘you need to version bump the editor for correct mac exports.’ Guess which one of those lead to an incredibly embarrassing platform bug report!
Video Tutorials are worth it
Part of my commitment to overcoming my stubborn hangups was relenting and watching video tutorials. I still strongly prefer written tutorials as a medium but the content is moving to video. For example:
I post progress updates on discord channels full of fans from the old days, and regularly demo the game with friends. This has been a source of motivation and helped me stick to a more iteration focused (and less “well, I’ll go off for a month and make all of the models/textures/features”) work habit. I’m not sure I’m going to do this for every project; part of why I did it for this one was I wanted to spur participation and that didn’t really happen. Very few people who I didn’t know personally went to the trouble of getting the game running. Part of that is because it wasn’t immediately approachable (you need to host or find a server then run another client to join it) and wasn’t immediately grippy (ok, I can buy a ship, now what?) Any amount of friction is going to turn away potential players, and if you’re used to playing rough unfinished demos this can become a blind spot. But beyond even that, getting someone to try something new is just plain hard.
People respond to Video
At the end of the day, pictures and text don’t cut it for sharing a game. Games are animation. People are used to watching streamers. You need a video of your thing and it needs to show off what the thing is about, including how you interact with it and why it’s compelling. This was my attempt:
Have features and fixes gone in since that video was made? Sure. But it’s still the best tool to show off what the project is about.
Has the project met its goals so far?
Learn the Godot engine: ✔️
I’m comfortable with the technology now; expect future prototypes to be more rapid.
Use Onyx’s Sprites in a game: ✔️
I used most of the ship sprites themselves and lovingly separated out the engine glows for even the ones I didn’t use, in case someone in the future wants to use them again. Cosmic Frontier mod anyone?
Build a reusable platform for multiplayer EV-clones: ✔️
Maybe this is a partial check. If someone has an idea and that idea is based on multiplayer EV gameplay, I’m confident that if they’re willing to learn Godot they could at the very least copypasta big chunks of the MPEVMVP codebase and get something running. Or they could fork it, replace everything, add missions, remove multiplayer, and make an EV clone real fast.
Discover if EV gameplay works in multiplayer: ✔️
Learned important lessons about how much bullet hell spam a networked game can handle, and as a straight dogfighting sim it let me figure out what is and isn’t fun in PVP EV.
Build a game people want/like/play: ❌
As far as I can tell, nobody enjoyed playing this besides on demo night. The service I think people want this game to be is beyond the scope of what it can be with a team this size.
4/5 ain’t bad. Thanks a bunch to everyone who tested it, gave feedback, and flew too far to find the center of the map again.
The Emularity and Ruffle teams have finally done it – Flash is running natively in the browser. No more flash plugin. You can play flash games and watch flash animations on archive.org. Flash defined internet content in the mid 00s. It has been effectively dead since the introduction of the iPhone, and to really enjoy it you need something with a mouse, or a very large tablet I suppose. Actually playing flash has gotten progressively harder, until now.
During the aughts, these where some of the games I played the most. Call it casual if you want, but these where the games you could play on school computers, that you didn’t need to buy. You could discover new ones every day. By timing alone, at least, they’ve ended up meaningful to me.
This is a great example of how the mouse was used for what you might call a sidescroller/shooter. Rather than negotiate a level with pitfalls, the task of your Mario-like character is to dodge incoming bullets, sort of like a bullet hell shooter. It’s also got an array of different creative weapons, each accompanied by a cool robotic voice announcing it when you pick it up. It never leaves this basic loop, spawning helis as fast as you can kill them. Once you get good at it, you can keep playing it for quite a long time. You can play it here.
https://archive.org/details/fancypantsadventure_202011 This game made a huge splash when it was released. The norm for sidescrollers since eras where denoted by the number of bits systems has was for side scrollers to be very similar to Mario and have the following characteristics:
Maps made out of a tile grid
Maps defined by axis-aligned bounding boxes
Movement defined by walking and jumping.
Fancy Pants adventure subverts these expectations while still sticking to the intuitive sensibilities of a platformer:
The levels are defined by smooth shapes much larger than what you’d expect in a tile map.
The maps use curved surfaces rather than straight lines or uniform curve sections.
In addition to walking and jumping, you can build up momentum and slide
But oh man, the style. This game dripped style. The lush animation, everything about it. I don’t think I ever made it past the first level. I didn’t care. When this came out it felt like it injected new life into the platformer formula. I think Flash’s vector nature really played a role here – it could do things you just couldn’t do on an NES. You can play it here.
This is a game that really only works with a mouse, and also illustrates the obsession with violence against stick figures. The figures attempt to knock down your castle and your defense against them is to click and drag them violently into the air so that they splatter down on the ground into a puddle of blood. Eventually you get enough points and abilities to take stick figures into your castle and turn the game a little bit more into a tower defense setup. You might be able to get this working on a very large tablet, but really the interaction is tailored for the mouse. The graphics are basic and make heavy use of gradients and stick figures – both flash tropes. Yet here I am in 2020, actually getting sucked into it. It’s a very well crafted dopamine loop. Launching the little bastards with your mouse is satisfying, mastering doing it quickly before they get to your gates is rewarding, and the relief of having your job automated by a bunch of archers is even more rewarding. You can play it here.
As a big fan of the Escape Velocity series, Broken Mirror kept me playing for many hours. It’s a space trader game set in the star trek universe. Well, the Trek’s mirror universe-the one where everyone is the baddies. It’s the rare fan game but it fills the exact kind of niche that you’d love to see for that setting. It’s also absolutely dripping with humor, especially inside fandom jokes. As a fan work it is monumental. I’d daresay that until Star Trek Online was a thing, it was the definitive star trek video game experience. The open world of the space trader genera fits perfectly with the open feel of Star Trek. And really, having a big open world RPG on a platform that was mostly used for single-screen arcade games is quite an accomplishment. It plays at breakneck speed on modern systems, but you can play it here.
I’ve seen this way too often. A flashy trailer, some assets, a community project, a feverish dream at reclaiming the glory of games when they seemed new to you. I have made this tragic mistake, but you don’t have to. No matter how much you want to, do not pick up a 20+ year old video game and start trying to make a remake (in Unity! In Unreal! In Godot!) I’m not saying that you will fail, but I’m saying that you probably won’t get what you want.
You won’t get the IP
In order to use the name “Your Favorite Game” you will need to purchase it from the existing owners. If nobody is producing sequels it’s probably because the IP holder has chosen not to. You will not be able to contact the IP holder and if you manage to, they will not sell it to you. If they do offer to sell it, it will be at a price way outside of your price range. If you wanted to purchase it at that price, you’d need to take out a loan, you’d need a business plan, and the project would very quickly not be fun anymore. You could also just sort of not quite use it and hope that the IP holder does not decide to shut you down. But getting the name is extremely important, because the path is littered with other semi-remakes that didn’t use the name, and you didn’t like any of them. Somehow, none of them had “it” because you’re still looking at remaking the old one, not playing someone else’s remake. Will you fare better?
The myth of fans
But I have a ready-made audience! You cry. Except you don’t. Videogames are massively more popular now than they were when Your Favorite came out. The audience for games has increased in size but the number of fans of Your Favorite has remained constant. It might be because genres have moved on. It might be because other franchises took up the banner. But the number of people who potentially enjoy The Remake is actually much smaller than the original fanbase was. Some people will have drifted away and don’t care anymore, some have probably moved on from gaming. Some may never have existed, because you don’t know what the sales figures are for Your Favorite and it was released before social media and steam statistics so you can’t really be sure what the size of your audience is. What about the number of active posters on the discord/reddit/forum where people desperately wish someone would finally come out with The Remake? That seems like a reasonable proxy. Go find this number (I bet it’s less than 100, but you may have better luck.) This is likely to be the maximum number of people who will care about The Remake. If you still want to embark knowing that you’re working for that audience exclusively, read on.
The myth of memory
So your intended audience is the people who are still online right now clamoring for The Remake as they have been since Your Favorite didn’t get the sequel it so richly deserved. But these will also be your harshest critics. Like you, each individual who played Your Favorite had an idea of what the game was, but they’ve each had twenty plus years to elaborate on that idea, and these imagined games have diverged. There will be a multitude of conflicting expectations which will mean that you cannot possibly satisfy them all, or even most of them. Indeed, because they (and you) have had years to embellish this imagined sequel and for their expectations to diverge, it’s possible that no game will satisfy them-no game will ever live up to what they want. The Remake may not have a ready-made audience, but it does have its first and harshest critics. But surely new technology will allow you to wow them, right?
The myth of progress
Making games is so much easier now! Surely if I take modern tools such as Unity, Unreal, Godot, Source, Lumberyard, etc, I will be able to rebuild this old obsolete game with minimal fuss. This may be true for arcade games like Space Invaders or Asteroids, but Your Favorite is only about 20 years old, so this is a misguided attitude. The tools of game creation are very good at making modern games. If you are building a sophisticated but off-the-beaten-path project, you are as much on your own as the original creators of Your Favorite where. Which is not to say that you can’t create original titles with modern tools-just that by constraining yourself to an archaic design, you may not be winning yourself any saved effort. You’re not a wizard from the future, coming back to build a castle with magic spells… you’re pounding in nails with a cordless drill. Modern game engines have primitives for things like “guy walking around” and “wheeled vehicle.” Trying to mimic the behavior of weird bespoke setups from the time before physics engines will result in very little off-the-shelf stuff to use. Same goes for a million other quirky modes of interaction with games that have ultimately been replaced with stuff like “reasonable defaults” and “realistic physics.” You’ll be reinventing the wheel constantly. You might be able to make it look nice, but many (most?) such projects stop there.
The Right Move
What should I do? If you really want to share the joy that Your Favorite brought you, you need to figure out what it is about the game that you found enjoyable. Consider the cargo cult; to recapture the bounty of cargo drops, people (so the story goes) built elaborate fake airstrips, thinking that if they created the right conditions, cargo would appear. I see the same in remakes – “if we take the art assets (or clone them, or redo them but off-brand-enough that we don’t get sued” and keep the gameplay exactly the same, it’ll be awesome!” Don’t do this. What you need to do is break down the design of Your Favorite, and figure out what it was that made the game compelling. “Everything” is not an acceptable answer, you need to be critical. You need to think about what you can reproduce in $CURRENT YEAR and what’s an artifact of its time, like compromises due to affordances of the platform, or time constraints. You must translate those compelling aspects into your future projects, and discard the anachronisms and sacred cows and genre conventions that belong to the past. Make your own game.
On the eve of the Covid-19 Pandemic, with the stock market tumbling, hundreds (thousands?) of game fans breezed into a convention center to try some new stuff, purchase apparel, and frequently use hand sanitizer. It was everywhere.
Thursday was far better than Saturday, so definitely go then if you can. I was able to play far more games, and the boardgame tables where much easier to navigate.
Exciting New Games
While speaking to the creator of BlazeSky, I name-checked Escape Velocity and he knew what I was talking about. But the more I look at it, the more it looks like Empty Epsilon/Artemis. The different styles of play (rescuing people, combat, exploration, etc) are represented by different characters who give you quests, which is a neat approach to writing storylines. I found the banking camera made it difficult to reason about where my shots where going, and I hope that at launch there’s an option to keep the camera steady while the ship turns, but even if there isn’t I’ll probably play the hell out of it.
Another game that was physically demanding just due to its camera was Sludge Life. After you fight through its extremely elaborate recreation of a 90s desktop interface you’re dropped in a colorful, heavily distorted 3d environment. Very Getter: Headsplitter. The distortion (I think the vertical FOV was unusually high or low or whatever) was jarring and slightly dizzying. I predict that this game will be a stoner-hit of Rez proportions. Devolver is playing in the same space as Adult Swim here.
Watched some people play Dunk Lords. The world is ready for strawberry-headed athletes. You could dismiss it as Space Jam: The Videogame but stripped of its bizzare branding, the concept of cartoony basketball feels pretty novel. Sports games that attempt to simulate a sport (like EA’s catalog) or Be a sport (like Rocket League) aren’t my jam, but using the basic rules of a sport to do something unique or new definitely is.
Watched some Panzer Paladin play. There was an enormous reproduction of the cover art, standing out against the crowd. Makes me wonder what the differentiator is. It looks like a Gameboy Advance game (specifically, it looked like Metroid) to me, and though the mechanics where cool and smooth, I wonder who’s buying enough copies of this to justify an enormous booth at PAX. What’s the differentiator. Are they just striking at the right moment? Is it the great Anime art? Am I not enough of a sidescroller fan to understand what the difference between it and AVGN Adventure (which we also demo’d) is.
A radically different sidescroller with very clear differentiation was Carrion, a game where the avatar resembles the blob monster from The Thing. I’m not sure what the gameplay is besides sliding and swinging around an industrial environment and eating (?) the little NPCs that run from you.
If you’re itching to play Star Citizen but don’t like social interaction or having to hire an entire clan to operate your large spaceship or pass flight training to join an org, and also want a game that’s finished, I unfortunately can’t recommend Everspace II yet, because it isn’t finished either. But what I did play compared favorably to Star Citizen, and I venture to say that it’ll be done far sooner. The vision of space was colorful and dense with things to explore and tractor beam into your ship.
I also got a chance to demo Brigador Killers. In addition to the stompy robots seen in Brigador, you get to play as an infantry suit or a giant floating wrecking ball. The controls are also slightly different – rather than absolute direction, your WASD controls are now relative to the mouse. It took some getting used to, especially with the wrecking ball.
Check out the screen attached to this expensive of a gaming PC. I’m not sure words will do it justice, but if you’ve been here, you know.
I also demo’d a Cookie Clicker clone which I won’t name to protect the guilty. It pitched itself as being about the development of life from molecules to technological singularity. However, in reality it is a cookie clicker clone, the meta of a game (buy stuff on a tech tree to augment your abilities) without the actual gameplay (you score by just tapping the screen. Anywhere on the screen. I wondered again what the filter was between successful games and trivial games. Was presence at PAX a marker of success or a desperate gambit? I told myself I was done with the game, but then I reached down to the tablet and tapped it a few more times.
BattleMETAL, the big-stompy-robot game was recently (finally) released! It’s been in development for quite a while now, and most of my involvement (beyond repeated testing and sharing opinions about gameplay) has been doing the soundtrack, so here are some fun behind the scenes facts. I wrote these tracks between 2016 and 2019 starting with Predator and ending with The Matock. Unless otherwise noted, I did the tracks in Reason.
This is probably the best track on here, owing to something resembling a coherent melody. Sort of reminds me of something The Knife would write (not that it’s as good as theirs!) That line is one of the few places where I actually used a bitcrusher… under all of that, it’s a u-he Tyrell. I never did get that synth to work properly in linux, and you have to download it from a German magazine to get it, but it’s nice. The rest (and by that I mean the phaser’d Monopoly, the default synth for this project) are heavily influenced by Frank Klepacki’s classic Bigfoot.
This track was written in a fairly meandering way, I had a pretty good idea the opening (the initial delay’d up drumbeat and bass) and ended up just sort of adding pads and sequences to the end of it until it was long enough. The lack of music theory really shows on this one. Like most of the tracks here, it uses Cheetah MD16 samples and (believe it or not) the 3rd demo preset for Reason’s builtin convolution reverb.
This is my first attempt at a synthwave track (if you don’t count Conniver, which I don’t, because that was more of an industrial thing.) There are a lot of preset arps going on here, and it’s the only track that isn’t using the signature drum palette. A version got re-purposed from its original form to serve as the trailer track when BattleMETAL was in its early stages (complete with samples of the EarthSiege trailer boasting of “Exquisite Texture Mapping.”)
I know this track isn’t the most musically challenging, but I actually still find it pretty compelling. It’s one of the early ones. The lead is a Charlatan, which was one of the synths I was most excited to explore when Reason finally added VST support. You can hear me tweak the settings over the course of the track-I love doing that sort of thing. Unfortunately, this was the only track I’ve managed to complete with the synth, because it keeps crashing now. For the pad, which I think I did an especially good job on, I used eXpanse which was the first wavetable synth available in Reason as a Rack Extension (about a year before we got VST support) and enabled a whole new world of sound design for us Reason diehards.
One of the more recent tracks. It’s using Viking for the bass again (which means, oddly, it sometimes skips a beat… listen for it, you’ll hear it in Predator too) but reflects my newfound confidence in making melodies in step sequencers. In fact, I think I did most of the sequencing in this track with the ABL3. The funky sequence that comes in at the end is especially fun. The Balakett is all about speed and the Monitor is all about raw power, to win with the Matock you need to dance. I also want to call out the ES-01 rack extension as an extremely underrated and great sounding softsynth. Love that thing.
I’d like to say that the lack of a melody in this track is meant to reflect the soulless nature of the PSC character and its total monomania around the extinction of the planet, but then I’d be giving myself way too much credit. This track is “meh” and I should feel “meh” about writing it.
The patch for this started out as the “Acres Of Glass” preset for Europa. I’ll always enjoy tracks that are just me playing chords for five minutes, really puts you in a good place, even if the chords are gloomy. The voice talents here include Pete (“Punching out!”), Sabrina, The Conet Project, and Techno Ejay (if you can find that one, I owe you a cookie.)
The Balakett (Bonus, so no embed apparently)
This didn’t make it into the game, so it stays as a bonus track. It’s also the only track I made with Renoise (you can probably tell from the drum wankery in the middle.) It was intended for the post-mission screen, but it’s altogether too cheerful for the apocalyptic tone of BattleMETAL. It’s using the ob-xd synth, which I’ve found to be excellent. Also, in classic Renoise beginner fashion, it ends with an extra block of the last note just stretched out forever. oops.
Overall, the experience was a fun one, and I expect I’ll do something similar again someday.
I mostly game on PC, but at one point I set up a retropi for emulated console multiplayer. Mario Kart ran pretty well (sprites and all!) but BattleTanx wasn’t performing. That’s the N64 game that I probably played the most of, and it’s cracking good multiplayer, even at the 9FPS that the Pi could manage. That was sort of the experience I was after though, so I went looking for something a bit more powerful.
Enter Digital Loggers. There was a kickstarter for a board called the Atomic Pi. It’s about the size of two Raspberry Pis and has an Intel Atom processor rather than the Pi’s ARM core. It’s still smaller than any one of the various consoles I plan to emulate on it, which is a nice bonus.
For this setup I got the Atomic PI with the small breakout board that provides a (more or less) standard adapter plug. I’m using this power brick and this multi USB hub (because there is only one USB port on the board.) It comes with a soldered-in EPROM you can boot from and write an OS to, but OSs on the eprom are painfully slow so I would recommend installing your OS to a MicroSD card like you would with a RasPi. I’m using Lubuntu, and it’s performing pretty well considering the big screen it’s on, I’m sure your favorite lightweight distro will also do well. You’ll want something that ships with a desktop for emulation though
Back to Battletanx: To get it running in Mupen64Plus (which you can install with apt along with a barebones GUI for opening ROMs and managing settings) with Rice video you need only change the config in one way: