Sunday, March 1, 2015

The Amazing Racing Game Design Goals

For my project I will be creating a game using the monogame framework and F#.

The idea that I have is to make a racing game. The vehicle will be relatively light, and able to perform tricks such as wheelies, and 360 degree flips. It will be interesting to have the tricks act as powerups, performing complex tricks will speed up the vehicle, thus rewarding players who are able to do these.

Challenges with the project chosen:
-        Graphics - For rendering I will *attempt* to use OpenGL, I need to be able to render 2D rotated images to the screen, and I know *somewhat* how to do that in OpenGL (I did a tiny bit of exploration with how to use OpenGL last year when I was messing around with LWJGL).

-        Programming Paradigm - I will try to program in a functional first style, using an imperative style only where necessary (e.g. when interfacing with the underlying monogame framework, which was originally made for to support the imperative style of programming). I am relatively new to functional programming (I started last year), but hopefully I will be able to make something out of it. Worst case is that I will revert to F# imperative, which I would find more familiar due to my experience with java in the past.

-        Physics – There are a few hurdles with some of the physics involved. First I will have to implement the SAT (Separating Axis Test) when testing for 2D rectangular collision which is not axis-aligned. I have looked at it before, but I have never done anything with it, and it definitely looks daunting. As well, the design relies on a lot of torque and rotational motion. I have done work with rotational motion in the physics class I am currently taking, but I do not know how hard it will be to implement what I learned in class to this relatively massive project. Also, the terrain would (ideally, but not necessarily guaranteed to happen) not be rectangular, it would look relatively curvy.

-        Audio – I have no experience creating sound assets, and so I don’t know how difficult it will be. Potentially it could be relatively easy, or it could be extremely hard. I just don’t know.

Goals for the Project:
-        Investigate the relationship between functional programming and development time. Based off what I have read online, it seems that functional programming is a succinct way of creating programs, and can save development time. I want to test this by doing a relatively big project in F#.
-        Make a fun game – It will definitely be fun just to make a game and tweak it until it is exactly what I wanted.

Tools I will be using for my project (some may be added later)
-Monogame framework
-Inkscape (Planned to use for creating assets)
-Paint.NET (Could be used in conjunction with Inkscape for visual asset creation)
-Git (Version Control)
-Visual Studio Community Edition
-Audacity (sound effects + music)

I will do my best to get all of this done by the due date in June, but I will cut unnecessary portions of the project out if necessary.

A few conceptual drawings are shown below (because my idea is hard to illustrate in a still image, and I just drew a few random things related to what my ideas are to give you a sense of what it might look like).