Membrane SoftwareTechnology development studio
Game influences: Final Fantasy Tactics
Wednesday, March 22 2017 16:19 GMT
Posted by: MembraneTags:gamesstar commanderfinal fantasy tactics
The final X in "4X game" stands for "extermination", and much of the time that means combat. A 4X game designer has several choices for how to handle combat. Early Civilization games have the player running units into one another right on the world map, with various unit stacking shenanigans possible depending on the title. Other games, such as Master of Orion II, use tactical combat to provide a game within a game, with the player's ability to win the combat game depending on events in the 4X game. I always did like me a nice tactical combat, and so Star Commander goes the latter route. As a space-themed game, Star Commander might be expected to adopt Master of Orion II as its model. However, its tactical systems are actually more similar to those of a non-4X, non-spacey title: our game influence for today, Final Fantasy Tactics.
All in the name
Final Fantasy Tactics
A battle scene in Final Fantasy Tactics
Final Fantasy Tactics was a 1997-1998 release for the Sony PlayStation. I didn't play the original console game, however, but rather the 2007 PlayStation Portable (PSP) remake Final Fantasy Tactics: The War of the Lions. I do prefer playing my games on the go with a handheld version if possible, and I only had to wait 10 years for the chance on this one; luckily, though, the game weathers the missing decade quite well and as far as I know, play remains largely the same between the two versions.
The name of the game does an admirable job of summing up its play. As befitting the venerable role-playing game franchise Final Fantasy, we find ourselves in charge of a group of characters who are initially weak but grow stronger by overcoming challenges. In this case, our heroes' challenges are overcome by way of Tactics, implemented as a combat system in which units take turns moving on a grid-based map. This type of play has its roots in tabletop games such as BattleTech and Chainmail, along with its descendant Dungeons & Dragons (with a certain type of Dungeon Master). I suppose good old chess, with its turn-based movement on a grid, could be considered a, if not the, forerunner of tactical combat games.
Final Fantasy Tactics gives us turn-based combat, which contrasts with real-time combat by allowing each unit to move only on its own turn instead of whenever it pleases. Real-time combat, as represented by games such as Myth: The Fallen Lords and StarCraft, is faster-paced and forces us as players to make decisions on the fly and perhaps even completely miss events that occur while we're busy. Those types of games can be very rewarding, as well as utterly absorbing to the senses. However, Final Fantasy Tactics and Star Commander deal in turn-based combat, which delivers a slower-paced, more contemplative experience. In this style, we can proceed at our own pace, and crunch all angles or even walk away from the game for a spell until we come up with just the right move.
Final Fantasy Tactics
The game has an extensive story as well, although I must admit I don't pay much attention to it...
In between combats, Final Fantasy Tactics requires us to perform only minimal character management while moving the party between fixed points on a world map. Therefore, we can spend about 90% of gameplay in tactical combat mode. As mentioned, tactical combat has been a favorite gaming activity of mine since the early days, and so I appreciate this emphasis. I'd also take this as a lesson in game design: decide on the core gameplay experience that will consume most of the player's time and make sure all roads lead to it. Hopefully, the core gameplay experience you've chosen is a fun one; otherwise you might not be able to hold the player's attention for long.
Taking our time
Characters in Final Fantasy Tactics are given statistics called Speed and Charge Time (CT) that determine when they can take a turn. Whenever game time passes, each character gains CT equal to its speed, and can act at 100 CT.
Star Commander uses the same scheme, with some differences. It doesn't surface the Speed and CT on its interface, but we can dip into its source code and see what's happening.
00  void Map::setNextCurrentObject () {
01    std::list<MapObject *>::iterator i, end;
02    MapObject *obj, *curobj;
03    int maxclock, minmult, diff, mult;
04
05    maxclock = -1;
06    curobj = NULL;
07
08    // Find any object with an actionClock already above the threshold
09    i = objectList.begin ();
10    end = objectList.end ();
11    while (i != end) {
12      obj = *i;
13      if (obj->actionClock >= ACTION_THRESHOLD) {
14        if ((maxclock < 0) || (obj->actionClock > maxclock)) {
15          curobj = obj;
16          maxclock = obj->actionClock;
17        }
18      }
19      ++i;
20    }
21
22    if (! curobj) {
23      // Find the object closest to the action threshold. That object's clock is
24      // advanced to meet the threshold; all other objects are advanced along with
25      // it, according to their actionSpeed values.
26      minmult = -1;
27      i = objectList.begin ();
28      while (i != end) {
29        obj = *i;
30        if ((obj->actionSpeed > 0) && (! obj->isDestroyed)) {
31          diff = ACTION_THRESHOLD - obj->actionClock;
32          mult = diff / obj->actionSpeed;
33          if (diff % obj->actionSpeed) {
34            ++mult;
35          }
36
37          if ((minmult < 0) || (mult < minmult)) {
38            curobj = obj;
39            minmult = mult;
40          }
41        }
42        ++i;
43      }
44
45      if (minmult > 0) {
46        i = objectList.begin ();
47        while (i != end) {
48          obj = *i;
49          if ((obj->actionSpeed > 0) && (! obj->isDestroyed)) {
50            obj->actionClock += (obj->actionSpeed * minmult);
51          }
52          ++i;
53        }
54      }
55    }
56
57    if (curobj) {
58      // Here we prepare the current object to take its turn (not shown)
59    }
60  }
In this code, the game performs computations to add each object's actionSpeed value to its actionClock value, with a clock value above ACTION_THRESHOLD indicating that the object is eligible to act. A few other details fill in the complete picture for how this handling affects Star Commander's gameplay:
  • A ship has a base actionSpeed of 10. If crewed, it gains an actionSpeed bonus of 2 for each rank held of its commanding officer (minimum bonus of 2). Therefore, ships with higher-ranked officers will always move faster than other ships.
  • Missiles have actionSpeed values that vary by type and fall between 18 and 30. A high-ranking officer has a chance of moving faster than certain types of missiles.
  • The ACTION_THRESHOLD constant holds a healthy value of 10000. By setting the value this high with actionSpeed values in the 10-30 range, we reduce the possibility that a unit will take multiple turns before another unit has a chance to act. Compare this to Final Fantasy Tactics, which uses a CT threshold of 100 and thereby causes multiple turns to occur more often.
Side by side
Star Commander
In Star Commander, the turn list shows that unit ordering does not take sides.
There's one other important aspect of Star Commander's turn flow: units move according to their speed regardless of which side they belong to. This style of play matches Final Fantasy Tactics but stands in contrast to that used by Master of Orion II, or even recent titles such as XCOM 2, in which units on one side all take their turn and then pass control to the other side. In my opinion, mixing the sides provides superior turn-based gameplay for a number of reasons. However, we're out of space for today and so we'll have to tackle that issue in a future article.
Notes
  • Final Fantasy Tactics (The Final Fantasy Tactics Wiki, source for screenshot images used in the article)
  • Charge Time (an in-depth look at Charge Time handling in Final Fantasy Tactics)
 
What did you think of this article? Leave a comment or send us a note. Your feedback is appreciated!