It was a good experience to have, which did a lot for my confidence as a hacker. A course in Computer Graphics would have been the next step, but back then there still weren't any in existence in the UK. One of my tutors at Art School wanted me to apply to the Massachusetts Institute of Technology, but I did not want to live in the United States with all those twitchy Americans running around with handguns, so I kept coding as a hobby and studied Fine Art.
I have always been fascinated by videogames, not so much for their narrative or competitive elements, but for the way they let you discover mysterious alternative worlds that operated according to their own rules. In a way both hypermedia and multimedia can be seen as subsets of gameworlds: whether you are stepping through apertures in Portal that link you to spatially unconnected locations, or are just writing your name on a wall with the bullet-holes made by your machine gun in Halo - indeed, its Forge is a collaborative hyper-multimedia authoring environment (for that too lets you create linked teleports). The success of Minecraft and Little Big Planet prove that consumers welcome the responsibilities of creation and don't somehow see it as an onerous task, nor do publishers seem to fear giving players tools that converge with the capabilities of their own in-house middleware - one might assume that they would jealously guard the goose that laid the golden eggs and mint new levels as a precious revenue stream of optionally Downloadable Content yet that thankfully isn't the case.
That said, even when something as capable as the CryEngine 2 Middleware is made available to keen modders, I do wonder about the tool's accessibility. Both Halo's Forge and Little Big Planet's editor keep you largely inside an active gameworld which you then modify around you. The menus you encounter are unobtrusive, their settings are not unfathomably complex. Whilst I applaud Crytek's gift of such powerful tools I suspect the amount of work involved in creating your own level is so high that their next game's sales aren't at risk due to a community's appetite sated by a glut of high quality content.
For even mods require teams and soon the person-hours required for a project flounder on lack of $.
Open Source may well be the answer, as free software (as in beer...) circumvents the subtle strictures that prevent mod teams funding their labor through commercial sales. However, that would require a collection of content creation and videogame development tools to be constructed without funding or remuneration.
Obviously this endeavour would be greatly assisted by modifiable source code in an articulate language which coherently integrated multiple paradigms and supported numerous layers of abstraction. As I had a lot of spare time on my hands I decided that I would create the initial version of it single-handed. Other collaborators would inhibit my ambition, vision and quirky decisions. Even if I found like-minded people who would let me lead the project I knew that I was constantly revising my ideas about what it should be (based on things I was reading) and my slow pace would likely lead to desperation and arguments.
At first I just wanted to avoid writing a game in C++ with MFC and Hungarian Notation. Mr Stroustrup
seemed to have created a language on the point of imploding under the weight of its own cruft. I thought long and hard about how long it would take me to get proficient with the language and API - and exactly how much I would hate every second of the experience - then, realising that I was doing my project "Just for fun", I took the radical step of embarking on the research for the design and implementation of my own language based around a platform-independent virtual machine.
Then Java came out...
Nooooo!
At first I felt as if Sun had stolen my idea from out of my head. Then I was irritated that now it was out everyone would look at my language as being an unoriginal imitation. Then I started to calm down a bit and grow to dislike Java enough that I still felt it was worthwhile developing mine. I nearly opted to use it to write my game with, but eventually concluded that it wasn't fast enough and took too long to start up its applets in webpages, making it also unsuited to online interactive hypermedia.
Disliking Java's similarity to C/C++ syntax (if it is incompatible, why look the same?), I took a great interest in a book on algorithms that used pseudocode. This made me wonder what it would take to make a parser for these programs. I was also inspired by Peter Landin's seminal paper:
The Next 700 Programming Languages.pdf
Although I didn't understand much about it at first, my immediate take-away was the absence of braces. Logically subordinate parts of the program would be simply indented. Something all good programmers already did {within braces} to aid readability - even though all of these extra tabs were ignored by the compiler. I couldn't see anything wrong with stealing this idea for my version of the CASE statement.
Then Python came out...
Noooooo!
Actually, as time wore on I came to accept that there would be like-minded language designers coming up with original ideas independently of one another. At least Python was procedural, not prototypal.
Around about then I became fascinated by Kenneth Iverson's APL and was thinking about how multi-dimensional arrays could be implemented more generally as associative arrays through hash tables. I was enamoured with the way that you could describe mathematical operations on whole arrays, rather than picking through them one element at a time with awkward nested loops. Functional Programming used recursion in preference to iteration, but I need not rely on an idiom that could potentially cause a stack overflow - I'd avoid having to learn a whole other paradigm, terminology and programming method if at all humanly possible. I also came to admire the heuristic list assignment in the statistical language S.
Then Lua came out...
Nooooooo!
I started to ease my toe into the freezing cold waters of Functional Programming and try to grok what on earth they were going on about lambda. Eventually, I grasped that it was just a high-faluting name for an anonymous inline function. Thanks. Why didn't you say that in the first place?
I started seeing the benefits of avoiding destructive assignment and globally shared data structures. The best thing about OOP was encapsulation. Maybe that was all I needed to take from the paradigm. I liked the idea of data abstraction, building a program out of a set of richer components better suited to your problem domain and decided that I needed something which resembled Barbara Liskov's CLU.
Then I got interested in NewtonScript and Self, concluding (after slogging through Bertrand Meyer's Object-Oriented Software Construction, that the Command-Query Separation Principle was good, Design by Contract was good, but Class-based inheritance was an unnecessary, flawed, concept), all that I really needed to get by were Prototypes.
Then JavaScript came out...
Nooooooooo!
;-)

0 comments:
Post a Comment