Day 1

Posted in major arcana

I knew I’d regret saying that I was going to update on each day of the contest.

With work today dragging on for an extra two hours thanks to month end, when I finally got back to the house I didn’t really feel like working on anything. So I didn’t.

1 Comments

Lilith’s Enticement begins tomorrow

Posted in major arcana

The new RPGDX contest has been finalised, and starts tomorrow.

Lilith’s Enticement
Timespan: February 1st – March 1st
Theme: Gothic/Horror
Premade graphics and music and not allowed (you have a month!)

To keep myself from slacking off and not finishing, I’m going to update this website every day while the contest is taking place, with an update on what I’ve managed to do.

Unfortunately, I expect I’ll have something of a slow start, seeing as I’m working for the rest of the week. By next monday, though, I hope to have a lot of the basic preperation and planning done. At that point I’ll have two whole weeks with nothing to do but make this game, so I’d better not squander it…

0 Comments

Within a Deep Forest 2

Though this site is probably the last place anyone would go for indie-gaming news, a couple of weeks ago I mentioned the excellent Within a Deep Forest on this blog – so I thought I should mention this little piece of news here.


One of the game’s puzzles

It looks like the sequel, Within a Deep Forest 2, has been cancelled. However, there is a rather nifty preview available, showing four potential new levels, and all the new ball types. There’s one that sticks to walls, there’s another that hovers, another slows down dramatically when you press “A”. Plus the game looks really pretty, still managing to capture it’s old atmosphere, even without the awesome soundtrack to accompany it.

Check it out here.

Regarding my own projects, I’ve decided to take half of my annual holidays at work consecutivly in the month of February. No doubt I’ll regret this in a few months time when I’m knackered and losing my sanity. From Saturday the 3rd until Sunday the 18th, I’m going to be working full time at Major Arcana.

2 Comments

I don’t understand – there’s only supposed to be one in each pack!

So the other day I said something a little outrageous – “this year I’ve gotten more done on the engine than I did in all of last year. That is, believe it or not, completely true, but only because last year was so unproductive.

Basically, because of my finals, I spent the first half of the year doing nothing more than scribbling down ideas and making short, guilty additions to the engine. I was literally counting the days until I could put my last exam behind me as start working on a new RPG. And then, of course, I got writer’s block.

I spent the rest of the year hating everything I tried to put together. I couldn’t program, couldn’t write any music, couldn’t draw a pixel that didn’t look strangely out of place, couldn’t come up with a single line of dialogue that I didn’t hate. In fact, all I have to show for my hobby in 2006 is a crummy GBA remake of a game that wasn’t any good in the first place.

Finally, thankfully, this creative drought appears to be at an end, though I’m terrified that things are going to go back to the way they were. That’s why for the last couple of weeks I’ve been spending practically every minute of free time I’ve had working on the game.

One thing I’ve been thinking about is whether or not I should to scrap the old “Project Distraction” engine that I’ve been working on since my second year in college. On the one hand, it’s the most sophisticated program I’ve ever designed. On the other, I hadn’t worked with it for about a year, and a lot of the early code is really awful. That in itself is a perfectly good reason for a complete rewrite.

I gave it serious consideration – hell, I even made a start at a new RPG engine. Eventually I just sat back and had a look at the engine I’d been working on, and decided that it would be a huge mistake to walk away from it. The engine can do some pretty nifty things – you can edit maps from within the core engine just by hitting F1, for example. The scripting engine is pretty powerful too – it currently understands about 50 commands, and supports things like variables and conversation trees, as well as supporting a simple cutscene engine. On top of that, I’ve got the whole puzzle mechanics thing. All NPCs are treated identically by the engine, and can jump, be pushed around, and stacked on top of each other. It would be pretty silly to scrap all that work, I think, just for the sake of tidier code.

Over the last few weeks I’ve been working on the battle engine. I have something in place that I’m calling the Battle participant system. All NPCs are treated the same in battle, so whether an NPC is an ally or an enemy simply depends on whether a boolean is set. It also supports alliances and different opposing parties, so three groups of heroes can be set up to be hostile to each other if necessary.

It’s all managed thanks to a simple “target” class, that works out an array of targetable NPCs given their designation. For example, say an enemy is using a spell that affects all allys – then the target set is just the NPCs that are in party 1. Or if the caster is using a heal spell that just works on himself, the target set simply contains the caster. The class assigns the set by checking the context, and everything else automagically takes care of itself.

The thing is, I won’t be making any use of this cool functionality. Over the last week or so, I’ve had an idea for a new game for RPGDX’s contest that’s dead simple by comparison to anything I’ve been working on. It’s room by room, FF style battles, and no real complications except a slightly ambitious skill system. The working title, for now, is Major Arcana.

The theme for the RPGDX contest looks like it’s going to be “Gothic”, which is fine by me. Something I’ve wanted to do for a while now is make a simple RPG that uses FFVIII’s junction system. I’ve always thought that it was a really cool system, that just didn’t quite work as well as it should have. The only real problem with it is that in order to be any way powerful, you need to max out the spells you have, which involves looking for weak enemies and drawing as much magic as you can. Of course, if you don’t do this, you’re quite weak by the end of the game, and you’re basically relying on summons to get you through battles.

There are a lot of different approaches that they could have tried, I think, ranging from simple solutions like having the quantity of the spell involved not effect the power of the junction, to more complicated solutions like having a draw fill up your stock of a certain spell, but having more powerful spells have lower stocks. (i.e. you could get 100 Fire spells, but only 10 Ultima spells).

Anyway, this approach led me to thinking about what kind of creatures I would use as Guardian Forces – and I decided on the Tarot cards. In this game, you will encounter all the creatures along the major arcana and fight against them. And if you win? You get to junction them! I haven’t decided yet what abilities you get if you junction Death, heh.

This lends itself quite easily to a good fantasy story – I’m thinking that one of the cards (probably the Magician, or maybe the Emperor) was once a powerful ruler who “enslaved” all these creatures in this form. At the start of the game, something happens to release these creatures, and it’s up to the heroes to track down the cards and save the world. (And get the girl, obviously).

I hadn’t planned on making much of a story beyond that, but the imagery in the cards has been quite inspirational. Mirroring the Final Fantasy tradition that I’m aspiring to, I’m going to have four characters, each of them represented by the suits of the Tarot’s minor arcana – Wands, Cups, Swords and Pentacles. I bought a deck of tarot cards, and I’ve been using them to help me design areas, group major arcana creatures and come up with a backstory for each of the characters, which has been a lot of fun, heh.

Where I go from here, I’m not sure. Although I’m eager to start, since it’s an entry to the RPGDX competition, I’m constrained by the rules of that contest. It may not officially start until the end of February – or they might forbid me from working on the graphics or battle engine before the start date. If that’s the case, I might just forget about the contest and get to work right away.

6 Comments

RPGDX Contest

RPGDX is currently discussing the possibility of holding a new RPG contest, something they haven’t done in well over a year. You can find the details in this thread. If you’re not already a member of RPGDX, I encourage you to join in. It’s quite a neat little community. If you can’t program, you might find a programmer looking to take on a writer.

I’ve been doing phenomenal work on my RPG engine this week. In fact, this year I’ve gotten more done on the engine than I did in all of last year. It’s amazing. I wanted to make a big post this weekend talking about it, but I’m not ready just yet. Watch this space, though.

1 Comments

Seriously, go play Phoenix Wright already.

The other day I posted a list of things I’d need to do to the distraction engine to have it cope with my new miniRPG, and I casually mentioned “Finish the battle engine” as something silly that still needed to be finished in the next few days. I guess I wasn’t thinking straight. I’ve haven’t mucked around with the code in this thing for about six months now, so I had no idea how much work was going to be involved. It seems there are some major gaps in my assessment of the situation…

So I had a look through the code, and worked out where I stand, and exactly what I need. Here’s what I have at the moment:

– When the “battlemode” flag is enabled, I start an ATB system, where the turns of players are queued up.
– Each action has a name. On a player’s turn, the action associated with the hero’s name is automatically called. (e.g. on Squall’s turn, the action “Squall” is called automatically.)

Each action has a type, with a couple of variables – “size”, “cost”, and a generic array called “link”. The current implemented types are:

LIST
Default for selections. Specifify “size” as the number of elements, link[0], link[1] etc are the actions to call (by name).

HERO_LIST
As list, except the hero’s name is shoved in front of it, so that when player1 selects “Attack” and player2 selects “Attack”, they do different things, because the engine acts like you’ve selected “Player1_Attack”.

SKILL_LIST
As list, except you also specify a “cost” for each link, and this is displayed beside the action, along with the SP.

ACT
So far, this doesn’t really do anything. It calls a routine which processes a basic script that’s coded into the links of the action. This scripting language supports the following commands, so far:
end” – destorys all textboxes, and continues with the ATB.
damage” – so far, it adds “floating” damage to the caster, displaying the floating text with it.
wait” – waits a given number of frames
link” – runs the next action in the queue.

To clarify, here’s how that structure currently looks with the variables hardcoded into the engine:


void init_stats(characterclass *heros, characterclass *enemies, actions *action){
  //This is a temporary routine - eventually, everything will be inputted
  //externally.
  
  heros[0].name = "Remy";
  heros[0].strength = 14;  heros[0].defence = 10;
  heros[0].intelligence = 27;  heros[0].speed = 15;
  heros[0].limit = 0;  heros[0].time = 0;
  heros[0].hp = 9999; heros[0].maxhp=9999;
  heros[0].sp = 30; heros[0].maxsp=30;
  heros[0].action = heros[0].name+"_default";
  
  //Every inital action will have to be a list - unless the character is
  //beserked or fighting with the enemy or something.
  numactions=7;
  action[0].name="Remy_default";
  action[0].type=HERO_LIST;
  action[0].size=3;
  action[0].link[0]="Attack";
  action[0].link[1]="Skills";
  action[0].link[2]="Item";
  
  action[3].name="Remy_Attack";
  action[3].type=ACT;
  action[3].size=3;
  action[3].link[0]="damage";
  action[3].link[1]="120";
  action[3].link[2]="end";
  
  action[4].name="Remy_Skills";
  action[4].type=SKILL_LIST;
  action[4].size=10;
  action[4].link[0]="Skills"; 
  action[4].link[1]="Smash"; action[4].cost[1] = 30;
  action[4].link[2]="Hyper"; action[4].cost[2] = 25;
  action[4].link[3]="Trip"; action[4].cost[3] = 20;
  action[4].link[4]="Bomb"; action[4].cost[4] = 15;
  action[4].link[5]="Double"; action[4].cost[5] = 10;
  action[4].link[6]="Refresh"; action[4].cost[6] = 15;
  action[4].link[7]="Protect"; action[4].cost[7] = 20;
  action[4].link[8]="Meditate"; action[4].cost[8] = 20;
  action[4].link[9]="Focus"; action[4].cost[9] = 10;
}      
   

So… I guess this is where I need to go from here:

– Add more actions and list types (e.g. Inventory support, Limit breaks).
– Expand the ACT action to do something more useful, i.e.
* draw battle animations, (need to think about this one)
* deal actual damage
* turn status effects on and off
* trigger sound effects
– After that, I need to add enemies to the mix
– Then, mortality. What happens when everyone dies? What happens if you kill all the enemies?
– Leveling up, I guess, is next. Should probably be handled in a generic way, i.e. all enemies carry a certain about of stuff, including XP points.
– When I get that far, the next step is to have the heros walk about, get into a fight, finish the fight, and walk on. when I’ve done that, the basics of the battle engine will be complete.

I’ve also been reading up on A* Pathfinding. I’m pretty sure I understand how it works, but it’s going to take me a few days on top of the battle engine to implement… I think it’s a good idea to implement it, as it’ll make a lot of things down the line much simpler – but I couldn’t help nagging myself while reading about it. I should really be making a game, not coding an engine.

0 Comments