Sunday 31 March 2024

Star Wars prequel Novelizations

Here is something I never thought I'd ever read, yet here we are.

The stories aren't that amazing, but I wouldn't blame the novel authors for that. My understanding is the books were written prior the films' releases, so the authors had access to visual material but certainly not the entire films.

Then again the scripts might have events and dialogue that were omitted from the films at the last moment, giving rise to the idea that known deleted scenes would have higher "canonical" status due to their inclusion in the films' novelizations.

Oh, and it's been a while already, but Disney decreed these as no longer "canon". B-b-but these are official film novelizations? It should teach people not to trust any such labeling, or preferably, forget the whole idea of canon.


Terry Brooks: Star Wars: The Phantom Menace

The story doesn't start with the Trade Federation ships in vicinity of Naboo. Instead we're with Anakin the wunderkind on Tatooine. We get to see what he was up to before he appears in the film, and what kind of life he lived.

Whether these pre-prequel materials are based on something Lucas left out of his film, or were invented by the book author, I don't know.

In any case it's a good choice to have the story from Anakin's viewpoint, fleshing out the character a little more.

With the huge entourage moving around, the storytelling occasionally needs lists like "Anakin, Artoo detoo, See-threepio, Jar Jar and Padmé went this and that way", something that works more economically on film. Book-to-film transitions often reduce the amount of characters, but here I'm wondering if leaving a few out would have done good. 

Characters such as Watto and Sebulba, despite having descriptions of sorts, also remain unclear. Well, the films didn't flesh them out much either, but their appearance spoke volumes.

Star Wars might be considered "visual sci-fi" rather than science fiction proper, and stripped of this quality the story is lacking in science fiction of any kind.

After seeing the film, the book may feel like an improvement, especially where the text can include more helpful explanations and character inner motives, giving a little more clarity and purpose to the plot. 

Qui-Gon is more explicitly made to sound like a rebel Jedi, with by-the-book Obi-Wan having no clue as to why Qui-Gon would ruin his career so. Kenobi's a little like a PhD candidate just about to finish, thinking his supervisor isn't all that.

It's more apparent that Anakin continuously pines after his mother. Future events are in some ways better prepared, with Anakin saying he will eventually marry Padmé. You can also try to imagine Anakin just a little bit older.

What about some of the things that stuck out like a sore thumb in the film?

Jar Jar Binks in literary form isn't as annoying as his cinematic counterpart. Still, a lot of effort has been taken to reproduce his antics faithfully in text.

The droid army is more sinister as they don't go bumbling around shouting "roger roger!" In fact the regular droid troops say nothing all, possibly the literary form does away the need to personalize them in any way. 

Anakin's seemingly accidental assault on the Trade Federation ship has some more explanation behind it, and made to tie in more explicitly as evidence of him being the Chosen One. Tonally, it's still a kid destroying a battleship while yelling "whoopee!" while doing it.

The book doesn't offer a radically different interpretation to the events described in the film, but then again who'd expect that from a novelization.

Brooks famously wrote the Shannara series of fantasy novels. I once tried reading the first one but circumstances prevented me from finishing it.


R.A. Salvatore: Star Wars: Attack of the Clones

Padmé Amidala is to represent Naboo at the Galactic Senate, to vote against the Republic founding an army to counter the growing separatist faction. Continued assassination attempts force her to return to Naboo, but not without the Jedi Knight Anakin Skywalker as her guard.

Again, the beginning of the book describes events prior to the film.

In this case, it's Shmi Skywalker, Anakin's mother, and the book gives details about her life with Cliegg Lars on Tatooine. Owen and Beru are also involved. We get more insight on how Shmi gets kidnapped by the Tusken raiders, how Cliegg lost his leg and why the farmer community could not be of more help.

Anakin's inner life is again described more, which actually doesn't make the romance portions much better. What does work are the parts with Padmé's sister and family on Naboo. This was quite interesting and added a further dimension to the relationship.

It was also amusing to read more about the interactions between the kid Boba and his father Jango Fett on Kamino. Jango is nothing but a proud father of the future best bounty hunter in the galaxy.

No less than five planets are featured: Coruscant, Naboo, Tatooine, Kamino and Geonosis. I never gave this much thought, but no wonder the story seems a little incoherent.

When the narrative turns to the finale on Geonosis, the prose becomes more minimal, almost to the point of being curt, with only little added detail. I'm wondering if anyone who hasn't seen the film gets what kind of world Geonosis is, what the war equipment and the clone troopers really look like.

I found this interesting:

[Count Dooku:] "And let me remind you of our absolute commitment to capitalism... to the lower taxes, the reduced tariffs, and the eventual abolition of all trade barriers. Signing this treaty will bring you profits beyond your wildest imagination. What we are proposing is a complete free trade." He looked at Nute Gunray, who nodded.

The separatists are not a veiled allegory, they are explicitly stated to be free-trade capitalists. Although the name "Nute Gunray" is known to be a composite of Newt Gingrich and Ronald Reagan, the scene perhaps also echoes Hitler's promises to the German industry.

There's a central mystery to all of this, but as nothing is really revealed in this installment, the threads are just left hanging around. Obi-Wan even comments on occasions how nothing makes sense, and I'm not sure if it's a meta-observation or not.

Count Dooku is a stand-in for the main villain, but as he features very little his characterization and motives remain unclear. The added material does little to remedy this problem, although it is fun to read about his lightsaber technique.

The overall plotting is something like this:

–The Sith Lord, who is not yet revealed, is pulling the strings at every possible stage.

–The Sith Lord is out to discredit the Jedi order entirely, and like a parasite picks up the Republic as the platform for power. The separatists are a bogeyman concocted to create disarray, bypass normal laws and to advance to a power position through technically legitimate means.

–It is the Sith Lord who ensured both the droid army and the clone army would be created.

–The Sith Lord is behind the assassination attempts, yet also ensured that Anakin and Obi-Wan would guard Padmé.

In absence of any other explanation, it's possible the Sith Lord made sure that Anakin alone would spend quality time with Padmé and had Obi Wan follow a breadcrumb trail to the discovery of the clone army, leading to its adoption.

Just to draw a line somewhere, I find it less credible that the Sith Lord fomented the Anakin-mother relationship, arranged Shmi's torture and the ensuing nightmares (such theories float around).

Rather these events were useful raw material for directing Anakin, and generally I find it more likely the Sith improvised and used emerging situations rather than planned everything beforehand.

A villain having a complex plot isn't always a great recipe for a movie plot, and despite the brave attempt it doesn't become much more compelling in literary form.

Salvatore is also an experienced fantasy author, with Star Wars novels in his resume.


Matthew Stover: Star Wars: Revenge of the Sith

This novel is held in high regard (see here and here) so I also had high hopes for it. In fact this was one motive for reading the whole trilogy.

Stover takes far more liberties with the dialogue and detail, that's for sure. You feel you've almost read an entirely new interpretation, and not just something that retells the film with extras.

I was surprised that on the whole I didn't really like it more than the other two. I felt the author takes perhaps too many of those liberties, reinterpreting events using prose thick with bombast and references to other Star Wars media.

There are certainly some fun storytelling devices. Unlike the film, much of the rescue operation at the beginning is told from Count Dooku's perspective. He then doesn't mention silly things like R2-D2 setting droids on fire, and the hijinks in the lift are mentioned in passing, as something not worthy of note.

It can get little dense. There's a page (63 in this version) that makes no less than five references to Star Wars lore not actually mentioned in the prequel films, beginning from the worlds of Aargonar and Jabiim, name-dropping mynocks and Asajj Ventress, ending with a Krayt Dragon simile. Instead of pulling me into the world, it makes me wince like a Jawa trading a Bantha to a Wampa.

Dialogue and scenes are often greatly extended and modified from what must have been available even in the script. At the crucial moment Palpatine offers Anakin whatever his heart desires, there's a weird escalation as Anakin plays along and says first he wants a speeder.

Ok, I would have wanted to have this scene.

But it's not only about writing style. I disagree with the very idea that Kenobi's and Skywalker's heroic deeds are distributed to large masses via some supposed interstellar Holonet, leaving an impression on an entire generation.

If there's a space internet, I have to ask how are Jedi relegated to an "ancient religion" and barely known after 20 years? If anything, novel writers ought to have found ways to explain how the fame of Jedi diminished.

The novel must be the main distribution point for the theory where Emperor's deformed face is supposed to be his original Sith face. Any other appearance would be a mask or an elaborate disguise. The idea is presented vaguely here, but many take it seriously. No, just no. It's a stupid idea. Forget about it.

The author makes references to Tao Te Ching, as phrases such as "hope is as hollow as fear", "darkness within darkness" and "what is a good man but a bad man's teacher?" pop up here and there. It might even be the Stephen Mitchell translation specifically. Also, some of the scenes describing how Force "feels" to its user seems derived from Taoism, through western eyes at least.

This is another interesting idea. The Star Wars films are famously inspired by Samurai films and probably Wuxia too. Now this is a book, so why not take some eastern literature and philosophy in the mix? But it's one more of the liberties taken with the source material.

Revenge of the Sith is certainly a wild ride, brimming with ideas, ups and downs, hits and misses, and I can't help but think it would have been better had it been toned down a notch.

Sunday 24 March 2024

Multipaint 2024

Another year, another version. Making the cut between the "annual" Multipaint version is a little arbitrary, but I think this year there's some cause for this.

For once, the new Multipaint should be a little faster than the old one. This is largely due to using a more Processing-friendly way of rendering the target platform screen as an 1:1 bitmap first and then scaling that using Processing's own image() capability. (Processing is the Java-based environment in which Multipaint is programmed in).


Pan and preview window

For panning the screen around, no new redrawing is needed on the target platform level, making the pan and internal pseudo-window handling (palette, settings) easier.

Previously I felt the non-magnified viewport should be fixed, connecting Multipaint with old programs such as Deluxe Paint, Degas Elite or Art Studio. But it did cause some clunkiness when zooming in and out near the screen edges with mousewheel.

Now I think it's possible to have my cake and eat it too. So, even if the 0-level screen can be panned by middle button drag, if you use the old fashioned magnify tools you might not even see it happen.

The overhaul also streamlined the viewport drawing routines and refreshing the screen. This may open up some new possibilities for handling the screen in the future. The border is no longer "infinite" and there's empty UI area outside the border.

Huge preview window, and free panning demonstrated

Having mentioned the pseudo-windows, the Preview window is now a properly detached, separate window, which displays the target screen contents in either 1x or 2x pixels, and in a more correct aspect ratio. This was a solution that has worked well without problems in Marq's PETSCII editor, so I finally dared to use a similar approach here.

There's very little to prevent me from enabling the more accurate aspect ratios in the main screen, but I still have a hunch it's better to keep pixels in integer proportions, as scaling can produce ugly artefacts.


Processing 3 and Processing 4

Another issue concerned moving over to the newer Processing 4. This shouldn't be a huge deal, as the same source now appears to work in both without changes.

Some reports have been trickling in of Multipaint again not working in some Windows or Mac configurations, whereas it appears a Processing 4-built application might work in these situations.

However, the Processing 4 -build requires OpenJDK 17 or higher. At least the creators of Processing have now made this very clear. In the past I felt it was slightly uncertain if OpenJDK is even fine and if so, which version to use. Or I simply couldn't be bothered to find that info.

Because it might be a chore to get OpenJDK 17 working, and your old Multipaint works fine, I still offer the main download as a zip with Processing *3* builds. The Processing *4* builds are in a separate zip available on the website, in case you feel the old Java/Processing is the problem.

Edit: In Linux Mint you can simply open the Software Manager, search for "openjdk" and choose to install for example Openjdk-21-jre. After this, the P4 version of Multipaint should work.

Sadly, as progress moves on, older computers might no longer have meaningful way to update Java or OpenJDK. Acquiring a cheap/free recent enough Linux laptop shouldn't be too hard, though?

Processing might eventually have an end-of-life too, but at least they still bother to chase the recent developments.

Big screens, small screens

With the improvements above, I was quite happy to use even a maximized app window on a 2560x1440 display. But as usual, it may be your xxxtreme graphics workstation with super-high resolution doesn't provide the best environment for Multipaint. I would still suggest not maximizing the window.

At another end, after freeing the panning, coupled with better GUI scaling and the preview window separation means that on a small-resolution screen (~1440x768) you might be able to find more helpful window positions. For example, the Multipaint main window could mostly serve as a magnify window, while looking at the Preview window for overview.

Main window and preview window side by side

I did fiddle around a little with Raspberry Pi 400, Multipaint does work on Raspbian OS and it is reasonably possible to draw using it. I wouldn't use a large desktop resolution, as a huge Multipaint window slows things disproportionally. Conversion tasks, both from files and in between modes, are also quite slow.

On Raspbian, the file selector may look horrible, the worse the higher the desktop resolution, and I may eventually adopt Marq's choice from his PETSCII Editor. It is generally better and seems to work on Raspbian.


Unique Character count, "UQ"

Unique Character count was added to the C64 multicolor mode, just to test see how Multipaint could help in creating character graphics. The feature request and testing was done by Shine.

At the infobox, UQ: displays the number of unique characters in use. Multipaint checks whether the screen would work as a multicolor character screen, but doesn't understand the mixing of hires and multicolor modes. If there's a problem the infobox will just bluntly say "UQ:???" and you have to figure it out. 

The multicolor character mode has three separate global colors, and each character area can have one more color, just as long as this color is from the range 0-7.

It might make intuitive sense to use global colors from the 8-15 range, as you cannot reach them from the per-char color. However, many images and games still use 0 (black) as global color to have more freedom to combine the 1-7 colors with black.

This screen uses 75 unique characters, the three greys form the global colors (screen bottom)

Although the multicolor screen background is always selected manually, UQ estimates what the two extra global colors might legally be (shown below the selected colors, among the global color) and understands the use of 0-7 colors in character-by-character basis.

This is also partly the reason the feature can't (yet) be more specific in showing where the "mistakes" are, as it's a little tricky to make a difference between "you messed a global color" and "one of these characters doesn't work".

The character idea might not fit that well with the Multipaint philosophy of drawing single standard bitmap screens in simple way, but there it is. I felt the routines might serve more generally as a rudimentary packer, or for creating modes that have character limitations built-in. The long-coming Panasonic JR200 mode springs into mind.

UQ may be improved in the future, and exporting as a character mode screen should be a possibility.

Other enhancements

At the tail end of Multipaint 2023, I added the ZX Spectrum Next modes. The bugs and even the occasional crashes this addition created, should be fixed for 2024 version.

I added some Commodore 64 goodies, mostly things that work under the hood. Loading in a PNG file that contains standard C64 graphics in 320x200 resolution should now work better.

Multipaint can have a hunch of what kind of palette has been used, and make a good guess of what the background color should be in multicolor mode. This is simply achieved by converting the same image 16 times(!), to see which of the background colors produces the least "lossy" conversion.

As before, a really non-ambiguous border around the 320x200 area will be cropped, and this has not been improved in any way.

Still, the conversion engine is not that great and I have no big intention to develop Multipaint into a generic conversion tool. But as I said, it should load C64 images more accurately from PNGs.

This also affects the internal conversions, switching from other modes towards C64 may produce better color identification and a more useful background color in multicolor. This is especially important if using the C64 multicolor "free" mode to create something that works in another background than black.

Opportunities for some tiny UI fixes always arise. Just a couple of examples: If the magnifying glass tool is currently on, the mousewheel zoom would behave erratically, now it's cleaner. You can pipette the border area and get its color that way.


The Future

It's already more than ten years since I started Multipaint, although the first public release was at 2016!

This version shortened my to-do list somewhat, but there are also long-standing issues and omissions I could not yet cram into this release. Usually the major Multipaint release gets advertised a little more and I will find out the changes broke something or didn't quite work as intended, and this will take some of my time.

Despite the messy and sprawling nature of the code, I still have a pretty good grasp of how it works and how to do changes to it. I have a good idea of what can be fixed quickly and what needs a more dedicated effort, and what probably isn't worth trying to change anymore.

I had mused about the viewport overhaul in my mind for a long time, and then it was surprisingly quick to do. Trimming it around the edges (almost literally) took more effort.

http://multipaint.kameli.net/

At CSDb

https://csdb.dk/release/?id=240697