So these gameplay movies of the new FF:Revenant Wings for DS came out: Link

The reason it’s worth noting is primarily because of the pacing. It is an action tactics game, so based off of the same gameplay as FFXII. In making a semi-real time (’real time RPG’ just sounds so dirty and so irrevocably Star Ocean 3 / Diablo / Final Fantasy Adventure any other PS1/PS2 RPG that eschews ‘choice’ or even ‘reaction’ for plain and simple ‘action’ (X button to slash) that I refuse to use the term with the ’semi-’) game, one of my primary concerns was the appearance of the pacing.

The concern is that players are not used to and will not welcome a game that they feel is moving too slowly. There is a visceral joy in fast paced combat that draws in even the non-RPG otaku into a game (this is why this formula rose to the top), and the truly calculated turn-based game has a love amongst the civilization / wargaming fanatic who wouldn’t be adverse to the idea of Play By Email. So the question is whether the middle ground would have any supporters or would it a traitor to both camps. These clips of Revenant Wings, even though the gameplay is fundamentally still FFXII (don’t know how much pausing and wait mode come into effect - the reason I can enjoy FFXII), the appearance of a slower pace (even if by accident due to the number of pixels/percent that enemies can even be ‘visible’ at for the characters to still be of a discernable size) makes some of my fears subside.

Ok so simple demo:

  • Login
  • Character Select (names will be replaced with ‘mid level zoom’ infoblocks… on click, they will go to ’sidebar’ for verification and a blurred version of the map where you were (stored as a screen shot from last game) will load on the left)
  • Chat Panes demo (forced ‘receive’ messages are moving the tabs around)
  • Character InfoZoom demo

There’s still a lot wrong with the transition code… Adobe did not make it easy, and it seems every possible method I try doesn’t work re: the black and the label text in the character select. I’ll figure it out eventually.

Demo Here (requires flash 9)

Concept

  • One or more characters per player face off against one or more additional sides.
  • Simple real time (movement has a cost and is locked during actions) combat.
  • Characters are chosen from 4 basic classes
  • Combat continues until only characters from one side are left, this side is victorious
  • Movement occurs over a 2D plane (X,Y)
  • Ranges are in vector distances (radius circle)
  • Attributes are 1 to 10 in dots
  • Physical attacks are soaked by physical defense, Magic attacks by magic defense
  • Each ‘dot’ in Defense reduces damage by 10%
  • Each ‘dot’ in Attack causes 3 Damage
  • All Characters have 100 Hit Points
  • Each character has a special ability that can be used when at full ‘charge’
  • Charge returns for each point of damage taken (2x) or given
  • Special Abilities all effect a radius around the character

Character Classes

  • Knight - Melee Defender
    • Physical Melee Attack - 3
    • Physical Defense - 5
    • Special Ability - Allies soak 30% of all damage (after defense) for 5 seconds
  • Painter - Ranged Nuker
    • Magical Ranged Attack - 4
    • Magical Defense - 2
    • Special Ability - Damages Enemies for 25 damage
  • Monk - Healer
    • Magical Melee Attack - 2
    • Physical Defense - 2
    • Magical Defense - 2
    • Special Ability - Allies are healed of 50 hit points of damage
  • Scholar - Ranged Buffer
    • Ranged Melee Attack - 3
    • Magical Defense - 5
    • Special Ability - Allies’ Attack is increased by 3 for 5 seconds

Further Ideas

  • Experience is gained from victory
  • Experience may be used to purchase minor upgrades
  • ‘Combo’ special based on combinations of units included
    • 2 Healers can resurrect a unit
    • Mage + Scholar: Ranged AoE attack that damages and decreases magic defense

PoxNora looks to be a very good conceptual competitor written in Java.

We are not going to be able to take relay message outside of game server very easily for several reasons:

  1. Game server level information associating character/player ids with sockets to preform a relay
  2. Relaying is an input only event. We receive input messages and send them to a different source.
  3. Routing and multi-casting needs to be done and this is also game server level information

I propose we keep it where it is but expand it to work on all messages that have a destination rather this be a character or a channel. We can simply look for the presence of a dst field in the input message (if just client to server there should be no dst the client just write the message down the socket) or if there is a chan field defined. These two conditions tell us the client wishes to relay this message to some other client on the server. I can think of a couple ways to implement this:

  • Have the server check if dst and chan exist in the message if so run RelayMessage on it. Then if you want to filter by command have it check if that command has relay perms.
  • Keep the structure much like it is and add explict calls in each cmd_X() to RelayMessage this way would be quicker but take up a bit more code bulk. This is of course its disadvantage it is not as flexible and needs to be rigidly defined.

Great link on creating Design Docs

Introversion (developer of Darwinia, Uplink, etc) has a new game in the work called Subversion. Subversion’s development is being blogged on their website. They make some great arguments for procedural generation for indie developers.

Got a new class, JSONSocket to work last night, along with the MessageEvent helper event.

Basically:

var sock:JSONSocket = new JSONSocket(”localhost”,8500);
sock.addEventListener(MessageEvent.MESSAGE,msghandler);
sock.writeJSON({ type: ‘login’, name: ‘oizys’, auth: authstring });

function msghandler(e:MessageEvent):void { trace(e.message.text); }

I’m going to further abstract it to a GameSocket class and tail some message-specific code off of it, and a smarter Event registration, but then we’re ready to roll.

I recently purchased this book: ActionScript 3 Cookbook and it’s been an awesome investment. Since so much of AS3 is still badly documented/exampled, this has been a livesaver on some things. The book agrees with me that Flash’s startDrag() and stopDrag() are fundamentally broken, and provides a simple replacement that I’m going to base my code on.

I’ve started doing some widget coding since flash could definitely use some of these. The last example (the color picker) uses a RibbonWidget (basically something that updates or triggers on first mouse down or anytime mouse is down while you’re over it).
It has to use my MouseState utility class which I had to write (along with KeyboardState and KeyboardMap). It’s truly a travesty that I have to write these at all, but AS3 seems to turn a deaf eye to stateful programming in favor of completely loopy event-only coding. Using those singleton classes as a base instead of Keyboard and Mouse in AS3, I can treat them as button matrixes and just poll them at event time to see what their state is.

I’ve got a lot of new year’s resolutions surrounding Gemini, so I’ll definitely be posting more often.


All super accurate, but some speed sacrifices for this. Going to try to make one that sacrifices the other way, and a couple other types.

« Previous PageNext Page »