Sunday, May 31, 2020

Since You Kicked Me Out

More music work yesterday, in particular finalising the sequencing to 'Since You Kicked Me Out', a fun song, perhaps in the style of The Darkness, or Mika, early Sparks, or even Queen at their most fun. It seems all of the backing for these songs is rock based, distorted guitar, bass guitar and rock organ generally.

I have several motivations here, mainly to create more songs and boost my vocal production skills. I've created a huge amount of instrumental music, but I'm more interested in words now and pushing at limits in this area, so another motivation is to produce more song music to move the way my music feels and exists.

Friday, May 29, 2020

Pyjama Music

More music work yesterday and today but the going is very slow. These songs are unusual, and all are more complex than I'm used to. Every one varies in tempo or time signature within the song, and sometimes breaks sharply in unusual ways, which I can feel as I'm writing them, yet sequencing them is proving to be complex and time consuming, slow due to uncertainties. Except For The Hatred is just about complete (without the vocals recorded, this will be fun and saved for last), however, but I've got three other songs in half stages, including a version of the Actor song (now called The Actor's Lament).

Most of the time yesterday and today was spent doing other things anyway; preparing a live chat event for Steam for Taskforce, using Discord, which I've never used, or heard of. A quick search for Taskforce: The Mutants of October Morgane resulted in the game being seemingly everywhere. I even found the 2004 version apparently on sale on Amazon (well, it had a page, listed as sold by me and unavailable, very odd). I've been contacted about a Chinese translation of 21st Century Surrealism too. Today I've been installing garden fences, which was some welcome exercise in the sun, after many days or weeks inside.

I'm delaying, unsure. In creative lulls like this, the trick is to break things into emotionless, logical steps and coldly calculate the problems and solutions, the resources needed, the time needed. All uncertainties need to be removed and rationalised into certainties. My songs are stuck somehow because of uncertainties.

In art, the result must be fully realised in the mind and soul before starting to construct. For my paintings, this happens at the instant of conception, and sometimes for songs too, although not usually. For these songs the words tend to come first, then music, then I make changes to words, then to music etc. in a complex dialogue. If I start with purely music (or both at once), mentally, the results can be repetitive and similar to other older work, too easy, not musically complex enough. This doesn't tend to be the case with words because of the meaning, the emotion. Perhaps this emotion is the key thing, this 'orb', as I describe in my book.

One song, Since You Kicked Me Out, is proving fun. It began, in my head, sounding very differently, with the main refrain sort of screamed, and certainly in 4/4 time. The song as I've sequenced is very much 3/4, a jig-like jaunt reminiscent of a folk song or children's song. It is acceptable, fun, but the finale needs to stop this somehow. It has two verses which are the same structure with a third which has parts of the other verses in different orders.

So, I need to work out if this needs new instrumentation. In this song, like the others in this project (codename 'Pyjama') the drums are key and I'm taking a lot of time on the percussion.

The key thing is emotional freedom, and this means timing, timing. Getting the timing to match the mood. Timing and volume, the two things that computers destroy by default, are the primary keys to emotion in music.

Wednesday, May 27, 2020

Music

I'm inspired and have a few ideas for new songs in an art-rock/new wave/experimental style. I feel I'm still learning in the production and vocal recording side of things and have more to want to keep pushing and experimenting, also, I find these songs interesting and different. I want to play with time signatures and pacing.

I'm very inspired by Kimono My House, but partly in comparison to the other Sparks albums I have. The relatively recent Exotic Creatures Of The Deep is a remarkably similar album to Kimono in songwriting terms, many of the tracks are as inventive and witty and lyrical, yet it lacks energy and emotion and punch by comparison due to the production, perhaps due to digital production, and this is what I want to battle. The certainly 70s sound of Kimono, heavy on guitars (if Queen performed that album in the 70s, I'd accept it as a Queen album without question, it's so reminiscent of A Night At The Opera or Queen II), and especially the drums; these are the star instrument on the album, at the front of the mix. Digital drums are generally awful and yet these are the absolute key instrument for emotion in a song, second only to melody (which can be any instrument). Drums and the bass are the foundation, the heart.

Have spent today sequencing a song called Except For The Hatred, inspired a little by my painting of the name (and perhaps recent events, the curious politics of anger). I've also revisited an older song called Norman Bates with the aim of re-recording it. I've changed it quite a lot in balancing. I've certainly learned a lot about the music engineering side of things in the past year or so.

I don't want to spend a huge amount of time on music, I've no plans to perform any of it. I make music like I paint, as independent art, not as a commercial venture. I know that one day, like the books of Blake, like the paintings of anyone, the music will find a home and shine. This is true art. It is important that it is good, artistically valid, the best I can do and carefully crafted. It still must be a showcase, but touring or performing holds no appeal at all.

Tuesday, May 26, 2020

The Actor

Very little done today, an astoundingly slow day. I have an idea for some music, again revisiting some old songs but also wanting to make new ones with new structures and themes. I wrote these words today. It seems that of the three or four songs I've written so far for this project, most (maybe all, I'm unsure) are 3/4 time. I want to write in a freer style. The best songs, I think have free and open lyrics and free and open music, perhaps even both unconnected. I need to find a way to keep both free yet make them fit so I'm trying to sequence some music as a way to compose it.

The stage is lit
but there's nobody here
there's nobody here
to be dramatic at.
The lines are pitiful,
the tears are real,
but there's nobody here
to notice the feeling.

There's no pathos or gratitude
no applause or acclaim
to acknowledge the pain
of performance
because there's nobody
nobody
not a soul
to witness
this actor's
lament.

The gods echo back
to the nobody's ears
to nobody's ears
who are listening today
The damage is wasted
the blood has spilled over
for the special effects
are second to none

and there's nobody
nobody
not a soul
to witness
this actor's
lament.

There's nobody caring.
There's nobody crying.
There's nobody noticing
the actor dying.
There's nobody seeing
the make-up peeling
except the sad mirror
so old and so cracked,
and so to the mirror we act.

Monday, May 25, 2020

Refuge Video

Have spent today working on a video for Refuge, one of the tracks from the new Synaesthesia release. I've long wanted to make a few videos for this album, and Refuge is one of the strongest and most dramatic tracks on the album, so I decided to put together a video. The imagery of a wooden shed or shack, perhaps a warm fire-lit party, some time in the 1930s, in a swamp, with a sunglasses wearing, bowler-hatted, black man playing the piano... these were some of the images I've always had with this music. And yes, I've had to cast aside most of it, but stuck to some of what I could.

I began with the idea of a contrast of in and out, the dramatic finalé making use of the amazing clouds from a few weeks ago (April 30th) when I recorded a time-lapse video of the skyscape, a dark storm rolling in. For the bulk of the song I took thirty small clips of the interior of our wooden shed, and edited these together into 80-frame segments, timed with the music. There needed to be more so I added a few clips of a window, as though looking out, and then some grasping hands, piano playing hands, and myself as if trapped in the screen. The balance is always between the digital and clean, and the rough and organic; always the crucial balance. I've added lots of flicker, scribbles, shudders and other elements to add roughness to the video, while retaining quality in other areas. Perhaps there could be something more enigmatic here, more intellectual content. I always seem to begin with a simple and large-scale edit then add lots of layering and tiny changes, almost like sculpting. The grasping hands were a good addition. I kept feeling the urge to add words.

I'll pause now, and look at the video again tomorrow and over the coming days. This is not a complex work. I've sometimes spent weeks on one music video, but, of course, I want it to be the best it can in itself, and have a unity that matches the music to some extent.

Relevance in Art

The only important thing in art is its relevance. Academia tries to build a consensus of relevance, which is why it has weight, but this consensus doesn't always equate to relevance, it is merely a consensus made from the current time and its local constituents. Building a consensus of relevance in this way immediately nullifies it, in the same way that rational understanding bursts the bubble of emotion. Perhaps art should aim never to burst this bubble, or at least be aware of this critical effect. The essence of the romantic, the emotional, is to preserve and feed its feeling using mystery. This is the why academia is never 'cool', on trend, stylish, 'cutting edge'; it is always behind, an analytical tool of judgement. Perhaps this is why critic and artist are necessarily two different jobs. Perhaps even in the act of judging his or her work, an artist causes harm, if judged on a purely rational level.

Sunday, May 24, 2020

Taskforce Testing and Kimono My House

A somewhat slow day today. A difficult, restless night due to stomach pain. I've reworked some of the Taskforce music, extending Clone Patrol, which was a bit repetitive, and added and shorter, key-up version for the exciting moment when one target remains. I've played the game a little, and completed a 'perfect' Robospiders training mission on Elite using Remex. It feels good to complete difficult challenges like this!

I'm listening to Kimono My House by Sparks, an amazingly good album. Better than any by Roxy Music (though not dissimilar in style). I reminds me of Queen II, due to the falsetto vocals, use of guitars and rocks drums, and operatic style. This rock sound is lacking in the other five or six albums of theirs I've listened to. For me, Lil' Beethoven is their second best album, the others were nothing special due to specific factors of dramatic intensity and energy.

I spent yesterday working on the Taskforce videos for Steam. The game is just about complete but will be tweaked and changed during casual testing over the coming weeks. I need to work on an art project or plan next. I feel tired and weak, the perfect time to fight, then.

Friday, May 22, 2020

Painting

Underpainted a tiny canvas today called Land of Beauty and Sorrow. I sketched this out two years ago during a 'blitz' of old ideas. Amazing that this has been waiting two years for the six hours it has taken to paint it (I may well glaze it too, more layers always improves the beauty of a painting).

I have so many painting ideas and each strongly grips me. Discipline is needed to stick to one and not jump to the next, but this is so difficult. The newer ideas always seem better and old work often feels out of date, yet, oddly, this painting feels as relevant now as ever. I must keep painting as much as I am able. To oil paint is an essential act of art in its most raw form, and therefore an ultimate expression of culture, and thus intelligent life (and even supra-life existence) itself, perhaps more even than poetry, which is finite due to the finity of language, and often so similar between poets than it's impossible to have one definitive poet. Every painting is unique, a personal reflection of the soul of the painter.

Ego

A day of painting for a change, the first in months. Listening to Brahms' Third Symphony, reminding myself that Brahms is a Beethoven sycophant with nothing to say, no meaning, no authenticity.

I became aware that a person is a loose collection of awarenessesses competing for dominance. There is no one self but a consensus. Ego is an agreement of mutual benefit, always a compromise. The best people are in 'balance' - we say 'well balanced' because competing egos agree; a state of peace, rather than any self at all.

Thursday, May 21, 2020

Love and Art

To love is to give, and the more you give the more you love. The give to the world therefore is an act of love. Such is art; it is essentially selfless because it must be freely given to function as an emotional act.

Moving back into an art-state from the despised programming state. I dislike programming because it is so very exacting, one slight error and everything is destroyed. A computer is the most harsh of bosses; willing to destroy everything you've made with one mistake. Yet, of course, everything is caused by oneself too; the computer is no being or judge at all. Still, it is an unforgiving tightrope which the programmer treads, and it is always very bad for the nerves of a perfectionist.

After some distress, Animalia is back on track for a release in June. I've also updated my basic game-engine Skeleton to allow more than 127 letters, this was harder than you might imagine, as byte numbers switch to negative at 128, so just about every one of the 20 or so text handling routines needed to be reprogrammed and carefully checked. Perhaps there are errors in there, but I hope not. This change will allow more foreign letters for future game translations for future games or game upgrades.

Wednesday, May 20, 2020

Lastforce and Gastropoda

The last, perhaps, day of Taskforce testing. I made one further change last night, reverting some of the complex pathing to how things were before, but with some new caveats and rules for squares which can't be walked on, such as windows or spiky things. These could technically be walked up into or falled down onto.

I've played the game 5 or 6 times today and found no more issues, so it's entered the next stage of testing; for others to try.

In other news the Animalia 2020 Remaster was annoyingly rejected by Distrokid as one track, Gastropoda, has a new name. This track was named Gastropoda, after snails, when written in 2004, but I mistakenly entered the name of Cephalopoda when submitting it for digital distribution. I had hoped to fix this error in this remaster, and have renamed the new recording, but the track was rejected as 'existing tracks' must have the same name and meta-data. This is annoying because it is a new recording with a new ISRC, not an existing track, and it was an attempt to correct the original error, not create a new one. The album is a new release of remastered recordings and not a re-release.

One option is to retain the new name on a CD release and ignore Spotify (or whoever the 'streaming services' Distrokid refer to are - it is curious that several rules regarding all sorts of things from track/album names to things like this apply only to Distrokid, and that my other distributor Emubands, seemed to manage without them).

Tuesday, May 19, 2020

Yet More Taskforce Testing

Every day I think the game is complete, surely there are no more bugs! Yet every time I play, I find something new. Today's changes and fixes, so far:

1. Many of the training levels lacked roofs, so units on the upper levels could climb boxes and walk over the tops of the walls. Roofs added to all levels (again!)
2. The Assassination and Spider Training maps had diagonal gaps in the walls allowing units to walk beyond the walls and out of the level.
3. Assassination Training occasionally started with no target, this is because the difficulty level reduced the number of enemies below 1. Now, there is at least one target (of each target type) on all difficulties.
4. Falls from height now cause up to 10*height_fallen damage plus one leg injury for every level.
5. Change to the Assassinations map to remove some silly blocking obstacles. This level is about stealth not combat.
6. Allies are now permitted to die in Assassination training (was overly difficult with no permitted casualties).
7. Unconscious allies don't have to be on the exit to complete a mission.
8. The Mission Objectives window had no heading.
9. Mission Objectives included a plural when only one target was present (eg. 1 Targets Remaining).

Monday, May 18, 2020

Dreams and Demos

A strange night of feeling ill. I awoke feverish and shivery after a strange dream of a trip on board Concorde. The pilot allowed me to sit in the cockpit and I compared the aircraft to a jet fighter. Later I sat next to a quiet, dark-haired woman who seemed lost or unable to reach her destination. She said she was from Yeathered, which I imagined was in Lancashire or Yorkshire. I said that she could stay at my house for the night. I then awoke feeling ill and remained so for the rest of the uncomfortable night, although could identify no specific pain. Actually it feels like my recent grogginess and bad stomach were some small infection. This could be simply cabin fever though, or Taskforce fever.

The game is mostly complete. I wanted to set up the demo version on Steam and was thwarted by the stupid and ridiculous system of sharing files in a demo and full version using separate Steam Depots. This is complex and impossible to test without a second computer, so I ditched the idea and created two separate versions which can install over each other in any order and have both working.

I play tested a mission called Clone Alone - actually one of the nicest looking of the new levels, very industrial and full of hazards and distant windows. I discovered more 'stuck stairs'. The stairs are a problem, they need space overhead to walk off, and space at the end to walk over. It's all too easy to miss this and several levels had these stairs. I spent an hour programming a special tester to check every map for these stairs and found some more in another level, but that is (I now know) the last of them. Everything seems complete. The manual is having a final look over by Deb and it is all set for publication.

More general playtesting is needed. No matter how complete I think the game is I find new little problems on almost every play. If I can play for a few days without any, then it is done.

Another job for today was scheduling the release of the remastered Animalia. That will come out at the end of June to a silent reception like most of my music. The quality of this output is the important thing to me. At the lowest bar, all I have to do is create something better than Tangerine Dream (easy, it seemed that they pressed any old thing and called it finished music). Of course, the highest bar is it must be the best I can do. Hopefully it always is, although there is always some sort of limit or restriction; as with this Taskforce music. Animalia 2020 will be released on June 26th.

Sunday, May 17, 2020

Plodding On

More Taskforce work today. A very strange and worry bug occurred upon loading a level which was saved while on an upper storey. For some reason, elements, faces, from that level seemed to appear on levels above and below and wouldn't go away whether I moved up or down. In the end I fixed it by tinkering with the way the level was redrawn upon loading, but I still don't know what caused it, the theory, and this troubles me. I like to know exactly what everything is doing.

I've also remade one of yesterday's bits of music and fixed a few mapping errors. It was impossible to walk up the stairs on three levels. Stairs need such care, they must end over a walkable block (the top floor must be over a wall or other floor) and there needs to be lots of headroom around them too or you might be not be able to step off. Other fixes: the music will now restart correctly after a reload, and the elevator closes the distant door when calling it to you.

I've also finalised the manual, again. Every evening I think that the game is complete yet I spend a full day fixing things or adding things. Let it be over soon. Perhaps my priority now should be testing the demo. I've set a release date of May 29th for that. The game has grown to 250Mb, most of it music. I will split things up I think so that the demo doesn't have all of the files of the full version.

Saturday, May 16, 2020

Music

Finalising the Taskforce music today. I've divided the missions into approximate themes and developed different music for each, usually two or three variations for imminent success or failure. As mentioned in the previous post, the themes were sort of generic rock/blues, hip-hop urban dance-ish, classical-ish for the zombies, more rock for the clones, and an analogue electronic piece for the robot or technological themed levels.

Spoiler alert; here's a chart of the music, which indicates the complexity of the task:

Overall I've made 29 pieces of music for the game, although the main theme is just about the same as the 2004 version, and most of the tracks are based around its instrumentation for reasons of artistic unity as well as convenience.

In programming I fixed a bug in the pathing, where walking over bridge supports was not permitted, and I've stopped background mouse-clicks in the icon area; it was all-too easy to miss an icon and send a unit walking miles away by accident.

There is one outstanding minor bug where centering your unit on upper levels in overhead view is not correct, but I think the project is nearing the end now.

I awoke at 9:30 after an eleven hour sleep. Feeling tired and unhealthy, the come-down from the energy required for this creative marathon. I miss Deb and hope that we can meet up soon. Taskforce has been a good distraction for the surrealism of Coronavirus 'lock down'. Art must soon call. One of my immediate art tasks is to queue up my remastered Animalia album. My goal of a new release of something every month this year is on track: Flatspace, War is Over, Burn of God (and Flatspace Soundtrack Albums on Steam), The Burning Circus (and Flatspace Music Pack 3), Synaesthesia this month, Animalia next, and Taskforce in July. I aim to release The Intangible Man story collection at some point too, so that leaves only four months of the year for new work. Exciting. Perhaps I can make this a regular goal.

Perhaps this Taskforce music has used up some of my musical creativity. I still have lots of musical ideas, a concept album in a very white/cyan hue called Dark Hyperborea about this strange pandemic. I also need to get painting at some point. I've completely neglected painting for months. Perhaps my passion for it has ebbed away a little.

Each day we must do our best, excel, prove, struggle, battle, aim for the perfect, push for the best.

Friday, May 15, 2020

Taskforce Music

I can feel the end in sight for the Taskforce development, although it might be a few weeks yet. I spent yesterday making a few gameplay changes:

1. Creating a new cursor when units might fall onto another unit. Accidentally falling on top of a team-mate is sometimes a problem. I want to keep the feature so you can deliberately fall on enemies, a true commando-style move.
2. Shooting from underneath. Amazingly, this has been legal since v1.00, you could aim at the ceiling and injure targets on the floor above. Aiming up is now impossible, although you still might clip the underside of a floor when aiming upwards at an enemy on an edge.
3. The body part hit during a melee attack is now dependent on the angle of the victim, eg. the head, body, right arm, or right leg when attacking the right hand side. Before it was random. This makes knives a little more deadly as there is a 1/4 chance of a head shot vs. 1 in 6. This helps. Knives need to be a bit more deadly.

I also stayed up until 11pm fixing a distressing save bug. I've never had a save crash since installing the new saves, but this one did crash. It turned out that I'd saved the game while in fire mode rather than move mode, and I'd not prepared for that. Fire mode needs to store a lot more information, like the weapon held, the shot type selected etc. None of that was saved. Now it is. Blessed be testing.

Again I'm at the stage where I think most things are complete. Of course, I felt like this 4 weeks ago and SO much has been added since.

My next step is the music and I've already created 27 possible tracks for the game, many are variations on the main theme. There is a definite rock feeling to this music, with a wailing blues guitar for more desperate parts when you have one unit left. The Zombie theme has sweeping chords, a little like the Arcangel music, but I've used odd notes to create quite a lot of dissonance, especially for the 'last unit' and 'last target' variations. Last Target tolls a funeral bell.

I have 5 in-game tunes now: a main theme based on the title music, an urban, more dance/hip-hopish orientated one for the spider levels, one fast-paced tune in 5/4 time inspired by Lalo Schifrin, complete with a hard flute (the essential lead instrument for jazz), and a heavy rock track called Clone Patrol which sounds like something Led Zepplin might have written, plus that epic Zombie music with rich strings, something like the Sabbat from Symphonie Fantastique. I still need something for the robot spiders and the turret levels.

Wednesday, May 13, 2020

Task Music

More work on Taskforce today. I've written lots more music for it this time. There are separate tracks for different events in the game; the start of a mission, the end (with victory), the end (with failure), a background track, a track when you have one unit left (perhaps sad, desperate music), a track when the enemy has one unit left (the verge of victory), a track when you've completed your objective and must get to the exit (excitement?).

So, lots of possibility. I've currently got 21 tracks written, but with 32 missions and up to 7 tracks per mission, there's an awful lot of options. Today I've written a track called 'spider angst' which, one of the 'sad, desperate' tracks, which is a variation of the main spider theme. The spider theme is actually a rather groovy tune with a simple chord structure like the Bomb the Bass Megablast track (itself a blatant rip-off of John Carpenter). The spider mission is based on a city so I thought that something urban and hip-hoppy would suit. Almost all of the other music is rock-blues, variations on the main theme.

I've experimentally boosted the Sniper Rifle damage to 32, as this seems to be one of the weaker weapons. The Pistol, Carbine, Machine Gun, and Shotgun all feel well balanced. The Knife feels a little weak, but I'm hesitant to make it stronger than the Carbine... it shouldn't really be so, even if the risk and effort to use it is greater... I'm unsure though. At the moment it's the same strength as the Pistol, and, like that weapon, can be used one handed, yet the Pistol always seems to be a better option as it can, at least, shoot (well, you can throw the Knife) and it only takes 20% Action Points to shoot it at close range; the Knife takes 25%.

Tuesday, May 12, 2020

Leaps, and Bounds

Compared to the previous day, yesterday was brilliant; I managed to create new 'door' system for the game in 90 minutes, about as fast as possible. Now doors are simply blocks which are swapped when opened. I'm sure this is how it worked in Hilt II, and it certainly simplifies things. I've also fixed lots of graphic problems, little things due to the look of certain objects. I spent a few hours yesterday editing all of the 30 or so maps to set them in line with the new block format.

I'm gradually getting tired of this project, after 6 or 7 weeks of non-stop work, certainly no more than a 90 minute respite in that time. I can't waste too much of my life on it, yet, I am pleased with the game. The new graphics system is now in and appears to work. Andrew's highlighting of the old, flawed, graphics system, and certainly his idea of shatterable windows, have really improved the game in ways that wouldn't have been done without his help. Here is a look:

Any blocks are now wholly shown or not, rather than shown in faces and fragments. The visible parts, like the walls, are effectively hollow tubes, which is necessary for efficiency (no point in showing internal walls) and also neatness, as these would show dotted lines on the joins otherwise. It is this that's taken me all week and needed the creating of the 400-or-so new graphics.

It was a far bridge; and it looks like I will not now make the deadline for a public demo, so Taskforce will not be part of the Steam Summer Games Festival. Even if I rushed through a public demo today (I really need a week of testing it before such folly) it would probably not be approved by the Steam team in time. The Fest might also disrupt the launch of the game so I might put that back until July.

Today I've created some new windows which can't be shot through, just in case I need them, and made windows flagged as 'indestructible' in the maps refuse to shatter. I've tested a few levels, created the new Teuton Arcanum logo for the soldier's backpacks and tweaked many settings - I made the armour thinner for units too as units can be hard to kill. The thing about this is that the computer soldiers and yours are identical, as are the weapons and damage system, so if they are easier to kill, so are you. The only difference perhaps is then the relative strength of your troops vs. the other enemies in the game, but it will take less shots to kill soldiers now... so that might pace up the game a little.

I wanted to get fire to spread down and up stairs too but it wouldn't work as expected... it seems to spread too far. It's easy to toy with things here. I could spread smoke in upper floors, for example, but I'm hesitant to start tweaking things now... 16 years since the game first appeared.

Today is the first quiet-ish day in about 10 days during which I've not left the house and barely left this room. Last Wednesday and Friday in particular were about 14 hours long with only 30 minutes snatched here an there. My enthusiasm is boundless but I need some sort of rest now. I barely slept last night and had strange nightmares about being distant and alienated by friends and family when I did.

The Steam Festival deadline forced me to push hard, but I can't make that, so now I'll need to impose a new deadline to stop myself working on this forever. On we push.

One day, I will feel like an artist again rather than a computer slave.

Sunday, May 10, 2020

Mountains

Today has been one of the longest and most arduous and frustrating days of programming I can remember. I started with doing something with the sprites. I failed to find a good way to find a local function pointer. I'm sure it's possible but I just gave up and used a switch... this sort of thing is about the alchemy of the language and it's something I've never done before.

The hard part though was what I expected to be the easiest. I started by adding the code to hide or show adjoining walls to blocks, very simple logic, and this just refused to work. After a lot of experiments, mostly hiding north and south walls, revealing the east/west ones which should have been culled, so I could peer inside, I decided that the map was expecting a block to the right or below (east/south) that wasn't there yet but would be, so I reverted to using 'discovery' rather than 'visibility'. Visibility is whether the block is actually visible, and discovery is whether your team has discovered it, so that is a bit-mask...

That was after I realised that I was checking the block bit-mask rather than the block type/class bit-mask, but I digress, after an hour or two I started to add a new part to add new walls when some were revealed by explosions or other block changes, then I realised that the discovery problem wasn't that at all. I could sense the 'top' code sniggering at my attempts, because all I needed to do was emulate it. Eventually I got it working, but then realised that, like the 'top' code (the code for rendering the tops of blocks which had been there for years) I really needed to either delete or restore the faces of neighbouring blocks there and then, so it would update based on neighbours, and their current visibility or not is not important: if they are visible now, they and all of their visible neighbours will be correct, and invisible ones will be corrected when shown.

The code looked really messy by this stage because the blocks knew about their place in the world via ugly global coordinates which needed to reference a global level object. What I really needed is some simple pointers to neighbours; north, south etc. and as it happens, this is what the above and below blocks used to have for, yes, the 'top' rendering, but I deleted them, wanting a more global view. Bah!

So, at 4pm or so, I added these pointers back, restoring and simplifying everything into simple lines. Then; it all crashed. I just couldn't get the game to run past the equipment screen. I flagged everything new off and it still crashed. I was in a panic. I couldn't remember what I'd switched on or off or why... so I followed standard procedure: keep turning off until it works, then gradually turn on until it doesn't.

I traced it down to the 'top' printing, something that worked fine a week ago and has been stable for years... I couldn't work out why. There was a possible null pointer, but that should never, it seemed, ever be null. But it was. I made it print when it was... and where. The numbers traced the outline of the equipment screen map... it took a lot more tracking, over an hour, to find that the map was erased from the bottom up, which nullified the pointer below. The thing is, that should have always happened, for years... I just could not and still cannot work out why it ever worked before!

After that, I had pointers to the six faces. It was relatively easy to put everything in and it looks much neater and is much easier to read too, and no nasty co-ordinates. The only downside is the doors... the tiny 1% that is causing a problem.

The doors, for some reason, are not merely two blocks, but one with an open/closed switch. This causes all sorts of sillyness; the doors have to change height from 2M to zero whether open or closed, and change opacity, and many of the class level descriptions of them need to be local just to allow them to change this stuff... all annoying... it's not like the doors even look like one block or have any fancy effects... they just vanish and, visually, appear to transform into a floor. I don't know why I did it that way. Perhaps, I will find out because I must now change these because the status about occluding side walls is too big to be made local; that (like height, really) needs to be class-level information. I think a new structure is needed for doors, merely a two pointers to two block types for open and closed. That should be enough for any door switch to know what to do.

At least now, I can accept humility, and expect that this job, an hour at most, 20 minutes if lucky, could take all day or more... but I have to do it. It has to be as good as I can. It has to be right, bug free, perfect, with every part doing exactly the correct thing. Every error or anomaly is ruthlessly traced and understood in its entirety. This is why programming drives me crazy.

Arduous Texturing

A few of the longest and most tiring days I've ever spent programming. I'm desperate to get my new graphics system into Taskforce, and began by modelling the 300 or so objects and tiles in the game, splitting these into faces as appropriate. The point of this is to split each object into main, north, east, south, west, and top parts so that anmy can be switched on or off as needed. Here's a window in development:

This has taken two and a bit long and intense days without pauses, and now I have 456 newly textured 3D objects, all ready to include. Most of yesterday was spent checking and experimenting. Each block has a lot of extra data: its height, the names and locations of each of those face 'faires' (I call my classes of sprite fairies, a nod to the elfen nomenclature of these computer objects), and lots of flags to tell the game about the object, such as whether you can see past it ('yes' for floors or windows), walk past it ('yes' for floors, not walls or sharp objects) and other things.

There were about 100 or so errors of all sorts, accidental typing errors, incorrect texture numbers, missing or wrongly placed faces, confusing east and west or north and south etc. This testing and correction is an important phase.

The key word about the system is occlusion. If an object, say a full block, occludes the block to its east, then the west face of that east block is not printed. For plain walls this works great. For windows or thin objects, they can't really occlude their partner because this might switch off the bigger face for something like that wall, but ideally it should occlude the identically sized window face. For windows it hardly matters but for the large concave sewer objects, it does because these are big faces and very common in a level.

The solution is to make these faces occlude too, but keep them in specific map areas, so that the windows (or sewers) don't ever touch a face that could be occluded. Sewer walls are closed systems, they only need to touch each other. This restricts and complicates the map design a bit, people suddenly can't put a sewer in a normal wall because it would look wrong, but in practice sewers only touch themselves anyway.

I'll program this today.

I gave some thought to optimisation and created a new class of sprite which is small (just 8 variables), and printed objects that haven't been rotated. This was/is faster but had/has problems. Objects need to be printed in a certain order, from back to front, so that any transparency works. If you print a window first, the program won't later print what is more distant; every point on the screen is sorted by something called a z-buffer to detect exactly that, it's an effective way of avoid printing distant things behind walls, but would stop printing behind windows. Besides, windows are semi-transparent so the thing would need to be coloured somehow. The only solution is to print the background first, but if my new class of object means printing it separately, it has to be printed either before or after the full objects... so no matter how well it works, it won't integrate with them, only, yes, in this tiny special circumstance of windows... but the game does have windows and glass, and really, the soldiers, bullets and complex things like that need to be visible behind windows.

I could keep these faster sprites for text or mouse pointers and other things, but those objects are super-fast to print anyway because they are not transformed. Then I thought of a special class of complex object, just for the flames or particle effects that appear on the top, but even then there are layering issues, and it would mean a lot of detangling with the current sprites.

I could add a switch into the sprites that forces them to ignore rotations, that should speed the printing of the common map blocks (the downside is the speed check of the test for the switch, will this beat the 8 or so multiplications?). I could also, perhaps, remove acceleration... I don't think anything in this game accelerates.

The sprite structures might be large, but a linked list of 90,000 is the same speed to parse no matter how big, and the size, at most, might be 30Mb, which easily fits in a modern computer.

A full day of programming today, and I have to re-map every mission in the game because the block lists have changed. In looks, the game looks almost identical to how it did last week, but the resolution has doubled and all of the textures are new. The game has an always had a very clean, Paul Verhoven, sort of look I'm sure it would look better on a new and fancy screen.

Wednesday, May 06, 2020

Texture Design for Taskforce

This project seems as endless as the Covid-19 saga. It's a strange circumstance that just about the only way I could complete this mammoth task is in circumstances like we have now.

I awoke a 6am, determined to start work at 7am, and the plan worked. This is probably my longest ever day as a programmer, or a painter: 7:30 till 8:00, 30 minute break, 9:00 to 10:30, 30 minute break, 11:00 to 12:30, lunch. 13:30 to 15:00, break for one hour, 16:00 to 18:00, evening meal, 19:00 to 19:55.

Step one of four is now complete, I've designed new textures for all of the scenery. This job is at least as meticulous as it is artistic, probably more meticulous than artistic. I'm designing sheets like this:

These broadly mirror the existing artwork but at double the quality. I have 10 sheets to make, filled with objects from floor tiles to road signs, to book shelves, to wire fences, doors, windows. These are a bit like the 'decals' that I used to float off a sheet when making Airfix models. These shapes will cover every object in the game. This is one of the biggest of the four jobs (applying them might be bigger), but in some ways the easiest, as it involves mimicking what is already there.

Tomorrow, stage 2, which is creating the 3D models that will accept these. The models already exist, but I now need to slice them into 6 bits: one for top, and each of the four sides (if the models touch the sides, that is, if not, then I can leave them).

I thought today of potential problems. Although this is the ideal and best way to render this game, it will involve a huge amount of game sprites, each with hardly any polygons, often just 2 for the floor tiles. Most of the walls have 6 sprites, but again, just two polygons per sprite. This might lead to slowdowns... modern graphics are best with lots of polygons and minimum computer power, but this game demands the opposite because each object is printed after careful thought.

The map is 50x50x6, so there could be over 90,000 sprites active at once (lots more for weapons, soldiers and explosions). That's huge! Each sprite is capable of moving, rotating, accelerating, and all in a linked list. Parsing a 90,000 long linked list might lead to significant delays, and that is done at least every time the screen is printed - more than 50 times a second. This is worrying, but I can take heart from the fact that the game now has up to 30,000, and seems to work fine.

In an emergency I can go back and use the current, inferior looking but working, version. I always seem to be pushing limits. My music software, Prometheus, back in 2002 when I made it, I knew that computers needed 10 years to be fast enough to run it. My 2001 game The Heart of Aorkhan was similarly vast. My PC of the day had no hope of even rendering it (it was a 3D version of my Amiga game Blade, or Hilt, a huge maze)... but I knew that computers would one day. Of course, in my case now, I need this game working next week, not next decade.

I'm now exhausted and will now rest. I haven't finished before 8pm in weeks. Tomorrow will be another long day. I can't wait to see and try the finished game though. To think, I was supposed to be working on the music this week. The public demo will have no music, if it launches next week as hoped.

Tuesday, May 05, 2020

Step 16 of 300

A long and tiring day, but, it seems, the start of many. There was always a serious problem with Taskforce in the way it rendered the scenery. Each map block inherently had some blank spaces, for internal walls, when these simply joined to other walls. Everything works fine like this until you start blowing up walls, then the holes/nothingness there is visible and looks like an error of some sort.

Andrew drew attention to this yesterday, and yes, it looks like a bug and ugly. In effect, it is a bug of sorts, a limitation. Here's one of Andrew's screenshots. The wall is missing like some odd dimensional mirror:

At the time I'd experimented with simply making all walls, even internal ones, visible from all sides but that's very inefficient (rendering things that are not seen) and looks ugly, because polygons should join seamlessly.

I'd always disliked this, but, I thought, it was fast because it was ugly... but even this isn't totally correct, because some hidden surfaces are rendered, and the occasional ugly look was actually very common. In some ways I didn't mind because blow up things should perhaps look mangled, yet, this issue is the one that now bothers me most about Taskforce. Until now I'd resigned to the fact that there wasn't much I could do about it, unless I wanted to redesign the graphics engine.

Yet, my quest for doing things well and aiming for the best option means that today I have decided to redesign the graphics engine.

The problem isn't trivial but isn't that complex either. Most internal surfaces are hidden, but should appear when exposed. So blocks need a series of flags that specify if they cover each of their sides (north, south, east, west). Some blocks, like solid walls, will cover all of that wall, and so the neighbour block there won't need to render that face. Faces can be switched on or off as needed, depending on the status of the neighbour.

Actually, this is already part of the engine, for tops, because the tops of blocks are not rendered if a floor is above them. That caused obvious flimmering (ugliness) so I was forced to deal with it. If only I'd thought back then, I could have made these changes back in 2004.

The offshoot with this is that now, every map block (there are 300) needs chopping up into faces: main (floor/middle), top, north, south, east, west. Only walls really have all bits, and they can be reused, but I don't have those components now... it means a lot of remaking 3D data and a lot of retexturing, which is very slow and tedious on my rather rubbish Visual Basic texturer.

If I'm going to retexture all of the graphics (and I am) I might as well make new, higher resolution textures too, so I'm doing that too. The programming work will be easy once I have these data; these blocks... but it will be several days until I do. Every process is very slow. Fortunately, I generated most of the textures in Genetica, which means that I can render them in higher resolution with a click.

Of the 300 blocks, I've made 16 so far. The first 50 or so are simple floors, so easy to do. Oddly, I split the original floors between lots of weird texture files that has walls mixed in. That's a real pain because it means the new 'inner' blasted walls won't fit anywhere, so I have to change the actual texture layout too.

It's exhausting and laborious work, but at the end, hopefully in a week, the game should look better. Yesterday I felt great, that I was on the home straight for this game, but now I'm at the bottom of a mountain again. On we climb.

Sunday, May 03, 2020

Teuton Arcanum

A manically busy few days, as ever, working on Taskforce. The amount of work on a computer game is immense. It's no wonder that I practically had a nervous breakdown working on it last time, and the work just seems to grow. Yesterday, I almost thought I was near the end, but I still had a lot to do. My main job was to read and edit the main mission text as one, an overall view. After two days, I still haven't done that, but have completed a few other jobs.

I've finalised the lighting for two missions, and developed a backstory for the game. I wanted something with depth and went back to an old idea I had, decades old, for a sci-fi series about some crusading knights (which in my case included a Shaolin Monk) who stumble across an alien computer which they mistake for an angel. Before I got too far into this; this isn't my backstory, but it does involve knights.

The Taskforce backstory is about 'Teuton Arcanum', or to give it the full title: 'Teuton Arcanum Special Knight Force', a secret society of knights which are a bit like the Freemasons but with a central base of operations and a military wing. The story goes as follows:

It is the 9th century, and Charlemagne, keen to spread culture and preserve his new Holy Roman Empire, creates an order of elite guards to protect his new great library, a cultural archive as extensive as the Great Library of Alexandria, and replete with holy relics and treasures. This organisation is called Teuton Arcanum, and consists initially of nine knights. To this day the organisation is administered by the 'Nine Unknown Knights'; unknown because even the nine do not know the true identity of the other knights - historically they would wear full plate armour during the meetings. It is an independent secret society which seeks and recruits the best of humanity to help the world and preserve order and global culture, a sort of chivalrous fraternal organisation.

The order is known as the Teuton Arcanum Special Knight Force, or Taskforce, and after being initially based in Aachen in Germany, and then St Gallen in Switzerland, is now based in an underground city beneath the Swiss Alps called 'The Cathedral'. Each of the Nine Knights controls a different department:

1. Military is the one the player commands in Taskforce, taking control of Knight Force 1. This is the active military and adventure wing of Teuton Arcanum. Any job in the real world that needs doing use this. Recruits are generally from any country's army or from an athletic background.
2. Philosophical, The Taskforce theoretical division, responsible for ideas, mathematics, culture.
3. Archival. The Knight's Clerical; this department is responsible for storing and preserving the knowledge and treasures. The archive is called The Labyrinth and is administered by a supercomputer.
4. Esoteric. Responsible for investigation and observance of the religious and magical.
5. Political. The political department monitors and influences global events on a country level, and has a network of agents, diplomats, lobbyists and influencers.
6. Active Scientific Operations. Originally known as the Knights Alchemical, this department is the active experimental wing of the Taskforce organisation, responsible for inventing, building, and testing. Leonardo da Vinci was one notable member.
7. Sentinel. The military wing responsible for guarding Taskforce property.
8. Financial. The financial guild monitors and regulates the Taskforce finances and commercial exploitation of any inventions.
9. The Dark Order. An independent monastic order. All members take a lifetime vow of silence and live exclusively in The Cathedral. They monitor other Taskforce members with their unique network, and chronicle the activities of the Teuton Arcanum.

Taskforce recruit members by invitation. Throughout history many notable figures have been part of Taskforce, thus, the knights are an organisation of infinite depth and possibility.

Anyway, before I write too much on this. I spent yesterday adding lots to the game. Now you can left and right click on icons, which allows me to remove one option from the menu; this is good, simplicity is always my aim (yet, with depth).

Today I've added the ability to shoot though windows after a suggestion from Andrew. This wasn't even possible until I added the 'cannot step on' flag because height determined where you could walk. Now height effectively determines where you can hide or shoot, so you can have windows of zero height that can be fired though as though they were air. Detecting a bullet passing though them and transforming the block was really easy, just one line of code, but the visual effect was rather poor, and I needed a smashing window sound effect... all complexity. Well, now this feature is in.

I feel I have so much to work on and write. I will end this blog post with the new Taskforce logo, the Arcanum Knot, a star of nine points for the Nine Unknown Knights which control the world.

Friday, May 01, 2020

Morgane Armed, and Synaesthesia Queued

A tiring and somewhat frustrating day. I started with regular monthly backups, then relaunched A Walk in the Countryside and queued up my new Synaesthesia album. I'm pleased I did this... working on it was fun and particularly artistic. It set me a mood to check though everything in Taskforce from the sky, seeing the whole project at once.

After that I decided that I wanted my villain, October Morgane, to walk and shoot. It felt wrong to shoot an unarmed villain in any mission! Not only unarmed, this dummy was very dummy-like. He just stood there and rotated. I've given him legs and a pistol. Amusingly, he was 20% bigger than he should have been at first, evoking images of Sark from Tron.

This process took a long time. I had to find the 'Executive' object and basically copy most of the texture from him, all except the face, and then copy the face from the dummy Morgane. Everything seemed to go wrong; little things here and there. Then I revisited the final mission of the game. This is the most linear of all missions. Regular blog readers will be aware of my love of the non-linear in missions, so I spend an hour or two revamping this... then playing it...

...but it didn't work. For a finale, a climax, the linear helps because it builds to a specific point, a showdown. If you could watch Star Wars in any order, it might be fun, but you really need the Death Star to explode at the end, not in the middle or the start. Also, this is the conclusion of the whole game, so should (and does) feature a cameo from everyone in the game, ending in a climactic confrontation with the super-villain. With a few cosmetic changes, I restored the original mission.

Andrew reported a bug that I should have detected myself; that Config files are overwritten by Steam because they, naturally, change when playing, yet their initial state is shipped with the game. The problem here is that storing them is important to keep the user's mission progress, so I've got round it by having two; a start config for the first run and a subsequent one for any runs after that.

I've also tried a bit of music (the music will be, generally, a bluesy, dystopian rock), and experimented with new sound effects. The ones in the game so far sound a little crude and Amiga-like. I can do better now - if I have time.

I'll conclude with a picture of the final Synaesthesia cover. It will be released on May 29th: