Kitty’s Adventure

Kitty's Adventure collectible letters added

Kitty’s Adventure is a game developed in remembrance of Kitty.  Kitty is lost in the maze and only you can help her escape!  Guide Kitty to the exit of each maze.  Every level is a uniquely generated maze configuration.  As you complete the levels with Kitty, the maze complexity increases.

Development Process

Kitty's Adventure Texture Mapping

I began development by making a simple cat model in Blender.  Next, I textured mapped my model by UV unwrapping the model, by mostly using the “Project from View” operation while selecting specific faces of my model.  I exported the UV layout, and then I created the texture map in Gimp.  I used the dropper tool get the fur color from a real photo of Kitty.  I ended up adding a little more saturation to the colors, as the texture looked a little faded when mapped onto my model.  I used the reflect modifier, so that I only had to model and texture map the left side of the body.

Kitty's Adventure Blender animation

I created an armature for my model, with bones for the body, arms, legs, head, and tail.  Then I created three animations for my character, which are standing, walking, and jumping.

Kitty's Adventure Maze

Next, I created a simple maze in blender by scaling a plane object, and then subdividing it by 20.  Then I selected all of the faces that would be walls, and then extruded those upwards by about 1.5 units.  I downloaded a flower texture from CGTextures and mapped it as the wall texture.

In my Unity project, I imported my cat model and maze model.  I made a capsule game object for the player, and parented the cat model to the Player game object.  I used Playmaker for controlling the movement of Kitty with the Get Axis Vector and Translate actions, using “XZ” as the Map to Plane option.  It is important to add a mesh collider to the maze model, otherwise Kitty will walk through the walls.

I created four scenes for this game.  The “memory” splash screen shows a brief photo of Kitty that fades in and out.  The Camera Fade In and Camera Fade Out actions accomplished that effect.  However, I had to disable all of the GUIText and GUITexture objects after the fade out, otherwise you would see a flicker for a frame before the next scene is loaded.

I added the title screen last.  It just displays the game’s title and waits for the user to press a mouse button to start the game.  I added my Kitty model with the walk animation and I applied a constant rotation action to make Kitty spin.  It doesn’t look very natural, so I may go back and modify it later.

Kitty's Adventure Unity

The game scene is where the bulk of the gameplay occurs.  I added entrance and exit objects, which are just cubes with triggers.  The entrance really isn’t used now, but walking into the exit cube with transition the game to the final screen.  It took me a little while to get the perfect height for the maze walls.  If the walls are too tall, then you can’t see Kitty at times.  If the walls are too low, then it makes the maze too easy to solve and looks unnatural (why wouldn’t you just step over the walls?).

I also wanted to use controls similar to a Mario 64 style game.  Playmaker provides a Smooth Camera Follow action, but it makes the camera always stay behind the character, and only works well when using a control scheme where you press up to go forward, down to go backwards, and left and right to rotate.  The control scheme I wanted to use is pressing up to go into the screen, down to go to out of the screen, and left and right to go to the sides of the screen.  The camera would need to be set to the position of Kitty with an added offset and never rotate.  I couldn’t parent the camera to the player game object, because it would have the camera turn wildly whenever the player’s rotation changed.  When the walls were too tall, I would have problems of being able to see through some walls, since the camera was inside of the walls.  Ensuring that the camera was always positioned above the top of the walls resolved this problem.

After Kitty reaches the exit, then it transitions to the final game over screen.  I have a simple congratulations message with Kitty jumping up and down.  At first, the player could still control Kitty on this screen, so I disabled the movement FSMs when the scene is loaded.

Kitty's Adventure Prim's Algorithm

At this point, I had a working game, but it was not very complex and it used the same maze every time.  I did some research, and I found that Prim’s algorithm can be used to generate mazes.  I created a new test scene, just for programming the maze layout.  I created a new object and attached a new PrimsMaze script to it.  The script takes a game object (maze wall prefab) and the number of rows and columns to use in the maze.  I found a good video explaining how to make a maze using Prim’s algorithm, so I wrote a C# script using the method described in the video.

The maze generation works pretty well.  I set the exit to the last open space in the last row, although that really isn’t the most elegant solution and could result in problems if there are no open spots in the last row (my Unity editor crashed more than once due to not being able to find an open spot, resulting in losing all work since the last save).  One nice thing about Playmaker is that it will detect and break out of infinite loops, however infinite loops in a script will result in the entire Unity editor hanging.  There used to be a trick where you would attach the MonoDevelop editor to the Unity process and then change the variable causing the loop, but I couldn’t get that to work with the Visual Studio editor.

Now every time someone plays the game, they get a unique maze.  The maze complexity also increases as the player completes the levels.  I created a Playmaker global variable to hold the level number, which is incremented at the end of every stage.  I recently discovered that Playmaker global variables are accessible from any scene, which is really helpful to keep data (like level number) persistent across scenes.  I created a new function in my maze generation script, which has a switch statement that determines how many rows and columns to place in the maze based on the level number.  After level six, it uses the default row and column values.  I need to do some tests to see how many wall objects I can have before the game experiences slowdown.

There are a few more features I want to add to the Kitty’s Adventure game.  Obviously, I need to add music and sound effects.  I’ve also had the idea of adding paw prints on the ground as Kitty walks around the maze, which would be like breadcrumbs showing the areas where you have already been.  There are plenty of obstacles that could be added to the maze.  It would also be nice to have a timer showing how long it has taken to complete each maze.

Developer Commentary

 

 

Released

Tex Oneman

Tex Oneman Overview

You play as Tex Oneman, who must gather the rewards for shooting the bandits (Evens, Odds, Fibonaccis, Squares). Each bandit has a numerical value associated to it, which determines if it is one that can be shot for a reward. The reward will change periodically to a new set of bandits. Shooting an incorrect bandit will result in Tex Oneman losing a life. When all of his lives are gone, the game is over.

Tex Oneman Post Mortem

Tex Oneman is my third official Ludum Dare entry, and it was my eleventh game developed for this site (including mini-LDs and warm-ups) since I registered in April 2013. I feel like I’ve learned a lot during that time, and these projects have definitely made me a better Unity developer. For this Ludum Dare, I knew I wanted to do something different.

After hearing the theme announced at our local Knoxville Game Design meetup, I knew I wanted to make the number “one” a central part of the game. Going with that approach, I decided to make the number “one” humanoid, since I knew how to quickly make meshes from text in Blender. I added eyes, arms, and legs, but the character was still sort of boring. I thought about some of the characters in my latest XBox Live Indie game TTY GFX ADVNTR, and remembered the character “Needles”, which is a humanoid cactus wearing a cowboy hat. Then I remembered playing the classic game GunSmoke at one of those 20-in-1 arcade machines not too long ago. There really haven’t been too many western themed games lately. Therefore, I gave my humanoid one a cowboy hat, boots, and a gun to shoot. I also went ahead and modeled a cactus in Blender as well as a background prop.

Tex Oneman gameplay

Another classic western game was Wild Gunman. I liked the Gunman name, so I decided to call this game “Tex Oneman”. The original name (One Gunman) was also sort of a play on the term “Lone Gunman”, which differs my game’s title name by just the leading “L”.

After creating the models, I got the main character imported into Blender and moving around. I also created some enemy boxes that moved around. Next, I implemented shooting projectiles. However, I quickly found that trying to aim on the X-Z plane with no lock-on could be quite difficult. Therefore, I limited the character to just being able to move left and right, and he is only able to shoot forward. This makes the game similar to other classic arcade shooters, except this game uses a third person view instead of a top-down birds eye view. Shooting enemies was fine, but it still seemed really boring.

Then I had the idea that Tex Oneman would shoot number sequences as the targets. For each enemy, I assigned a random digit value in the range of 2 through 9. First I decided to use evens and odds as the requirements. Once I got those working, I added a countdown so that the requirement would change periodically. I was really inspired by a game called Pig and Bullet, which makes the player switch between collecting red and blue bullets every few seconds. The problem with that game was that you never knew when the objective would change, so I added a visible countdown in my game. New objectives were added, such as Fibonaccis (2 3 5 8), Squares (4 9), and Perfects (6). I didn’t include 1 in the sequences, because that would mean that Tex Oneman would be wanted as well causing unneeded confusion. Each sequence also has a set reward associated with it, where the more complex sequences have higher reward values. For the lose condition, I made it so that the player lost a life if they run into a number or shoot an incorrect number. Finally, I rendered 3D numbers in Blender, which replaced the box enemy meshes in my game. I included statistics such as number of shots and accuracy percentage on the game over screen, which was inspired by other classic arcade shooters.

Since I had the core engine finished on the first day, I worked on polishing the game on the second day. A “WANTED” poster was added which displays the current objective in the lower right portion of the screen. The objective change countdown was converted into to a bar which shrinks as it nears zero. Like my previous entries, I used Garage Band on my laptop to make the music for the game. The piano and guitar sounds were primarily used to give the game a more western feel. Bxfr was used again for making the gunshot and other sound effects. Using my computer microphone, I recorded myself saying “Shoot X”, where X is the current objective. Then, the vocal recordings were modified a bit in Audacity to give it a better sound. The voice seems to really enhance gameplay, since it keeps the user’s attention on shooting the numbers, instead of looking at the Wanted poster. Finally, particle effects were added using a star texture that I made in Gimp. I tried changing the particle system color over time, but for some reason it just wasn’t working for me.

I learned a few lessons from this game. The first lesson is that people don’t like shooting at a perspective. I thought the controls were intuitive, but some people definitely found it difficult to shoot. The best I can explain the shooting controls is that it is similar to rolling a bowling ball on a bowling lane. The game could have included some additional visual cues to help line up the shots down range. I could have also used a top-down view, but then the player would not be able to see the details of the model that I had created. Using an orthographic projection may have helped as well, which would have kept the numbers and bullets traveling vertically on the monitor screen. Another option would be to highlight the number that the player is currently targeting, but I thought that may make the game too easy.

There was also some difficulty with getting the model moving correctly. When I assigned the armature, I used the default “with automatic weights” that I always use in Blender. However, since the arms and legs were so skinny, it didn’t properly weight paint all of the vertices. I’ve done manual weight painting before, but this model had some difficult to reach vertices. After some trail and error, I discovered that it is possible to pose the model while weight painting it. This made reaching some of the difficult to reach vertices much easier, and you can see the vertices snap into place while weight painting it.

Overall, I am satisfied with the game that I have created. I would have liked to made the other numbers humanoid as well, and I really needed to add more props to the environment. Things like buildings, dust, and tumbleweed could have really added to the environment. If I get the time to work on this game some more, I definitely think it could be turned into a great game.

 

Videos

MetroPulse Article

The MetroPluse entertainment paper interviewed me and other members of the Knoxville Game Design group during Ludum Dare 28. The article features my Tex Oneman entry.

 

 

Released

TTY GFX ADVNTR


Levi D. Smith presents TTY GFX ADVNTR for Windows 10, a popular role playing game that was originally released on the XBox Live Indie Game marketplace.  TTY GFX ADVNTR puts the player in the role of a hero who must defeat the dragon to save the princess.

The idea for the game was originally conceived through a game jam competition, where the theme was to create a game using a low level programming language in 48 hours.  The game was inspired by BBS DOOR games of the mid-90’s, and it uses a graphical style of games that were played through a computer terminal (TTY).  After receiving positive feedback from the Indie developer community, the original game was ported to the Xbox Live Indie Game platform so that it could be enjoyed by a wider audience.

As the hero, the player must battle monsters across five different lands to gain the experience needed to conquer the dragon.  Long time RPG fans will find the battle system and mechanics very familiar.  While on the adventure, the player will meet various allies who will assist the player in progressing through the story.  Weapons and armor crafted by the blacksmith will give the player the needed power to complete the adventure.

Platforms

PC – Humble Store

PC – Itch.io
https://ldsmith.itch.io/tty-gfx-advntr

Release Trailer

Contact

Website  https://levidsmith.com/games/tty-gfx-advntr/

Soundtrack  https://soundcloud.com/gatechgrad/sets/tty-gfx-advntr

 

Reviews and Other Information

TTY GFX ADVNTR is #1 on Splazer Productions Top 5 XBLIG for November – XBLIG Show

Bradley Metrock – TTY GFX ADVNTR Review

Writings of Mass Deduction

the XBLIG – TTY GFX ADVNTR Review

Splazer Productions: Gameplay video

Knoxville Indies are Taking Over! – Knoxville Game Design

TTY GFX ADVNTR on GameFAQs

Defunct Games TTY GFX ADVNTR Review

 

 

Social Media Feedback

TTY GFX ADVNTR Social Media Feedback

 

Box Art

boxart

 

About Levi D. Smith

Levi D. Smith graduated from the Georgia Institute of Technology in Atlanta, Georgia in 2002 with a bachelor’s degree in computer science.  He graduated from the University of Tennessee in Knoxville, Tennessee in 2008 with a master’s degree in industrial engineering.  He currently works in the Knoxville area as a software engineer, and he develops computer games in his spare time.

ttygfx_levidsmith

Previous Titles

Resistor was released for XBox Live Indie Games in September 2012.  The game was praised by numerous Indie game review sites, such as Armless Octopus, Ramble Media (formerly XBox Ramble), Did not Finish, and Indie Theory.

 

Released