Small differences between the past and the present.

Small differences between the past and the present.

As I continue to dig through background files, I find more and more reasons to love this game. This time, Winhil had caught my eye. Specifically, this image:

https://preview.redd.it/1oj9gzbp1yjh1.png?width=416&format=png&auto=webp&s=2bc86131fb10dd569d4f7558eb7646b4cd5f21f3

I don't know exactly what it is about it, but seeing it as a whole has a completely aesthetic effect on me, than roughly a third that can be seen on screen in the game. It's pretty as a postcard. No wonder Laguna has commissioned a painting of it. And then I've looked at how the same scene looks in the Squall's present, and noticed that there are quite a few small details that change with time:

https://preview.redd.it/t8qdfs2f2yjh1.png?width=832&format=png&auto=webp&s=a0b4871867f104d3f32c22a1b9ba17d6c4377edd

They don't jump at you, they are subtle, to be hones I haven't noticed most of them, while playing, but you have to appreciate the effort of drawing the same things differently, rather than just throwing a color filter over the scene and calling it a day. The trees that are slightly taller and "bushier". Dandelions spreading in the foregrounds, all the flowers being different, ivy spreading onto the roof of the shop. Shop itself, it seems, either changed the owner, or just rebranded. And hotel also had changed its sign. And, of course, the Moon not being there anymore. So here's what's different in the rest of the town:

https://preview.redd.it/czsd3eu83yjh1.png?width=480&format=png&auto=webp&s=e4e9bdccb4b843b9d320d50f3d0e601d9194ea46

Again, more trees, more dandelions and it seems like there is a grove in the road because of the use.

https://preview.redd.it/cvbqabrk3yjh1.png?width=480&format=png&auto=webp&s=7bb82122ee7e8f2b589b28e22d924129f6566e2c

Trees, dandelions and ivy are all growing. And the shop sign had changed. Some note is on the signpost. And the detail I like the most - someone had been fixing the fence with diagonal boards.

https://preview.redd.it/sr0mouw34yjh1.png?width=368&format=png&auto=webp&s=57d4498dfc5cea5c13f25880a4047d7e494a9c24

Inside the shop all the flowers are completely different and one of the light fixtures are swapped for the picture.

https://preview.redd.it/zm86lp5c4yjh1.png?width=480&format=png&auto=webp&s=84938a8f1987da61ba4921474bb777878407ef3f

Sorry about the artifact in this one. This is the only one that looks worse in Laguna's time. It has been broken into and all the pictures stolen. There are clear marks of light color on the walls they've been hanging on. In the present pictures are restored.

https://preview.redd.it/7q4614ly4yjh1.png?width=672&format=png&auto=webp&s=2f54b0cce7a2e90626f8e52fcf6d989d174f297a

In this one, the one tree in the picture is actually gone. But the ones in the background had grown. And there is slight, but noticeable change in the bar menu, as well as in color of the awning.

https://preview.redd.it/g9yajtpj5yjh1.png?width=320&format=png&auto=webp&s=301d3a99ab412b9514262c5cf114e4eed7a12691

Cracks are spreading from the bullet holes, it might not be safe to live there, but someone had been watering that flower pot. :-)

https://preview.redd.it/dlqqp24r5yjh1.png?width=640&format=png&auto=webp&s=6c23655fcdd39ade1d0f21062e66e3376509f997

This room had changed the least. Just some flowers on the right.

https://preview.redd.it/66gg4ghw5yjh1.png?width=512&format=png&auto=webp&s=e50a47f4a5db87d0d195b0883bb1a7d9525e240b

Old posters half torn and covered with new ones, menu that had been wiped. But there are flowers now.

https://preview.redd.it/v993cww56yjh1.png?width=336&format=png&auto=webp&s=8a76c2f75affafa3c7e7b9b954a7a9aba2d1c84b

Raine's things are gone - blanket, teapot, teacups and a book. But the rabbit on the wardrobe had gotten himself a buddy! And houseplants are thriving.

https://preview.redd.it/4nmf45ir6yjh1.png?width=352&format=png&auto=webp&s=bca24d8d5c6c6235fe79c07457cf7125c42c8ce0

Not much change here either. Just some flowers and that one sunflower on the fridge.

https://preview.redd.it/qyijxbx07yjh1.png?width=416&format=png&auto=webp&s=2db413cf2c53ef5dc5417d8ae7cd2813d0ce92a3

Hotel is the weird one. It has a map of the real world in the past, but in present it has been torn down. Go figure out what that means. That the world of FF8 was connected to the real one in the past, but not present? Aside from that the kitchen had been rearranged, and flowers, of course.

https://preview.redd.it/fbrzz91b7yjh1.png?width=400&format=png&auto=webp&s=4cb2cb831de93bdbd56fdd664b5e922071b51450

This one has so many details changed for some reason: Flowers, items in the drawer, crack on the wall, writing(?) on two walls, picture torn out of its frame and ottoman moved slightly to the right.

https://preview.redd.it/xxjkfq8s7yjh1.png?width=896&format=png&auto=webp&s=dca214c46830a1f46605942ec4c5ad06590f0cda

And finally the one that has changed the most. But weirdly, in this one the Moon is visible in both times, while in other pictures of the present it can not be seen.

reddit.com
u/zzmej1987 — 3 days ago

Another little find.

We have all seen this introductory shot of Balamb Garden at the very beginning of the game:

https://preview.redd.it/07gfgbslfzih1.png?width=320&format=png&auto=webp&s=0780587d8a755c8a11ea854dd73fded0743396fb

However, in the game files there is also this gorgeous night time version of it:

https://preview.redd.it/wcnrck8rfzih1.png?width=320&format=png&auto=webp&s=0593232d6ec9186abc30683fafbf4daf39c9603c

I don't think it is used anywhere in the game. Anyone want to try upscale it and make a wallpaper? ;-)

P.S. The scene is called bgrank1. The first screen is also used as a background for SeeD exam score.

EDIT: Mystery solved! The second picture is used on that very SeeD exam score screen. If you wait a bit without exiting score screen, day will gradually change to night. Thanks to u/myst6re for the explanation.

reddit.com
u/zzmej1987 — 7 days ago

Technical appreciation post

Recently, I've been having great fun messing around with the game files and posting GIFs I've created as the result. This post is a bit of an explanation, a bit of an admiration and a bit of complaining about the inner workings of FF8.

So, backgrounds. Those lovely pre-rendered backgrounds that we all want to put as wall papers on our desktops. The forgotten gem of artistic expression completely lost in this era of glossy full 3D environments of Unreal 5 and Unity and small indie 2D pixel-art platformers. How do they work?

Surprisingly, despite very strict technical limitations of PS1, they are quite complex, allowing for incredible flexibility and interactivity of the environments they depict, all, while technically being just 320x224 pictures.

Let's dive in! First, if you google FF8 background data, you will find that it stored in .mim files. Where do you get one? Well, they are all on the discs, in the FIELDS.FS archive. You will need a program or two to unpack those. And then another one to open .mim file. But when you do that, you will see this:

https://preview.redd.it/f164l1lmeeih1.png?width=1664&format=png&auto=webp&s=d2d79e1eba28d133304b371d6558124e8df0d4c3

That does not look like a background at all. And then you look at specification, and realise that there is no direct way to visualise the scene as it is in the game in any simple manner. You have to write a rendering emulation, that will reconstruct a scene from this jumbled mess, in more or less the same way as PS1 hardware does.

PS1 renders its graphic using 16bit colours, in a direct 5 bits per colour format and 16th bit designating transparency. Maximal resolution for PS1 games is 640x480, but FF8 uses it only for cinematics. All fields gameplay (3D models on pre-rendered BG) occurs in 320x224, menus use 368x216 and battles - 320x216. But even if the game runs on half the maximum resolution storing pictures with 2 bytes per pixel in 320 * 224 arrays is still way too wasteful for the PS1 hardware and so the trick was devised, that pretty much all the developers used. Instead of working with full 32768 colours 16bit allow, they would only render 256 colours at a time, but they will render the picture with tiles of 16x16 size, and since that's 256 pixels exactly, no tile can ever need more than 256 colours. All that is needed is a palette storing 256*2 bytes, that would translate bytes of the tile into 16bit colours, that would get rendered on screen. Some tiles are packed even more compactly, if a tile uses no more than 16 colours, it can store 2 palette indices per byte, thus taking half the space.

And that is exactly what .mim files are. There are two types of .mim files, Type2 is a bit smaller and simpler in its structure, so I'm going to be talking about Type 1. It consists of 24 palettes, first 8 for some reason being technically inaccessible for rendering background in fields (perhaps they are used for menus) and 13 textures of 128x256 size, from which tiles are picked out. How does PS knows where on screen to put each tile, and which palette to use for rendering it? That's where the tile map file comes in.

Like .mim, .map files are not text, it is a binary format containing 16 byte records each describing the placement of one tile. Each record tells where on the screen to put the tile, coordinates are relative to the centre of the screen, for some reason, which texture to use, where in the texture the required tile is, whether tile references 256 or 16 colour palette, and which palette to use for the colour translation.

And that's where simple stuff ends, and fun stuff begins. Besides the trivial positioning of the tile, here's what else PS one can do and .map format describes:

  1. Z-coordinate. Some tiles are further away from us, than others. This number essentially represents distance from camera, the bigger it is, the farther is the thing depicted on the tile.
  2. Layer. On top of z-coordinate, there is yet another separation into layers, this is mostly used for independent movement of things that are different distances from the camera, so that the parallax effect can be achieved.
  3. Animation id and animation state. Yes, backgrounds can have actual animations in them, each playing independently however many frames have been drawn for it.
  4. Blending mode. Tiles that are further back are not always going to be completely painted over by closer tiles. If the foreground tiles are instructed to blend with the background they will appear to be transparent, and some that are close enough in the Z coordinate will even be painted over 3D models in the scene.

Let's see what composition of image look like, concentrating on static background first. In most fields the big static image is encoded in tiles with animation ID of 255. SO let's try to arrange tiles for the farthest layer of 255 animation for the field "ecopen2a", which is going to have z_value of 4094 and layer ID 4. Most pictures in this post are GIFs. If they don't GIF for you, click on them. Loaded separately, they display the animation as intended.

Processing img qcdmolpmeeih1...

Let's add more layers:

Processing img u4ll2dtmeeih1...

  • z = 4094 / layer = 2: Note, there is a whole well detailed structure on the right.
  • 4094 / 0: If you don't see the difference, it's a small red light near the black "hook" on the right.
  • 4093 / 2: Small structure added in the upper right corner
  • 4092 / 2: Light in the right window of the round building in the lower left corner.
  • 4092 / 0: And now we have our actual foreground
  • 4090 / 0: Light in the transport tube.
  • 642 / 0: Both tubes and the final structure on the right that covers everything underneath it
  • 639 / 0: Glass in transport tubes
  • 632 / 0: Glass on the right building
  • 58 / 2: Glass on the lower left building

And this is a good place to talk about blending. We have already seen two types of it: designated with numbers 4 and 1. 4 is "no blending", when foreground tiles overwrites background ones. This is what happens to the right building after 4094 / 2. Blending mode 1 is what is known as "additive blending", which happens to transparent walkways and glass. If we render those textures separately from the background:

Processing img bx3adrvmeeih1...

We can see, that they don't contain background images. The fact that we see background through them is due to their colour being added to previously rendered tiles.

What are the other modes? According to the specification modes are:

>1 byte specifying which blend mode to use for this tile, 1 is additive blending, 2 is subtractive blending, 3 seems to be +25%, 4 seems to be the default (no blending) and 0 is unknown (elview1)

Well, 0 is unknown, 3 only "seems to be", and subtractive blending seem to require a college degree to implement. Back to googling we go. And luckily "PS1 colour blending" is not hard to find. Modes are:

>0.5f * B + 0.5f * F // Mean 1.0f * B + 1.0f * F // Additive 1.0f * B - 1.0f * F // Substractive 1.0f * B + 0.25f * F // WTF is this?

It seems to be aligned with spec description. The 3rd is +25%, the mystery one is just average of the two colour, and "subtractive", just means subtract one from the other. Aaaaand it doesn't wok. I can't say, whether 0 or 3 work as intended, they are not present in that many scenes. But 2 does not work at all. I will borrow a different scene for a second, since it has mode detail in the blend mode 2 affected area. This is what it looks like without the animation frame that has subtractive blending:

https://preview.redd.it/wv3mdkxmeeih1.png?width=448&format=png&auto=webp&s=231c7a05dfa913129b23aee06ce6adb5d003c55f

The tube is clearly transparent, but just as clearly, it is "overexposed". It is way too bright. And there is an animation that contains exactly one frame, that subtractively lowers it brightness. Here's the process of building the scene with that animation frame included:

Processing img 5kx4h71neeih1...

You can clearly see that the tube now is way too dark and non-transparent. And this is what it looks like in the game: ![[eccway2-game.PNG]] It is transparent, brighter than with subtractive layer, but darker than without it. So maybe there is come kind of partial application? Like blinking lights animations are made with fade-in fade-out effects of the single frame. Maybe there is a fade value for which it would look right?

Processing img i4l6ff9neeih1...

Nope. There isn't one. The overall right brightness is around fade value of 8. The correct amount of detail seen through the closer end of the tube is at the value of 6, and the transparency on the farther side of the tube seems right at the value of 10 (look at the blue horizontal stripes on the side of the building. One can be barely seen in the game screenshot through the tube). So either there are some per-tile shenanigans, or the subtractive blending is not additive, but rather multiplicative. That means that instead of adding or subtracting colour values of background and foreground, they are multiplied by each other.

Let's try doing that. So, it seems, that overall reduction in colour is by around 50%. Given that tiles of subtractive layer are pretty much all pure white (31, 31, 31), which when directly subtracted will reduce any colour to black, the multiplicative formula should be

new_color = background_color * C
C ~= 0.5, when foreground_color = 31
C = 1.0, when foreground_color = 0

Another educated guess we can make is that division, which clearly needs to be involved here, should be by a power of 2, because that allows for a very quick implementation by a bit shift operation, and in rendering pipeline speed is crucial. With those constraints in mind, the simplest formula one can think of is:

new_color = background_color * (64-foreground_color) / 64

Let's try to make a frame blending it this way...

https://preview.redd.it/35faqhbneeih1.png?width=448&format=png&auto=webp&s=e69048ab5ddda1f0d023386a3c59703a4742d4ac

Bingo! Maybe it's a tad brighter, than in the game, but the amount of details seen through the tube is exactly right on both ends. So I'm going with that for my needs. Let's go back to our original scene, and see the difference subtractive layers make.

Processing img 0x625ddneeih1...

I keep calling them layers, but they are actually one frame animations. In case of this scene:

  • Animation 0 darkens the upper tube
  • Animation 7 darkens glass in both buildings
  • Animation 8 darkens the walkway
  • Animation 9 darkens the lower tube Only a couple more things left to do - first, animate lights by fade effects and whatever else is actually animated in the scene by drawing actual frames of animations:

Processing img g5iklafneeih1...

  • Animation 1 is the light on the roof the the background building.
  • Animation 2 is lights on its edge
  • Animation 3 is lights on the roof of the lower left building
  • Animation 4 is pads in front of tube entrances
  • Animation 5 is blue lights on the right building
  • Animations 6 an 10 are red-green indicators on top of tubes. Those are actually have two frames, one red and one green.

Final step is to note that this scene is actually 400x240 pixels in size, rather than 320x224 it would be rendered in the game. It is clear that left most column and bottom row are "defective" and are not going to be rendered. But that still leaves us with 384x224 resolution, which means that we need to add 64 pixel long horizontal pan over the scene with a 320x224 view window to render it as close to the actual scene as possible:

Processing img hwtckqjneeih1...

I am not sure how pans like this are handled in the game, there are another two files determining camera behaviour: INF and CA. I just shift target coordinates for the tile by some amount every frame, and that works fine for my purposes. I'm pretty certain, I can even make parallax happen. But that will require some more coding and is not directly related to how the game handles things. So there you have it. Now you understand how the game creates those wonderful backgrounds that we all admire.

P.S. I would like to thank Daniel Hepper, for the wonderful 8x8 font, that I have shamelessly borrowed to make labels on images in this post.

reddit.com
u/zzmej1987 — 10 days ago

A bit of an upgrade to my background extraction script

I've added an emulation for fade-in/-out animations and ironed out some kinks in file reading, so now the darkening animations work correctly. I'll probably make a post about the technical side of background rendering in the game later.

u/zzmej1987 — 16 days ago

Ragnarok GIFs.

This is almost all rooms on the Ragnarock, though not even half the scenes. Most of the rooms have two version, slightly different in color, one for while Ragnarock in space and one for when we are back on Earth. I've joined hangar version together, so you can see the difference. There are also many many versions of cockpit and guest room, from different angles. The animation for cockpit might not be exactly as it is in the game, because it is made by shifting underlying cloud texture by code, not by predetermined set of prerendered frames. I've chosen the direction of move, so that it loops in a reasonable number of frames, so it may be different from the actual one in the game. Also, I don't remember whether animation of the big door in the 5th scene opening is actually used in the game.

Hope you enjoy this. Top comment decides which location to do next.

u/zzmej1987 — 20 days ago

Just a GIF I made from extracted background data

I continue to play around with game files, and I wrote a little python script to extract background images from FIELD files. Animations are neet. I'll probably do some more and upload in galleries, if anybody is interested.

u/zzmej1987 — 21 days ago

It seems, Rinoa has on opinion on whether she becomes Ultimecia.

Just a little tidbit of dialogue, that I have discovered while digging through game files. If you find Ragnarok in the future after going through the Time Compression, go to its cockpit and talk to Rinoa there, here's what she has to say:

>Rinoa: Even if Ultimecia is defeated, it won`t change the fact that she was born. My powers will be carried on across generations and eventually reach Ultimecia. What does it mean to inherit Ultimecia`s power?"'

Given that this dialogue happens after Rinoa had been possessed by Ultimecia and afforded the same insight into who and when she is, it is not surprising, that Rinoa echoes the same things Edea says in the beginning of disc 3:

>Ultimecia is a sorceress from the future. A sorceress many generations ahead of our time.

Both agree, that Ultimecia is separated from the game's present by many generations of humans and Sorceress. Sorceress powers will travel from Rinoa to others and then to others still, until they reach Ultimecia however many centuries later. And inheriting those powers back through Edea is quite confusing for Rinoa, as it should be.

Anyway, thought that was interesting.

reddit.com
u/zzmej1987 — 28 days ago

Non-canon stories and supplementary materials

This is an attempt to collect everything that does not belong in the canon story lines, that is available at the elfquest.com:

  • The Original Quest #21 - issue dedicated to behind-the-scenes stuff and answering fan letters.
  • New Blood #1: "Welcome To the Worldpool" - introductory pages to the concept of Worldpool - non-canon stories set in the ElfQuest settings.
  • New Blood #1: "A troll's tale" - A story of Picknose becoming the king as told by Picknose himself.
  • New Blood #1: "Berries for the brave" - ElfQuest and Loony tunes crossover.
  • New Blood #1: "Behind the scenes" - a small artwork gallery.
  • New Blood #8 - Fully dedicated to cartoonish non-canon stories similar in style to ones in NB1
  • New Blood Summer Special 1993 - 8 stories, all marked as being Worldpool, but with varying degrees of canonicity:
    • "Eclipse of the Heart" - prequel story about Joyleaf telling a story of solar eclipse
    • "Heal thy Elf" - humorous cartoonish crossover with Charlie Brown comic
    • "Fur Flower Gift" - a story set in pre-Shards War time about a friendly interaction between Redlance and a human boy with talent for music.
    • "Rock-Shaper" - the most canon story of the bunch, explicitly set in Sorrows End, right after Kings of the Broken Wheel #4, showing Ahdri coming into her gift of rock-shaping.
    • "Lethargic Ladhands" - Smurfs Crossover.
    • "The passage" - Story of Skywise overcoming claustrophobia he suffers because of his entrapment during events of Siege at the Blue Mountain. Set after the Time Skip.
    • "Naming day" - prequel story about Treestump getting his name.
    • "How not to write ElfQuest: New Blood" - a humorous list of grievances raised by WaRP against authors of New Blood.
  • ElfQuest v2 #2 & #3: "Proof Positive" - A story taking place after Fire-Eye in the town of Passage and Forevergreen, in the equivalent of early 20th century. No elves are mentioned by name, and the only ones who could have been there had definitely left in the Final quest.
  • ElfQuest v2 #6: "Special Preview" - First few pages of "Captives of the Blue Mountain" novellization.
  • ElfQuest v2 #7: "Wavedancers gallery" - introduction of Wavedancers characters in drawings with brief descriptions.
  • ElfQuest v2 #7: "Elflord" - A story from a completely separate world, drawn in style similar to Fire-Eye.
  • ElfQuest v2 #8: "Rogue's Curse preview" - Introduction of characters and basic plot of Rogue's Curse.
  • ElfQuest v2 #8: "Leetah's Dance" - Frames to make animation from
  • ElfQuest v2 #8: "On the brink with Jink" - "A story about a story" about Jink, that never got published.
  • ElfQuest v2 #9: "Mr. Beat" - Cross over between the titular Mr. Beat and trolls from ElfQuest.
  • ElfQuest v2 #9: "Wild Hunt Preview" - Introduction for Wild Hunt, similar to one about Rogue's Curse in EQ2 #8.
  • ElfQuest v2 #10: "Dreamtime 1997" - Wendy herself visits the world of Two Moons as talks to Cutter and Skywise.
  • ElfQuest v2 #11: "Defining moments" - Timeline of ElfQuest publication with comments from Wendy and Richard.
  • ElfQuest v2 #16: "Sorry, mr Lucas! Honest!" - Cartoonish crossover between Star Wars and ElfQuest.
  • ElfQuest v2 #17: "Kings Cross" - Alternative story taking place in Djunsland roughly at the same time Shards War takes place in the main story. Cutter is a human-elf hybrid and is allied to Grohmul Djun against magical creatures, not unlike ones Ember have faced in Hidden Years.
  • King's Cross #1 and #2 - standalone issues continuing the story from ElfQuest v2 #17.
  • ElfQuest v2 #25: "Grow wild and the 7 elves" - Humorous retelling of Snow White with ElfQuest characters.
  • ElfQuest v2 #26: "Wish upon a star" - Collaboration with Make-a-Wish foundation. A short comic about Skywise visiting Earth.
  • ElfQuest v2 #26: "Blood of ten chiefs revisited" - Text stories taking place during "Blood of ten chiefs"
  • ElfQuest v2 #27: "Story Time" - Cartoon about as story Picknose tells Trinket at bedtime. Features Mr. Beat.
  • ElfQuest v2 #29: "ElfQuest at 20" - Fanart gallery.
  • ElfQuest v2 #31: "Small World" - A story about Elvin "fertility ritual" led by Ember, happening on a small island, far enough into the future for Cutter to be very old.
  • ElfQuest 2001 Summer Special #2: "Recognition" - A version of events happening in Djunsland in the beginning of the Final Quest extended with non-canon details.
  • Return to Centaur - A graphic novel adaptation of "Isle of View" from Xanth series. Originally published in ElfQuest v2 #19, #23, #24, #28, #30, #31
  • Essential ElfQuest - A brief retelling of all canon stories published before ElfQuest v2.
  • ElfQuest: A Gift of Her Own - An illustrated children's book about a girl stumbling into the Holt, set in pre-Shards War period.
  • Worldpool #1: "The Perception of doors" - Comic set in the middle of Fire-Eye story line.
  • ElfQuest “Ashcan” - preview versions of Hidden Years of Shards issues at the start of Shards War.
reddit.com
u/zzmej1987 — 3 months ago