Now that all of Draffurd's kickin' tracks are completed, I set on my quest on implementing music via the wonderful FMOD library. It was a bit confusing initially, as it seems they released a 'newer' version that has an entirely different (entirely OOP) API. It took a little while to realize why the heck all of the API docs and tutorials I came across weren't coming even close to compiling. [smile]
In short, the music sounds entirely awesome in-game. Right now it's just the basic logic of "pick a random tune from the music pool at the start of each level", but even this little bit adds a lot to the atmosphere and gameplay. All that's left to do on this front is have the music fade in/out on the end/beginning of a level, and to set up the special tracks to play (main menu track, and final boss track). In terms of audio, after this, I just want to add a few miscellaneous sound effects here and there for polish sake.
All of these MP3s certainly add a lot to the file size! Up until now, my biggest game distribution archive size has been pretty small; certainly under 5 megabytes. Given this day and age, exceeding that isn't a huge deal, but I'm still nostalgically worrying about those elusive 56k'ers. [smile]
Wow! I was extremely surprised yesterday to find out that I found a co-op placement! 24 hours after my first interview I received a job offer, which surprised me very pleasantly. I knew that the interview went fairly well, but I didn't think it went that well. Irregardless, it looks like from this May until the end of August I'll be working for the Canadian government. More specifically, the Ministry of Education. It may be filling the role of "that co-op kid who knows how to fix bullet points in MS Word", but it's a paying job. I also get my own office -- glee! And since it's a government job, my interviewer assured me that they were pretty lenient on what time you actually arrived at work. I'm very excited to think that I'll have this juicy item on my resume for future usage, and how great it'll be to work in a real professional environment. Definitely more on this as May grows nearer.
GameScribe -- Odds and Ends
I decided to take a swing at fixing some things here-and-there with GameScribe, my Scheme/Lisp-like scripting language aimed at scripting for games.
In particular, I implemented the "variable scope stack", which replaces the previous system of having one gigantic hashmap of variables; essentially at global scope. Now variables are stored in a stack of hashmaps of variable bindings, which allows me to push a new variable hashmap to hold, say, the local variables (or arguments) of a function. Of course functions still aren't implemented, but this certainly paves the path. This will also let me add the 'local' (or 'let') statement, enabling local variables to exist in more than one scope. Which is far more exciting than it sounds. [smile]
I also added a neat little concept (which probably exists already, somewhere): the idea of allowing special statements to evaluate and unevaluate expressions within the code itself. For example:
(define a ($ (+ 9 10))) ;; The '$' operator forces the inner expression to be unevaluated
(print a) ;; Returns (+ 9 10), unevaluated
;; The '@' operator forces the inner expression to be evaluated
(print (@ a)) ;; Returns 19
This may seem a little strange/useless, but in terms of practical uses, this will let me store the bodies of functions as forcefully unevaluated expressions (which they should be). When lists are implemented, it may oftentimes be useful to have list contents which are expressions you'd want to evaluate only at certain points.
On the more useful side of things, conditionals are also implemented, under the guise of 'if'. I directly took Lisp's syntax, having:
By placing another 'if' within the do-this-if-false, a user can effectively construct 'if, else if, else' conditional structures. Something similar to 'switch' will see implementation sometime soon as well.
I'm very excited about how GameScribe is turning out. There are some design issues here and there which are unsurprisingly arising (since this is my first go at writing an interpreter/language), but it's been an unbelievably educational and rewarding experience.
I'll likely be integrating it into most of my future games, which serves to only make things even more exciting. The notion of not having to hardcore data like AI, items, or weapons gives way to 'moddability' -- every gamers' friend. [smile]