Global Game Jam wrapped a week ago last Sunday. A lot of things have happened in the last few days, hence the late conclusion post. I'll get into some of that in a later post, so for now let's talk about how things in the Godot VR world wrapped.
Sunday was a pretty short day for me. I had hit a bit of a creative wall, having implemented the basic VR interactions. I decided to spend the final day exploring other features of Godot, specifically the Constructive Solid Geometry (CSG) features. I started tinkering with generating a small level, playing with the different CSG nodes to see what worked and what didn't. Turns out they can be a bit fickle, but for the most part they worked very, very well. I was able to rapidly build not only a small stage, but a few bits of set dressing as well.
I created a little area with a big building you could run inside of first, playing with scale to see what felt good inside the HMD. Once that was hammered out I started adding some textures (quickly created in Aseprite), and then some props and lighting fixtures. By this point I had inadvertently created a nice setting for a PS1-esque horror game, and it was at this point I decided to call it a day (jam?). It was about 3pm on Sunday, so the odds of this little exploratory demo turning into a game were slim. Satisfied (relatively) with what I had learned, I wrapped the project, packed things up, and headed home.
I learned a good deal about how to work with the VR features of Godot. If you're interested in trying it out I highly recommend reading through the excellent documentation on Godot's website, as well as checking out the OpenVR assets developed by Bastiaan Olij if you're using SteamVR compatible platforms. Without that asset this wouldn't have happened at all.
It's about 8:30pm as I write this, and I think I'm already gonna call it a day on day 2. I got a bunch of stuff working, then tried to make it into a game, then broke a bunch of stuff, and finally reverted back to the testbed I had functional around 2pm today.
The big thing I was able to tackle today was grabbing and throwing stuff. Grabbing was pretty straightforward; I subscribed signals to the button_pressed and button_release signals that ARVRController comes with, which in turn have child Area nodes subscribed and can attach grabbable objects as children to themselves if one happens to be in the, er, Area.
Following that I started working on throwing. The short version of my tinkering is I aggregate a small pool of changes in the global position of ARVRController, applying a weighted multiplier to each value, and provide that aggregate to the grabbed object as an impulse after I throw it. There's a couple other bits to it to account for the rotation of the playspace (left-stick rotates the play area), but that's pretty much it.
Making (and breaking) a game
By this point I thought I had a pretty good set of systems in place to start making a game. I wanted to do something Myst-like, so I build out a little island terrain to start walking around it. The terrain had slopes to it, so I thought it'd be cool to move the play area up and down so it snapped to the surface where the user is "standing".
And this is where things fell apart. I started messing with some raycast stuff to position the play area, and to make a long story short I broke the player system somehow without having any commits to revert to in the repo other than the last one I made after getting throwing working. This made me grumpy, and now here we are.
I still think I might take a stab at making a little environment to walk around in, just keeping it all on a flat surface. I think it'd be fun to do a bit of lo-fi 3D modeling/texturing and walk around in it. The only thing I might try to add is some method of preventing the user from walking through walls, but we'll see where it gets.
GGJ 2020 - Part 1
Friday, January 31, 2020
The VRening Begins
So we're currently about four-ish hours into GGJ at BGS. I've spent the time since watching the keynote video poking at Godot and making some basic VR movement tests. I'm not doing teleporting at the moment, just free movement at speeds that most people would probably find nauseating.
It's a little snappy, but it works! Already I've learned a good bunch of little things, from how to set up the basic VR scene to manipuation of the origin transform through the use of the camera basis. Also, fun fact: trying to handle all the movement in _process() is a bad idea, as the controllers will lag behind the view. Keeping things in _physics_process() seems to solve this.
I've got a super simple script for grabbing that just emits a "grabbing"/"releasing" signal when you grab/release, and it scales the hand meshes down when squeezing. I'll probably hook that up to some basic grabbable objects tomorrow, then look into handling collisions between the player and the environment.
There is a loose game idea that I'll tie into this, but no talking about that until the theme is announced everywhere.
Global Game Jam - Prologue
Friday, January 31, 2020
I'm participating in Global Game Jam after taking last year off, and I couldn't be more excited. Hence this post a few hours before we even start.
I'm jamming on-site at Buffalo Game Space, and I went all out this year. I dragged in my home workstation and my VR gear. The plan is to create something in Godot for the Index. I've only done the very basic (but excellent) VR tutorials in the Godot docs, but I think I've got a good rough idea of what to do to get a scene up and running and let the user stomp around in it.
I'll do my best to post stuff to here as I make it, but if you want the latest and greatest (and are also running a VR rig, have Godot installed, and like Linux) you can clone the repo from my git page.
Tuesday, January 28, 2020
Just a quick post to let folks know I'm giving Mastodon a shot. I like federated platforms (at least conceptually), and decided after looking into it a bit to set up an account over at mastodon.gamedev.place. Feel free to give me a follow/shoot me a line at @helloCLD@mastodon.gamedev.place
New Year, New Game
Saturday, January 11, 2020
With the end of 2019 a lot of things changed for me personally. I made the difficult decision to take a step back from an administrative role I'd held at Buffalo Game Space for a very long time. While it sucked that I had to, it was taking a serious toll on my mental well-being. The good news is in doing so I've been feeling better AND I've had some time to collect myself and start working more seriously on making games and such. So I'm happy to say at the start of 2020 I've started focusing on a single game project.
What it be
Deluxe is a (planned) top-down shooter with a Rez-style leveling system and procedurally generated levels full of enemies to blow up and areas to explore. At least, that's the mental picture of it I have at the moment. The actual current iteration doesn't even qualify as a game, but it's a start. The player pilots a little ship with the D-Pad and can fire their weapon/strafe while holding A. One of the explicit design decisions I made early on was to not make a twin-stick shooter, as I'd like it playable on older game pads, or a traditional arcade cabinet setup.
Another early decision was to use Godot for developing it. I've done a little bit of development with it previously, and I really enjoy working with it. For the uninitiated, Godot is an open source game engine with a friendly UI, ample features and build targets, and support for visual programming C# (partial at this time) and it's own Python-esque scripting language called GDScript. If any of those things interest you, I highly recomment taking a look at it. It's free to use, no license restrictions on what you make with it, and it plays great with Linux.
So right now as the top screenshot indicates, there isn't much going on there. The basic player controls are implemented, as well as a small, single room programatically generated using a nice tilemap feature Godot offers (gridmap). There's also a little enemy guy that chases the player around the map, but not much else. The player can shoot bullets at things, and anything that has a base type of "Entity" can take damage and tells you so in the console output. Pretty far from what you'd call a game, but it's a start.
The most pressing tasks involve turning this little test into a minimum viable product, which in my mind means it has to have:
Enemies that can be defeated
Enemies that shoot back
A win condition
A lose condition
Basic UI showing the player's health
Some simple sound effects
Once all that's in, that's basically a game. Not a good one, but it has the core elements. Following that I can start working on proper art assets, more interesting level generation, different enemy types, and more weapons.
The goal is to have something with some of those things in it by late spring/early summer, so I can spend a few months testing with folks at Buffalo Game Space and polishing based on feedback, with a mid-fall release into Early Access on Steam. It's gonna be a lot of work, but I'm doing my best not to think about it quite like that. I still want it to be fun to work on, and so far it has been. Every day I make sure I at least open the project and poke at it for a few minutes. Most days that turns into an hour or two of work. And the more I poke at it the more comfortable I get with the tools and language, which means (in theory) it'll get even easier to work on.
I'll do my best to post at least once a month with updates on this. I'll also be using the BGS monthly game dev meetups as presentation events to show progress/solicit feedback, so if you're in town and want to see where it's at or talk to me about it I'll be there.
Thursday, November 14, 2019
I've wanted to start working with the very cool, open source game engine Godot for some time now, so I finally decided it was time to buckle down and learn the damn thing. I made a little two-player pong clone in it you can play on itch.io or download to play locally. It's got minimal sound effects and a System 6 inspired a e s t h e t i c. It was pretty fun to make, and I definitely plan on making something much bigger/more serious in it next.
In case you're one of the poor souls that was already relying on the static page directory structure of my site, I have bad news for you. Turns out the tm struct used by the date/time functions in C think January = 0. It's correct now, but that means that all the hard links to old posts are busted now. Good news is it should all be correct moving forward.
Tuesday, November 5, 2019
When I first started properly surfing the web as a wee little cld, I found all sorts of awesome stuff hosted on pages just as directory listings. The idea that I could browse and download files from a website just as if it was a regular directory was such a neat idea to me (I didn't know about FTP yet, that would've blown my mind).
Cut to 2019 and I still enjoy the concept. There's something so minimal and transparent about it. So, in an effort to recreate the experience, I bring you The Junk Folder™. It's a directory for me to upload stuff that I want to archive/access online but not necessarily put in the git repo where I keep all my other website things.
Right now it's just got a README, a CHANGELOG, and a viewable copy of The Tracker's Handbook v0.5, which I'm about to get into (again) as a way to start messing around with writting little tunes for my games (again). If there's something you know about that you think would be rad to have in there, shoot me a link! Would love to see what sort of neat archive we can populate..
Another Windows Gripe
Wednesday, October 30, 2019
I've got Python 3.7 installed on my Windows 10 machine. I should be able to, after adding it to my system path, be able to run python3.exe from PowerShell, CMD, whatever, and it should run the executable. Right?
So why is it, when I run python3.exe from the shell, instead of launching Python it opens the Microsoft Store and sends me directly to their Python installer page?
I know why they're doing it, it's just bullshit they do.