Swimfail, and the Major Arcana Soundtrack

Josiah Tobin‘s posting again, and he has something of an announcement. He’s selling his “Self-Centered Tales From The Project That Failed” album for $10 CAD on his site.

You can download it for free if you want, but do support him if you can, I’m sure he’ll appreciate it 🙂 If you haven’t heard it yet, here’s a sample (and one of my favourite tracks from the album):

Greyhound:

This seems like a good opportunity to post about something that’s long overdue – in February of last year Josiah composed the soundtrack to my tarot card inspired RPG Major Arcana. I never managed to release much more than a very basic demo, and at this point the project is well and truly on the long finger. I don’t know when or if I’ll ever return to working on Major Arcana, but it’s about time people heard its excellent soundtrack!

I guess I’m a little biased, but I think it’s awesome – especially considering that most of it was created in less than two weeks. I still have the tracks on my MP3 player to this day to listen to from time to time.

You can download all seven tracks in one 30Mb zip file here, or alternatively listen to them streaming on this page!

Hiding From the Clouds:
(Download, 3Mb)
Vol (Original):
(Download, 5.3Mb)
Vol (Battle Theme):
(Download, 2.9Mb)

(This is the same song as before, sped up and used as a battle theme in the demo.)
Callous:
(Download, 5.6Mb)
Valley:
(Download, 3Mb)
Trappers:
(Download, 3.6Mb)
Paper:
(Download, 3.2Mb)
Peril:
(Download, 3.8Mb)
2 Comments

This changes nothing

Posted in major arcana

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 Comments

More uncensored behind the scenes action

Posted in major arcana

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

Posted in major arcana

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

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

Posted in major arcana

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

Now what?

Now that I don’t have to worry about the contest, I’m taking a short break from all things game development. It’ll give me a little time to regroup my ideas for the demo, which I’m hoping will be ready in another month (after all, the content *is* there – it’s just a matter of putting it together).

I tried to make a plausible connection between that infodump and this YouTube video, but failed miserably. I just really enjoyed this video and wanted to share it.

0 Comments

Major Arcana: Contest Prototype

Posted in major arcana

When I uploaded this last night, I was totally exhausted. I’m not entirely happy with the game as it currently stands (to put it delicately), and I’d love to shrug it off and say something like “Well, it’s not like I worked that hard at it” – but of course, that would be a complete lie. I’ve actually, effectively, been working two jobs. I work nine to five at my day job, grab dinner in town, then head to the library till closing time. I barely have time to do anything else. And I’ve been doing this all year.

So why do I have so little to show for it?

Well, it’s pretty simple – I totally underestimated how much work was involved in scripting the game. I’d finished the graphics, I’d designed the maps, Josiah had finished the soundtrack, I’d even written most of the dialogue – but I hadn’t put it all together. Doing this took me a lot longer than I thought it would, so while I’ve created a good deal of content, I’ve scripted very little of it.

Putting it together highlighted a lot of problems. In particular, here’s what I wish I had more time to work on:

Gladius as a character: Here’s how the Tarot Cards are laid out: you’ve got the Major Arcana, which are symbolic cards representing big, life changing things, and you’ve got the Minor Arcana, representing small, day to day things. The Minor Arcana is closely related to the regular deck of playing cards most people are familiar with today – there are four suits, in each suit there are ten regular numbered cards, then there are four court cards (the Page, the Knight, the Queen and the King).

In my game, there are four main characters, and each one associates with a suit on the Minor Arcana – Swords, Pentacles, Cups and Wands. Gladius is Swords, the suit that’s usually associated with the intellectual side of life – rational thinking, cold hard logic.

In the demo, I was hoping that Gladius would find himself thrown in this odd situation, not knowing where he is or what’s really happening. Being the kind of guy who he is, he tries to reason everything out, and work out what’s going on. He sees a Magic Light: that presents him with a number of hypothesis to consider. He fights a wolf in the next room: that eliminates one of the possibilities.

Thing is, thanks to my “inane last minute dialogue” (as I put it last night), that doesn’t really come across. Gladius sounds like he’s the shallow second person in an average text adventure.

I’m not entirely sure how I’m going to approach this problem in the full game, but I wish I didn’t have to rush my approach for this contest version.

The Page dialogue: This whole scene is just awful – it’s about five times longer than it needs to be, and everything that’s said is… I dunno, teeth-grinding-ly atrocious to listen to.

The problem here is really in how I approached the scene when I was writing it – I had an objective to meet. By the end of this exchange, I wanted Gladius to find out where he was, find out who he was talking to, and agree to let him tag along. Problem is, Gladius’s personality actually worked in this scene. Being the highly sceptical guy he is, he wasn’t buying any of that fate crap. He even throws ridicule on the whole concept of the scene as being impossible (the page is locked in a room with a group of wolves? How on earth did that happen?).

I didn’t really mean for Gladius to bring attention to it, but as soon as I’d thought of it I knew it was the kind of thing that he’d ask about, which led to some forced, awkward, throughally detestable dialogue.

I’m going to scrap this scene in the final version and do something completely different.

The battle engine: Well, this is pretty simple really. The framework’s all there, but I didn’t have time to make it work for the demo. I just attached the testing thing I have going on as a proof of concept, really.

The bugs: Of course, loads and loads of brand new bugs surfaced on the last day, and I could only fix so many of them. Some of the more interesting ones you might come across:
– Depending on how many times you’re hit at zero HP, you might find item locations totally randomised. If you appear to be blocked by something you can’t see, try hitting X. Chances are it’s an NPC that’s gotten it’s position mixed up.
– Directions can get permanently mixed up, and I haven’t been able to work out why. In the main room with the four doors, you could (if you’re unlucky, I don’t know why it’s happening) find that you’re forced to face either right or down for the remainder of the game. Ultraweird – there isn’t even a function in the game to lock npc directions.
– You can jump. I probably should have just disabled that. If you do happen to find the jump button, I wouldn’t use it – you could find yourself stuck in a wall or on top of an NPC. (That’s actually been a problem all the way back since I first implemented jumping in the engine a couple of years ago.)
– You can’t die in combat. Oops.

Ok, enough of that. I flipped a coin to decide if I was going to go ahead and upload this. I lost, so here it is.

[Now that the contest is over, I’ve taken down the demo.]

Believe me, it’s not easy presenting something that you’ve worked hard on to an open community like this. It’s even worse when it’s something you’re not happy with. Keep in mind that this is an early prototype, and it will get better.

10 Comments

Last Day: Should be any moment now

Posted in major arcana

For the past few hours I’ve been working on Gladius’s section of the game. This is about one fifth of the demo I was planning to release earlier last week, which is, in turn, about one fifth of the content I was hoping to have finished for the demo originally. Which, by the way, is about one fifth of the content I have in mind for the entire game. Funny how these things work out.

0 Comments