Jason Liang
Arcane
I've been thinking about making an online rpg for many years and recently I've been inspired to actually work on it in earnest. I'm just going to put my ideas down here and if anyone wants to add anything feel free.
I figure the first system I need to nail down is the combat engine. The rpg has many different gameplay modes (dueling, adventuring, party vs party, large scale warfare, naval warfare) but I think they should be unified by a single combat engine so that needs to get done first.
My thoughts -
- since it is a multiplayer online rpg, it must be a realtime combat engine
- looking at the various examples of realtime action rpg combat (rt w/p, diablo clones, etc...) I think my favorite implementation is Shadow Over Mystara so that's my goal, a combat engine that will look and feel like Shadow Over Mystara - so like a scrolling fighting game
- but although the combat is realtime, I want it to have the elegance of a 2AP system like ToEE and Dragonfall
- so I want Shadows of Mystara but with a 2AP structure
So here's what I'm thinking about the implementation -
- each round has 2 AP. Actions are generally like in ToEE - 1 AP move, 1 AP attack, 2 AP full attack, 2 AP Spellcasting
- In Infinity Engine, each round is 6 seconds
- That works well for spellcasting (spells have ~ 5s animation) but it's too slow for melee attacks which is why Infinity Engine has junk animations, since someone swinging a sword is about 1-2 seconds
- so the first thing to decide is whether each round (2AP) is 4 seconds, 5 seconds or 6 seconds
- even more complicated, running the length of the screen should only take between 1-2 seconds so a full dash (2 AP) is realistically only a 1-2 second animation
- so have to figure out what is the correct compromise between full dash (2s), full attack (4s) and spellcasting (5-6s) all of which take 2AP
- let's say we use 1 round/ 4s for now
- break each AP into subunits. Let's call the subunits frames as that makes things easier
- Diablo 2 animations are 25 frames/ second
- So, 24 frames/ second * 4 seconds/ round * 2 round/ AP = 96 frames/ round or 48 frames/ AP
- So a typical attack is ~ 48 frames of time units, a full attack or spell ~ 96 frames, including recovery frames
- at the start of combat, each active combatant rolls a 1d6 initiative
- let's say there's a 1s or 24 frame buffer between rounds, 12 at the start and 12 at the end
- the initiative is then subtracted into the buffer of the first round
- for example, let's say that in the first round:
0-11 frames start buffer,
12-59 frames 1AP,
60-107 frames 2AP,
108-119 frames end buffer
- So an initative score of 1 (lowest) would start 1AP on frame 12, while an initiative roll of 6 (highest) would start 1AP on frame 7
- 1d6 initiative is rolled every round and added to the initiative score
- multiple actions occur if enough frames remain in the round to complete the next action, which then resets the initiative score to zero
- So for example, if someone has an initiative score of 13, starts 1 AP at frame 0, performs 2 35 frame attacks, then there is still 50 frames remaining so if their next buffered action is say a 45 frame attack the player would perform the 3rd attack as an extra action. Then the player's initiative score would reset to 0.
I figure the first system I need to nail down is the combat engine. The rpg has many different gameplay modes (dueling, adventuring, party vs party, large scale warfare, naval warfare) but I think they should be unified by a single combat engine so that needs to get done first.
My thoughts -
- since it is a multiplayer online rpg, it must be a realtime combat engine
- looking at the various examples of realtime action rpg combat (rt w/p, diablo clones, etc...) I think my favorite implementation is Shadow Over Mystara so that's my goal, a combat engine that will look and feel like Shadow Over Mystara - so like a scrolling fighting game
- but although the combat is realtime, I want it to have the elegance of a 2AP system like ToEE and Dragonfall
- so I want Shadows of Mystara but with a 2AP structure
So here's what I'm thinking about the implementation -
- each round has 2 AP. Actions are generally like in ToEE - 1 AP move, 1 AP attack, 2 AP full attack, 2 AP Spellcasting
- In Infinity Engine, each round is 6 seconds
- That works well for spellcasting (spells have ~ 5s animation) but it's too slow for melee attacks which is why Infinity Engine has junk animations, since someone swinging a sword is about 1-2 seconds
- so the first thing to decide is whether each round (2AP) is 4 seconds, 5 seconds or 6 seconds
- even more complicated, running the length of the screen should only take between 1-2 seconds so a full dash (2 AP) is realistically only a 1-2 second animation
- so have to figure out what is the correct compromise between full dash (2s), full attack (4s) and spellcasting (5-6s) all of which take 2AP
- let's say we use 1 round/ 4s for now
- break each AP into subunits. Let's call the subunits frames as that makes things easier
- Diablo 2 animations are 25 frames/ second
- So, 24 frames/ second * 4 seconds/ round * 2 round/ AP = 96 frames/ round or 48 frames/ AP
- So a typical attack is ~ 48 frames of time units, a full attack or spell ~ 96 frames, including recovery frames
- at the start of combat, each active combatant rolls a 1d6 initiative
- let's say there's a 1s or 24 frame buffer between rounds, 12 at the start and 12 at the end
- the initiative is then subtracted into the buffer of the first round
- for example, let's say that in the first round:
0-11 frames start buffer,
12-59 frames 1AP,
60-107 frames 2AP,
108-119 frames end buffer
- So an initative score of 1 (lowest) would start 1AP on frame 12, while an initiative roll of 6 (highest) would start 1AP on frame 7
- 1d6 initiative is rolled every round and added to the initiative score
- multiple actions occur if enough frames remain in the round to complete the next action, which then resets the initiative score to zero
- So for example, if someone has an initiative score of 13, starts 1 AP at frame 0, performs 2 35 frame attacks, then there is still 50 frames remaining so if their next buffered action is say a 45 frame attack the player would perform the 3rd attack as an extra action. Then the player's initiative score would reset to 0.