Hey folks, I wanted to introduce our project which was formerly known as Arconia (but does not have a new name yet).
We are developing in with the majority of our code being C++. We are new to
and are taking baby steps integrating it into our project while we/I come up to speed on it.
The Project
We describe our game as Legend of Zelda in space. It also has elements of Star Control 2, Geometry Wars and Blaster Master. If you know what all 3 of those games are, you’re officially on our list of cool people to hang out with
The main character is this little guy.
Instead of riding around on a horse, he rides around in various spaceships. He can hop in/out of his ship to explore various areas of the game.
You can see more info about the game along with some really early prototypes on our UE4 forum thread (which hasn’t had a proper update for half a year). We hope to have a decent update out soon.
Why
Our previous game had all of the game logic written in LUA. LUA was tolerable and had a fairly fast iteration time, so it was pretty great for rapid prototyping. When we made the jump to , it was back to C++ with Blueprints (BP). For the last 3 years, I haven’t been happy with either of these choices.
BP’s are great if you’re not a programmer… as a programmer I was immediately disappointed when I realized I was missing basic necessities like access to TMap and TSet
. As a programmer I found working with BP slow, even doing a simple piece of vector math (a 1-liner) takes up a ridiculous amount of screen real-estate. I also found strong urges to hurl my body out of my 2nd story office window once I realized that diff’ing BP is akin to playing Where’s Waldo
What initially attracted me to was the ability to Race, Sync and spin off coroutines that could block without blocking the game thread. This was stuff that was hard to do in our last LUA based engine, where you had to take a timeslice approach (ok, we’ve been working for 2 ms this frame, let’s wait until the next frame to continue our work). And in
in C++ you’d have to fire up timers or async threads and shuffle your data back and forth in a thread safe queue
Games are hard to make and C++ wasn’t made for rapidly iterating on complicated timing-based game logic. In that context,
is the most exciting language on the horizon for me.
Our Use of
I’ll continually update this thread as sneaks into our project. As I mentioned before, we’re taking baby steps while still learning the ins and outs of the language. I mean, you’re a newb until you’re not, right? I’m still a
newb
###Command Prompt - Cheats, Teleports, Etc
It’s often that we need cheats in the game to test various things quickly. For us, the quantity of cheats that we have and tracking their key-binds or exec strings (we use CheatManager
) can get quite cumbersome. In the past we either had to bind cheats to un-used keys (try rationalizing to your team why [
maps to unlimited health) or look up their exec string in the code. Now anyone can browse through the cheats and quickly execute the ones of interest. A sampling:
//
// CHEATS!
//
// God Mode
GameLib.player_controller<>ShipPlayerController.cheat_god_mode
//
// TELEPORT CHEATS
//
// Teleport to Arconian ship entrance
GameLib.player_controller<>ShipPlayerController.teleport_arconia_pawn(Vector3!xyz(-1759.635864, -12175.116211, 0))
// Teleport to warp gate
GameLib.player_controller<>ShipPlayerController.cheat_move_to_warp_gate
// Land/takeoff nearest station
GameLib.player_controller<>ShipPlayerController.cheat_land_on_nearest_station
//
// INVENTORY CHEATS
//
// Unlock all player items
GameLib.player_controller<>ShipPlayerController.cheat_give_all_rob_items
// Reset scanner database
GameLib.player_controller<>ShipPlayerController.cheat_reset_scan_entries
// Unlock all scan entries
GameLib.player_controller<>ShipPlayerController.cheat_unlock_all_scan_entries
###Debugging
I had a really hard time tracking down some camera transition bugs. made the work far easier by allowing me to arrive at the reproduction case with a single keystroke (as opposed to flying to area X, entering through the door and waiting for a 3-second transition).
Efficiency is so important when making games. Being able to repro a bug in 1 second vs 1:30 is a huge time saver for everyone!