25 Sep

UTF-8 with BOM

When localizing DragonScales 3 we experienced a baffling issue with an internal tool whose purpose is simply to replace text in a group of files. Those UTF-8 encoded files contain messages loaded by the game from the very beginning. However, after running the tool, the game started crashing when reading such files. By using an old buddy, fc /B, we found out that our tool was “injecting” a few extra bytes at the start of the file: EF BB BF. In short, the tool was altering the encoding of files from UTF-8 to UTF-8 with BOM. That was the cause for the crashing, as our game expects the files to be UTF-8 encoded without BOM.

What’s this BOM, anyway? Simply put, it’s just a sequence of bytes (EF BB BF) used to signal readers about the file being UTF-8 encoded. It seems such mark might be useful in some specific contexts, with some specific programs. Not our case, so we had to remove the BOM with a little batch script like this:

for /r ".\DE\scenes" %%i in (*.*) do (
  copy %%i .\tmp.txt /Y
  sed -i '1s/^\xEF\xBB\xBF//' .\tmp.txt
  attrib -R .\tmp.txt
  move /Y .\tmp.txt %%i
)

In this snippet we remove the BOM via sed. Files are those under a fictitious directory, .\DE\scenes. Those copies and attribs help to circumvent some problems with permissions of files created by our sed version on Windows.

06 Sep

A strategy for Level 13-7 of DragonScales 3

The key for level 13-7 of DragonScales 3 is to form a way to access the pink scale on the left side at the bottom. Our approach starts by removing the rocks surrounding the central arrow, identified in Figure 1. Remember: to remove rocks just form combinations in adjacent cells.

Figure 1

After removing the rocks, activate the arrow (Figure 2.)

Figure 2

Now focus on the 2 adjacent arrows, on the top row (Figure 3). Activate one of them.

Figure 3

The next step is to activate the bomb to break the block (Figures 4 and 5).

Figure 4

Figure 5

Finally, activate the arrow to lower the column and get access to the pink scale (Figure 6.)

Figure 6

All that remains is capturing the cross pink scales and getting 80 scales of any color.

31 Aug

Extracting text from PSD files

Typically, we need to translate hundreds of strings when localizing our games. Most strings are text messages which the game loads from some database or simple text file. However, we often have to handle localization of several PNG images, such as the one below.

AWESOME! message in DragonScales

Such PNG images are exported from PSD files which must obviously contain at least one Text Layer. To speed up the localization process we have a little Photoshop script which opens the PSD files and extracts all the text we have to translate. PSD files are grouped in directories corresponding to the tileset they belong to. For instance, this would be a typical directory structure for the DragonScales games:

images/
    board/
        awesome.psd, great.psd, ...
    cards
        youwin.psd, sorry.psd, ...
    ending
        congratulations.psd, ...
    levelselect
        clickhere.psd, ...
    mainmenu
        welcome.psd, ...
    etc

A simplified but functional version of the script we use is this:

#target photoshop

var target = "/C/projects/ds/images";
var toLocalize = new Array();
var totalProcessed = 0;
var warningsFiles = new Array();

function log(msg) {
	$.writeln(msg);
}

function processPSDFolder(dir) {
	var files = dir.getFiles("*.psd");
    log("===============================================");
    log(dir + " -> "+ files.length);
    log("===============================================");
	for (var i = 0; i < files.length; i++) {
    	var doc = app.open(files[i]);
    	log("  file: " + files[i]);
        totalProcessed++;
        if ( doc.artLayers.length == 0 ) {
            log("   -> WARNING: ZERO TEXT LAYERS? THEY SHOULD NOT BE IN GROUPS.");
            warningsFiles.push(files[i]);
        }
    	for (var j = 0; j < doc.artLayers.length; j++) {
        	var lyr = doc.artLayers[j];
        	if (lyr.kind == LayerKind.TEXT) {
            	var lyr = doc.artLayers[j];
            	log("   ->" + lyr.textItem.contents);
            	toLocalize.push(lyr.textItem.contents);
        	}
     	}
    	doc.close(SaveOptions.DONOTSAVECHANGES);
	}
}

function saveStrings() {
	var out = new File(target + "/strings.txt");
	out.open("w");
	for (var i = 0; i < toLocalize.length; i++) {
		var str = toLocalize[i];
		out.writeln(str);
	}
 	out.close();
}

var root = Folder(target).getFiles();
for ( var i = 0; i < root.length; i++ ) {
	var fileFoldObj = root[i];
	if ( fileFoldObj instanceof File ) {         
        // Discard files at this level
	} else {
         processPSDFolder( Folder(fileFoldObj) );
	}
}
saveStrings();
log("Total PSDs processed: " + totalProcessed);
log("Warnings: " + warningsFiles.length);
for ( var i = 0; i < warningsFiles.length; i++ ) {
	log(" " + warningsFiles[i]);
}

Observations:

  • target is the path to your directory structure holding the PSD files.
  • The strings to be translated will we written to file strings.txt under your target directory.
  • This script looks for text layers on the top level of the PSD. It can be easily extended to inspect layers in groups, though.
  • We use warnings to be notified about files not containing Text Layers. These might be files requiring special exporting and extra formatting, and therefore we’ll have to handle such files exceptionally.
17 Aug

What we have been working on

Since the launch of DragonScales 3 in May we’ve been very busy handling all the distribution process, replying to customer emails, attending the accounting side, etc. In short, we’ve been handling the business part of IKIGames. However, we also started tackling the design of our next title: DragonScales 4. Yet more, we’ve also worked on a few subtasks mostly related to updating several games of ours. Specifically, this is what we’ve been addressing:

  1. Revamping of DragonScales internal engine.
  2. Design of DragonScales 4.
  3. Design of a special version of DragonScales for advanced players.
  4. Localization of the original DragonScales into Japanese.
  5. DragonScales 3 for Android (complete, but yet to be released.)
  6. Production of a new build for The Rainbow Machine (German version.)
  7. A new build for NagiQ 2 which fixed a few issues (already live here on our site.)
  8. Yet another build for NagiQ 2 suitable for localization (this localization of NagiQ 2 is currently a work in progress.)

The original DragonScales in Japanese!

In the next weeks we’ll keep working on the first 3 tasks.

30 May

Solution for Level 9-8 of DragonScales 3

Generally, we like to include 2 or 3 tricky levels in our DragonScales games. It’s the case for the “Moon Bar” level in DragonScales 1 or Level 3-12 in DragonScales 2. In DragonScales 3: Eternal Prophecy of Darkness we also have a few demanding boards. Level 9-8, for instance.

Image 1

There are two tricky scales in Level 9-8 (see Image 1.) For both scales the key is to setup the required scales beforehand in order to form the match/combination exactly when the arrows are activated. To remove scale Tricky 1, first we have to place golden scales in the near tiles. When the two arrows are activated we should have already placed the golden scales we need, and the combination is done after the last of the two bottom-left arrows is activated.

Image 2

For instance, in Image 2, we have already managed to place two regular golden scales near to the goal golden scale we want to remove (Tricky 1.) Images 3 to 8 only show a few of our plays to activate the arrows. But the important thing is that the 2 golden scales are already in the right place.

Image 3

Image 4

Image 5

Image 6

Image 7

Image 8

Regarding the scale labeled in Image 1 as Tricky 2: we have to follow a similar procedure. See Image 9. Just manage to place golden scales in the proper tiles, and then keep playing to activate the remaining arrow. See Images 9 to 11.

Image 9

Image 10

Image 11

It’s fairly simple once you’ve figured the order in which scales should be removed. You’ll also need a bit of good luck with the scales you’ll get to play! 🙂

P.S. You might be interested in the solution of Level 13-7, also a tricky level of DragonScales 3.

02 May

DragonScales 3’s page is now active!

Hello everybody! The web page for our new game DragonScales 3: Eternal Prophecy of Darkness is already live! You can read a description of the game including its features, take a look at a few screenshots and the trailer, and of course, purchase the game. For the time being, DragonScales 3: Eternal Prophecy of Darkness is available for Windows and Mac. Here’s the link to the game’s new site: DragonScales 3: Eternal Prophecy of Darkness. We hope you like it!

21 Feb

DragonScales 3: Eternal Prophecy of Darkness

After several months of hard work, the new installment in the DragonScales series is finally completed. DragonScales 3: Eternal Prophecy of Darkness is the DragonScales game with the most gameplay variety ever! DragonScales 3 showcases a totally new story arc, with more than 150 new levels and a novel Gravity game mode, besides the classic DragonScales mode with some fun and challenging twists.

Lady Siniestra, Specktr, Archmage Cedric and Xeroz. A new adventure begins!

Lady Siniestra, Specktr, Archmage Cedric and Xeroz. A new adventure begins!

With DragonScales 3: Eternal Prophecy of Darkness DragonScales allows players to win badges and collect stars, for enhanced replay value. Some stars are secret, and you’ll have to find them out! There are other alluring challenges for advanced DragonScales players, albeit the game also offers an enjoyable experience for players looking for relaxed play sessions. Furthermore, DragonScales 3 introduces a new array of magical powers. For example, Improved Prescience allows you to select a tailored set of scales to play! And with the new Confusion power you can completely change the position of all the scales on the board!

New falling mode with skulls!

New falling mode with skulls!

The game is being prepared for distribution through several channels, so stay tunned! 🙂

30 Dec

After playing the NagiQ demo…

Hello again! If you’ve followed the tutorial to learn how to play NagiQ, and then played the demo (freely available here,) most likely you already finished all the free levels included with such demo version. Now, by purchasing the full version of NagiQ you’ll get access to all the islands of the game:

screenshot_4

All of NagiQ’s islands can be unlocked in the full version of the game.

In the full version of the game each island will be immediately unlocked after you complete the previous one. Then you’ll be able to click on an island image to select a level to play. Notice that some levels introduce gameplay variants to keep the game fresh, fun and challenging!

Enjoy! And Happy New Year!

16 Dec

How to play NagiQ

This is a little tutorial explaining how to play our first game, the challenging word game NagiQ. Things will be easier if we start with a screenshot of the first level:

NagiQ-start

First level of NagiQ

Notice there’s a board, with some letters on it. Letter S and letter C. We refer to those starting letters as Mystic Letters.

How to play?

The rules are simple. Form a word (by typing it with your keyboard, or by clicking on the letters of the game’s permanent on-screen keyboard) and place it on the board with your mouse. For instance, type the word ‘star’ or ‘soap’… whatever. When you’re typing the word, the game will show a green verification mark to let you know that it will accept the word you’ve just typed.

NagiQ-soap

I’ve just typed the word ‘soap’. The green verification mark shows the word is accepted by the game.

OK, that’s it for forming words. Now you have to place such word on the board. And the word might be placed horizontally or vertically. Press the SPACE BAR on your keyboard to switch between horizontal and vertical style (alternatively, the on-screen keyboard has a special key for this task, if you prefer to use the mouse.)

NagiQ-horizontal

Horizontal style.

NagiQ-vertical-explanation

Vertical style.

Now that the word orientation is chosen, it’s time to place the word on the board. To do so, simply click on a board’s cell. However, there’s a very important rule:

Every new word you want to place on the board must include at least one of the letters ALREADY PLACED on the board.

That’s why our first word can be ‘star’ or ‘soap’, because such words include ‘s’, and our board already has a letter S. We could also start by forming the word ‘car’, because the board also has a letter C. We could also form the word ‘base’, because ‘base’ has an ‘s’. Or the word ‘case’, which has both ‘c’ and ‘s’. Whatever word you form, the important thing to remember is that such word must contain a letter already on the board.

Use your mouse to move your word around the board, and click to place it. You cannot place your word anywhere, though. You have to connect it to a letter already on the board. Simply move your word and ensure that a letter of your word overlaps a matching letter already on the board, e.g, if your word is ‘star’, ensure that the ‘s’ of ‘star’ overlaps the letter ‘S’ already on the board. When the word is well placed, the game will change the cells’ color to green. Then click to finally place your word on the board (Pro tip: you can press ENTER on your keyboard instead of a mouse click.)

And that’s all. Do you remember those Mystic Letters, S and C? Well, in order to win the level you’ll have to place your words properly, to ‘connect’ with ALL the Mystic Letters on the board.

Upcoming boards contain cookies to get hints, and each island of the game offers gameplay variants. But essentially, these are the core rules of NagiQ. Two little details:

  1. You cannot connect your new words directly to the Mystic Letters, except for the first word you place on a board. In other words, your first word might connect with any of the Mystic Letters S or C. But after you’ve placed your word, you next words must include letters of the words you’ve placed.
  2. Once you use a word, you cannot re-use it on the same board.

Let’s see a commented game to better understand the rules.

NagiQ-1

First level of NagiQ. Two Mystic Letters: ‘S’ and ‘C’.

NagiQ-2

We type a new word: ‘cases’. The green verification mark shows it’s a word accepted by the game.

NagiQ-3

By using the mouse we place our word ‘cases’ so that one ‘s’ of ‘cases’ overlaps the ‘S’ already on the board. If the placement of a word is OK, the tiles’ color changes from red to green.

NagiQ-4

Click or press ENTER to finally place the word ‘cases’ on the board. The color of the tiles changes to yellow after the word is placed on the board.

NagiQ-5

We form a new word: ‘rock’.

NagiQ-6

We want to place it vertically, so we press the SPACE BAR on the keyboard. We can achieve the same effect by clicking the special yellow button on the on-screen keyboard of the game.

NagiQ-7

We move our word and place it to match and overlap the letter ‘c’ of the word ‘cases’ we’ve just placed on the board.

NagiQ-8

A new word: ‘peer’. We place it to match and overlap the ‘r’ of ‘rock’.

NagiQ-9

Now we typed ‘really’. We switch it to horizontal style, and place it to match and overlap the first ‘e’ of ‘peer’.

NagiQ-10

Finally, we type ‘cool’. We place it to match and overlap the second ‘l’ of ‘really’. A smart move, indeed: this word ‘cool’ allows us to also match and overlap the remaining, unconnected Mystic Letter C. Therefore, after playing ‘cool’ (pun intended) we will connect with Mystic Letter C, and there won’t be any unconnected Mystic Letter on the board. That way the board will be completed.

NagiQ-11

Well done. After placing ‘cool’, this level is completed.

Combinations are endless. Have fun 🙂

04 Mar

DragonScales 2 clinches the top spot!

dragonscales2_1st_place_March_2016
Today we received a very good news! Our game DragonScales 2: Beneath a Bloodstained Moon has clinched the top spot on Big Fish Games! When we released the first DragonScales in 2014 we couldn’t reach this #1 place, and one of our goals with the sequel was to aim for the top. We’re very happy because of this accomplished goal! Thank you very much to all of you who made this possible!