Asylum: A Reconstruction

I’m a 3D artist on a small team that’s working to recreate a historically accurate 19th century Kirkbride Plan insane asylum (based on the Buffalo State Asylum in New York) as a real-time, navigable 3D environment. We’re creating this in Unreal Development Kit and hope to eventually further the project into an interactive game with a narrative.

Depictions of insane asylums in video games usually fall into the horror genre, flooded with cliches and tropes. Our project aims to serve as an accurate preservation of asylums under the era of moral treatment in the late 1800s. Thomas Kirkbride’s plan led this era of reform and was used to construct and populate asylums across the country, introducing new standards and philosophies for treatment of the insane. His belief was that architecture should be viewed as a curative means of treating mental illness.

There are very few of these structures remaining as they were, and a surprising lack of images from this time period as well. One of the best existing examples of this architectural style today is the Buffalo State Asylum.

Our project is heavily research based and we hope it will serve as a preservation that allows the truly to really get a sense for these buildings and the time period better than text, pictures, or videos can provide. As a team of almost entirely 3D artists, our focus is achieving a high level of quality in terms of graphics. Additionally, we hope to make strides in unique gameplay mechanisms and interactive visuals that will provide a more sincere interpretation of what it might be like to be insane.

Week 4: Programming Camera/PlayerController & Prize Concept Art

This week I focused on hammering out how to constrain the movement of my Pawn and continued developing the camera. I also worked on prize concept art!

UnrealScript

My game type is currently extended from UTGame. I had originally extended from UDKGame, but found that my camera was most closely based on a third person camera that pivots around the Pawn (the claw.) The built in SetBehindView in UTGame is helpful for getting a third person camera working in this way. I need to remove the default HUD from UTGame, but I don’t see this as posing too huge of an issue.

My camera is based loosely on this third person camera code. The camera height and offset from the location of the player are global variables with values editable in the defaultproperties of the Pawn class. The CalcCamera() function uses these to calculate the position and rotation of the camera relative to the player.

In my version of this camera, I’ve frozen the rotation of the Pawn, but not the Player Controller, and so the camera moves based on mouse input but the Pawn mesh never turns. In the UpdateRotation() function, After getting the rotation from the mouse input and feeding it into the ProcessViewRotation() function, I clamp the resulting Yaw rotation value. This is because I don’t want to have a full view around the crane game machine – just enough to pivot and give the feeling of peeking inside the machine left and right.

My code right now allows the camera to move in location in the X and Y axes along with the claw Pawn, which is something I need to fix. This makes the camera much too active for my taste. I would prefer it to be very subtle, and for the rotation of the camera to correspond to the X movement of the crane.

I was able to constrain the movement of my claw in the X and Y axes in the PlayerController class in the tick() function. A tick is one frame, so whatever is inside the body of the function is calculated each frame. I simply grabbed the location of the Player to a tempLocation vector (X,Y,Z). I then used an if statement to check if the location in each axis was above or below my max or min values. If it was, I set the tempLocation equal to the min or max value. Then, I called SetLocation(tempLocation) to write the tempLocation to the location of the player.

I attempted to do the same on Z axis, but just set tempLocation.Z to one value, like 100, so the player would stay afloat at 100 units in height. The problem with this was that the built in gravity kept taking effect. I figured out that the best option would be to set the Pawn’s physics to PHYS_Flying. This can be done in the default properties by simply saying Physics = PHYS_Flying, or even changing it from a dropdown in editor in the properties of the Player Start. Even setting the physics to flying didn’t seem to work though – my player kept falling.

After a lot of fooling around, I ended up calling the SetTimer() function in the PostBeginPlay() function of the PlayerController, essentially causing a delay and allowing the PHYS_Flying to be calculated before the player is initialized.

Concept Art

I’ve designed several prizes that are going to populate the machine. Although it’s not a priority to outline every single prize, I found designing them to be a good reminder of the tone of my game. Some of these are cameos from other works I’ve done, others are new ones designed while referencing cheesy and overly sweet stuffed animals from my reference photos.

plushes_concept

I’ve found the prizes have helped me come up with some ideas for added functionality I might want in the game. If each prize could have an individualized behavior, there would be a lot of potential for very humorous surprises with each prize you pick up. For example, the sad teddy part might fall apart in a variety of morbid ways whenever it is touched, making it impossible to save. The bubble gum fish might be extremely sticky — and hard to get off of your claw when you want to drop it. And the toilet paper – maybe you need to pick it up in the right way – over or under? By time you get it right you may have unraveled the entire roll.

Week 3: Pre-Production and Testing

This week I’ve been gathering my references, inspiration, and working on some concept art. I’ve been continuing to nail down my design doc to outline my project. I also modeled an early prototype of the claw and started using it to test rigid body physics constraints in UDK. I’ve been spending quite a bit of my time researching UnrealScript, setting up the project directory and my coding environment, and figuring out what exactly is possible and how difficult it will be to do.

Physics

My first attempt at setting up the claw was to import the moving pieces as separate meshes to UDK. I then brought them in as KActors and constrained them together to work correctly mechanically using rigid body constraint actors. Most pieces are connected with RB_HingeActors. I then activated a Thruster on key press to push up on the middle sliding cylinder, constrained along a RB_Prismatic actor to keep it upright. This clamps in the claws. The only meshes that have collision are the claws, so that they can meet and collide with each other in the middle. This method has proved to work well so far, but I still need to figure out how to make the claw spring back into resting position. All of these actors need to be grouped together in the form of a prefab in order to keep everything as one piece, which seems a bit messy to me.

I’m currently looking into Physics Assets, and the PhAT (Physics Asset Tool) in UDK. If the claw is able to be rigged and imported as a Skeletal Mesh with bones and have physics able to act on the bones, this would be much simpler. The claw also needs to be constrained to the sliding mechanism at the top of the machine that moves in the X and Y axes.

Concept Art and Pre-Production

I’ve mocked up a basic idea of how the game will look – an idea for the the style of machine, the colors, and the camera view. Hopefully by week 5, this machine will be filled with some stuffed animals!

game_setup

Here’s a very rough block out of the view of the game in editor!

prototype

UnrealScript

This week my focus has been figuring out the functions I need to modify to affect the camera’s constraints. For this game, I want the camera to be mostly fixed in an absolute location. My camera only needs to rotate in Yaw, around the Y axis (left and right.) So far I have used the ClampRotAxisFromBase() function in the CalcCamera() function in the Pawn class to do this.

There’s still a lot to figure out, but editing the camera movement has been a nice introduction into understanding UnrealScript. Looking to next week, my goal will be to figure out how to constrain the pawn on the X and Y axes within the walls of the crane game machine and freeze it in the Z axis so it can’t move up or down. I also want to figure out how to make the camera location and rotation based on the movement of the claw Pawn in the X and Y axes instead of simply fixed.

Week 2: Ideation and Planning

Hi everyone! I’m a junior in the 3D Digital Graphics program at Rochester Institute of Technology. Over the course of this spring semester, I’ll be independently designing my own game for my Project Planning and Production class.

I’ve been dwelling on the concept for my project for a while. My idea is to create a crane game using Unreal Development Kit, based on real life crane games that were the source of my many stuffed animals as a kid. Over the course of this semester, my goal is to prototype a fully playable level of this game. Being more on the art side of game development, the style development and polish of the assets and visuals are a primary focus, and I hope to achieve a very high quality product in that respect. I expect to complete the gameplay to the level of a proof of concept. I have many exciting ideas that would enhance this game to be more than just a virtual crane game. Those ideas may go beyond the scope of what I’m able to learn and accomplish on my own in a semester, so I am structuring this project to be extensible, in case I decide to pursue the project further as a senior thesis.

In brainstorming ideas for this project, I was really inspired by games like Surgeon Simulator, Octodad: Dadliest Catch. These are games made by relatively small teams with inventive, unique premises. A lot of the appeal in these games comes from the hilarity that ensues when struggling and trying to complete seemingly simple designated tasks, especially with sloppy physics based controls that seem to have a mind of their own, leaving you fumbling with the controls. I always enjoy quirky games like these that have a sense of humor that break up a game industry overruled by mundane and generic first-person shooter games. Games like these open up gaming to a wider audience.

This is something I’d love to achieve with my crane game. In real life, crane games are a struggle to win as it is, and often times are obvious scams. I don’t want my crane game to be impossible to win, but I want it to epitomize the frustration of real life crane games. I want the player to fumble with the physics based claw to pick up a prize out of the machine. I want to allow for the possibility of the prize to slip, for the physics to screw up, and for the unexpected to happen. Each claw of the crane will be individually controlled, so you have to coordinate all of the claws to grip the prize.

Eventually, I would like to add in power-ups and handicaps that would adjust the level of difficulty for a limited time period after picking the item up. For example, maybe it takes away some of your claws and you have to pick something up with just two, or even one claw. Or maybe you get rubber grips on your claws and the friction is adjusted to make it harder for the prizes to escape your grip. I’d also like to add in achievement detection, so that you would have requirements to pass a timed level — like you need to pick up a specific stuffed animal (the one all the way at the bottom) in a particular way (by the head, arm, leg, or tag.) And looking to the future, I’d like to make different levels with different themes. This first level will be set in an arcade, but what happens if your crane machine is underwater? Do you have to pull a plug? If it’s in space, watch out for black holes. In the forest level, maybe your claw turns into an eagle talon and the prizes are small forest animals. There is a lot of potential to take this game further than I’ll be able to push it in these upcoming 12 weeks.

This project presents a lot of challenging but exciting tasks. I’m relatively new to developing for game engines, and although I have programming experience, UnrealScript is brand new territory for me. I suspect many of the game mechanisms I’ll want to implement will require me to program with UnrealScript. A large part of this game will also be experimenting with real time physics and interactions between rigid and soft bodies. Additionally, I’ll be looking into Scaleform and ActionScript to be able to design a UI, HUD, and menus for the game.

Here is a timetable breakdown of my work schedule for the semester. I’ve given myself (what seems like) enough padding to make sure I complete the week to week goals I’ve set– let’s hope that holds up!

Crane Game Timetable