I've been very busy building the next release of Community Garden. The first release to Steam Early Access allowed me to test the viability of Improbable SpatialOS on a small scale with virtual reality. The next release takes Community Garden to the next level by increasing the world size exponentially, giving player's ability to customize their avatar and providing a starter home to player's in the metaverse. There are still some bugs to squash before I push this release to Steam but in the mean time check out the new trailer.
I'm super excited to announce that I have a new member of Pixelshot Games: Jennifer Reyes! She's been helping out with Community Garden by adding procedural generation to expand the city limits. Now that she's working on VR development with me, we had to get her a headset of her own.
Room Scale without External Sensors
The most impressive part about Windows Mixed Reality is the ability for the headset to support room scale without the need for any external sensors. The headset does all the tracking. The only thing you need to have room scale VR experience is the headset and two controllers which are included in your purchase. This is amazing for a number of reasons:
- No external sensors to mount or setup.
- Transporting your headset and controllers is so much easier. This means you can do virtual reality development on the go.
Low PC Requirements
The second thing that really impressed me was the low hardware specifications needed to run the headset. Basic functionality is supported with the following hardware:
- Intel Core i5 7200U
- 8 GB RAM
- Integrated Intel® HD Graphics 620 or NVIDIA MX150/965M
- Windows 10
This means most modern laptops can at least run some of the VR content available for the headset. Of course, other more graphic intensive applications require higher powered hardware. Community Garden, for example, requires a Nvidia 1060 or higher for the HTC Vive or Oculus Rift but I was able to run it on a Nvidia 1050Ti when using a Windows Mixed Reality headset. This is a huge plus since it will allow for more people to experience virtual reality.
The screen quality is very high. I was impressed with the clarity of the display and didn't notice much if any screen dooring. I would need to see a Oculus Rift again to compare, but I would say it's the best display I've seen to date. This is even more impressive considering the low price tag.
Easy Setup Process
The last thing that really impressed me was the setup process. Installing the updates to the new laptop to support Windows Mixed Reality was the only step in the process that took a long time. Once the update was complete, the installation and setup of the headset and controllers took minutes.
My time with Windows Mixed Reality has been short but I'm impressed with what it has to offer. This headset would be a good entry for anyone thinking of trying out virtual reality. I will need more time to see if the headset holds up but so far so good.
I had a lot of complaints about the physics being laggy for Community Garden. The upcoming patch fixes these issues making the physics smooth and responsive. I have a little more testing to do before I push this to steam.
Thank you to everyone that tried out Community Garden. My main goal with this release to Steam Early Access wasn't to release a final product but to get something real in front of players right now. SpatialOS has not been easy to work so gathering real world data is important. The result, I felt was very positive. So many people have downloaded and tried out Community Garden. There has been some good discussion on the Steam Discussion Forums. I even had a chance to meet people in world and discuss the future of Community Garden. I was able to fix a number of bugs as well. The following is the top feedback I received.
- Add community goals for all players to work towards.
- Fix physic lag issue when throwing items.
- Make the world bigger.
- Handle player bad behavior issues.
The lag issue when throwing is definitely an issue that will need to be addressed. It breaks immersion and can be frustrating. Bad player behavior also has a potential to be a big problem. Right now players can spam seed box creation and throw items outside the reach of other players. This will take some thought to fix but right now it's not a priority because the world needs to grow and become more interesting before worrying about what players will do with it.
The next steps for Community Garden is to add community goals and to scale the world using procedural generation. This will give players more to do and keep them in world longer. I will post some more on this later.
The first persistent virtual reality world built on Improbable's SpatialOS is here. Community Garden is available to any one with a HTC Vive or Oculus Rift. Just download on Steam and playing. Be sure to check out the Steam discussion boards and leave a review to tell me what you think. This is just the beginning so stay tuned for more updates.
Community Garden is getting closer to it's public release on October 6th. What better way to celebrate the first virtual reality world built on top of Improbable's SpatialOS then by stress testing the servers. Let's see how many people we can get in world at once! If you want access now, sign up at the Community Garden site.
Load Test: October 6th 2017 @ 7pm MST
Community Garden is getting an Alpha release. This is an early build of the game that you can sign up for by going to the Community Garden site and signing up. My goal is to get people in world testing both the social and simulation aspects of the game. I'm hoping that by getting people interested in a virtual reality game running on Improbable's SpatialOS, Improbable will be interested in supporting VR once again.
Blog Post: https://www.communitygardenvr.com/blog/2017/9/3/cbrh8l5w2ggso2secl3p0uzbp5ntcy
Last year, I began the journey to create MetaWorld. Being one of the first developers to use SpatialOS and being the first using it for virtual reality was a huge challenge. Documentation was sparse and Improbable was tied up growing their company. After a 3-4 months we had something to show to the world. The response was good, people who tried MetaWorld really connected with the world.
Unfortunately, after the press showing, I ran into a number of issues with SpatialOS due to required version upgrades and bugs with SpatialOS itself. Improbable was busy with other things so they were unable to help. I slowly worked through some of the problems but progress was slow. I started to feel that making a massive VR experience wasn't going to be possible. At our current trajectory it would just take too long.
I still wanted to create something that allowed people to be able to visit a living world together from around the globe. To get there we would need more support from Improbable and a much bigger team. Funding efforts weren't going well because investors wanted to see more before investing. The time required for one developer/game designer and a designer to create what we need would just take too long, we needed more help which costs money. This became a contention point between me and my business partner. Eventually I just didn't see a future in continuing the way we were. I decided to stop working on MetaWorld and focus on a new title called Community Garden. Community Garden would start small to prove the viability of building persistent VR worlds in SpatialOS.
I was surprised when I found out my partner had started an IndieGoGo fund. To avoid confusion, I wanted to make it clear that I'm not currently working on MetaWorld and I don't know how my partner plans to deliver on the promise of the fund. If you plan on donating to the IndieGoGo fund, please note that none of the work I produced for the MetaWorld you see in videos like the one above is what will be delivered.
ue to Soomla no longer supporting their plugin for IAP I decided to make the original Wordsum free with no IAP and no Ads. I thought this would be better then spending my time trying to find a new IAP system for a now 2 year old game. I also just don't have the time since I'm only one person. Another plus is that I could now port the game to Windows, Linux and Mac. opefully more people get to play and enjoy the game now.
I've worked for a number of companies over the years as a programmer. My time at government contractor was particularly interesting. It was like working in a different parallel universe where everything looked the same but was strange. Unlike the commercial sector, we didn't worry much about deadlines or being first to market with an idea. Our struggles revolved around protecting the funding for our contracts. We had fought against bad Project Managers that would mismanage team resources. We fought to keep bad programmers from ruining code. At the end of the day, there was the threat of the government swooping in to take away our funding. No funding meant no job.
We joked that all of this sounded like a old video game. Something like Missile Command for the Atari 2600. The evils of the world trying to destroy our project while the lowly employee fought to defend it.
It sounded like a good idea but my skills as a video game developer were lacking and Unity hadn't become the giant it is today for indies. Fast forward 10+ years and I decided why not try to see what I can do in a week. I busted out my notebook and sketched a rough idea of what I envisioned.
I faced some interested challenges along the way but after a week, I had something that was pretty fun.
I really enjoyed taking a break from working on big projects to make this game. It was very helpful showing me some holes in my game design knowledge. Give the game a try and let me know what you think.
Being able to interact with objects is a key component to VR. Common player interactions include the ability to pick up objects, move objects around and set them back down. With previous versions of SpatialOS, implementing this was pretty easy. Unfortunately, with the latest version (V9) implementing these player actions isn't as straightforward. The code has become more flexible internally, but the documentation does not expose these new changes.
In previous versions, if a player wanted to pick up the gnome, a message would be sent from the player's entity to the gnome's entity to request ownership. The gnome would receive that message and handle the transfer of ownership to the player, allowing the player to move the gnome. I could not get this to work in Version 9 of Spatial OS, so I created a forum post to try to get some of my questions answered.
After some back and forth with Improbable, I learned that I needed to modify the Entity's ACL when the player wanted control of the gnome. I tried to do this by building a new ACL which set the Player as the authority of the gnome using SetAcl(). Unfortunately, SetAcl() didn't seem to change the gnome's ACL. I tried to communicate this within my forum post and decided to create a simple fork of Improbable's PiratesTutorial Repo. I created a new branch and wrote some code with my current implementation. Check out my version of the PiratesTutorial.
Progress was still slow on the SpatialOS forums, so I tried a different approach. Instead of attempting to gain control of the gnome, I had the player send coordinates to the gnome's entity telling it where it wanted the gnome to move to. This worked but was not perfect and had one major issue with collision which you can read more about here.
Silly collision issues and still blank stares on my forum post...I was getting desperate at this point. I decided to make new post where I tried to explain my problem differently.
Eventually, the Improbable support team cloned my git repo and made some modifications. These changes revealed one major component I was missing. In SpatialOS, there is a concept of Readers and Writers in regards to an entity's state. With this new version of SpatialOS, it is required to use the new EntityAcl.Writer to make updates to the Entity's ACL. This allowed me to make the write access updates. Once I changed this, the player was able to take control of the gnome in the world.
I'm really glad this pesky gnome problem is out of the way. Not being able to interact with Community Garden's world would have really hurt player immersion.
Update: I noticed this morning that Improbable forked my repo to help others work through similar problems. I happy to see the example being put to good use :) I think SpatialOS is easiest to under via example.
I've been using SpatialOS for quite some time now and there have been some ups and downs along the way. Major changes to the API have required me to rethink how I develop with the technology. The latest version Spatial 9 was no different. This version had some of the biggest changes yet.
After taking the time to learn the new version, I was pleasantly surprised by all the improvements that were made. The team at Improbable really has done a great job.
To celebrate getting Spatial 9 working in VR, I wanted to share the first rough screenshot of my friend hanging out and waving to me in the Community Garden I'm building. Unfortunately the plants we had growing in here died due to lack of watering...
It's finally time to for you all to play Wordsum Blitz. I'm really proud of how this game turned out so please check it out and let me know what you think. Love it or hate it, I always appreciate feedback.
Making Wordsum Blitz has been a very long journey considering the small size of the game. I really wanted to make something special based on the original idea of Wordsum. Along with the artistic help of my friend Jennifer Reyes aka InkByJeng, we managed to create a beautiful and fun game. I'm actually pretty terrible at playing the game so my top score is around 30,000 or so. Tweet me @pixelshotgames and let me know how awesome your score is.
Pro Tip: Just in case people are wondering, you tap the white panel at the top to pause the game.
I've been creating games independently now for more than a year. It hasn't been easy to do everything myself but it has been rewarding. Somewhere along the way I feel like I lost track of why I became indie. I even started to regret making games in the first place. I'm not sure if this post will amount to anything more than me rambling but I feel reflecting on my past might help myself as well as others remember why we all chose to do this in the first place.
After finishing my first game Wordsum, I wasn't sure what was next for me. The game didn't take off like I had hoped for. Don't get me wrong, the amount of people who played my game was more than I could have originally thought possible. Even better was the people that played the game seemed to really enjoy it. But even with this, I was baffled that it took me over a year to get 1,000 downloads. The game also didn't make much money (I found I do like to eat on occasion). I was spending all my time figuring out how to maximize the IAP for my game. What had I become?
When I look back, it made sense why the game didn't become the next Crossy Roads or Monument Valley. It didn't look or sounds unique so it didn't standout from the crowd. Where did the game lose it's identity? It started during early development of the game when I got caught up in what would sell well and what would attract people to download the game. In summary:
- I made the game cartoonish and flashy instead of beautiful and unique.
- I made it Free to Play instead of believing people would buy the game.
- I changed the core structure of the game to make it more of a value proposition.
The game I set out to make became a watered down version of the original. After the release, I became obsessed with marketing and IAP. I was miserable. The whole point of this change in my life was to make games I was proud of. I had quit my full time programming job to do it (I still contract to support myself). Yes, I can be proud this game exists and that it's fun but there are too many what ifs.
Over the next year, I've done a few other things. I made a VR game for the Leap Motion Game Jam, In Space, No One Can Hear You Dance. I started other games like Donut for the Gods and my current focus, MetaWorld. In the back of my mind I never felt like Wordsum was done. Little by little I began recreating the game as I originally envisioned. A fun, fast and beautiful word game that took the spirit of a game by Shintaro Sato, Blocksum, and shook it up with words.
I asked an artist who happened to be my friend to help with the art. Make it her own. I refined the gameplay to the core mechanics and improved the 'feel' of the game. Most important of all, I took my time and I didn't compromise my vision. This new game Wordsum Blitz, was something I wouldn't say what if to once it's released. It's the game I wanted to make.
I hope people do buy the game and enjoy it just like I would. I want them to look at it like I've looked back at Blocksum all these years and say "that was a really fun game". In the end, that's all the really matters to me. If you want see the change for yourself, download Wordsum for free for iOS or Android and check out Wordsum Blitz when it is release on iOS App Store on November 6, 2016.
My posts have become infrequent but I haven't given up on game dev. Too many things going on so blogging was put on hold. To get me back in the habit I decided to at least provide an update on what's been going on.
After completing In Space, No One Can Hear You Dance, I started working on a much bigger, more ambitious project. MetaWorld is an open world VR experience where players can explore a huge world with others. This project has been super challenging for many reasons. The first being I'm the only developer. This is made even harder by the fact that VR is so new that I often need to rewrite entire systems when something doesn't work. On top of that, being an early adopter of SpatialOS has presented many challenges. The Improbable has been working hard to create better documentation and a more stable API but the journey has tested my resolve. Also, building on top of SpatialOS requires a much different approach then commonly found in game development. The results though have been great. Creating something new that hasn't really been done before is very satisfying. An awesome moment for me was talking to Rachel Webb from GamesIndustry.biz. She really captured why this project is so special.
There is more to come for MetaWorld as well as more challenges but nothing great is every easy.
Wordsum reached a big milestone with 1,000 downloads. I never honestly thought I would make a game that this many people played. I still want more downloads but I'm also very happy with this number. Being my first complete game, Wordsum is special to me so I don't see myself letting it die.
This game has been a long time coming. The original Wordsum opted for a level based design to give the player a sense of progress. Originally, I wanted to make Wordsum a score based game that never ended much like Tetris. You simply just try to get the best score and compete against friends. Instead of adding this to Wordsum, I wanted to make a new game that was lighter, without ads, without IAP, with better art and that was straight to the point. Over the past year, I've slowly made updates and changes but only recently has it been looking like a finished game. The last little bit that I had to overcome was performance. With that finally conquered you can expect Wordsum Blitz very soon.
Donut For The Gods
Oh this poor game. Unfortunately Donut for the Gods has received the least of my attention. It's not abandoned though. Once Wordsum Blitz is released I will begin the slow struggle make progress. The gods will get their donuts!
After finishing Wordsum I took a trip into the work of VR with In Space, No One Can Hear You Dance. During this detour, I never quite stopped playing around with the design of Wordsum. The game was fun but I felt like I had strayed away from the main point of the game. I removed everything but the core gameplay and made it score based. The result was a game that was even more addicting with endless replay value. Wordsum Blitz was born.
With the gameplay fixed I turned my attention to the art. The art for the original Wordsum was fine but it wasn't original and lacked something. Lucky for me, I know a talented artist. Jennifer Reyes joined the team (ok a bit of an over statement since it was just me) and crafted this beautiful mockup.
This is just a mock up but I have already started integrating this into the game. I will post more updates once there is a working demo.
As the Leap Motion 3DJam is coming to an end, I'm going to take a short break to reflect on the things I learned while making In Space, No One Can Hear You Dance. Josh Rose from Robot Sea Monster Games said in a recent talk that VR is still in its infancy. Like the early days of film making, game developers need to experiment to find what works and what doesn't. These discoveries should be shared so we can all grow together and learn. This blog post is my attempt to follow that advice.
Current Oculus Rift HMDs only provides the hardware to put players inside a 3D world. This will change with the up coming release of the consumer version of Oculus Rift. Most of the content for the Oculus has been more of an experience or tech demo rather than a game. This is mostly because games at their core require some sort of player interaction. Leap Motion and Intel RealSense provides a way to reach into a VR world. Standard controllers are another option that's more familiar to gamers. What ever your input method is, you want to avoid doing things that break the players immersion. Once it becomes to difficult to provide basic inputs, player will get frustrated and probably turn your game off.
Since I've been working with Leap Motion, let's focus on that. Grabbing things or touching physical objects in 3D using Leap feels odd because there is no tactical feedback. Simple interactions can be very challenging and just not fun. For example, the video below shows a prototype I was working on. You can see the player (me in this case) has difficultly with pinching and rotating the object. I'm not new to using the Leap by this point, other people I had try this prototype who never used Leap found interacting this way to be impossible. I could lock the object to the players hand when pinching is detected but it creates an odd felling because for a stationary object like this, the players hand will move less in game then in real life.
For In Space, No One Can Hear You Dance, I decided to have the player follow instructions with their hands, swiping up/down/left/right, based on a screen inside the VR world. The result felt more natural because the interaction was a 1 to 1 match. The game did nothing different then what the player expected.
Simple Is Fun In VR
Most game developers love games (hopefully all but I have met some that don't play games O.o). When we dream up games, they are often pie in the sky ideas with deep systems and huge scope. Making complex games that are fun in VR is actually pretty hard. Gameplay mechanic's in conventional games are strange and can sometimes make you sick. For the near future, creating simple games (but complete, not just tech demos) is enough for players to enjoy their time in VR. If indies want a chance to make a meaningful impact in this space, we need to think small but polished. People who have never experienced VR find simple games to be fun and exciting. VR has transported us to time when the concept of just playing a video game was an amazing thing. Once we get a solid base of usable VR game mechanics, we can build off of that just like games have in the past. It's hard to have the Call of Duty of VR when we haven't had the Pong of VR.
FPS is very important
Low frame rate in any video game is annoying and can make a game unplayable. Low frame rate in VR game makes you want to throw up and never return. Current VR technology requires the screen to be drawn twice, once for each eye. To avoid the stutter that causes nausea, your game needs to run around 90 frames per second or more at all times. Any drop in fps below that can be enough to make a player sick. Once they get sick, that's it for a few hours or the entire day.
Since we are drawing the screen twice, the requirement of 90 fps becomes 180 fps when not running in VR mode. Getting this sort of frame rate can be hard if your game has complex scenes with realistic graphics. There are a number of ways to get better performance in your game but the three items below are what I found easiest to implement and gave me the biggest improvements.
Use baked lighting instead of real time lighting. This is not an ideal solution but it does provide a significant amount of processing relief. Many game engines provide great tools for baking your lights without much effort. If this is something your game can't live without then you may need to hold off until technology improves. For right now, we are limited by the hardware we have. It's a lot like the early days of video games where the limitations of the available technology could drastically alter the design of a game.
Your 3D models should be as simple as possible. If you can't get something to look just right with a lower poly count then you need to think about that objects importance in your game. Can you remove that object or use something else in it's place to get the point across.
Be careful with the code that makes up the logic for your game. In Unity, it's easy to forget that invoking GetComponent(), FindObjectByType() and Instantiate() is very slow. Use simple solutions rather than complex ones to make it easier to tune and troubleshoot. Don't be sloppy and program smart. I know this tip may be sort of a no brainier but I found that taking a critical eye to my game code helped a lot with my overall performance. I had gotten use to being able to make mistakes and not paying so dearly for them.
I just posted my submission for the Leap Motion 3DJam. In the week that's left, my goal is to tweak the levels and possibly add some usability features like the ability to restart the game (right now you need to alt-tab, close and start it again) and in-game instructions. For now you can download and play the game here.