About this blog
I have two current projects. One of them is the GDNet V5 UI redesign.
Entries in this blog
Some more V5 UI progress. The idea is to combine all the "calendar" type information we currently posses - events, contests, performances (stuff like Video Games Live), conferences - in a single grid, but allow you to filter which types of data to display. The three months ahead and past are directly accessible for quick access; beyond that you can also use the spinners.
When you click on a day in the calendar, but not on any of the events, a semi-transparent widget will appear that allows you to (attempt to) add a new event - click the plus sign. Or something. I haven't fully worked out the interaction model here. Feedback welcome. Usual disclaimers about color and this just being a layout test.
For anyone who cares, I'll create a master sheet after we've worked out the kinks on all the pages that share the same template. This master sheet will lock in default proportions, etc.
This was supposed to show up yesterday, but I finally discovered that I don't like OS X's default mouse acceleration - apparently an exceedingly common problem that Apple has chosen to bury any and all UI for correcting. I'm evaluating alternatives to fix it.
In the meantime, here's a work-in-progress mockup of the advertising page. I had to wait to get back to the office and good old Windows to build this; I'm starting to get the hang of Fireworks, and the final version should be much better. Again, this is just layout; the colors are NOT representative of design direction. I will follow this post up within a day or two with the finished version, still grayscale.
An idea I'm toying with is making direct buys much, much easier. Visit our advertising page, upload your creatives, specify the durations you want, provide your account/payment info and wait for approval. The rounded boxes that read "Upload Asset" would be nicely AJAX-ified forms that you click in and get the file browser and can upload in-page, but it would be nice if they could also support drag and drop events. We'll see. Some of you might remember when Ethereal Darkness Interactive purchased ads on GameDev in support of the release of Morning's Wrath; this would have made it a snap for both parties (because we wouldn't have needed to process a manual transaction, nor would we need to manually insert their buys into the inventory, which is what I think happened then).
Anyway, feedback welcome. I'll be finishing this page up and then moving on to the Events calendar, which I think you will all really enjoy. [smile]
Honest, I promise. I've been distracted coming to grips with the OpenGL state machine, specifying transformations in reverse order and doing it all from Python (with two different approaches, depending on whether you write a PyOpenGL sample or use GL via Pyglet).
Oh, yeah, and I'm learning Illustrator and Fireworks in-between. (Fireworks is clever; it manages to add layers, pages, slices and symbols, among other features, to PNGs that show up as simple images in other editors/viewers. It's amazing.)
But there will be an update before the week is out, and I should have mocked up all non-user pages by the end of the month.
Unrelated to either of my projects. I was doodling in the office (yes, on an IBM notepad - I got it at GDC last year, I think) and trying to come up with some ideas for a personal logo. I like lions. And Google Image Search is still awesome. [smile]
We're hoping to provide customizable layouts, so this "stock" design is what you'd see if you haven't logged in or are just visiting. Once you've logged in, you'll be able to rearrange columns and move/remove widgets.
The greyed-out text in the upper-right (Events, Spotlight and Sign Out) are actually tab labels. I'm thinking of using the :hover pseudo-selector to indicate the tab outlines once your mouse cursor moves into the area.
The Recent Forum Posts area will extract the first non-quote sentence from the latest post, to give more context. I just got tired and didn't render it.
I am particularly interested to know if people prefer this approach to features or the one from the previous post. Thanks!
Click for full-size version
Please note, this is very, very, very preliminary stuff that I haven't even run by ops, so don't look at it as definitive forward direction. I just think it's a good idea to get as much community feedback on the process as possible.
Many beginners - not absolute beginners, but beginners still - ask questions pertaining to finding time and the motivation to stick with a project with large scope. There are a variety of non-answer responses, such as, "You should write smaller programs," or "Break it up into smaller parts, then treat each part as a project so that you get to complete several in turn." Those are useful bits of advice, but they don't answer the question.
So what's the answer to the question? You make it.
I'm a professional software developer. My day job might be killing me - this past week I had days of 9 am to 2 am and 10 am to 4 am - so I inherently don't have a lot of spare time, particularly not to devote to another programming project. I have a girlfriend, and I have to spend time with her. So when do I work on this resource?
I try to do things like program on the subway train, when coming back from work. (I can't do it when going, usually, because I go with my girlfriend, and the train is packed so I'm standing; balancing a laptop in my hands sufficiently to type while avoiding falling due to the train's movement... not my style.) Sometimes I'm too burnt out after work, so it has to wait until I'm rested, or late at night. And sometimes it goes several days, or over a week. On previous projects I've gone weeks without touching code. And my subway downtime is a peculiarity of those who live in large cities with developed public transit systems - a rarity in the USA.
The truth about when I code for this project? At work. I keep the project window open all day, and whenever I've got some time to spare, I throw in some code. I may not necessarily build - having a manager walk by and see a game of Pong on your screen is far more troubling than seeing you peering at an IDE - but I'll prototype and use the interactive shell to evaluate various conditions. I can also read up on documentation I need to implement a feature, and maybe even write a small snippet. I can work on non-visual aspects, like when I wrote the 2d vector type at the office.
If you want to do something bad enough, you'll make the time. Just remember to be fair: don't cheat your employer by falling behind on your assigned tasks. That's cheating yourself, too, by lowering your reputation.
As for motivation, I guess I really can't speak to that. I've been doing this so consistently for so long - I've tried to walk away from programming and games and technology at least twice, and failed. This is my life. People who ask about motivation may simply be in the wrong career. If you don't have a passion for this, then look around for something you do have a passion for.
What have your experiences been?
Tomorrow - today, now - I get the day off. I have errands to run, of course, and I'll check in on work stuff, but I should be able to use some of the time to get some code written. In between watching all those foreign DVDs I rented. Hmm... foreign means I have to read the dialog. Bummer!
Learning resources identify a problem/challenge and then supply methodologies, techniques, best practices, rules of thumb and whatnot for avoiding/overcoming/solving it. The nature of the problem can vary from fatal - the program doesn't run, for example - to structural - the program is hard to maintain and extend - and so on. The one is obvious to all; the other, in this case, is meaningful only to those sufficiently advanced to have encountered it.
When writing a learning resource suitable for complete beginners, then, how do you address the challenge of presenting a technique or practice that solves a problem the student has not yet encountered? This is why most introductory C++ texts read so horribly; using inheritance to solve the "problem" of making different mammals "speak" is meaningless because most beginners aren't interested in that issue (and probably never would be, if it weren't for classes/textbooks). Similarly, refactoring x- and y-axis velocities into a single vector type is meaningless to beginners because they haven't experienced the downsides of not doing so yet.
How do you present a good practice like refactoring without getting ahead of your audience?
Video games are a visual medium, yet virtually all introductory resources/articles/tutorials are reams and reams of text. We're often asking complete beginners - most have never written any programs, ever - to muddle through pages of text and then craft source code to eventually create graphical experiences. Until very recently, the default first language recommendation was C++, which meant that they had to write simple text console games or use crude approximations of graphics via ASCII art. Libraries like Allegro and SDL helped, but they still required quite a bit of futzing to set up correctly.
In such a case, one could provide an incomplete program that the student needed to fix, evaluate it immediately, generate a "test score" and show the working (graphical) program, all in the browser. That was my original ambition, but I figured that waiting until I got Flex/Silverlight toolchains and learned enough to build this RIA would stall for too long.
Okay, I'm done for today.
Anyone who's been around GameDev, or, indeed, any online game development or programming resource for any significant length of time is familiar with the frequency of beginners asking, where do I start? They sometimes have grand ambitions (insert MMO joke), and sometimes they have a better understanding of how accretive skills acquisition is, but they all want to get started and progress as quickly as possible. Here on GameDev, it is universally agreed that our Start Here page is woefully out of date, so much so that there are projects to overhaul it (again!)
Here's the thing: I wonder if the fundamental method employed by that resource and similar articles/tutorials across the internet isn't wholly inadequate. We start by asking them to make decisions - by trying to guide them in making selections such as what language to choose, etc - as if those things matter. They Don't (My Opinion(TM), which I will be dispensing liberally without caveat or condition since this is, after all, my journal [smile]). There is a growing acceptance within the community that which language you start with doesn't really matter, so long as you stick with it enough to learn the basic concepts of programming. Concurrently, there is a rough consensus that tools that help the beginner make a game quickly are more valuable and preferable because they stave of frustration. So a good foundational programmer's resource is one that familiarizes the student with core concepts more quickly and thoroughly.
Another common question is what engine to use, to which jpetrie's essay Write games, not engines is quickly becoming a handy and comprehensive corrective, in much the same way that questions about how to use multiple C++ files invariably elicit a post of Kylotan's Organizing Code Files in C and C++. We've seen hobbyist after hobbyist slave away for months and years to create an engine, and then not be able to use that engine to create any games. So a good foundational programmer's resource focuses on making games, not bits of technology in isolation.
Software engineering formalisms are beginning to percolate widely through the game industry and indie/amateur/hobbyist community. More individuals are using revision control to manage their source and assets. More developers are writing unit tests, and some are even employing test-driven methodologies to validate their design and code as it is written. I'm not a fan of buzzwords, and I hate secular religions/cultisms, so I'll stay out of any debate involving any idea that was articulated in a manifesto. Nevertheless, I think introducing these formal tools and practices earlier rather than later is a huge boon - I've argued that proper use of the debugger (and preferably of a modern, capable, graphical debugger) should be a university computer science prerequisite. In any case, our third maxim is that a good foundational programmer's resource teaches good use of tools and good development habits from the onset.
I'm working on an experiment. I'm writing a new foundational resource for game programmers, and I'm trying to embody all of the above guidelines. I'm writing a complete game, a non-trivial game, and providing the complete sources. I'm starting with a simplistic prototype, building it up gradually, and refactoring to improve code quality and add features. I'm placing all the code into source control, and I'll make the repository publicly available when the resource is published.
I can't do everything in one resource, so I'm actually planning to write multiple - at least three. The first covers the construction of a Tennis game by prototyping as Pong and refactoring into the final product. The second will work from a formal design document to create a multi-directional shooter, while the third may be a small RTS. I haven't decided yet. My hope is that the resources will be useful not just to absolute beginners, but also to people with some programming knowledge but questions about how to actually go about making a game.
I'm writing it in Python. Not because Python is "better," but because anybody can read Python syntax. It also lets me focus more on the programming concepts rather than language constraints and/or workarounds. Also, the basic Python toolchain required is simple and universal (and free).
I've already started. The Pong game is almost feature complete; I just need to add player-directed serves, frame rate independence and menus (a one-night job, if I can find one night this week... day job is hectic!). After that I'll do replacement of crude rectangles with sprite graphics, then we're a few steps away from a very basic Tennis game.
I won't release until it's complete, because there's nothing worse than adding to the plethora of unfinished "tutorial series" on the intertubes. I'm projecting submitting the whole mess to GDNet editorial (read: Drew) by mid- or late November, then I'll take a vacation before getting started on Resource 2.
Thoughts, requests, comments, criticisms. Fire away!
In 2005, I was hanging out with Graham Wihlidal and his friend Allan, and Allan was under 21 so we couldn't go to parties without leaving him behind - the problem Superpig is currently facing.
So I finally got around to attending a GDC party - *ahem* "networking event." I started off at BioWare's greatroom at the W Hotel, though I didn't have my pass on me so I couldn't actually get into the room. No biggie, drinks were liberally available, and all they had on display was Mass Effect and Jade Empire, I later found out from Graham. He had left the W to meet up with authors at the Course PTR party/reception at the Westin, so the girlfriend and I hoofed it down there to meet up with them and it became quite a GDNet Domination! Dave (Myopic Rhino), Kevin (KHawk), Lissa (frizzlefry), Rich (Superpig), Drew (Gaiiden), Graham Rhodes (grhodes_at_work), Graham Wihlidal (gwihlidal) and myself.
Had a couple drinks, took a bunch of photos, made noise, then left along with Graham to meet up with BioWare peoples and worm our way into the XNA party. Which we did. And which was awesome. Microsoft sure knows how to throw a hell of a party! There were four or five different areas: the main room you first walk into, a "Chill Lounge" downstairs, a "DJ Lounge" upstairs, and a back area (with an upper floor balcony) where the DJ was spinning bhangra fused with different forms of dance music, from electronica to percussive hip-hop. I riffed briefly on Punjabi MC's role in popularizing those fusions, especially when his Mundian To Bach Ke (featuring a Knight Rider theme song sample) was remixed with a guest verse by Jay-Z. Yes, I'm obnoxious and lecture people in person, too. Not. [smile]
Free drinks, free food... by the time I got back to the hotel, I pretty much collapsed in a stupor. Ironically, I was awake around 6:15 am, no alarm clock. Ugh.
Off to take photos in the North Expo floor, and check on the booth.
The first couple of days of GDC have been pretty good. Met up with the gang - met Michalson, Superpig, Washu and The Senshi for the first time. Always good to see Melissa, Dave and Kelly, and Kevin showed up yesterday. There's been a running joke about me doing nothing productive, just hanging out in my hotel room with my girlfriend, who's on Spring Break. The boys actually appreciated her ability to hang with us for a whole evening as we talked shop and neither appear bored nor feel compelled to interject into the conversation. Melissa appreciates having another woman around - and someone who is not a total gearhead either.
In retaliation, I was in the press lounge at 7:30 this morning. And, really, coverage is not my primary responsibility at this year's GDC; I'm here to explore content partnerships and direct people to Drew to provide more content. (For those unaware, I'm now in GDNet Business Development while Drew [Gaiiden] is in charge of Content.) I've made a few contacts already, and should be lining up an interview on the N-Gage SDK (since Nokia has decided to turn N-Gage into a software platform available across a range of devices, and presumably eventually across all their devices; I wonder if I should tell the guy I sold my N-Gage QD for $50 a couple hours after they gave it to me?) for Thursday.
We've had a few operations meetings already, and I'm very excited about our direction and momentum going forward. There are still some very large roadblocks ahead of us, but if we navigate past those, I think we're going to be the talk of GDC 2008. You heard it here first.
Now, as Michalson just said to me, toting an is-it-cake-or-playdoh bit of schwag promoting Cake Mania, I need to "turn my schwag sense on." Besides, I need a spiffy pen. I think I'll pop a piece of that GameDev gum into my mouth and see if it infuses me with a directional lootfinder...
No lightning pyramid, voice-of-God post icon () in journals? Blasphemy!
Follow up on Note 1: an advantage of having Michalson sitting next to you: he can get you a fix for a feature faster, so my icon set should be expanded by tomorrah.
I'm wondering how E3-ish the Expo will be this year, given that event's recent demise. I've been seeing very consumer-oriented coverage from some sites (GameSpot, 1UP), and reading about very consumer-oriented news. Ugh.
This industry still needs a heavy dose of color. It's so bad that us black people get excited when we see each other in the hallways! I think I'll attend any session on "diversity" so I can laugh at the audience demographics.
In the interests of democratic syndication support, PMS (it's a working title; I have a new release title but I won't bother mentioning it until at least alpha, as some form of motivation or something) should support whatever syndication format the publisher wishes to employ, and it should be easy to add new ones. The logical thing to do is to store data internally in XML, then use XSLT to transform it to the syndication format of choice, be it RSS 1.x, RSS 2.0, Atom or other. Of course, this means also using XSLT to transform the XML to XHTML.
Which raises an interesting question. Apparently, browsers will take an XML file and a link to an XSL transformation and generate HTML (don't know know if it validates, though), which raises the question of whether to bother transforming it server-side. Then again, most search engines suck at searching arbitrary XML, particularly in the absence of a schema, which might be a publisher consideration.
I'm going to spend some "quality time" reading up on XML, XSL and related technologies. The .NET Framework has a robust set of XML processing functionality which I'll continue to play with.
I pulled out of PyWeek.
I had a rough week that resulted in very little productivity (though it was fun to work on a game again), so I decided it was best to pull out. Kinda lame to pull out of a week-long competition with 35 hours left, but whatever.
It's not the end of Power for Good, though. I'm going to refine the idea and complete the code, then solicit an artist to give it the graphic treatment it deserves. In the meantime, I return to working on PMS - right after I get some sleep.
(Time to update my site's front page. Lord, what a mess!)
I'm reexamining using Web Forms for PMS, given some of the UI constraints of straight XHTML. Yes, I'd love for PMS to validate. I might be able to add that as the final step. Starting from yesterday, I have exactly 30 days to get to alpha and launch my magazine.
Wish me luck.
I'm making a nice, easy little point-and-click adventure game for PyWeek. No, it's not "nice and easy" for me to make; the objective is to make it nice and easy to play, and nearly impossible to fail at - yet still fun and engrossing.
For all of 30 minutes.
It's funny actually being on the inside of one of these competitions. All the other groups seem so frantic, busily organizing and griping over all sorts of technical issues - or moaning their lack of time/expertise/etc. Me? I'm taking it easy.
It's Monday right now, and my goal is to have the game finished and polished by Friday. Spent some time yesterday fleshing out design. Today I'll write some code to handle basic sprite and point-and-click interaction (which may involve examining some of the libraries already out there), menu navigation and UI. Tomorrow I'll do some sprites and get them into the game, then see about working on "level" design.
Read about the concept here.
As for PMS (formerly known as MetaCite), it's undergoing some refactoring to deal with the fact that a.) ASP.NET Web Forms don't produce XHTML 1.0 Strict-compliant code by default; and b.) I really don't think I want/need Web Forms, given the aesthetic constraints they impose. I'll probably talk more about that around the end of the week. In the meantime, I'll try to sneak in some reading on ASP.NET Request objects and Request handlers.
Job hunt's going great, too. Signed up at The Hired Guns, which I recommend for all would-be freelance NYC Metro Area creatives. Applied to a position they had cross-listed on Craig's List New York and got a glowing response from the "Top Gun" herself. Nice little confidence boost.
Did some work on the personal site, too, but it's still a trainwreck. Plan to launch it October 1, though, so watch for the announcement.
Metacite's going slower than expected due to interruptions, but I'm still making good progress. Good thing I decided to do the initial mock up with simple HTML and using ASP.NET in a very ASP-ish model. Having to create web controls for everything I'm trying to do right now would really suck.
Obviously, the name "Metacite" infers something about metadata, which is sort of a pet subject of mine. I want Metacite to store and generate rich metadata and make it available to publication managers in a structured way, allowing for interesting applications (even though I can't think of any yet). For now all I'm planning to do with the facility is add a didactic element to my magazine by allowing readers to peruse the creative and technical process behind every image, block of text, animation and so forth. Fully fleshed out this could lead to web resources I used for production purposes, discussions of technique, essays I've written... really tie the magazine into the rest of my site as a whole.
I'm sure there are more worthwhile uses for this, though, so I'm excited to see what emerges when Metacite goes public.
Short update tonight. I've got to get back to the code, as well as come up with an itinerary for hanging out with frizzlefry tomorrow - and get to bed early.
So I mentioned a few days ago that I was working on a project, but I've mentioned nothing about it yet. It's a software project, and I plan to hit initial alpha release this weekend if all goes well, but its roots lie in human/social problems - as with all great software (and, no, I'm not suggesting that it's great software... yet).
Why I Journal But Don't Blog
We're all familiar with blogging by now. A much-hyped phenomenon in the mainstream media these days, there's actually not much spectacular about it. John Q Public posts random comments on his life, or topical comments on his interest or profession. Occasionally, John happens to be an insightful and intelligent persion. Far too often, however, John is a blithering fool.
Blogs allow for reader comment, and the Talkback system allows blogs to link each other (and something funky about "pinging" each other; anyone care to elaborate?), creating this directed graph of interconnected commentary that goes by the popular name the blogosphere. Great.
The challenge, as a blog author, is that you have to post frequently or people will lose interest in your blog. This pressure to perform can lead to posting inanities and half-witted ruminations on nothing of consequence. Congratulations, you've just proved to the general public that you're an idiot! Fortunately, the advent of RSS and its rapid popularization mean that your blog can be updated a lot less frequently without suffering significant reader attrition, because new content is pushed to them whenever it's made available.
I also have an aesthetic objection to blogs, in that the majority of them (I have yet to find any exceptions, but I am open to the possibility) are linear reverse chronological braindumps (most recent posts first). I find the format inelegant, and the pages frequently cluttered by all the link sidebars necessary to inform the casual visitor that there is additional content. In essence, every blog I've seen looks like a personal Slashdot (and we all know how much I love Slashdot!)
But you journal!, you might say. Yes, I maintain this journal on a semi-regular basis, and, yes, it has all the flaws of blogs that I supposedly dislike. However, this journal is an outgrowth of my extensive involvement in this community - I am essentially talking to people who know me - and it covers material that I think is of topical interest to them. I try not to go too far afield from games, technology, software development and (new) media. But I have a lot of other opinions that are not appropriate for this journal, and some people have even asked me why I don't blog as they feel my opinions might actually be worth reading.
So What's the Alternative?
I wanted something that served the purpose of expressing my opinions regularly, that was accessible to a large number of people (meaning it had to be on the web and not require anything else), did not have the constant pressure to produce of an overt chronological record, and wasn't ugly. In short, I wanted a magazine.
For the record, I will discard the terms e-zine and web-zine, as I don't feel that either of them refers to the sort of thing I am trying to do. What I have in mind is more of a traditional magazine, but delivered on the web. Not as PDF or any other "layout file format," but as simple HTML employing the structural conventions of a print magazine.
It will have a cover page, which both presents a pictoral/graphical representation of the issue's theme/subject as well as highlight some of the articles contained in that issue. It will have a "From the Editor's Desk" section, where the editor in chief (me) will give an overview of the issue, framing the larger questions that run through the entire colleciton of articles. It will have a contents page, with little graphical emphases to draw your eye to various articles. Et cetera. It will be, for all intents and purposes, like reading a magazine on the web.
And, then again, it won't. The web is not high-gloss print paper. You aren't bound by physical dimensions, and while both the screen and the printed page are two-dimensional, the web adds a third dimension in the sense of hypertext links. The magazine needs to take advantage of that property, reflect the fact that, rather than being a collection of sequential pages divided into logical "sections," it is more of a bundle of discrete articles, each of which may have a number of logical sections (pages, for readability sake) of its own. It needs to understand that while its primary consumption format is the screen, the articles may also be printed - and provide alternate, appropriate formatting for that purpose.
You Are Not Your User
At this point I could have whipped up a fairly minimal content management system, or even modified one of the many open source CMSes out there, but doing so would have resulted in an application with all the baling wire exposed, so to speak. Even though I am a programmer, software developer and highly technical user, I have an art degree and the intention of going on to study Industrial Design. Put simply, I like elegant solutions that make obvious how to use them and require zero-to-minimal technical expertise. I needed to design a system that would be useful to others trying to do things similar to what I was doing, very often people with no comprehension of - or interest in learning - HTML and CSS, "simple" as they might be to hardened C++/Java/assembly hackers. So I let the idea simmer.
About two weeks ago I met with an old buddy of mine for lunch and coffee (I never drink the stuff, but he does) and just to catch up. We hadn't seen or spoken in years, so there was a lot to talk about. He runs a design and creative services firm and tried to launch a web-delivered magazine a while back, but he's still working out profitability and modalities related to the magazine, which he delivers as a PDF file because of the flexibility and control it affords him. He turned out to be the perfect person to sound my nebulous ideas off of, as his experiences of surviving contact with the real world as well as his insight into the needs of his clients would prove incredibly valuable. He talked about one client who was looking for a platform to design and deploy her own photo gallery, but who didn't want to need to know anything technical and didn't want to be hostage to contractors. Those were my potential audience!
The idea began to coalesce. I wanted a layout and publication management system with WYSIWYG editing and minimal technical overhead. Native look and feel were not necessary, this being a web application, but the roundtrip penalty of a classic web app is too high for a design-oriented app. My friend solved this by suggesting I write the editors in SWF. (SVG or Mozilla Chrome are options, but they have issues with availability and lock-in, respectively.) All the core elements were in place.
The Metacite Publication Management System
And, yes, I do find it funny that the name can be shortened as "Metacite PMS." Maybe I'll change it.
Design is a slow process, especially when usability is a (the?) major concern. At first I tried modeling the application using a variety of CASE-like tools, like UML Sequence and Interaction Diagrams or Flowcharts, but nothing was working. Then it hit me: Dummy, you're designing an app whose functionality must be intuitively expressed by the UI! Use Interface Mock-Ups! All those months of reading OK/Cancel (currently on hiatus) finally paid off.
A hierarchical task-based decomposition of the UI is nearing completion, and HTML pages with no back-end functionality, just static mock data, will be done between today and tomorrow (if I ever stop writing in my journal!) After that I can start wiring UI elements to event handlers, and Alpha Release 0.1 should be this weekend. Release Candidate 1 should be by the end of September.
The software itself is nothing highly complicated. Yet. Some of the more challenging problems such as multiple users, authentication, privileges and ownership have yet to be addressed, as they aren't really interface problems (but the interface either suggests or reflects them). That's what the interval between Alpha and RC is for. Metacite is being written in ASP.NET, with SWF components to be implemented before Release. Being an application (editor) rather than an animation, the SWF component(s) will be written directly in ActionScript, which lets me try out the open source Motion-Twin ActionScript 2 Compiler. The intention is to open source Metacite itself after release.
There are tons more details about what I want to do and put into Metacite, but I need to keep some stuff to write about later! Remember, pressure to produce...
Comments very welcome. [smile]
Culled from my stream-of-consciousness notes recorded on my phone:
Camera's still in Long Island, so Ima hafta paint pictures with my words. Dope street vibe, everyone cool. Graf peoples doing their thing on the faux-subway side panels. It's like watching a mural coalesce. Too many Ecko tees, though.
Most of the graf are just tags, but there's a few political pieces. Lots of overheard comments like "I used to mobm." Yeah, like I used to rap. This one piece is a metaphorical up yours aimed at Bloomie and City Hall, with a fat pig holding a donut (in a cop uniform, of course) standing in the middle of a trio of rats in suits, one of whom is groping Lady Justice's titty - causing her to drop her sword in shock. You'll probably find the pictures online.
Yo! Fab 5ive Freddy was here!
Cats filling books with marker art. Think autographs. Hot.
The range in age, gender, ethnicity, apparent nationality and socio-economic status of the artists - more so than the audience/spectators - is impressive. Quite a few "middle aged" folk bombing hard out there.
New York's Finest fully represented. Cops are a necessary evil, but sometimes more evil than necessary.
Cats came in white tees to get 'em graf'ed up. This one chick had people tag her arms - reminiscent of some of the more daring "Kilroy" exploits (pregnant women's bellies). Past collides with present, infusing it with meaning. (I still don't "get" Kilroy, but I can appreciate the methodology now.)
Location was right in front of Chelsea Art Museum/New Museum of Contemporary Art.
GameStop's here, in a reminder that this is a commercial event, after all.
I feel pity for the cleanup squads.
Whoa! Tag albums!
Dude starts breakin' - not seriously - when the music starts. Mural's like a collaborative/community essay. Feels right.
Evolution and co-optation: a new imaged added to an existing one changes the meaning entirely. Seeing that live was cool.
Some of the dancing is goofy, but who gives? The dude got into a huge circle and started DANCING. That's more than can be said for just about all of us.
Go Grandma! Go Grandma!
Dude in the suit! Yo, he can really break!
(For the record, this is on tarmac.)
Cool Herc, kid! Rob Raider! (New York DJs. Rob Raider is a member of The X-ecutioners, whose album Built From Scratch contained a skit in which game show contestants were asked the four fundamentals of hip-hop: DJs, b-boys, MCs and graffiti.)
Wait, there's an afterparty?
Crap. Lost some of my comments. Reconstruction follows:
At the 22nd St and 11th Ave entrance there's a sign that reads approximately "WARNING - Spray paint, markers and other graffiti paraphernalia are illegal, and anyone caught in possession is subject to fines and arrest." (It was wittier and more sarcastic than that, but I lost it when I had to take a call. Not that taking a call invalidated my notes, but that there was subsequently some input system error which caused an application restart. Ugh.)
Upper-middle class, preppy-looking dude showing his soccer jersey-wearing little son the intricacies of graf.
"Skateboarding is a crime and I am a criminal. Ghost Design Inc." - back of one of the artists' tee, as he was posing for a shoot.
Arcade Legends Asteroids cabinet! Model train... of a subway car!
That's a very immediate collection of my reactions to what I saw at the street party. No footage of the game or anything, which I think was very respectful to the art. GameStop had a truck at one end with four Xbox games - two racing and two street hoops, only one of which was playable (the other was a looping video). They also had a "GameStop" motif on one of the subway cars as if it had been stenciled in and the paint had dripped.
No, I'm not buying that either.
Overall a pretty cool event, and an interesting lateral dimension to the promotion of a game by showcasing the art that inspired it.
There's a street party for Marc Ecko's Getting Up: Contents Under Pressure today on 22nd St between 10th and 11th Aves, from noon (meaning it's already started) to 8 PM. I'll be heading down there in a bit.
I've been thinking about Getting Up, though, including the furor over its purportedly encouraging graffiti-as-vandalism (which is distinct from graffiti-as-art - rue the day when everyone has to use hyphenated disambiguations of meaning, like free-as-in-beer) and the license/permit for the street party being denied by the Mayor's office. I like Bloomberg, and I see part of the point about graffiti-as-vandalism, but I think there's a larger point that gets swept under the rug.
The classic correlation is between the amount of graffiti on the walls in a neighborhood and the level of crime and violence, suggesting that graf artists are at least an indicator of a criminal element. I think this is backwards. I think graffiti is an outlet born in economic dispair/futility. Those without aspiration (or comprehension, like middle-class teenagers in peri-urban and suburban areas) will scrawl mindless nonsense in the most accessible places - the contemporary equivalent of "Kilroy was here" (which I don't get). Those with consciousness place their tags in hard-to-reach places as a reminder that their oft-overlooked human ghetto does exist, that the world isn't the harmonious commercial symphony presented in commercials and glossy magazines and so forth.
So I'm sympathetic to Getting Up. So I'll go downtown and see what's up, and let you know what I found when I get back.
Continuing on the theme of my previous entry, it hit me while playing Cambiemos again that I'd like to do a few games on New York City. I live here and I love it here, and I want it to be better. There are problems, and I'd just like to express some of them in games - and perhaps spur creative solutions.
On July 22, 2005, the New York Police Department begain "random" searches of bags of commuters entering the Metropolitan Transportation Authority subway system, with intent to rapidly expand the searches to cover all MTA services - the Long Island Railroad, the Metro North Railroad, and so on. Many New Yorkers feel this to be a violation of their civil rights, and I'm one of them. Far more importantly, the system is a panacea - a supposedly miraculous cure-all - that simply doesn't work.
A simple game could, for example, have the player assume the duties of two NYPD cops assigned to any random subway or LIRR station and instruct the player to search commuters according to the criteria for the day - every fifth commuter, every eleventh commuter, etc. When the "shift" is complete, the game would then present the ethnic breakdown and other stats, as well as reveal whether a malicious rider indeed slipped past, the point being to illustrate the inefficacy of the system.
To make things a little more complex, the rate of commuter arrival/departure would vary with what time of day it was and what station it was, as would other demographics such as commuter age, profession and so forth. The whole process would quickly become quite absurd.
I don't have access to Flash authoring tools right now, so I'll probably go ahead and prototype this in Python+PyGame, partly as practice for PyWeek. Eventually, though, a game like this needs to be web-deployed to serve its purpose.
A hot-button issue in New York is "gentrification" and the pricing out of indegenous residents of neighborhoods, as well as the arguments made by the "other side" of "reclamation and restoration," among other things. From Bruce Ratner's proposed Brooklyn Nets stadium over the Atlantic Ave railyard (which I actually support, but mostly because I think it'd be cool to have an NBA team in Brooklyn) to the insidious redesignation of Harlem as "Upper Manhattan" by some, the issue generates quite a bit of heat.
Rather than coming down definitively on either side of the fence, this is an issue that I think needs to be shown to be complex. I haven't nailed the precise concept down yet, but it's something about managing transitions in such areas by incorporating some local character (eg grafitti-esque murals as paint schemes on residential buildings; something like the paint job on this case, blending the sensibilities of the original neighborhood with the aspirations of the new), ensuring that the elderly and poor are not disproportionately affected in the transition or otherwise just showing the possibility of thematic and aesthetic harmony. More on this as I mull it over.
In other news, I just applied to a job at Rockstar. No, not a game development position - who wants that? (Yes, I know, lots of you do. I don't.) It's an entry-level position as an "Online Marketing Research Associate." Hope I get it.
Art, one might say, is derivative.
This is not to say that a given work of art can not be original, but rather that it incorporates advances, insights, techniques - a vocabulary derived from the collective history of works that precede it. Occasionally, a work is created that distills that fact into itself (this is the appeal of Quentin Tarantino's work, generally, and specifically of Kill Bill with its homages to a plethora of cinematic genres and directorial styles, as well as iconic films within the "kung-fu" rubric), prompting much meta-discussion among academics.
Game design is no different. Virtually every designer at some point talks about favorite games, or the problem of vocabulary when not everyone has played the same games (a much smaller problem in film, since only the occasional art house job actually requires three hours, allowing your average cinephile to pack many more movies in than his gaming equivalent), et cetera. Being that I'm prepping to enter a game programming competition and that I haven't written a game in years, I decided to go "window shopping."
As mentioned previously, the competition's themes are somewhere between esoteric and existential, so I wanted games that were political, sociological or cultural commentary. I ended up at ludology.org and Water Cooler Games, where I came across a number of interesting games (on Water Cooler Games' front page at the time, there was a reaction to the IGDA's Sex in Games SIG, with links to a number of games that explore sex, sexuality and sexual attitudes, including insecurities, in quite different fashion; generally not work- or minor-safe, so no links here!)
My favorites had to be Newsgaming's September 12th, which offers commentary on the current "War on Terror" (play it and share your interpretation/reaction); and Cambiemos, a game commissioned for the Uruguay presidential elections.
Cambiemos is brilliant! It's a simple puzzle game (keep in mind that I don't speak Spanish, so I had no idea of the formal intent or rules of play) that provides a larger point about restoration, and does create quite the positive feeling about the stated goals of whatever party is behind this little gem. Whether the candidate lives up to the game remains to be seen (I believe that party won).
Cambiemos is my current chief inspiration, though the others will undoubtedly influence my design decisions as well. The tactic is simple: have the player complete a task according to straightforward rules of play (in this case, correctly place the picture tiles on the grid before time runs out), but use a combination of expository task graphics/animations and a closing animation to make a larger point (in this case, the restoration of the run-down country through working together).
I'm off to play it again.
Okay, so I'm in the PyWeek Game Programming Competition, and entries are expected to incorporate elements suggested by the theme(s) to be decided on by voting. Let's take a look at these themes and see what sorts of game designs they suggest:
Age, Agency, Amorphism, Approach, Ascent, Assemblage; Beginning, Bisection (or Trisection, or ...); Causation, Change, Circumstance, Conformity, Continuity, Convergence, Conversion; Dimensions, Direction, Distance, Distortion, Duality (or Triality, or ...), Duplication (or Triplication, or ...);
Effect, Equality, Existence, Expansion; Form; Identity, Increase, Infinity, Interaction; Life, Light, Location; Mixture, Motion, Multitude; Opening, Order, Oscillation; Period, Power, Production, Progression; Quantity; Relation, Repetition, Revolution; Size, Substitution, Superiority, Stability, Symmetry, Synchronism; Time, Transferrence, Travel; Union; Velocity, Violence.
59 themes, with the final list being whittled down to 1. Voting continues until the day before the competition, so there's no opportunity to prime yourself - and that's just the first stage of voting. Second and final round is over the 24 hours before the compo starts. That's a heck of a lot of false positives. I sorted them in alphabetical order for easier perusal and reference.
No game is built around just one theme; other thematic influences are always present to help flesh out the gameplay and lend some complexity to things. Virtually all racing games today, for example, incorporate some form of economy, such that advancement is no longer solely a function of your adeptness at the actual races, but also of your savvy in the purchase of additional vehicles that increase your race ability as well as open new race opportunities to you. Many racing games have dual forms of currency, a "respect" system that proceeds from your race performance (including sub-objectives like completing the race without a scratch or parallel objectives like completing all races placed third or higher) as well as a literal cash system based on the associated race purse. This layering of objectives and considerations can lend a game nuance when skillfully brought together, but it can also make the game seem random and haphazard if not intelligently integrated.
The PyWeek competition themes are suggestive of artistic, aesthetic or political commentary/criticism on life - on humanity, I should say, given that "Life" is one of the themes. Age, production, repetition, time, violence, equality, existence, conformity, change: considered collectively, these are recurrent motifs in our history, and perhaps that's the most logical design basis of all.
Not just history in the sense of a dry reading of events that occured in the distant past, but history as a chart, a graph of aggregate opinions, behavior; history as a tool for projecting the future. A histogra[m|ph]? How does a game introduce the notion of history? My first-stab answer is consequence. My second is causality (Causation is one of the themes, too). If you do this, that will happen - consequence. If that happens, then you will no longer be able to do the other, or you will have to do the other, or you will have to contend with the other while attempting to do the fourth. On the flip side, this is here because that happened. That happened because the other was done by so-and-so. And so forth.
How this is actually expressed in the game can take many forms, from the inherently historical process of turn-based play, to an explicit system of instituted deprivation (penalties) and availability (bonuses, power-ups) as a by-product of user decisions.
More on this later. I need to go get some work done on a few other things.
Been quite a while since I made any entries about these parts. Took a leave of absence, which was highly eventful - though in ways I wasn't expecting - and went (and continue to go) through a process of reevaluation and evolution of goals. Currently, I'm pursuing working in the media field for a few years and then heading off to grad school for an MFA in Industrial Design. In the interim I plan to shore up on prerequisites, as well as get married.
Did I mention I graduated? Yeah, done with undergrad. Free and all that. Now I need a steady gig to pay the bills. I'll probably chime in later about my personal growth and journey, but right now I actually want to talk about stuff that's of interest to the five people who might read this.
First, I have started a new project. I'm doing requirements analysis right now and I expect to hit the first alpha release by the end of August (that's in 10 days). It's to be a metadata-driven web content management and presentation platform. Unlike the plethora of CMSes out there, it is not designed to be blog- or portal-styled. It's express purpose right now is to power an e-zine, meaning I hope to have heavy stylesheets functionality built in. I call it metacite (Get it? "Site," "cite" - website, citation? Yeah, you'd have to be a language nerd...)
One of the more radical objectives, and this has until December for realization, is to provide all the functionality necessary for content layout and minimalist editing, including image effects/operations. Doing that via a web interface is extremely icky, and I'm looking at various ways to solve the roundtrip problem. Right now the leading contender is to write the editor(s) in SWF, but SVG remains an option. Chrome is also an option, but that'd tie me to Mozilla. We'll see.
In other news, I am signed up for the PyWeek Game Programming Competition, running from Sunday, August 28 to Sunday, September 4, 2005. This will be my first serious and non-instructional attempt at writing a game in over five years, and it's to be based on a set of themes that are extremely... "out there." Fortunately, I've been broadening my design sensibilities plus hanging out at GamesAreArt.com (which is where I heard about the compo originally), so I should be able to come up with something halfway decent.
Besides, I have a BA in Cinema and Cultural Studies! [smile] I figure it's about time I actually used this journal to chronicle some development, so here goes.
Right now I'm thinking I'll constrain my PyWeek entry to 2D. This has a number of reasons, including the fact that Python access to multimedia services remains somewhat iffy (yeah, yeah, dxpython, Panda3D, PyOpenGL - I know about all of them, and they all have their own challenges); content creation is expensive, particularly on such a short timeframe; I am on a severely underpowered machine right now; and that working within constraints leads one to strip away superficiality to arrive at the central aesthetic and semantic representation/experience. I want to see what I can do in stylized, physics- and simulation-driven 2D, as well as see if I can shoehorn some generative techniques in there.
Wish me luck (and, yes, I'll keep you posted).
...For a while.
I graduate in three weeks, and I plan on taking a two-month sort of ur-luddite roadtrip around the USA pretty much immediately afterwards (the months of June and July) and then going to visit my family for a month (there goes August). On the roadtrip all I plan to take is a camera, a guitar, and my trusty '92 Ford Taurus (which only needs to survive the trip), so I'm not going to be very present on GameDev.
One of my aspirations for the trip is to purge the bad habits that come with years of tertiary education's inherent madness and lack of structure (staying up most of the night, waking up late, etc). Another is to learn more guitar, and a third is to see - and tape - as much of America as I possibly can. Originally I had planned to do a sort of "GDNet Tour," meeting up with GameDev.net members along the way, but I've decided I don't like y'all that much.
When I get back from this three-month leave of absence, I'll be returning to Brooklyn to hopefully start a job as a production assistant of some sort. I'm serving as producer on a student film project right now, but I want to get much more experience in large-scale projects. I'm not a big fan of "indie" as perceived to be synonymous with "cheap, and low production values"; I believe in "indie" as a business model, and I'm interested in the use of technology, business savvy and economic tools to make competition with "Hollywood" possible on the film front. For games, I would like to see more serious, commercial indie titles that have high production values, sell well and are profitable for their creators.
As far as GameDev.net goes, I still have a lot of aspirations. I would like to see GDNet become the premier educational resource for game development in the world, providing both electronic and physical learning resources to developers of all ages and skill levels. I would like to become the Director of Media Properties, with an emphasis on the creation of learning toolkits for educational sector use (imagine GDNet-branded material as the "textbook" in schools and universities); instructional videos and online resources for all; and seminars and lectures for indies and pros.
Frankly, I don't see how I'm going to accomplish all of the above while remaining very active on the community side of this site (I average just over 9 posts a day), so I'm hoping that my roadtrip will also wean me off the GDNet forums (which, to be frank, I don't much care for anyway). I may or may not continue my journal when I return: I have quite a few projects that are likely to interest this community, so it's probable that the journal will continue in some form. Aside from that, I'll probably be moving to the "other side of the fence."
No fake pleasantries. I liked some of you and enjoyed your wit and humor. Some of you I think are idiots. All of you have contributed to my knowledge and understanding, as much of the technical as of the social and political, and all of you have impacted me in your own way. To all of you I give my thanks.
I've spent most of today playing God of War. What an incredible game! In the very first chapter you fight agains a three-headed hydra on the deck of a ship, in the midst of a stormy gale. This sense of the epic carries through the entire game (I'm just under a third of the way through it, based on the chapter outlines I've seen), as when you come to Athens and face all manner of creatures and see titans in the distance. You get to kill Medusa and use her head to temporarily turn enemies to stone!
The action is visceral and fluid, the controls are responsive, the cutscenes are a welcome respite as well as entertaining and informative... this has to be the best game I've ever played in terms of bang for buck, and considering that I bought my PStwo just for this game, that's a whole lotta bucks!
What really sets God of War apart, however, is the way minigames are integrated into core gameplay. Many of your opponents are much larger than you, and generally can not simply be killed by your blows. You have to plunge your sword into the minotaur's head, for instance, or rip off the heads of Grogons. You kill the three-headed hydra by first pinning down the two smaller heads, then bashing the big head against the ship's mast to turn it into a spike and impaling it there!
All this is accomplished by rhythm game-style "follow the on-screen icon/action" sequences. After weakening certain enemies, a button will appear over their heads. Press this button to initiate a kill sequence. In the case of minotaur, tap the circle button fast enough; with the Grogons, rotate the left analog stick like the instructions on screen.
These systems stagger rewards (each kill is a psychological reward, in addition to the power-ups that they yield) as well as break up the monotony of the primary mode of play. In addition, you interact with environmental elements and solve puzzles of acceptable difficulty, but those are never so tedious or lengthy as to let you forget that you're here for one thing only: to kill the God of War.
Now that we're done with the review, playing Jade Empire and God of War has really sent me back to the drawing board in terms of how I approach games and their design. The control mechanic does not necessarily have to directly mimic the avatar action, though it helps, and these "impulse" control inputs can be very satisfying and friendly to older gamers who are less well-versed or physically adept at furiously pounding on the buttons (I have to adopt a wierd two-handed grip to beat the "rapid press" minigames).
Minor hybridizations of input, mission and level design can yield immense improvement in the overall user experience, but is this "product mix" a subjective or experimental quantity? Can we quantify and qualify the factors at work here?
I'm getting better at Jade Empire, and even feel inclined to give KOTOR another shot. Don't know if I will yet, though; there's just too much talking in Jade Empire!
Edit: Just in ase you didn't notice, I posted the entry below this one on the same day.