Crystal GridIron

Crystal GridIron is a game that I developed for the Mini Ludum Dare 63. The theme is to develop a game that fuses two different game types. Since I’ve never developed a football game before, I thought this would give me the opportunity to do so. However, this game will include fantasy RPG elements. Instead of football players, the team will be composed of mages, warriors, and rogues. I’m planning to make the ball a crystal. I also want to have powerups that are stored in treasure chests on the field, which will boost the player abilities with things like faster movement and more power.  One of the games I liked playing as a kid was Bill Lambeer’s combat basketball, which also had collectible powerups.  I also liked Tecmo Bowl for the original Nintendo Entertainment System, and I decided to use a similar side view of the field.

Tecmo Bowl Bill Lambeer

I was able to develop the basic core of the game using Unity and Playmaker. The players are currently capsules, and the ball is a sphere. Of course, I will end up replacing these will actual models that I will create in Blender. I created a script which instantiates all of the players on the field, using two ArrayLists for the Vector3 positions of all of the players on each team. When the game starts, I parent the ball of the player that the player is controlling. This way, the ball follows the human controlled player on the field. I also set the ball to “is kinematic true” so that it doesn’t move away from the player. There is one Playmaker FSM for controlling the actions of the player. If the player is human controlled, then I use the GetAxisVector action to get the input. Then the human controlled player is moved using the Translate action.

Crystal GridIron
Each player is assigned a team ID, which determines if the player should play offense or defense. I also set the material for the player based on their team ID, which makes the players red or blue. Currently, the defensive players just move toward the ball object. The offensive players will move based on the play type selected.
I created two cube objects for the two end zones. There is a trigger action on the ball, so that if it crosses into the end zone, then the scoring team gets 7 points added to their score. I am using the GUI Text object for displaying the score. The team scores are stored in two Playmaker global variables.
The camera moves by getting the X position of the ball, and then moves towards that X position (the Y and Z position of the camera remains the same). I set the camera movement speed to slightly less than the player, so that it makes it appear that the camera is catching up with the player that has control of the ball.

After a few days of development, I was able to implement a simple football game with basic artificial intelligence.  When the player makes it to the end zone with the crystal, they score seven points.  The player has four downs to gain ten yards to get to the yellow line.  Then, the player gets a fresh set of downs, otherwise the ball is turned over to the other team.  I made some simplistic models for the game, since I didn’t have enough time to model player characters.  I did get the crystal implemented, and I was able to make it go through all of the color hues.

I learned a few things from developing this game.  I got more experience using the Playmaker Ecosystem addon, which adds more actions to Playmaker.  I was able to import int modulo (for changing the integer of the active team between 0 and 1) and HSV color actions (for changing the color of the crystal).

Unfortunately, I wasn’t able to add many of the features that I had planned.  I would like to model better looking players in Blender or import humanoid models in MakeHuman.  The entire field needs to be redone, with yard marker lines.  The AI needs to be improved on offense (players just walk forward) and on defense (players just move towards the crystal).  I also thought about adding a “classic” mode for people who just want to play regular football.  I would also like to add controls for selecting a play formation, and have multiple formations for offense and defense.  A play editor would also be a nice feature.  The game also needs to have the ability to pass to team mates.  A game clock also needs to be added, as you currently just play forever and there is really not an ending to the game.  Finally, the game needs to have music and sound effects added as well.  However, I was impressed with what I was able to accomplish in just a few days.

Play on itch.io

 

Released

Monster Hotel


Monster Hotel

Overview

All of the monsters in Monsterland stopped by the local bar for a few drinks after a hard day of monster work.
Since drinking and driving is not permissible in Monsterland, the monsters need to find their way to the Monster Hotel to stay the night.  As the owner of Monster Hotel, you need to help the drunken monsters find their way to your establishment.

All monsters coming out of the bar are boogey men. Use your powers to transform the monsters to make their way to the Monster Hotel.

Wolf Man – Can dig through ground
Vampire – Allows the monster to land softly from a long drop
Frankie – Blocks other monsters from proceeding

Post Mortem

The game uses the same basic mechanics as the  Lemmings game that I first played on the SNES.  I remember Nintendo heavily promoting the game at the time, as it was featured on the cover of Nintendo Power.  In 48 hours, I knew I couldn’t implement all of the different Lemming abilities.  Therefore, I just picked three of the ones that I remembered.  Those were the digger, the floater, and the blocker.

For this game I used Tiled for generating an XML file containing the positions of the blocks, as well as the entry and exit positions.  The TMX file has to be renamed to TXT and placed in the Resources folder to be able to assign it to a TextAsset which is used by my UnityHelper XmlReader script.  Then the Prefabs are assigned to the script, which does the job of instantiating the Prefab objects at the correct positions.

I created an object which spawns the units at regular intervals.  The units will keep walking in a straight line until they collide with a wall.  I used a capsule collider for the unit, and I set the local Z velocity to a constant value on every frame.  When the unit collided with a object with the wall tag, I would rotate the unit by 180 degrees, which would make the unit walk in the other direction since the local Z is now pointing in the opposite direction.  Unfortunately, it would also detect a collision when the capsule collider touched the ground.  To fix this, I added a box collider in front of the unit which does not touch the ground and fires a trigger when it hits something with the wall tag.  By using a trigger, I ensure that my box does not react to the world physics.  I also added a similar trigger event so that the units reverse direction when bumping into each other.  Otherwise, the units would start stacking on top of each other.  Ideally, I would have the units pass through each other, but that problem would be too difficult to solve under the time constraints.  To keep the units pinned on the Z plane, I set the rigid body constraints on the Z position.

Another problem arose when the trigger box hits two wall blocks at the same time.  This would change the direction of the character, and then immediately change it back to the original direction.  To fix this, I added a small amount of delay to the trigger state so it would only fire on one trigger events.
The digger simply stops and starts digging a hole below his current position.  I determined which block to remove by shooting a ray downward from the unit’s position.  However, this really didn’t create a hole big enough for the units to fall through.  I used the position of the block removed and casted a ray to the left and right of that position, and destroyed the adjacent blocks as well.

The floater unit prevents the unit from dying after a long fall.  I added another collision event which compared the force returned from a collision, and if it is greater than a certain value (force of falling more than three units down) then it would destroy the unit.  When I was testing this, I never noticed the units dying, so it seemed like I was losing units for no reason.  For that reason, I spawned a particle effect where the unit was destroyed.  I just used a standard particle effect, but I wish I could have made a goopy style splatter.  To obtain the floating effect, I simply increased the drag value on the unit’s rigid body.
The blocker was fairly easy to implement.  When that ability is activated, I just increased the mass of the unit so that other units can not push it.  I also set the movement to the standing state, similar to the digger, so that the unit stays stationary.

I increased the available ability types by one for each stage.  That way, the player is not presented with all of the abilities at once.  Using the new ability type is essential for completing the current stage.  If I had more time, I would have liked to had more levels, and levels that would require using a combination of abilities to complete.

I saved the modeling and graphics for last.  In some of my past entries I would spend too much time on the modeling, so this would force me to do it quickly.  Since this is a monster theme, I decided to use a different monster for each ability.  The default creature is the boogeyman, since I think of the boogeyman as being any type of creature.  The Wolf Man is a digger because I think of canine type creatures as diggers.  I made the floater a vampire, since bat type creatures can fly.  I made the blocker a Frankenstein (shortened to “Frankie”) since he is big and immovable.  I wish I could have made a morphing effect when transitioning between abilities.

I used Blender for making the character models. I created a simple half outline in Gimp, and then I used that outline to form my models using loop cuts, resizing, and translating vertex positions.  I created a simple six bone armature and created a simple walk animation in the dope sheet action editor.  I then unwrapped the mesh using the “from view” option which makes painting the texture model much easier (although there is more stretching around the sides).  I exported the layout in the UV editor and painted the texture in Gimp.  I did mess up once by not separating the front and back layouts, so my creature had eyes in the back of its head.  Separating the back layout wasn’t too difficult, so I just had to draw the back side of the creature.

The boogeyman that I designed is just a simple imp type creature.  I used the same mesh for the wolf man, but I gave him pointy ears and I elongated his snout.  I tried giving the vampire wings, and used white face with a black rope with red trim.  I had “the master” from Manos: The Hands of Fate” in mind.  Frankie was given a blocky head and body, which was done by modifying the mesh.  I wasn’t going to spend the time modeling bolts into the side of his neck.

I modified the animations slightly for the monsters.  The vampire flaps his wings.  Frankie holds out his arms and twists his head in a similar fashion to the blocker in Lemmings.

I updated my GarageBand software to the latest version earlier in the week, and I used it on my Mac laptop for composing the music.  I used a B minor signature for composing the music.  I used some organs which sounded creepy and kept modifying the notes until it sounded okay.  I made another similar track which was a little slower for the title screen.

I recorded my own voice making howling, “blah”, and grunting sounds for each of the monster types.  I lowered the pitch and added echo effects to make the sound effects seem more creepy.

Overall, I am happy with what I was able to accomplish in two days.  This entry definitely feels more “gamey” than my previous Ludum Dare entries.  The biggest weakness of this entry is probably the lack of levels, since I only have three and ran out of time to make more.  I will probably make a short trailer and throw it up on Steam Greenlight to see what sort of response it gets.

 

Released

Jewel Swapper

Jewel Swapper is short game that I developed as a warm-up.  I used the addon for Blender to generate the different jewel models.  Jewels will rotate when hovering over them.  There are four types of jewels, which are the red ruby, green emerald, purple diamond, and gold chalice.  I was able to build the game for my Nexus Android tablet.  I am hoping to develop this game further and publish it on the Google Play store.  Currently, swapping jewels will cause all adjacent matching jewels to disappear and new jewels will fall from the top to replace them.

 

 

Released