Archive for April, 2007

This changes nothing

Major Arcana now runs in a window. Isn’t that neat?

Actually, it’s not – I hate games that run in windows. The very first thing I do when I download a new indie game is look for the fullscreen option – I couldn’t stand Poyo at first because I thought there was no fullscreen mode (there is, as it turns out. Bloody F4 of all keys). Bah! Games want to be played fullscreen!

However, I seem to be in a minority on this. And what the hell, it’s handy for coding. So I added a windowed mode.

I haven’t gotten the whole windowed thing down yet, though – I’ve got the close button working all right – Allegro has a little callback function to take care of it. And the alt-enter thing to switch to fullscreen was easy too, just a couple of lines in the input handler:

  //Fullscreen check
  if((key[KEY_ALT]||key[KEY_ALTGR])&&key[KEY_ENTER]){
    if(fullscreen){
      set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0);
    }else{
      set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
    }
    fullscreen=(fullscreen==false);
    while(key[KEY_ENTER]);
  }

(Hmm. Not sure why I pasted that… At least it fills out this painfully thin update!)

There are two little things I still haven’t worked out:

(1) The Maximise Button: This is probably dead easy, but I haven’t got a clue about Windows GUI stuff and Allegro doesn’t come with a helper function on this one. Google hasn’t been much help, but I’m probably just using the wrong search queries.

(2) Alt-Tab: When you switch away from the window, the music starts skipping over the last couple of seconds, like a CD with a scratch. I want the engine to simply pause the music when you change the window, but I haven’t worked out how to capture that event yet.

(Man, I really wish I’d bothered to learn some basic windows programming at some point…)

Well, whatever. If I actually had a list of priorities for this game, this wouldn’t even be on it. If you’re the kinda person who plays a console style RPG in a window, then maybe you deserve to have your music skip on you. Bah!

Incidentally, I also did some actual coding during the week, but I want to wait until what I’ve done is fully implemented before I say anything about it! :)

* 1 Comment

Move over “Irritating Stick”, we have a winner

There’s a game Kotaku have mentioned a few times now that’s piqued my interest. It’s a cartoon JRPG set to classical music by Chopin. As far as I can see, it appears to be about terminally ill kids who go to a fantasy world where they have magical powers to heal people. It’s called Eternal Sonata. (At the very least, that’s what they’re calling it here. In Japan, it’s called Trusty Bell of all things.)

There’s obviously a lot to like here – I love the whole concept behind the game, and the quirky bits I can see in the trailer (using an umbrella as a weapon? Fantastic!), and the fact that it’s not by Squaresoft (who’ve basically lost all credibility in my eyes at this stage). Still, I’ve got a horrible feeling that they’re going to make a mess of it. And I’m not just talking about that stupid giant wombat thing from the combat. I just half expect to discover that when it’s released that, oh, I dunno… that the English voice-acting’s been done by some awful C-Movie American actors who can barely read (like in Silent Hill), or that it’s badly translated and said bad actors actually say things like “For great justice!” (like in Silent Hill) or the whole game is a series of slime killing quests with progressively bigger slimes or… well, I don’t know. I just have a bad feeling about it. I’m not sure when I got so cynical about what used to be my favourite genre.

Well, right now it’s looking pretty neat. Pity I don’t have an Xbox 360 or have any plans to get one.

* 12 Comments

“Crime,” declared the police captain, “is everywhere, crime, crime!”

Yeah. Sorry I haven’t updated in a while. I’m just not really in the bloging mood – I’m sure any of ye out there with websites can relate :)

I’m still working on the game. Don’t think I’ll make the April deadline though.

* 2 Comments

Trials and Tribulations

In my humble opinion, Phoenix Wright is shaping up to be the best commercial game series since Final Fantasy. Both games one and two were exceptional – and from what I’ve played of the third one, I think it could potentially be the best of the lot.

* Post a Comment

On Negative Criticism of Final Fantasy VII

Today I came across an interesting review of Final Fantasy VII. I totally disagree with it, but it’s pretty funny, very well written and absolutely worth reading – here’s an example of what to expect:

“The main character is a loathsome emoling with a stupid sword and stupider hair. He is torn between his childhood friend Tits and his newfound love, Aeris Dies.”

I’m a huge fan of Final Fantasy VII, but the game’s getting quite hard to defend as time goes on, as Square-Enix lose more and more dignity with each passing spinoff. Negative criticism of this game is something I’ve been meaning to get my thoughts together on for a very long time now, since it’s one of the games that’s had the biggest effect on me.

My defence of the game comes down to simply this, I think:

If you look at the big picture stuff – the blocky, dated graphics, the dodgy translation, the game’s interminable length, the repetitiveness of the battle system… well, I suppose you could concede that the critics are on to something.

But I like the game in spite of these things. Not for all the big things that it messes up, but for all the little things that it does better than anything else. My favourite scene in FFVII isn’t the one where Aeris dies, or the date scene or any of the other big famous set pieces – it’s that quickly forgotten bit when you get the black materia after completing the temple, where you lose control of Cloud.

In this scene, Cloud pins Aeris to the ground and beats the living daylights out of her. You control a little transparent version of Cloud as a kid. All you can do is talk to your grown up self and say things like “Stop!”, “No! Please stop!”.

It’s a pretty simple scene, really, but it had a big effect on me. For a start, the camera’s zoomed way out, so I wasn’t sure if I’d seen what I thought I’d seen. It got me thinking about other fundamental ways you could play about how the player interacts with the game.

Hell, this is the game that made me take games seriously.

(I later learned that the camera work in this scene is something of a Japanese standard – in western films, the viewer gets in close on the action. Japanese films, apparently, do the opposite. To create tension, they zoom out.)

The game is peppered with little scenes like this, little moments where it seems to transcend the limitations expected of games. They’re not all as dramatic as that example – the game’s held together with little atmospheric rooms here and there, occasionally witty lines of dialogue from characters that gradually become very likeable, and an intriguing story that isn’t nearly as complicated as it’s often accused of being. Part of the problem, I think, is that if you play Final Fantasy VII expecting it to be the best game ever, you might miss that sorta thing for all the “You used to be in SOLDIER all right!” lines.

* 2 Comments

More uncensored behind the scenes action

I got another evening in at Major Arcana. When I actually sat down to it, I didn’t really feel like scripting. So instead I did some much needed engine work. It turns out I’m in a programming mood at the moment.

Although the engine names each NPC for the purpose of calling their scripts, the actual scripts refer to the NPCs by number. This was getting pretty cumbersome, so I rewrote some of the commands to deal with npc names rather than numbers. I also added a few commands to group NPCs with identical names, so instead of, for example, initialising 15 doors as invisible, walkable NPCs, I can just call one command to initialise all the NPCs with the scriptname “door” the way I want them.

Essentially, the changes mean that the blocks of script like the following have changed from …

npc init{
  npcinit(0/-1/0/1/1);  #Gladius's Head;
  npcinit(1/-1/0/0/0);  #Chest;
  npcinit(2/-1/0/0/0);  #Chest;
  npcinit(3/-1/0/0/0);  #Lights;
  npcinit(4/-1/0/0/0);  #Lights;
  npcinit(5/-1/0/0/0);  #Lights;
  npcinit(6/-1/0/0/0);  #Lights;
  npcinit(7/-1/0/1/1);  #Door;
  npcinit(8/-1/0/1/1);  #Door;
  dir(up/1);
  music(0);
}

… to the considerably more manageable …

npc init{
  hide(Gladius_Head);
  npcinitall(Chest/-1/0/0/0);
  npcinitall(Lights/-1/0/0/0);
  hideall(door);
  dir(up/Gladius_Head);
  music(0);
}

This was even more ridiculous on some of Crystalus’s maps, which have about twenty “door” npcs each.

Here’s a full list of the command changes, just for fun. When I get a chance I’ll change the rest of the scripting engine to behave the same way.

npcinit(npc/appearance/movement/activation/passibility);
Previously NPCs had to be numbered relative to partysize
(i.e. if there were four NPCs active in the party, then
npcinit(0/x/x/x/x) would initialise the 5th NPC.
hide(npc);
This is a new shortcut for npcinit(npc/-1/0/1/1), which
every door uses. i.e. invisible, activated when stood on,
can walk over.
dir(direction/npc);
Now supports scriptnames as well as numbers.
dir(left/Stella) will tell the NPC with the scriptname
"Stella" to face left, for example.
appearance(spritenum/npc);
Like dir, alters an NPC's appearance, and now supports
scriptnames.
scriptholder(npc);
The "scriptholder" is the currently active NPC. This would
be redundant if I redesigned all the commands to deal
with a given NPC instead. For now, I'm changing the
scriptholder whenever I want to move an NPC.
speaker(npc);
The "speaker" is the currently talking NPC, used to
position textboxes. It's particularly useful to be able
to just go speaker(Crystalus) rather than having
to do speaker(0) or whatever.
npcinitall(npc/appearance/movement/activation/passibility);
Like npcinit, only it deals with all NPCs with the
given scriptname, allowing me to initialise multiple
NPCs at once.
hideall(npc);
Like hide, only dealing with multiple NPCs. Makes it
dead easy to initialise all doors with one fell swoop,
as they say.

Hmm. Well, that was pointless. It makes my job a bit easier, I suppose, but it’s something that the player will never see or appreciate. The engine suffers from a lot of that, to be honest – if I’d only taken more shortcuts, I might actually have a compete game at this point… :(

By the way, if you came here through the frontpage (which you really should do as this is a website not a blog and if you skip the frontpage you’re going miss stuff like when I add actual content and then you’ll be sorry) you might have noticed that the whole thing’s running off wordpress now. Thanks, DeveloperX!

* 4 Comments

First I did this, then I did this, and then I did this

This new pace really suits the project. I’ve only scripted about a minute’s worth of dialogue in total since I resumed the project on Saturday, but the bit I have done is far better than anything from the contest demo. I can’t believe I was originally planning to do all the scripting in a couple of days! What was I thinking?

I took a big shortcut for the contest in an attempt to get what I could out in time – instead of adding a proper object management system to the map editor, I just hardcoded the object definitions into the map files. It wasn’t a big deal to do that for Gladius’s level, but it would have been to do the same for Crystalus’s level, since her level has big open spaces and each edge needs an NPC to link the maps.

So I went ahead and added object support to the map editor.

I don’t know why I thought it was going to take me ages – this only took me about half an hour to implement. It’s made adding objects to each map a hell of a lot easier.

I’m taking my time with the scripting now. My immediate goal is to finish Crystalus’s level, just to have something more to the game than the contest content. I’ll make a proper plan after that’s done.

* 4 Comments

Ads for The Legend of Zelda

It turns out that Zelda ads are the greatest things ever.

* Post a Comment

Apparently “Double Damn” was a pretty hardcore swear word in the fifties

That little break lasted longer than I’d meant it to.

Well, no matter.

I’ve resumed working on Major Arcana. Right now, my plan is to have the full demo out by the end of this month. I should know at that point if the game has enough potential to justify my working on it any longer.

I’ll write more about my actual plans next week: this is just an announcement, really. For your information, and all that.

Oh, by the way – did you know there’s a forum on this site? It won’t be there for much longer – when I was setting up this website initially, I had the bright idea that I’d use a copy of PHPBB as the backend for the site, and edit some posts when I wanted to change the pages. Sorta like what Abstract Productions used to have set up.

Well, it basically works (I update the summary on the frontpage by editing a post in the forums), but I think it’s probably not an ideal way to handle things. I could probably do something similar and better with wordpress, but I haven’t been able to get it to work yet. Basically, I’ll looking for a magic piece of PHP code that’ll let me grab the body of a post and print it out into the index file. Check out this thread I posted on the wordpress support forums to see how far I got – if you’ve got any ideas on what to do, let me know, because I think I’m very close to a solution

* 7 Comments