Sunday 25 June 2023

Soooo... About the Ballad of Buster Scruggs....

It has taken me a very long time to watch this film in a single sitting, and a very long time tolerating it, so much so that upon completion and having given it some years, I immediately searched the internet for people of a like mind as me; that being that it's a load of rubbish.

There are a few out there, mostly on hidden secret dark little corners; of which clearly this is another example.

The open chorus of plaudits for this film, if we can call it that, all fall into two broad but terrifying categories.  The first are Cohen brother fans, they won't be deterred and I can agree with them on some of the points they raise.  It looks great, the cinematography and sets are for the most part great and it has call backs to great westerns.... Like the name of the Bank.... Little nuggets of gold itself.  And individually the performances are great.


The second group are those voices which really annoy me, they say "you have to be smarter" to get the joke... To read between the lines.... To understand the history.... These people are the worst, not the least as their attitude is very insulting, which it very much is, and condescending.  But really we are not dumb, we are not being obtuse and really should we need a social education background in order to comprehend some of these stories?  No, not really.

So in order, and I am going to go from memory here, we have:

Buster the gun slinger story.
The Bank robbery.
The Gold Prospector.
The limbless Thespian.
The Wagon Train.
The Stage Coach.

The weakest is the Stage Coach, just extremely weak, and unlike the others it looks the worst.  And it was really hard to watch, really quite boring and ultimately had no point.  You can tell me it did have a point, but watch it again... Did it?  Really?

The Wagon Train, it had something, there was something there.... I was even hoping that Billy/William and Alice would tie the knot but then the other Wagon Guide would fly into a jealous rage, like there was some homosexual tension or active romance the younger man was basically calling off; just something which would have explained the story, nothing did... Sure I watched the story, but it was a pointless story.

The Bank Robbery had a very strong start, you had the explanation of the previous robber being kept alive for the Marshal for three weeks and ending up doing hard labour, instead we cut to James Franco strung up... Twice... Just... Erg, there was no fabric, the two halves of it made no connection to one another save for his horse not listening to him, that was the only link between front and back.

We're half way through this production, I can already see in the last story it was simply rushed and done very much to a budget, but was pointless, so we're not far from useless.

Again the Wagon Train, slow burn start, quite interesting middle, the tension over the marriage... But then, just as you think... "Oh the lover of Billy saved Alice, now he's properly torn between the two" or something... boom... literally, killed the plot.

The title carrier, Buster Scruggs, well that was my favourite of the stories (closely followed by the Prospector) I thought that was going to be the whole style of the film, heck it is its very title.  But then they shot that down fast, and the looney toons soul rising to heaven scene.... It reminded me of the laughing hyena's at the end of Who Frames Roger Rabbit.... And just was no in keeping, it was so jarring for the whole rest of the film.  And it ultimately made no sense, like if we saw the spirits of the other gun slingers he fought, maybe.... There might have been an Undead PD thing, or a Frighteners Wild West style thing... But no, no pay off, just... a song.

This leaves the Prospector to save the film, and I have to be honest, it was slow, but my favourite story.... His throwing away ANY gold though, even little flakes in the first few pans... Just so they can say "keepers, we're getting to keepers" is pointlessly annoying, and really flies in the face of the "you need to know the history kind"... really, know the history, ever seen anyone knowingly discard gold?  But it had an interesting parable with an echo of echo message, he entered a virgin, un touched wild, dug holes, shared with the owl, nature reclaiming it almost immediately with the deer at the end... Even though they were just holes he made little impact but got what he wanted, which is a good way to think.

Rather than watch, ride on someone else's efforts and steal from nature, from the Prospector.... It's a moral tale and the only one to pick out of the bunch.

If either of the brothers were to ever read this meager gaggle of gripes, I'd say to them to loose the yes men, sometimes things aren't very good, you done goofed boys.

Sunday 11 June 2023

React Physics 3D : First Impressions

With my home engine coming to the state of being able to visually represent a world and move about within it, I've decided to set about sorting out a physics representation.

Very much as I did with the mathematics where I set about writing all my own code and then adopting a library; in order to best learn the process from first principles I also set about writing my own physics engine and visualizer (the latter using the much more familiar to me fixed function pipeline of DirectX 9 - Yes it still has a use in 2023!)

The physics implementation I went with was a simple rigid body test for cuboids and spheres.  Then a ray cast.  At which point I set about seeking a library as it's a huge topic I didn't want to sink too much time into.

I settled, after about a fortnight of reading and trying on React Physics 3D.

My initial impressions are that it is easy to set up, supports CMake and just worked; though I'm yet to fully get to grips with it, I am happy I have my world and simulation set up and working.

I've also happily separated my game objects from my visual objects with the use of my Ecs and I'm able to do the same, by registering a new Ecs update system with my entity list and simply piping the commands to create and destroy physics objects per frame.

The update pumping of time matches my engine instantly, so I had a lot of wins.

However, I am not building in a permissive manner, I have maximum warnings as errors, I have strictness on and permissive off; I also remove all compiler specific extensions, so I am using only C++ in it's rawest, most portable form.

Immediately, even though I've compiled React separately and then just link to the library statically, I have a bunch of the React headers giving me errors; notably map, BroadPhaseSystem and DefaultLogger.

The first two are the same sort of issue, which just surprised me, there's a constexpr uint64 set to minus one (so it's max) an unsigned value set to a signed negative to under roll it... Well it's quite bad practice:

static constexpr uint64 INVALID_INDEX = -1;

And I immediately updated this to:

static constexpr uint64 INVALID_INDEX { std::numeric_limits<uint64_t>::max() };

I may feed this back to the author, he most likely knows, maybe there's even a reason for it, personally I'd always stick to numeric limits and max in this case though, not least as it is constexpr and not a hack ;) 

The other one was a lambda expression in a call to std::transform for making all logging strings lower case, the code simply used ::tolower.  However, it was not type safe, it was converting int to char, but that's not explicit and so I changed it over to read:

std::string toLowerCase(const std::string& text) {
                std::string textLower{ text };
                std::transform(textLower.begin(), textLower.end(), textLower.begin(), [](const char& character) -> char { return static_cast<char>(std::tolower(character)); });
                return textLower;
            }

The lambda here is hard to read, so lets split it out:

[](const char& character) -> char 
{
    return static_cast<char>(std::tolower(character));
}

We take in a character, return a character, explicitly, so we have to cast the int return of std::tolower... simple really, but hard to read.  It compiles down well; but just using "::tolower" well that's a decay to int and you have to be permissive in your type exchange... I don't like that, express yourself in your code type correctly, and it'll be type safe.

Friday 2 June 2023