Welcome back, up-and-coming heroes! This month’s update covers something new! There’s quite a bit of ground to cover, but nothing beats experiencing it firsthand. See for yourselves:
If you haven’t guessed already, part of what we’re currently working on is implementing high-resolution skit images into Tales of Destiny 2 in order to enhance the game’s experience further. In this article, we’ll talk about how this is done.
For starters, we want to preface that this is a feature only supported by the PPSSPP emulator so far. It currently does not work on actual hardware or our PS2 version of the patch. However, things aren’t set in stone, so that might change in the future as we complete other aspects of the project.
Now that the important disclaimer is out of the way, let’s take a look behind the scenes. Here’s a comparison with examples of an original skit image, an AI upscale, and a high-res version.
So, what happened here? How are the lines so clean? Why are the colors so different?
We actually utilized the skit images and color palettes from Tales of Link and Tales of the Rays! They’re identical to the ones in game but are at a much higher resolution. That sure seems like an easy texture replacement, right? However…
…Even referencing from official assets has its limitations.
Tales of Link doesn’t have the entire catalog of Tales of Destiny 2‘s skit images available. Tales of the Rays, on the other hand, was built for mobile screens in landscape mode, so its skits are half bodies.
What do we do then…? Clearly, even the AI isn’t perfect—the lines are all jagged since the original skit images are at such a low resolution!
The only solution:
We fill in the missing parts by hand!
Thanks to the power of redrawing, we can make our high-resolution skit dreams a reality. Once again, since we’re talking about images, it’s better to have some visuals to go along with it.
The Step-by-Step Process
Step 1. Resize the original sprite sheet.
For this example, we’ll work with Nanaly’s neutral face, because it will soon be clear that she is the physical embodiment of a lot of issues we run into during the process.
Despite rendering the skit images at 4x the original resolution (256×256 to1024x1024, for those curious), we actually resize it to 8x (2048×2048).
Similar to our font approach, it’s typically good practice to draw images at a high resolution and then scale them down, especially when lineart is involved!
(Another detail for those more familiar with image editing programs: We’re using Nearest Neighbour to upscale the images. This basically retains the same pixel proportions. It’s easier to interpret the individual pixels of the original instead of an interpolated line, since the original is far too low resolution for smoothing methods to be effective.)
Step 2. Superimpose as much of the existing sprite as possible.
When it comes to images, the game reads from a specified area of the sprite sheet. Hence, we can’t place our high-resolution sprite all willy-nilly; it has to be as close to the original as possible!
Here, we’ve matched up the Tales of the Rays sprite with the top half of Nanaly’s skit portrait. This comes with some interesting other challenges, such as the fact that Tales of Destiny 2 stores its skit images more “squished” than how they appear in game, so we have to account for that when redrawing too.
Step 3. Color correction!
Before we actually start drawing Nanaly’s bottom half, we need to do some color correction. This is to identify the palettes of areas not implied/shown in the Tales of the Rays sprite. In this case, we are looking at the purples and reds of Nanaly’s belt. We can’t get this exactly 1:1 with the Tales of the Rays sprite, but it’s close enough.
On other characters, this is a lot more forgiving, since Tales of designs tend to reuse the same colors in different areas. Take Reala’s skirt, for instance:
Step 4. Redraw!
We follow the pixels as closely as possible and try to interpret the lines. Fortunately, since Tales of uses a simple shading technique, it’s not too hard to mimic.
You’ll notice that the background is white instead of the transparent “checkered” background this time. The final sprite will be exported as a transparent image, but this is just to make sure we didn’t leave out any empty gaps. Similarly, other contrasting colors like bright green are used for comparison but not included in our visuals to save you from eyeburn. (It is effective, though, which is why we use it.)
And that’s it for the main image! Here’s a version downscaled to the original resolution, for comparison:
Pretty accurate, actually! Of course, those with a sharp eye will notice a few inconsistencies—a bit too much shading in one area, inconsistent lines in the other, and so on. We will be editing and playtesting with these skit images to make sure you don’t get taken out of the experience.
Step 5. Expressions!
We will now direct your attention to Judas as the next most, er, “problematic” person.
He comes with very crispy full-body sprites, but unfortunately for us, he dislikes looking at Tales of Link players, so we’re tasked with the seemingly impossible task of redrawing this extremely low-res eye:
The lips can at least be inferred, but the eye? Where do we even begin with that? Do we trace around the outer edge and hope his iris doesn’t end up too big, or do we play it safe and draw it much smaller?
Well, fortunately for us, we don’t have to contemplate either of these questions.
Tales of the World: Radiant Mythology 3 skit faces to the rescue! This is another point of reference we’re using, and while it’s nowhere near as high resolution as the sprites in Tales of Link and Tales of the Rays, it provides more than enough information for us to do our redrawing.
The evil is defeated!
Once again, we have to note that Tales of Destiny 2‘s sprites are slightly squished, so his eye has to be redrawn a little wider, and the curves less steep. Everything will look proportionate when inserted in game, but if it still looks a bit funny, a little bit of trial and error won’t hurt.
High-resolution texture replacements take more work than one might expect. We have to source out the original assets, scale the images to fit in the sprite sheet, perform color correction, finally start redrawing, and account for the many different expressions characters have. And that’s not even addressing the time it takes to do the actual redrawing! Still, it’s worth it, if only so we can see Kyle’s precious smile in HD.
I’m amazed at each new post I see!
Wow ! Another post, another huge surprise. I’m amazed at what you’re doing. Can’t wait to play it ! Can you give updates on integration soon ? 🙏
Good prgress guys!
What everyone expects: a simple translation of the game
What you give us: essentially a remaster of the game
This is an amazing labor of love. Thank you for all of your hard work.
This is really incredible and such a great use of resources from different games. I’m consistently blown away this project. Keep up the amazing work, everyone!
Mhh well, that disclaimer sure reads more like a backpedal after the team was accused in Reddit/forums, of silently using exactly this feature of PPSSPP, to display a higher quality result than what was achievable through actual romhacking, at least for now. Nevertheless, rectify is wise.
May I ask though, doesn’t this completely defeat the purpose of adding a selectable higher resolution font? Sounds like PPSSPP texture replacing is much simpler and gives higher freedom of which texture to use. Not to mention the fact that it involves less work, for a feature that only makes sense in the context of emulation, anyway.