Wednesday, September 25, 2013

Bad Things Happen in Space: Panic Build

So it's done. I completed Rami's challenge... only 13 hours late. I don't really know what the conditions were for him to play my game or what I'd get or if anything would happen at all if I completed it on time. I suppose that the main idea behind the challenge was to get me to build a prototype at all - and it worked!

Here's the link:

I don't know what the bandwidth limits are like on google drive (cursory search indicates within the range of 600 mb/day), but if the link doesn't work, try again later. Or tell me, and if it gets to be too much of a problem, I'll host it somewhere else.

I'll copy and paste the shitty instructions I wrote:

wasd to move
shift to sprint
left ctrl to crouch
space to jump (though you can't jump very high without hitting your head)
e to interact
q to drop an item if you're holding one
each tool has two modes of usage: 
wrench-welder: left click to hit fractured debris back into place, right click to weld the seams 
entropy capacitor: right click to float/attract cubes, left click to shoot them 
megatongs: right click to grapple fuelium rod, left click hold to charge forcelight, left click release to launch fuelium rod.
Tips: Press start server to start playing.Once you've figured out the ship, the helm is where you can access a few different scenarios. 
Performance is really shitty, so you'll probably need a really good computer to get decent frame rates. 
The entropy capacitor (cube sphere gun thing) puts out fires if you shoot cubes at fires. 
You can open up specific doors from the map in the security room. 
That weird glowing chamber thing in the life support room will heal you if you step into it. 
the weapons room has been temporarily re-purposed for oxygen canister storage. 
The megatongs are used by right clicking on a fuelium rod and then holding down left click (while still holding right click) until your light glows big to shoot out the fuelium rod (probably into the big swirling reactor thing...) 
There are 4 distinct and bad scenarios to try.

Also some minor news: I have been asked to give a talk about echobox and the Rift at some unannounced conference thing in november. The Rift integration was actually one of the easiest parts of echobox, but that's not saying much.

The Ultracrunch

Apparently I have the tendency to ultracrunch before deadlines. For instance, not sleeping or eating for the three days prior to the deadline. The same thing happened when I was working on echobox (and to a lesser extent with Blood too) right before it was due. I have a feeling that this is unsustainable and probably extremely unhealthy. I felt like I was constantly about to pass out or die. Productivity goes way down too. Unfortunately, if there isn't a deadline, I have a tendency to focus on infrastructure and technology rather than actual gameplay mechanics. I fall into the trap of "making it easier to make a game" rather than actually making a game. I should find some way to impose actual real deadlines and react to them in a way that is less torturous- because ultracrunching is ridiculously stressful.

Team work(!??!)

Yeah! Bad Things may be an anticooperative game, but that doesn't mean that making Bad Things has to be. I enlisted the expert (zero previous experience) modeling skills of a friend (gosia) to make some of the art in the Panic Build and also I am teaming up with some super sweet (no joke this time) game design dude (joe) to help me hammer out the mechanics and concepts. Like balancing realism vs rule of cool vs fun. Specifically, Joe really helped me narrow down the scope into a viable set of systems and especially helped with clarifying how the oxygen system should work. Eventually (probably never) I'll just implement shipwide navier-stokes math for the oxygen flow and let physics figure it out, but until then, I'll use a volume/concentration based approach.

Good/Bad Things

I'll outline some stuff I am particularly pleased with, and some stuff I think is the weakest:

Good Things:
  • I really really like the look of crisp high resolution text as part of the environment. It makes it really seem like a very cohesive experience.
  • Hitting fracture debris with the wrench is super satisfying.
  • Shooting entropy cubes at fire looks really cool. Actually, maybe I like everything about the entropy capacitor.
  • Managing oxygen canisters really hammers in that sense of being-alone-in-space. That feeling of don't fuck this up or you'll die.
  • Actually getting the area behind the fracture sites to look like outer space (probably the most novel technical trick in the build).
  • The door control map actually works!
  •  damn, I love floating cubes.
Bad Things:
  • Multiplayer is broken. There are some panic hacks that are super-not-multiplayer-implementable. And also the physics. Physics based stuff in multiplayer games tend to not work out very well. We'll see.
  • Welding fracture pieces together is hard, there's not a lot of feedback to know what you can weld, or how much you need to weld, or when welding is done.
  • Picking up fuelium rods with the megatongs is too floaty, it needs to be more gravity-gun like. This isn't hard to implement, but I didn't want to spend too much time on getting it perfect for the panic build. Similarly, with shooting fuelium rods into the reactor it is hard to predict where the rod will go, and there's not enough feedback when you do get it into the reactor. And most of all, it's just not very fun or mechanically satisfying. 
  • Ship power isn't important enough. Currently some systems shut down if the power is too low, but that's about it. The oxygen system stops pumping, the doors require manual work to open, can't warp, lights go dark (though indirect lighting is still there... thanks lightmaps (I'll probably fix this eventually)) (idea- sensors, door labels should not work either). Eventually you'll die from not having enough oxygen, but that's about the only threat to your life from power loss.
  • Performance is horrible. Most of the frame time is spent "culling". I don't think that's normal, and it might be a bug in the 4.3 beta that I'm using. I get 60 fps in bad areas and 150 fps in staring at a wall, and that's on a Haswell i7 and a gtx780, so performance is going to be mostly unplayable on merely mortal computers. And the occlusion culling system is broken too, so that doesn't particularly help. Also, rendering the scene 3 times per frame (this can probably be fixed, eventually). Oops.
  • Difficulty is super high. Especially considering welding fracture pieces works poorly in the first place, you don't have much room for error when repairing a fracture. You have about 5 seconds before you start taking damage from asphyxiation, and then about 20 seconds after that you'll die, if you're at full health. Balancing this is hard, but not fundamentally problematic. Also fire is really dangerous. And there's no way to repair the hull yet. It's a prototype after all.
  • Not enough scenarios or compelling situations. The power goes out, the oxygen vents, fire breaks out, and fractures occur. None of these things occur simultaneously in the current scenarios (and if they did, they would probably kill you), and having conflicting priorities is where real panic comes from.
  • I didn't have enough time to finish the weapons room, or any weapon systems or ship combat or anything like that, so that will come eventually.
Other Things:

  • Graphics programming is amazing. I feel super cool about solving some problem with getting the fracture pattern to show up behind the actual fracture. I render the fracture geometry from a closed position and use a shader that outputs all black, and then use that as a texture for the space behind it.
  • I had to write my own hinge physics system (more vector math) to get the fracture debris to behave like I wanted it to. Unity's collision conditions are kind of a pain to work with, but I think I've worked around it for the most part.
  • Getting the fracture geometry to actually work in at arbitrary rotations was kind of difficult. I did the proof of concept oriented along the major scene axes, and it required some tough vector math (actually just cross products) to un-hardcode those assumptions. 
  • The Unity beta is full of bugs. Again, this is my fault for trying to do game dev on beta builds, but still, man, every time you remove an item with occlusion culling on, the editor crashes. Change a script in play mode, editor crash. Do anything while baking lightmaps and you'll get a blue screen of death (maybe the fault of overclocking). And the new monodevelop can be super slow for some reason.
  • There was a super crisis problem that took two hours to fix. For some reason the editor builds were working fine, but the standalone executables were just showing a blank screen. Turns out it had something to do with the camera order, but I don't even know why that's happening. I put a band-aid on it and it seems to be working now.
So that's about it. Feedback would be super great if you have any.

Wednesday, September 18, 2013

Moving, VRJam, Bad Things, Rami's Challenge

Hey Everyone! I've been doing a lot of stuff over the last month. Let's start at the beginning.

Moving to Boston

Yeah, I did it. This place is cool, but expensive and what do people do with their cars? My room mates are the coolest dudes/ladydudes and they're actually probably even smarter than me. In fact, I am writing this blog post during sanctioned house writing practice. Otherwise, I would be furiously developing Bad Things for a reason I will reveal shortly.

Oculus VRJam

Yeah! I made a super sweet technology showcase thing for the Rift that apparently nobody cared about.

I didn't place as a finalist, and my guess is because:
1) I didn't actually make a game (it's a music visualization experience).
2) some bugs.
3) needs a very high end gaming computer to run.
If you have a Rift devkit you can try to download and play it here. Keep in mind that you'll need a super fast computer. It runs at 60 fps on my development machine which has a gtx 780, and it ran at 10 fps on my laptop. The reasons for this are clear to me (huge compute shaders and ray-marching), but the fidelity tradeoff was not one that I was willing to make. The jurors had very fast computers (or so I heard), so I don't expect this was a major problem for them, but it might be for everyone else.

It's a little bit disappointing that I didn't make it as a finalist; I thought I had a pretty strong entry. They didn't give any kind of feedback or rating, so I don't know what or why. Oh well. There are pieces of echobox I can possibly reuse and sell on the asset store. I'm thinking I could create some kind of plugin for the acoustic simulation or a plugin for soundcloud streaming. Btw, my game has a physical acoustic sound propagation simulation and it also streams music from soundcloud. Why? Because I am crazy.

So what about those Bad Thing-things?

Err, yeah. So there was the fuel cells thing and then the VRJam was three weeks and then I was moving and now I am doing it! Ok! The level editor still isn't done (though I have saving and loading now). Technology wise- echobox uses a rasterization based voxelization technique that I think I can adapt for use in Bad Things to implement *~Sparse Voxel Octree Global Illumination~*. But that will have to wait. At Boston Indies a few days ago, I met a super cool dude...

Rami's Challenge: Panic Build

Yes, it's true. +Rami Ismail of Vlambeer (@tha_rami) challenged me to stop developing technology for my game and just go and f-ing make a playable build so people can actually go and test whether or not the mechanics are fun. IN 7 DAYS. FROM TUESDAY. (it's wednesday now). Ahhhhhh. He's my Indie Game Dev Idol, so I can't possibly resist. It's a bit unlucky because my game is particularly unplayable right now with the taking apart of everything for the level editor. And I had to do the fuel cells yesterday (one wasted day). I spent all day today fighting with the level editor to get a basic level going. Looks like I am going to be taking the air particle system out for this Panic Build. I've been thinking of mechanics frantically:

Throw fuelium rods into the reactor for ship power using megatongs, load weapons into tubes, crank laser batteries, secret button presses for recalibrating life supports. Cutting off limbs for the bio-replicator, the entropy capacitor (formerly known as the entropy amplifier), and the welding wrench. I think I can get all those things into the game in some form, BUT IS THAT ENOUGH?! I don't know. Is it even a game? Do I need a scenario? What will drive the pace of these events? Panic Build.