I’ve mentioned the game’s architecture before, but understanding it helps answer some common questions, so I thought I’d draw a picture.
The game has three main divisions. In the original version, different developers were more or less responsible for each.
The user interface (the 50 or so screens and dialogs) were created for the Windows and Macintoshes of the day (that day being somewhere between 1997, when we started the project, and 1999, when it was released). We used mTropolis, a powerful multimedia development system that was discontinued over a year before the game came out.
The interactive scenes (and news) were coded in OSL (the Opal Scripting Language, or the Opal Scene Language).
The game engine, written in C++, executed the OSL code, ran the economic model (tracking cows and the effects of treasures on them), and was responsible for saving the game. It was cross-platform, running equally well on Mac OS and Windows.
When we created a new version for iOS, the basic game code and the scenes didn’t need radical change. Both were enhanced (for example, the game had more advice and supported 7 new treasures, and there were 28 new scenes) but existing code continued to work. By contrast, none of the user interface code could be used. Not that it would have mattered much, the small touch screen needed a new user interface anyway. This was a very substantial effort, and it ended up being partly duplicated for iPad and again for the 4 inch display.
There are numbers in the diagram because they suggest why the iOS version is distinct from anything else. Saved games assume a specific number of scenes and treasures. Adding more would mean substantial reworking of the C++ code. But this code had to work with mTropolis, so it’s tied to 1998 era systems. The hardware and compilers I used back then are long gone.
So that’s why the GOG Windows version can’t be updated.
Some have asked about a new Windows or Mac version, or an Android version. Since mTropolis no longer exists and UIKit is iOS-specific, any version for any other platform will require reworking the user interface (possibly with some redesign, definitely a brand new implementation). Think of it was rewriting a third of the game.
The first iOS release took about 20 calendar months. Since the C++ code didn’t need significant updating, the user interface could thus be said to be about half the code needed for that project.
Actually, there was some new C++ code, because we wanted to add Game Center achievements. Most of this would work on Mac OS X, but not on other platforms.
So unlike the original version, where it was trivial to build for both Mac and Windows, there’s a daunting amount of work to bring the game to another platform.
What we’ve done instead is reflected in those numbers: reworking the 50 screens for iPad (and soon the iPhone 5). And adding new treasures and new scenes in an update we hope to release this month.
King of Dragon Pass
Developing King of Dragon Pass for iOS
08 June 2013
12 May 2013
4 Inch Display
I really have to wonder when I see a one star review in the App Store that reads: “I have to give 1 star to any game that doesn't optimize for the iPhone 5... Its just to easy of a fix.” (sic)
One star? Really? The game is awful because it was created before the iPhone 5 existed, and has not been altered to use the wider screen? If the reviewer stopped to think at all, is adding 88 pixels of width to a landscape game really going to make that much difference? In other words, is this screen
really so incredibly worse than this one?
In almost every possible case, getting extra width buys you very little with a landscape application. Text lists still scroll vertically, and the landscape height of an iPhone 5 screen is exactly the same as the landscape height of every other iPhone. So a bigger screen doesn’t mean less scrolling.
As for easy, it turns out that we had to rework 31 different screens. In many cases, it was an easy enough transformation, like the one above. But there were cases where because we’d put in so much effort making sure the game worked on the original iPhone that it needed new design and coding to work on a different layout. In particular, for the one area where the game can be a little better on the iPhone 5’s 4 inch display. Interactive scenes always allow you to view the entire illustration, but during play it’s partially covered with text.
On the wider display, less of the picture is obscured.
(I suppose we could show more text instead, but as shown above, it doesn’t always need to scroll. It seemed like a better tradeoff to favor art over text.)
Obviously it’s better to fully support the new screen size, but we could have used the money to commission new artwork instead of new versions of the same user interface elements. And used developer time to create new scenes, instead of redoing 31 different screens to show 18% more pixels (18% more blank parchment in many cases).
As you might have guessed from the screen shots, we are in fact adding new assets and code to support the 4 inch display as well as the 3.5 inch display on iPhone and iPod touch. But it’s because Apple now requires this, not because this game really gets better because of this effort.
One star? Really? The game is awful because it was created before the iPhone 5 existed, and has not been altered to use the wider screen? If the reviewer stopped to think at all, is adding 88 pixels of width to a landscape game really going to make that much difference? In other words, is this screen
really so incredibly worse than this one?
In almost every possible case, getting extra width buys you very little with a landscape application. Text lists still scroll vertically, and the landscape height of an iPhone 5 screen is exactly the same as the landscape height of every other iPhone. So a bigger screen doesn’t mean less scrolling.
As for easy, it turns out that we had to rework 31 different screens. In many cases, it was an easy enough transformation, like the one above. But there were cases where because we’d put in so much effort making sure the game worked on the original iPhone that it needed new design and coding to work on a different layout. In particular, for the one area where the game can be a little better on the iPhone 5’s 4 inch display. Interactive scenes always allow you to view the entire illustration, but during play it’s partially covered with text.
On the wider display, less of the picture is obscured.
(I suppose we could show more text instead, but as shown above, it doesn’t always need to scroll. It seemed like a better tradeoff to favor art over text.)
Obviously it’s better to fully support the new screen size, but we could have used the money to commission new artwork instead of new versions of the same user interface elements. And used developer time to create new scenes, instead of redoing 31 different screens to show 18% more pixels (18% more blank parchment in many cases).
As you might have guessed from the screen shots, we are in fact adding new assets and code to support the 4 inch display as well as the 3.5 inch display on iPhone and iPod touch. But it’s because Apple now requires this, not because this game really gets better because of this effort.
Labels:
design,
development,
iPhone 5,
KoDP,
UI
13 April 2013
The Debug Dialog
When I was creating the iOS version of King of Dragon Pass, I included some of the same debugging utilities we had in the original game. Unfortunately, I couldn’t remember exactly what we had, and there was no good way to look, because the release version of the game didn’t have them. (And it’s real hard to search an mTropolis project.)
I knew there was a way to trigger a specific scene (critical for running them over and over to test all the possibilities). And a set of commands that do things like get rid of all your food (to test things like starvation advice) or get raided by Trolls.
But I knew there was something more, just not what it was.
Today I happened to run into this code
I knew there was a way to trigger a specific scene (critical for running them over and over to test all the possibilities). And a set of commands that do things like get rid of all your food (to test things like starvation advice) or get raided by Trolls.
But I knew there was something more, just not what it was.
Today I happened to run into this code
/*
Returns text about our clan helpful for debugging (shown in the \ dialogette)
*/
char* CPlayerClan::DebugInfo() const
{
gString = "farmerMorale: ";
UString::Append(gString, this->MoraleFarmers());
gString += ", warriorMorale: ";
UString::Append(gString, this->MoraleWarriors());
gString += ", thrallMorale: ";
UString::Append(gString, COSL::GetIntegerVariable(var_thrallMorale));
gString += ", mood: ";
UString::Append(gString, this->Mood());
gString += "\rvictory: ";
UString::Append(gString, COSL::GetIntegerVariable(var_victory));
gString += ", kingship: ";
UString::Append(gString, this->Kingship());
gString += "\r";
UString::Append(gString, fYearsAsType, "year", "years");
gString += " as clan type\r";
return (char *)gString.data();
} // DebugInfo
which was clearly used to display some internal status useful for testing.
This isn’t as important as it was in 1999, but we’re in the process of thoroughly testing a number of new scenes (currently 14, but several more are in progress). So I put this into the current debug dialog. It’s almost like seeing a long-forgotten friend.
This isn’t as important as it was in 1999, but we’re in the process of thoroughly testing a number of new scenes (currently 14, but several more are in progress). So I put this into the current debug dialog. It’s almost like seeing a long-forgotten friend.
Labels:
code,
debugging,
development,
KoDP,
testing
30 March 2013
Art Process
I was going through the files and ran into some work sketches, which we usually didn’t save. So I can show a bit of our process for creating art.
King of Dragon Pass had three separate art styles (plus interface art), so there wasn’t a single process. This is the basics of how we worked with Stefano Gaudiano to create artwork relating to the present (as opposed to the Otherworld or history).
A scene’s writer (usually Robin Laws) would come up with basic art direction. I (David Dunham) might expand on it, and pass it off to Stefano as Art Director.
Stefano would get someone to make a loose thumbnail sketch in pencil. (These varied in size; the ones I found were 3 to a standard sheet of paper.) This served to make sure the writers had communicated to the artists, and as a quick way to iterate the design. Elise Bowditch and I reviewed all the thumbnails with Stefano. Sometimes there were small changes (to bring out important elements of the scene, make sure that there was room for text, or emphasize something interesting the artists had come up with). Unfortunately, I don’t know who did this thumbnail.
Once the thumbnail was approved, Stefano assigned it to an artist to create full-sized (9 x 5 1/8 inch) pencils. We’d get these by fax, since there usually wasn’t much discussion at this point, and we could usually give feedback by fax or verbally. Again, I don’t know who did the pencils for R257.
When the pencils were approved, Stefano inked them, then gave them to a colorist (Mike Christian and Brian Sendelbach did most of the coloring). Note that this scene is in flashback style, where the event occurred in the recent past.
Stefano would then do any additional work (such as adding the embroidery on the woman’s overdress). He scanned these images and sometimes made color adjustments or small edits with Photoshop.
King of Dragon Pass had three separate art styles (plus interface art), so there wasn’t a single process. This is the basics of how we worked with Stefano Gaudiano to create artwork relating to the present (as opposed to the Otherworld or history).
A scene’s writer (usually Robin Laws) would come up with basic art direction. I (David Dunham) might expand on it, and pass it off to Stefano as Art Director.
R257: A prosperously-attired female carl from the Prosperous Clan (R90) comes to tell us of an attack on her cattle by a fearsome creature called a walktapus. A walktapus is a humanoid creature with an octopus for a head; its skin is mottled and wrinkly like an octopus, but it walks on land. The walktapus has attacked a typical shaggy cow and has its tentacles wrapped around the beast, while carls from this other clan look on in horror, too scared to fight it.
Once the thumbnail was approved, Stefano assigned it to an artist to create full-sized (9 x 5 1/8 inch) pencils. We’d get these by fax, since there usually wasn’t much discussion at this point, and we could usually give feedback by fax or verbally. Again, I don’t know who did the pencils for R257.
When the pencils were approved, Stefano inked them, then gave them to a colorist (Mike Christian and Brian Sendelbach did most of the coloring). Note that this scene is in flashback style, where the event occurred in the recent past.
Stefano would then do any additional work (such as adding the embroidery on the woman’s overdress). He scanned these images and sometimes made color adjustments or small edits with Photoshop.
Labels:
art,
development,
KoDP
18 March 2013
30K Sale(s)
text: We’re very pleased to let you know that our <d3:unique/distinctive/indie> game King of Dragon Pass has sold over 30000 copies in the App Store! To celebrate, we’re putting the game on sale for 30% off, for three days.
music: "WeDidIt"
price = price * 0.7 # 30% off
trigger code_SaleOver 3 # Sale ends in 3 days
Response 1: Buy Now!
.fun += 1000
.goods -= 7
text: Clan members were heard saying things such as “<d3:This is undoubtedly the best rpg game on iOS./This game is simply brilliant./I must have put in 30 hours by now.>”
Response 2: Wait 3 days for the regular price, to support the developers.
.fun += 1000
.goods -= 10
text: Clan members could be heard saying such things as: “d3:A game with more depth and heart than you can shake a stick at./Thank you dev team for such a great game that I will be playing for years to come!/Congrats to the developers on making something so different and downright fun.>”
Response 3: Send messengers to nearby clans to let them know.
foreach c in NearbyClans
c.fun += 1000
aSharp.obligations += 1
SceneContinues
Response 4: Get the Windows version on GOG.com.
text: Clan members were sad that we had no iPad, iPhone, or iPod touch. But they praised the ring for finding another way.
.fun += 999
Response 5: Ignore the opportunity.
text: Clan members shook their heads and muttered darkly about the foolish decisions their leaders were making.
.mood -= 25
Advice:
[Storytelling] Get this game. It’s tribal politics and role playing at its best. Play it as if you are in the shoes of your clan leader or as you wish yourself; whatever brings you into the world, live it. You will not regret a thing. [1234]
music: "WeDidIt"
price = price * 0.7 # 30% off
trigger code_SaleOver 3 # Sale ends in 3 days
Response 1: Buy Now!
.fun += 1000
.goods -= 7
text: Clan members were heard saying things such as “<d3:This is undoubtedly the best rpg game on iOS./This game is simply brilliant./I must have put in 30 hours by now.>”
Response 2: Wait 3 days for the regular price, to support the developers.
.fun += 1000
.goods -= 10
text: Clan members could be heard saying such things as: “d3:A game with more depth and heart than you can shake a stick at./Thank you dev team for such a great game that I will be playing for years to come!/Congrats to the developers on making something so different and downright fun.>”
Response 3: Send messengers to nearby clans to let them know.
foreach c in NearbyClans
c.fun += 1000
aSharp.obligations += 1
SceneContinues
Response 4: Get the Windows version on GOG.com.
text: Clan members were sad that we had no iPad, iPhone, or iPod touch. But they praised the ring for finding another way.
.fun += 999
Response 5: Ignore the opportunity.
text: Clan members shook their heads and muttered darkly about the foolish decisions their leaders were making.
.mood -= 25
Advice:
[Storytelling] Get this game. It’s tribal politics and role playing at its best. Play it as if you are in the shoes of your clan leader or as you wish yourself; whatever brings you into the world, live it. You will not regret a thing. [1234]
16 March 2013
Troll Hero Preview
As you may know, we’re hoping to make a fairly large number of new scenes for a King of Dragon Pass update. We do have a constraint: there is no art pipeline the way there was in the original, so we are repurposing existing art. This isn’t actually a new thing — we reused artwork rather than commission art for the over 500 scenes in the original. (There are “only” about 420 illustrations earmarked for scenes.) After all, it makes sense that Sora Goodseller looks the same each time she visits (though she actually has a second piece of art).
One of the design goals for this update was to make use of artwork that may not be commonly seen, such as a scene that occurs as a direct consequence of a previous scene (i.e. a story branch). Here is one of them, a visit from a troll hero.
To write this scene, I consulted with the world’s foremost uzologist, Dan McCluskey. (I had to cut some of the finer points of troll behavior since you are seeing this from the human viewpoint.)
This scene has some internal branching, so it was a bit time-consuming to code, but it’s now ready, and got a good response from initial testing. Now we need to perform more rigorous QA, making sure each of the branches works.
This is the 11th new scene. Others are in progress, though I don’t know if I’ll really end up with all 29 I have ideas for.
One of the design goals for this update was to make use of artwork that may not be commonly seen, such as a scene that occurs as a direct consequence of a previous scene (i.e. a story branch). Here is one of them, a visit from a troll hero.To write this scene, I consulted with the world’s foremost uzologist, Dan McCluskey. (I had to cut some of the finer points of troll behavior since you are seeing this from the human viewpoint.)
This scene has some internal branching, so it was a bit time-consuming to code, but it’s now ready, and got a good response from initial testing. Now we need to perform more rigorous QA, making sure each of the branches works.
This is the 11th new scene. Others are in progress, though I don’t know if I’ll really end up with all 29 I have ideas for.
Labels:
design,
development,
KoDP
17 February 2013
Planning for Growth
King of Dragon Pass has continued to grow since the last mention of what changed in the iOS version. There are still seven new treasures (it turns out to be tricky to add new ones without breaking saved games). There are now 29 new scenes, 4 more than when we first released. Two of the new ones have new artwork. And one of the bug fixes actually enables a scene that accidentally never showed up (a bug was introduced about a month before release back in 1999).
The way the save file format works, it’s not easy to add an arbitrary number of new scenes. And new treasures are also problematic. Luckily, the iOS version doesn’t need to worry about dealing with back-and-forth file compatibility between versions (since you can only upgrade and can’t move files between sandboxes). So I can add code to deal with old saves, and gain the ability to add a significant number of new scenes, as well as new treasures. Four scenes are coded, with one new treasure.
This is the first time we’ve changed the file format (we’ve always taken pains that updates could always read your saved games). It’s a bit of a pain, so I don’t want to do it again if I can help it. Accordingly, I want to release the next version with a fair number of new scenes. Fortunately, I have ideas for another 29. Unfortunately, most of these are not fleshed out, let alone coded and tested. Some may not turn out very interesting. So the update won’t be ready for some time.
This may hold up bug fixes and advice improvements. But hopefully one big update will end up better than a number of small ones, so all the story content is available at once (after all, you could easily play a game and not see a specific scene).
The way the save file format works, it’s not easy to add an arbitrary number of new scenes. And new treasures are also problematic. Luckily, the iOS version doesn’t need to worry about dealing with back-and-forth file compatibility between versions (since you can only upgrade and can’t move files between sandboxes). So I can add code to deal with old saves, and gain the ability to add a significant number of new scenes, as well as new treasures. Four scenes are coded, with one new treasure.
This is the first time we’ve changed the file format (we’ve always taken pains that updates could always read your saved games). It’s a bit of a pain, so I don’t want to do it again if I can help it. Accordingly, I want to release the next version with a fair number of new scenes. Fortunately, I have ideas for another 29. Unfortunately, most of these are not fleshed out, let alone coded and tested. Some may not turn out very interesting. So the update won’t be ready for some time.
This may hold up bug fixes and advice improvements. But hopefully one big update will end up better than a number of small ones, so all the story content is available at once (after all, you could easily play a game and not see a specific scene).
Labels:
development,
KoDP,
schedule
Subscribe to:
Posts (Atom)







