Strategic Primer 2015 Review, 2016 Goals

This week, with the turning of another civil year, I am again as usual looking back and forward. Since I looked at the year on this blog at the end of the Church year, including a summary of Strategic Primer-related posts, this week I’m checking up on the goals I set a year ago, and setting new goals for 2016. This began with a progress review and new slate of goals for the Shine Cycle on Monday, and today I’ll look at Strategic Primer, the strategy game I’ve been developing in one form or another for many years.

2015 Goals

First, let’s see how I did on the goals I set a year ago.


  • Goal: Finish at least one turn in the current campaign.

We finished one turn, the thirteenth, in April; you can read the turn summary here. And we’re almost finished with the fourteenth turn. But because of the next goal, I suspect I didn’t meet this in the sense that I meant it.

  • Incremental Goal: Finish running at least three AI players’ strategies’ by April and all of them by July.

At this time last year, I had already finished running all of the AI players’ strategies for that turn. We managed to finish the turn as a whole by April, but I didn’t finish the AI players for the fourteenth turn until late September.

  • Stretch goal: Finish at least three turns in the campaign.

As I said, we came close to managing two.

  • Stretch Goal: (Successfully) recruit at least one more player to join the campaign.

I haven’t heard from any interested parties.

Assistive Programs Development

  • Goal: Implement, or definitively decide against, at least a quarter (i.e. at least three) of the items on the “roadmap.”

Depending on how I define them, I could argue I barely met the letter of this goal: I implemented the new map API, and the feature that lets the user go from items in the “report” to those items’ locations in the map viewer, for a total of two definite items. And I made definite progress on native desktop integration in the last couple of months. But of the items on the roadmap as of a year ago, I only completed two well enough to remove them from the list.

  • Stretch Goal: Implement, or definitively decide against, at least half (six) of the items on the “roadmap.”

At two or maybe three, the goal of six was well out of reach.

  • Goal: Create at least one more player-useful application for the suite.

Nope. (More for lack of ideas than lack of effort.)

  • Goal: Finish porting the suite to Ceylon.

I “finished,” found that the Ceylon version couldn’t work quite right, and kept working on the Java version. So the Ceylon version was nominally feature-complete (so I’ll call this success), but is now well out of date. I’m also aware of at least a couple of Ceylon compiler bugs that I had to carefully work around.

Since I haven’t touched the Ceylon code in at least a couple of months, I suspect the best thing to do will be to start the port over from scratch. But we’ll see.


  • Goal: Start, and get at least minimally organized, a separate blog for Strategic Primer-related content.

I’ve “started” i.e. registered the new blog, but haven’t made it public because I haven’t started migrating content to it yet. I know how I plan to do so, but I don’t plan to start that until after I finish running the current turn.

I should also mention a goal I didn’t explicitly set in last year’s post but that was a focus for much of the year: fixing the “TODO items” in the map, including the problems last year’s map-content survey revealed and all the “stubbed-out” gemstone caches, treasures, and “adventure hooks.” I’ve made tremendous progress: as of the end of the thirteenth turn, in April, after months of work, there were over two thousand such items remaining in the map. There are now fewer than five hundred … though part of the particularly rapid progress was that I developed a script to automatically generate gemstone caches, but treasures and adventure hooks can’t be automated in the same way.

Recent and Planned Development

It’s been a month since the last assistive programs development report, which was combined with the liturgical-year-end blog summary, so it’s time for a new release. This week’s release is 0.4.9003, and can be downloaded from GitHub.

Recent Changes

The most notable change in this release is that the assistive programs now target Java 8, so they won’t run on any previous version.

Most of my changes were warning fixes of one sort or another, especially since I started working in IntelliJ IDEA, but there were a few more substantial changes:

  • I removed the old map API
  • I changed the app-choosing app so that when the user doesn’t specify --cli or --gui, if the environment wouldn’t support a graphical app the command-line one is run.
  • I fixed an obscure bug that would endlessly increase the size of the terrain-changing menu when the user opened a map with a different map format version.
  • I added the ability for the user to add a unit from the “terrain-changing” menu.
  • On the Mac platform, I changed the File menu to not include “Quit.” (There’s already an item for that in the built-in application menu.)
  • Also on Mac, I fixed the application-name-setting code to work properly on Java 8, which uses a different system property for that.
  • In the report generator, I made the ‘arbitrary-text note’ sub-report be sorted by the turn the notes were added.
  • I made the worker management app generate and update the ‘report tree’ asynchronously, instead of hanging the app until it was finished. Users might not have noticed a problem when working with mostly-empty maps, but this was a major problem when working with the whole-world map.
  • I added menu items to, in the worker management and advancement apps, expand and collapse the tree of units and workers. I also renamed the Edit menu to View, since those items clearly belonged more with the “look at a different player’s units” and “reload the tree” items than with any of the other menus, and most of the menu’s contents weren’t “Edit” operations.
  • In the worker-management app, in the orders text box, I added code to make Control-Enter or Command-Enter (depending on the platform) apply the orders, Control-D or Command-D move the focus to that text area (and select all text there if the focus wasn’t there already), and Control-U or Command-U move the focus back to the unit tree.
  • I think I finally fixed bugs that caused crashes and file corruption when editing multiple maps at once in the worker-management app. Those were very frustrating to track down, and even more so to encounter.
  • I changed a couple of utility classes (BorderedPanel and ScrollListener) to work properly in environments where the normal directions (left-to-right, top-to-bottom) are reversed.
  • I added an app to let me add resources and equipment to the map.
  • I centralized most menu-item handling in the IOHandler class.


The Pivotal Tracker backlog is currently fairly close to what I’m hoping to get done in the near future.

At the top of the list is making a Mac-native “application bundle” that actually works (I would say “fixing,” except none of the versions I could test worked at all), followed by other adjustments to make the suite behave like a native app on the Mac platform.

Other items on the roadmap are:

  • Add images for implements and resource piles
  • Change the way unit orders are represented so they can be set per-turn
  • Add support for unit results to the map format
  • Make subset checking treat location as another property, instead of treating a fixture that moved as a ‘new’ fixture in its location in the subordinate map.
  • Fix the performance maybe-issues: that I use Swing APIs that “best practice” (according to my reading) recommends not using for loading images, drawing images, and limiting the drawing area
  • Make the GUI execute some operations in parallel to the GUI-update thread
  • Anywhere the GUI allows the user to cause a fixture to be created, allow the user to enter an ID #.
  • Add a way for the user to preseed the ID-numbers-in-use cache with a map without actually opening that map. (That is, without leaving the map open—I don’t intend to reimplement, or shell out to call, grep and sed!)
  • Convert the “Display …” menu to a panel containing checkboxes that the user can drag to set a custom display-sort order to control what appears on “top”.
  • As a user requested, when zooming in using the mouse scroll wheel, the zoom should center on the mouse cursor. (The ‘center’ menu item and hotkey help with this, but it’s still a good idea.)
  • The worker stat generator should apply racial stat adjustments.
  • Make the apps behave (more) like native apps (following human-interface guidelines) on the major platforms, starting with Mac OS X. The Window menu is a good start, and finally works, but there’s more to do. I need to enumerate what more needs to be done …
  • Changesets need to become a priority, because maps are no longer immutable from the players’ perspective. First, I need a list of operations that need to be supported.
  • The turn-running helper apps should be able to tell me such facts as how much meat any given animal produces, how much grain should be produced in a harvest, etc.
  • Related to that, “resource management,” eventually including modeling resource production and accounting in the map and the helper apps.
  • Unit (and other) “portraits”—larger images for individual units, towns, and the like.
  • Something like the mine-model-generation program for stone deposits. However, I currently make do with the existing model, just with different proportions for each level.

If you have any features you’d like me to add, or you run into any problems with the software, please let me know, perhaps using the issue tracker or contacting me directly.

2016 Goals

Here are my goals for Strategic Primer in the next year.

For the campaign:

  • Goal: Finish at least two turns, including the current one, in the current campaign.
  • Stretch Goal: (Successfully) recruit at least one more player to join the campaign.
  • Stretch Goal: Finish resolving all of the “map TODOs” left in the world map.

For the assistive programs’ development:

  • Goal: Implement, or definitively decide against, at least a quarter (i.e. at least four) of the items on the “roadmap” above.
  • Stretch Goal: Implement, or definitively decide against, at least half (eight) of the items on the “roadmap” above.
  • Goal: Create at least one more player-useful application for the suite.


  • Goal: Get the new blog set up and publicly visible, with at least thirteen posts on it, by the end of the year.
  • Stretch Goal: Have at least twenty-six posts on the new blog by the end of the year.

We’ll see how all these turn out in a year’s time.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s