Mar 30, 2016

Entry #4 - Some Code

I was really happy with how this game, Space Fight, turned out. Since I had already worked with GameMaker in the past I didn't really have to waste any time learning how it works, and was able to jump right in designing and building my game. Gamemaker does a lot of functions using a drag-and-drop GUI, but a lot of the stuff I added in had to be hand-coded. One piece of code I liked was the healthbars I added in. GameMaker has a function built in that draws healthbars for an object, and I followed this tutorial to help me, but I was really happy how they turned out. This is the code for them:
This code takes arguments for location and bar size, the variable that the ship object uses for health, in this case health1 and health 2, and then the various colors used in the bar.
And this is what they look like in-game:
The second thing I really liked was the addition of gamepad support. When played on the keyboard my game feels a little cramped and players seemed to focus more on fighting the controls than on the game itself. Gamepads removed that probably and allowed players to just focus on playing. The controls felt natural to me. I used information from this blog post, and some of the code for gamepad support is below:

The first block is code that fires when the system detects a controller is plugged in. It defines the deadzones for the triggers and buttons, and then creates a player object and assigns the controller to the player object.

The second block is the logic for doing 'normal shots'. Pressing the trigger creates the instance and the specified location - the front center of the ship - and then gives it a speed of 15 and a direction of 90, which will make it shoot straight up. It then plays a sound and sets the can_shoot variable to false, which sets a cooldown timer until the player can shoot again.

One other thing that I liked, and something that changed as I worked, was the title screen I made for the game. The original title screen was made before I had gamepad support, and I wasn't a big fan of it. This is the original:

Then, as I worked and added more concepts and depth, I ended up with this:
So as I worked, the main thing I added was the gamepad support. Then I realized that gamepads had 8-directional movement with the analog stick, but keyboard users could only move in 4 directions. So I implemented a velocity variable that allows the player to move in all 8 directions with the keyboard. During playtesting I noticed that players were intentionally moving towards each other to be on the same horizontal level which made the game a stalemate. To combat this I added the black hole, which wounds players if they go near the center of the screen.

There's a few things I'd still like to add. I'd like the players to be able to rotate so they could shoot in any direction. This would make the black hole unnecessary, since players could just turn and shoot. Barring that, I'd like to make the bullets slightly curve towards the black hole to kind of simulate the gravity. I'd also like to add more players to create teams, which I feel would add some more strategy to the game. More levels and ship colors/types are also on the list of changes I'd like to make.

Entry #3 - My Game's Design

My game has a similar design to other space shooters like Galaga and Raiden. Those games, however, are mostly vertical scrolling single-player games, whereas mine is a stationary two player fight. I think my game, while not unique in any way, puts a nice little twist on that genre. The multiplayer components of most space shooter games function exactly the same as the single player portion. The second player just takes control of another ship on the screen. My game's a little different because it is competitive instead of cooperative.

The design itself doesn't really add much to the genre - it's just a simple shooter. I did like the black hole concept I added in to keep people from getting on the same horizontal level and thus being unable to shoot each other. One piece of feedback I got was to make the bullets gravitate towards the black hole in the middle of the screen. I think that would make the game a lot more interesting and strategic since players would be able to curve shots. It adds another level to the game, since right now players can just remain across from each other and block shots indefinitely.

Another piece of feedback I received was to add a cooldown between normal shots. As it is now, the player that shots first and gets the jump will always win. Adding a second between shots will slow it down a bit and create some strategy.

Mar 26, 2016

Chess Bishop Tutorial


  1. Go into the front view
  2. View -> Image Plane -> Import Image and import a reference image
  3. Use the CV curve tool to trace the right side of the bishop. Don't trace the side with the slit, as we'll do that later.
  4. Select the curve you just made and use Surfaces -> Revolve
  5. Delete the reference image and the curve.
  6. Move into the perspective view and create a cube. 
  7. Transform the cube so that it is inside the bishop where you want the slit to be, and is also the same width and depth of the slit. The cube should take up most of the diameter of the bishop
  8. Deselect all objects
  9. Go to Surfaces -> Booleans -> Difference
  10. Click on the Bishop and press enter.
  11. Click on the cube and press enter.
  12. The tool will run and you'll have a bishop.

Chess Knight Tutorial


  1. Open up the front view.
  2. Go to View -> Image Plane -> Import Image and import a reference image:
  3. Select the CV curve tool and trace all the way around the knight. Don't do the ottom of the base, as we'll add that in later.
  4. Now we are done with the reference image so go ahead and delete it. Go into perspective view.
  5. Duplicate the curve. Edit -> Duplicate and move the duplicated curve slightly in front of the original.
  6. Select both curves, then go to Surfaces -> Loft. This will give us the outline of our knight.
  7. You can now delete the curves, as we don't need them anymore. Go into the outliner and delete them.
  8. In order to fill in the hole, we need to convert this object to a polygon. Select it, then go to Modify -> Convert -> NURBS to Polygons.
  9. Now go to Mesh -> Fill Hole
  10. Not too bad. You can either leave it as-is, or create a cube or sphere and edit it to form a base that the other pieces have. After that, simply group the objects and move them into your project.

Game Project 2 Update

Since my first update I've made a bunch of progress on my game. I've updated the title screen, changed how movement works to make it fully 8-directional, and also added gamepad support, among other things.
This is the new title screen, where I've only made subtle changes, but I think it looks much nicer than the previous.
The new movement system is much smoother than the previous one that only allowed for 4 directions. The new system allows players to move diagonally. I figured this out by making the movement keys affect a 'velocity' variable instead of the x and y variables directly. 

I also made it so bullets can collide with each other instead of just passing through, which gives players a method of defending themselves.

One of the issues I had with the game was not knowing how much health each player had, besides the sprite changing to an "injured" version when health got below 50. I added in healthbars for the player using this tutorial.

The biggest update I made was the addition of gamepad support. It makes for a much better experience than having both players crammed together on the keyboard. The only thing that didn't work correctly was using the right stick to make the ship turn. I implemented it, but it was far too finicky and sensitive, even with the deadzone set as high as Gamemaker will allow. For this, I used this excellent blog post.

Since the players can't turn, there is a potential problem with players getting on an even level horizontally which would make it impossible for them to shoot each other. To combat this, I added a 'black hole' across the middle of the screen that blocks the user from crossing it and also hurts them. It should make it so that players are always able to shoot at each other.


The only thing left for me to do is implement my own art for the player ships and bullets.

Mar 19, 2016

Game Project 2 Progress

After some deliberation I decided to make a multiplayer space shooter for my next project. I also decided to work in GameMaker since I already have some experience with it. So far the process has been pretty smooth. I have all of the basic gameplay functions added in, with both players shooting, damaging each other, and being destroyed with health reaches 0. I also have a start screen that displays controls.

The few things I have left to add in are:
  • Game over screens
  • Try to tighten up the controls a bit
  • limit the fire rate for shooting
Potentially I'd like to add gamepad support and other stages, as well as user defined number of lives. 


Mar 14, 2016

Midterm Production

I decided to start with the actual board, since that seemed to make the most sense to me. I created a simple NURBS plane and then expanded it to fill the grid. I then applied a lambert and the 'checker' 2D surface. The default grid is black and white, which would have looked fine, but I wanted to make it look a bit more like the chessboard I found and posted in my pre-production post, so I edited the colors a bit to reflect that. I also added another plane around the edge of the grid for a border.

This is what it looks like with the board and the black rook I've already created:
I then duplicated the rook 3 times, and added the texture for the white pieces. Then I made the pawns and did the same. This is the result:
Next I made the bishops. This was the most difficult piece yet because of the slit that bishops have in their top. I made the piece like normal using the CV curve and revolve tools, and then I had to do some research to make the slit. I watched this Youtube video that showed how to use the Boolean Difference tool to make it. I did that, then I had to figure out how to use the NURBS version of the tool. It wasn't too difficult, and now I've got bishops that look pretty realistic:
My next piece was the queen. It didn't really cause any trouble at all and was nothing new, so I'm just going to post the picture:
I then made the king. It was a little more complicated than the others but still not terrible. I first made the piece with a flat top using the CV curve and revolve tools, then to make the cross on top I used two cubes and transformed them to look like a cross. 
The last piece I had to make was the knight. I was specifically holding off on the knight until last because I knew it would be the most difficult piece to make. All of the other pieces are cylindrical and symmetrical, so using the CV tool and Revolving worked perfectly. The knight is a little different. I drew the outline of the horse like normal, except I drew the curve all the way around. Then I duplicated it and used the Loft tool to make the outline. This left me with the outline of the knight, and I only need to fill in the hole. I learned that I had to convert my NURBS object to a polygon. I followed these two tutorials:
This gave me the horse, but I still needed the base. For this I used the CV and revolve tools like normal, which gave me a round base, Then I positioned the horse on top of the base. I wanted to combine these objects beyond simply grouping them, since they will never be separated and should really be one object. I found a tutorial on combining polygons, so I had to convert my NURBS base into a polygon and then use this tutorial: Combine polygon meshes

I ended up with a pretty decent result that fits in with the rest of my set:
The only thing left for me to do is camera and lighting work. I made a camera and looked through it, then simply set keyframes while moving the camera around. Then I smoothed out the animation on the animation graph. For lighting I just added a couple spotlights. Then I batched rendered and made the sequence into a video, which is below.

I had a really fun time making this project. A lot went right, and there was never a time where I felt frustrated or lost. I'm really satisfied with the models I made. The only thing I would really change is the lighting. I feel that with enough time I could alter the lighting to make the pieces really look great. In the future I would like to maybe animate the pieces to make a full game of chess.