Again another couple busy weeks outside of this project. The main thing that I did was fix the game loop. Since I anticipated that I wouldn’t make much progress, I contracted out two people on fiverr to do a couple things. These tasks are still in flight, but should be completed in the next couple days. The first thing is a level editing tool. For now this will just be an internal tool that I can use to build out some levels a bit easier, but in a future iteration it could be adapted to include some sort of feature for users to build and share levels. The second item is just 3D modelling another arena to include.
I’ve been thinking about the scope/direction of this project and I’ve learned a lot from the general feature development cycle of this project but its reaching a point where I feel like I’m learning less and less from each feature on my list. There are other, more ambitious things I would like to learn to develop, which could be done by expanding the scope of this project, but I’ve got another slightly more ambitious project in mind that would be a better fit, and one of the last things that I would like to learn from this project is about what releasing looks like.
So I’ve decided that I’m going to consider this game, mostly feature-complete and spend a few cycles doing cleanup, bug fixes and preparing for a release.
My todo list is:
Ok, so this summer is lining up to be pretty busy, so I’m not anticipating making a ton of progress. I’m going to switch from a week-long sprint to two week sprints and hope that I can sustain the same pace as of this most recent sprint.
I decided not to implement the jumping for now at least and revisit it later. Instead I added another arena. Here’s some gameplay:
Work is still underway in the green screen room, so more headset footage.
I did some more fixes on the gameplay loop, but there is still a bit of work to do, which I’ll continue on this week.
For the forseeable future I’m mostly just planning on trying to add more arenas and level layouts. I actually contracted someone on fiverr to implement a level editor for me, so we’ll see how that turns out
Small update this week. Continued to learn blender and did more modelling. I also worked on the lighting for the vaporwave level. Here’s the gameplay footage:
I’m doing some work in the room where my greenscreen is, so its just headset footage this week.
I got the vaporwave arena functioning when I play using the unity playmode, but there is some issue with the bricks loading in the build that I will tackle this week.
The models that I made this week for the game was the sun neon and the ferns in planters. I also did some cleanup and improvements on the arena model. I modeled/modified a few other things in blender to 3d print for some additional practice.
This level has a bit more verticality, so I want to try to see how it feels with the ability to control the height of the hoverboard. Also going to try making 2 more models and a loading screen/structure for switching arenas on a level-to-level basis
With my current focus of learning blender, I exceeded the goal of making two models. I wanted to get better at modelling so that I could create a couple more arenas for levels, so I decided I would try to actually model a little arena and a couple of props. Here’s some game footage–
I decided that I wanted to expand the aesthetic a bit to include vaporwave, just to give me a little more room to play with for arena designs, so I started making a vaporwave inspired arena. It’s far from perfect and not fully functional yet, but it’s coming along. In addition to the arena model, I modeled the column and the palm-tree cutout. The greek bust is a CC0 asset that I downloaded.
I didn’t end up fixing any bugs this week, but I did also create 3 new brick layouts.
This week, again, my goal will be to build 2 models, 2 brick layouts and to get the vaporwave arena to be a playable arena.
Still working on getting a decent placement for my camera and green screen but here’s some gameplay.
Ok, I don’t have a lot to talk about this week.
I implemented a pause button, and a new start screen. The start screen is still a little buggy, but I’ll investigate and fix later.
I started working on a new scoreboard, but decided that the one I had right now was fine and I couldn’t get the higher perspective experiment that I did last week out of my mind. Thinking about my main influence, Tetris Effect, one of the things that it does is the environment changes in response t the game so I thought I would try making it so that the arena slowly rises higher in the air with every brick that you break. I think it’s a nice compromise so I’m going to keep it. I ended up needing to add a lot more buildings to fill out the “city” and there is a bit of a performance hit for doing this, but I feel like I can optimize this. It’s only really noticable when doing mixed reality capture and I think I can fix it relatively easily.
I think I’ve got the broad-strokes for this game in place, it mostly needs to be filled-out, polished and fixed up. I think I’ve got something to iterate on without needing to really focus on a big feature right now. I do eventually want to create a couple more environments for the arena, and to do that I’m going to need to up my modelling skills instead of relying on purchasing/contracting out that work, so I’m going to make that a bit of a priority right now instead of big feature work. My goals each week for the next little bit will be to build 2 brick layouts, two bugfixes and two 3D model (might not even use the first few, just follow a tutorial to gain some skills).
This week felt really productive, thanks in major part to the fact that I finally got Mixed Reality Capture working:
There was something up with the prefab XR rigs that came with the VR Interaction Framework that I was using which just didn’t play nicely with XR MRC Helper that I was using, so to fix MRC, I reverted back to the oculus rig, and then added the scripts that I wanted to use from VRIF and it actually worked! I’ve definitely got to do some rearranging of the space where my greenscreen is in order to set it up to get some good video, but I’m happy to be able to provide something that is a bit better than the in-headset capture.
That said, here’s some more in-headset capture…
First off, I’ve tentatively decided to call the game “Bricks of Rage”. I wanted to go for something over the top, and 80s/arcadey that also was at least somewhat clearly a brick-breaker game. My brother mocked up a bit of a logo design concept and I tried to use my sub-par blender skills to model it in 3D and place it in game. I didn’t do justice to his original, but for now I think it looks pretty good in-headset.
I reached my goal of adding the projectiles and the hyper power up so I spent some more time on aesthetics. One thing that I did as part of that effort was to think about influences. I realized that since breakout is well-worn territory, I’d like to craft a vibe first and a game second. I’m a big tetris fan, and I think what Tetsuya Mizuguchi did with Tetris Effect was really incredible. So I decided that I wanted to consider that as my primary inspiration as far as how to implement a vibe, although the aesthetic that I’m going for is clearly different.
The impact of music and audio on the game and environment in Tetris Effect is probably the most striking thing about the game. The first thing that I did was update the buildings to make them function like audio visualizers. This gave the scene a lot more life, the royalty free music that I’m using right now is a decent fit, but Tetris Effect makes brilliant use of adaptive audio in a way where the music feels almost like an emergent property of the gameplay. I don’t have the musical skills to do something like that on my own, but this has got me thinking that I should look in to potentially seeing what it would cost to get someone to at least put together some sort of adaptive audio piece for me, or look for a sound designer.
Speaking of sourcing external help– I got someone off fiverr by the name of kyessesalvador to model the racket assets that you can see in the gameplay footage, which look a lot better. I’m pretty happy with how they turned out, he’s currently working on putting together the hover board for me.
I also played with raising the entire arena up from street level so that I could add some movement to the grid on the ground plane. Here’s what that looked like:
The feedback that I got on this change was that it was a bit too busy, which is valid. I think it looks better in-headset than on video but for now I put it back where it was. One thing that I might play with a bit later is raising the arena a bit off the ground every time a brick is broken since I still feel like the arena needs something more to bring life to it.
As a result of removing the VRIF, I broke my start screen, but it was pretty ugly anyways, so I want to implement a new one this week. Another thing that I’d like to do is make sure that the game pauses when the user brings up the oculus home or takes off the headset. This week I’m also hoping to do a bit of a cleanup (I’ve imported a few packages that I’m not using anymore that I want to pull out). Stretch goal is to implement a new scoreboard in the arena
As promised, weekly gameplay footage:
Going to try keep this post a bit shorter– I had started out this week with a two week goal in mind for setting up a level structure and putting together a little level editor tool to speed up the process of creating new levels.
The first thing that I had to do was sort out a structure that would work for laying out the levels. I came up with something simple that I could build upon later and just hard-coded this little arch level that you can see in the gameplay footage.
After I had that done, I started working on a level-editor tool– and thats when my tires really started spinning. It felt like a lot of work to undertake for not a lot of pay-off. My goal for an early access release is 10 levels. I think I can put together 10 levels that will be interesting enough by hard-coding them so I decided to put the level editor on hold. It was already pretty late in the week by that point as I hadn’t had much time to work on anything, I decided to spend the rest of the time cleaning up a few things and also doing a few tutorials on blender so that I don’t have to rely on fiverr and the unity asset store for everything.
As you can see, I replaced the buildings with something that is really simple. It’s not the best and I’ll likely want to change it later but it is at least a bit better of a fit for the aesthetic that I’m going for. I also made the arena cage a bit nicer using a grid shadergraph instead of using a wireframe asset that I downloaded.
Another thing that I did was put a minimum and maximum velocity on the ball. The game ended up being pretty hard if it didn’t max out, and there were other times when the ball would slow down to a stop. I still need to fiddle with these values because now it plays a little too easy
One funny little regression that you can see in the gameplay footage is that the text “Get Ready” and “Go” text is backwards. This is because the change to how I’ve got the level structured and the grid laid out actually ends up making the arena do a 180 from where it was before. I had been planning on changing those at some point in the future so I might not get around to fixing that before I do.
My goal for next week is a couple more power-ups. Specifically a power-up that will allow you to fire a laser out of the end of the racket.
Look! Gameplay footage! Finally!
I’m going to commit to including a little bit of gameplay footage in each post from now on. I’m not really any closer to solving MRC. I took a little bit of a look this week and I think the issue I’m having is the result of using the VRIF plugin. Since I’m kinda stalled on it and don’t want to spend too many more cycles on it, most of the video is going to be just the game captures from oculus for now.
Ok, on to the post–
This week my main goal was to implement 3 power-ups, and I managed to get that completed! I also had a stretch-goal of starting some of the work that I needed to do to be able to create a set of levels for a campaign mode– initially, I had just statically created the arena in the scene and just made sure that the parameters that I passed to the function to generate the grid of bricks fit within it, and the stretch-goal work that I had identified was the update the arena manager so that it would dynamically create the walls of the arena based on the parameters of the brick field and some other parameters (like playing field length etc).
I started working on the powerups using little cubes as place-holders. When I got to the point where I wanted to randomly spawn them within the arena, I realized that the working that the stretch-goal work that I had planned to refactor my arena manager in anticipation for custom levels should be something that I prioritize before going further with powerups since I’ll want to dynamically get the bounds of the area to spawn powerups as opposed to setting up another static area to fumble around with and that I’d just need to refactor next week, so I got that done before moving on to finishing the powerups.
I don’t really have any experience with 3d modelling, so for now any models that I have to create on my own are going to be pretty basic. I needed some sort of model for powerups– Arkanoid is a major inspiration for this project, so I looked to the designs that it used for powerups, and fortunately they are super simple, just colored capsules with a letter on them. I downloaded blender and was able to create a capsule pretty easily and use it to create a prefab, and then I used a 3D text plugin within unity for the letters so that I can have a single powerup asset that will appear with a different color and letter based on the type assigned to it.
I got most of this done ahead of schedule so I spent the remaining time just playing around with adding some visual elements to make the environment seem more interesting. I used some assets from the unity asset store to add some cars and a little bit of a cityscape, and it really added to the overall polish. It still has a long way to go visually but I’m fairly happy with the progress so far.
My goal for this week is to set up the project for a series of level layout files to string together a bit of a campaign mode. I anticipate this will likely take 2 weeks at minimum, depending on my available time. I may omit making a post next week if I don’t have things in a reasonable place to show anything
As I had anticipated, I wasn’t super productive this week, but I did get scores pushing to a backend leaderboard system. I decided to use Microsoft Playfab for a backend so that I don’t need to worry about setting up and deploying a backend on my own to save myself some time. This project is mostly about learning, and I already have a pretty good idea how to roll my own backend. Now, the user is able to log in and their high score gets saved. There are leaderboards that are maintained on the service but I’m not displaying them anywhere in the game at the moment.
I didn’t get MRC working, so no slick mixed-reality gameplay videos this week. I’m probably not going to look at that this week– the last two weeks have been kinda filled with work that hasn’t really had a lot to show for it in game, so I want to focus on some things that impact gameplay a bit more but maybe I’ll see if there is some sort of Oculus expert on fiverr who I can hire for a pairing session to try and troubleshoot it. I’ll try to snag a regular gameplay video and add it to this post since it’s been a while since I’ve posted one.
I also managed to get the power-ups that I wanted put in to stories. I think I’ve got all the features that I want identified and put into really loose stories. There is a bunch of other ideas that I had to add that I haven’t put in to stories, but I think it’s important that I try to keep my scope reasonably small for the initial release so that I can get something completed. Gonna take some time to think about things and then I hope to lock my scope in terms of features by the end of this week.
In terms of work that I want to get done this week– this week I’m hoping to implement a couple power-ups– Multiball, enlarge and 1up. My stretch goal is going to be to start working on the updates that I need to make to start implementing multiple stages (serialized levels) for a campaign mode.
Ok, so my initial goals for this week included setting up this blog and then adding start and end screens. I got this blog up and running pretty early in the week and one thing that I noticed was that my gameplay videos really looked like shit using the built-in quest capture. The aspect ratio is terrible and it’s just all together un-impressive. What I’d really like to do is have nice mixed-reality capture gameplay videos to give a better sense of immersion, so as part of the blog-related work that I had planned for this week, I decided to prioritize adding support for the oculus mixed-reality capture (MRC) tool.
I thought it would be pretty quick to add this in, but in actuality, I spent a lot of time working on this and I wasn’t successful. I timeboxed myself on this since it wasn’t really something that I had initially planed for this week and I wanted to make sure I achieved my initial goals for the week, so I moved on without getting it implemented. I found a great repo for the implementation of MRC when using the XR Iteraction Toolkit: https://github.com/TonyViT/MrcXrtHelpers. Unfortunately I wasn’t able to get video working in my project, but I experienced the same issue with the Oculus MRC sample scene in my project, which uses the default Oculus rig instead of the XRT rig, so I don’t think the issue has anything to do with that plugin.
The start screen that I created is super basic. Like super, super basic. I decided to use the VRIF’s UI helper system, so I swapped out the unity XR rig with the prefab from VRIF so that I could take advantage of it. At the very least now, when the user wins or gets a game over, they can play a new game. I’ll style this a bit more in the future, but for now thats not really a priority.
My stretch goal was to add a basic points system, and I got that in place. It’s really basic, each brick is worth 50 points, and there is a basic combo multiplier that resets with the ball goes out or hits the racket. The combo multiplier makes things more interesting for sure, but in the future, instead of resetting when the ball hits a racket, it would have a time-based cooldown mechanism.
This week, my goal is to add a persistent “high score” for the local application and to fix MRC. I’m not super confident that I’ll accomplish much more than that since covid is running through our house right now, but if I do, I’m going to research patterns for implementing a global scoreboard and maybe try to task it out and also task-out power-ups and pick up some low-hanging fruit from there.