Get Google Earth

If you’ve not played with this yet then you really have to.

http://earth.google.com/

Basically it’s a map of the planet, constructed from satellite photos. It takes a moment to download the new images, but it lets you download pictures of pretty much everywhere around the world in incredible detail.

Not only is big brother watching you, but so too could be you mother, father, and a whole host of complete strangers. I’ve not checked to see how often it updates, but if anyone knows how ‘live’ this is I’d be interested to hear.

Bumper digi-Shakespeare

The writer’s block has passed, possibly due to the sense of betrayal in a recent poem having sparked the creative juices. I’ve been getting loads of these so I thought I’d save them up. In order of appearence:

mother master
seven whos east know
bit go got towards

I can’t decide if this indicates some sort of Freudian regression or some sort of apocalypse predictation in the mode of Nostradamus.

discuss young
pronunciation miles fail awhile hurried
sorry news fancy meeting knows but

DS is back onto that lost relationship again here I think. This speaks of the difficulty in talking, the problems of words to express feelings when there is so little time to speak and make up for what has passed. The final ‘but’ lingers without a conclusion, leaving the reader hoping for resolution where DS feels there can be none.

remember drew though favorite
development wood
modern however glass

A more optimistic tone comes through in this one. DS appears to be embracing a modern city, with its conflicting materials. Perhaps DS is seeing trees reflected in the glass of a building. This might be the first time that DS has hinted at a physical location. I wonder if we’ll see more of this in future?

moon as welcome
met considered went
taught break letter buy bit

A tricky one. I think it’s a night-time contemplation of the brief meeting discussed two poems ago and the feelings of frustrated communication that it provoked.

thats either motor luck or coming
everyone away found proceeded
awhile promise is inside

DS here seems to be resolving to move on with its life. That third line definitely speaks of a determination to be true to itself and put heartbreak behind it. Good for you DS!

Now, here’s a curious one. Usually the DS poems appear with only an attachment (I couldn’t tell you what it’s for, I’m not daft enough to open it), but this one appeared with an advert for ‘the hottest Pornostars pics and videos’.

While the form is apparently similar to that of DS, I think you’ll agree that the poem just isn’t up to scratch:

bequeath affricate armpit atlas
direct covariate bawd blur
dalhousie bey bleat artie

What does that mean? It’s just a load of nonsense. Either this isn’t DS or DS was only doing this for the money and randomly made up any old rubbish. We’ve all got bills to pay you know!

For new readers: Digital Shakespeare, DS, is a series of poems that I get sent quite regularly as junk mail. The system generates a random string of words over three lines to avoid the junk mail filter. The idea is, I think, that out of curiosity I’ll open the attachment that always comes with the poems. I find the random lines rather wistful so I’ve decided to log them and put quick interpretations of them on here. There’s not really an overall point to this, just that I think beauty is where you find it, so it’s worth keeping your eyes open to see when it appears in the strangest of places.

Iraqi civilian deaths increasing

Around 800 people a month are dying in Iraq from attacks by insurgents and it’s getting worse. The figures for the numbers killed in military operations haven’t been released apparently. If this doesn’t put the London bombing into perspective I don’t know what does.

“The Americans have to be smarter – to hide and lay traps for the insurgents,” Mr. Summaidai said by telephone in early July. “Not just to terrorize the community. That will not work.”

There’s the T word again. Terror. Apparently the US military are scaring the hell out of the population (no mention is made of other nationality forces). I’d love to say that this is a situation with a simple solution that the leaders are overlooking, but it just isn’t. The soldiers are scared, and that will always lead to them attempting to regain control by scaring the population. You can’t take the soldiers out now because that would leave a power vacuum which would likely result in even worse conditions for the country’s population, but leaving in there isn’t helping anyone either.

There’s no happy ending to this post, because at the moment I just can’t see the situation getting better any time soon, but it does reiterate that a four bombs and around 50 dead in London is nothing compared to the suffering that is going on in Iraq and that Britain is partially responsible for. It’s a tragedy for the families, and a terrible event all around, but it is not anywhere near the scale of suffering that is happening right now in Iraq.

There is a difference between Britain taking blame for these events in Iraq and taking responsibility, I don’t blame our government for being there, and there’s no point in going over old mistakes at this point; that doesn’t bring anyone back to life. We now have to take control of events as best we can and face up to the fact that the coalition is now responsible for trying to make Iraq as safe or preferably safer for its population than it was when we got there. We broke it, but all the Queen’s horses and all the Queen’s cannot put Iraq back together again.

Are you responsible for what remains hidden?

Grand Theft Auto: San Andreas has explicit sex scenes in the code… If you hack it

So here’s an interesting situation. The developers, Rockstar North, put these scenes into the code of the game, but then they decided not to use them. The code is sitting hidden away, and completely inaccessible to anyone playing it normally. However, a chap has programmed a mod that allows access to the unused scenes.

Now there is a problem with the rating: do you rate the game on what it does, or what it could potentially do? In the US it is rated M, meaning you have to be aged 17 or over to buy it, but adult content would be rated more highly. The game doesn’t actually feature any of the footage but should the developers be responsible for things that are hidden away from public view?

I can see the developer’s defence: it’s a bit like saying that because many painters work from a unclothed figure up when they paint then if a person is given access to an X-ray machine they could see the naked original sketches so the picture must be pornographic.

Does this mean that if I call variables in one of my game by offensive words then they would only be suitable for older viewers in case someone mods the game to display the variables on-screen? (I don’t, in case anyone could be bothered to check.) There have been countless mods for PC games to re-skin the characters as being naked. I guess the difference is that the code already existed in GTA, but the fact remains that it is the action of the individual that allows these scenes to be witnessed. Surely the fact that people choose for themselves to see these things would imply that they have knowledge of the content that they are unlocking and therefore they take responsibility for their own actions?

Maybe those scenes shouldn’t have been in there in the first place, but you can’t blame Rockstar North for having untidy code, I can think of a certain operating system manufacturer who would be in a great deal of trouble if you’re going to start doing that! Let’s face it, the unplugged security holes in Windoze have probably resulted in far more children being exposed to porn through Adware than will ever see the explicit content on GTA. To me this sounds like a combination of a nanny state and a lack of comprehension of the realities of coding. Sometimes my games have whole functions that I cut out because I change my mind mid-way through, but I leave them in the code in case I change my mind. Rockstar North probably did the same, so are they to blame if someone finds it?

Then again, I wouldn’t put it past them to have released details of the existence of the scenes deliberately to drum up some controversy…

Use http://everyclick.com/

Now here’s a bright idea:

http://everyclick.com/

It’s a search engine that donates 50% of their revenue to charities. Google will still reign as king of finding obscure things, but I’ll be using Everyclick for my everyday stuff. What a great idea. If you create a user-account there then you can choose what charity you would like to support too. There’s not big money rolling through there yet, but it’s a really good idea and one that I think deserves support.

Two very good posts about the London attacks

I’ve been accused of acting superior to Americans for posting about my pride in Britain’s handling of the recent bombings in London. My post had nothing to do with my thoughts about America, but apparently I’m not the only one who is annoyed that some Americans have been acting like this was ‘the British September 11th’. It wasn’t. The deaths are tragic, but there is no paradigm shift here, we’re not surprised, we’re not changing, and we’re not even really scared. I was on the phone last night arranging to visit a friend in a couple of weeks, travelling through central London, and the ‘danger’ didn’t even cross my mind.

Gia’s two posts sum up the British feelings to all this nicely:

Her first post on initial reactions to the bombings…

… and her second post in response to the way some Americans have been acting. It’s entitled ‘Terror Alert Level: More Beer!’ and the title alone speaks volumes about our feelings: it was a waste of life, but we are not going to change because of it. Our strength is in being British. Ask us for help and we’ll give it. Kill us and we’ll tell you to piss off.

Before I get more complaints: I am fortunate enough to know many lovely Americans and to know that the occasional weird response to these events isn’t happening to everyone over there.

Thanks to Sean from http://corfield.org for passing these links on to me.

Franekenstein and modern horror

I was watching a little bit of a Frankenstain movie from the 1950s tonight. It was basically rubbish, but the opening sequence made me think about the current political approach to terrorism.

The monster was lumbering after a nimble young woman, who was constantly screaming, fretting about being chased, and generally not doing a very good job of dealing with the business at hand (running away). The frankly rather rubbish and desperately ineffective monster slowly dragged his limbs along and eventually caught up with her after she had managed to corner herself in a lake (damsels in distress never choose good places to run to in movies, but retreating into waist deep water ranks pretty highly among the more stupid places to go).

This type of slow monster had been around for millenia, transferred from zombies and ghosts through into the modern technological beast that is Frankenstein’s creation, but why are they scary? Certainly there is some existential doubt evoked by them, after all, if inanimate flesh can be brought to life then what is to say that we are any better, maybe this means that we have no soul and that we are similar to the monster chasing us, simply going through life eating, excreting, and reproducing. This doubt is real enough, but I suspect that what the monsters evoke is something more primal than that, it’s a simple fear of ‘I don’t know how to stop this thing, and no matter what I do it still keeps on coming’. Like bad weather, a good monster is a force of nature that seems unassailable and immensely powerful. I think it’s also a feature of a good monster that it is somehow limited, often in time (appearing until dawn, for example), geographically (cannot cross running water, must not leave the haunted house), or simply in reach and ability (lack of speed, lack of numbers).

So what does this have to do with terrorism? I think that terrorism has been turned, by politicians who want a tool to keep the population afraid, into a lumbering mythic monster; capable of striking at the times of ease, implacable, lumbering, without personality, reason, or faces, but also capable of limitation, resources, and being fought. But what are the methods of fighting such a hydra? Cut off one head and another grows elsewhere. I stand by the reasoning I’ve held for several years: you have to combat this not by killing the monster but by tackling the forces that create it. I don’t mean simply apprehending Osama Bin Laden. While I would be as happy as anyone to know of his arrest I also seriously doubt it would make any difference to the level of terrorism in the world. I suggest that you tackle terrorism by disposing as quickly as possible with inequality.

Those are simple words for a massive task, but a good start would be to provide water, food, and shelter for the world. Even a tiny portion of what the US spends annually on the military could solve the world’s water problems in one year, and how much easier would it be to deal with a country that knows it cn drink because of your generosity? How much more stable would a country be if the people all had enough to eat and places to sleep? These are not things that are beyond our capability to grant.

I may be an eternal optimist, but I believe that if people can drink, eat, and sleep under a roof then this makes them substantially less likely to become radicalised into violent action against another country. In partilcular, such provision must be done without strings and for the good of the people, not for economic gain. The scrapping of selected third-world debts is intimately tied to the governments’ ability to permit first-world countries to exploit the new, cheap workforce. I don’t think that it can be a coincidence that in the seven months since China has finally been rumbling and realising that it is one of the most powerful economies in the world that the west has suddenly become determined to promote economic stability in Africa. Scrapping the debt is great, but turning the new populations into sweat-shop workers is not. I may be being overly cynical. We’ll see.

By contrast to my optimistic model, forcing governmental changes, killing families, and destroying basic facilities seems like a perfect method to create an army of dedicated to soldiers against you. Given that terrorist activity appears to be on the increase as a result of the ‘war on terror’ then it would seem that spraying Frankenstein’s monster with bullets is just making it angry, to make it stop you need to go back to the source.

If you’re happy and you know it

click the banners.

If you’re happy and you know it click the banners.

If you’re happy and you know it and you really want to show it,

If you’re happy and you know it click the banners (because it makes me look good and I might be able to hold on to my reasonable-paying advertisers that way).

Thank you!

We do not quake, we do not rage

Terrorism is supposed to be the method of the oppressed to get their message to the world, but it seems that even that has got lost in some darkened twist on post-modernism. The removal of the meaning from the act seems to have created a global aesthetic where violence is a self-fulfilling action, justifying itself by the damage it causes and not by the fulfillment of ideological goals.

We’ve lived through decades of attacks from the IRA. I found the footage on television today eerily familiar to those times. Admittedly there’s not been an attack on mainland Britain for a while now, but those memories are still clear. When I was growing up it seemed like every day there was a new bomb somewhere. I think as a nation we have become accustomed to terrorism in a way that the US perhaps has not.

I thought Blair gave a good speech, but I’m actually most impressed with an interview given by a barrister who was on one of the tube trains when it exploded. He was clearly in shock, but gave a good description of events. When asked the blatant ‘let’s get a sound bite’ question of how he felt about the people who did the attacks his word was ‘pity’. I thought it was really admirable that a man who has just walked past the bodies of his countrymen could muster the strength to give such a wise answer. I think his word is going to be my lasting memory of this event.

We are not a nation for raging anger in response to threats, there will be those that do, but as a majority we hold controlled, civilised life as the most important approach to the world. We solidify, we protect the things that we believe in more earnestly, and one of the things that the British really believe in is not making a spectacle of things. We get on with it and try not to make a fuss. We might be angry inside, but we have lived and died in such times before, and will most likely continue to do so for the rest of our lives. No ‘war on terror’ will change that. It’s a sad fact of life that today some friends and families won’t see the people they care about ever again, and all over some dispute that they most likely don’t care about and almost certainly have never had any meaningful involvement with. We will, as always, try to create equality in the world to attempt to protect ourselves from the extremists’ accusations, but there will always be people who do not like who we are, and who we have been, as a nation.

We accept that we have enemies, our nation always has done and almost certainly will do for the rest of our lifetimes, but we also defend the things that make us who we are as a group, and one of those things is composure, clear-headedness, and the organised and responsible reaction to acts performed against us. Terrorism like this will not make us less British; it only demonstrates how singular as a nation we are in times of crisis. We are singular and we are diverse. This attack strikes at black, white, young, old, those who live here, and those who are visiting, Christian, Muslim, Jew, and all others alike. We are the British, and we do not change to the whim of aggressors.

God Makes A Sandwich

Can I get any sillier? Who knows, but I think I’ll probably try.

God Makes A Sandwich.

This is my first real shot at using movie-footage with Flash. I started out using 8Ball, the next version of the Flash software, but then discovered that its lovely compression rates aren’t compatible with Flash Player 7. Bah humbug. So I had to go and re-import everything in Flash 7 to get it working for everyone else.

I downloaded the Titanic trailer, editted it into sections using Quicktime Pro. I converted the sections into a .avi file so I could rip the soundtrack off of them and mix it with the voiceover sections (I use Cool Edit Pro for sound editting, and it can’t rip the soundtrack from Quicktime files, only .avi files). Going back to the Quicktime versions, I then published then exported them as an image sequence. This publishes one image per-frame of film. I then opened those images in Photoshop and individually added the lettuce by hand to the frames that I wanted it in. I then used Quicktime to open the editted images as single movie, compiled them into a new film and saved them ready to be imported into Flash. Phew!

If anyone’s interested, it’s running at 12 frames per second and the total file size is around 960k. By dropping the frame rate it meant I could keep the movie effect but still have a reasonable size after publishing it.

Turning animated actionscript into a game

Here’s what I plan to be a quick bit of information about how to turn the code that makes things move around the screen (which can be found in my beginner’s actionscript animation tutorial) into a game like Chase The Cheese.

Before we get started, if you haven’t already had a look at the game then go do that now, it’ll make the rest of this more easy to understand.

In the previous tutorial I showed you how to make things move around the screen using actionscript to make them shift along each time a frame loop happened. If you look at the game, there are three blocks bumping up and down, just like we set up in the tutorial, except that they are going vertically not horizontally.

This is very easily done, but first we set a few variables. Do this before you get into the game loop; I set-up my movies with the opening/loader page on frame one, my variables on frame two, then the game loop on frames three and four. If you put the variables in the loop frame then they will be reset everytime that frame is played. For example, you might have a speed variable that starts at 5 pixels per frame and you wanted to increase this in relation to the score, if everytime the loop plays the code sees ‘speed = 5;’ then it will never change. Put your variables before your loop and you avoid this problem and it also makes it easier to find them to adjust them. Believe me, finding things can be quite tricky in later stages of programming because things can quickly accumulate!

So, set some variables:

// init game variables
LEFT = 40;
RIGHT = 720;
TOP = 0;
BOTTOM = 315;

ch2.gotoAndPlay(“start”);
playerhit._x = 20;
player._x = 20;
score = 0;

//init block directions
b1move = 1;
b2move = -1;
b3move = 1;

//block speeds
b1speed = 5;
b2speed = 5;
b3speed = 5;

What have we got here?

Firstly there are the limits of the screen that I want to use measured in pixels, that’s simple enough to understand.

The next block is more complicated:

ch2.gotoAndPlay(“start”);

‘ch2’ is the name of my cheese movieclip on the right of the screen (in case you’ve forgotten, you give things names by clicking on them then typing it into the name box on the Properties panel). It has a label on its own timeline called ‘start’ which triggers the animation of the cheese moving onto the screen. This gives our mousey something to chase when the game starts. Without this command the cheese would remain at frame one of its own timeline where there is a simple actionscript command telling it to ‘stop();’.

playerhit._x = 20;
player._x = 20;

Rather than have the mouse graphic as the thing that hits the blocks I go for a rectangle graphic called ‘playerhit’. This is a simple movieclip the size of the mouse-body that is drawn in a colour with an alpha level of 0%. This makes it invisible. By doing this I make sure that the player survives if only their tail hits the block. This gives the player a bit of leeway and improves the feeling of accuracy in the game. I’ve put the mousey (‘player’) and the thing that hits the blocks (‘playerhit’) on the stage at the same height, so I just need to make sure they are both beginning in the same place on the x-axis, so I set both the _x values to 20.

score = 0;

Obviously, this sets the score at 0. If we didn’t define this as zero now, when the game started the score would be ‘NaN’, which is Flash’s way of telling you that you’ve not given a variable a value yet. Setting the score to zero here also means that if a person chooses to play again then you can set the movie to loop to this point and they don’t get their last game’s score still stuck in the system.

What was next?

//init block directions
b1move = 1;
b2move = -1;
b3move = 1;

//block speeds
b1speed = 5;
b2speed = 5;
b3speed = 5;

Here we’re setting up a value for a block’s initial direction and its initial speed. We’ll use these in just a moment.

Okay, let’s get our blocks moving. I’m going to do this in the most simple way possible. There are more efficient ways of coding, but sometimes it saves brainpower to just do things the brute force way. The appeal of doing things simply is that if something goes wrong then there are less places to check. So, we’re onto code that we want to run every loop so let’s put this in the looping frames:

block1._y += b1speed*b1move;
if (block1._y >= BOTTOM) {
block1._y = BOTTOM;
b1move *= -1;
b1speed = Math.random()*(score/2)+5;
} else if (block1._y < = TOP) { block1._y = TOP; b1move *= -1; b1speed = Math.random()*(score/2)+5; }

Hopefully if you’ve gone through the previous tutorial you’ll be happy with ‘if’ statements. These are simply

if (this is true) {
do this;
}

So, firstly we move the movieclip called block1 along the y axis:

block1._y += b1speed*b1move;

We do this by getting it’s current position (block1._y) then adding to this (+=) the value of b1speed (which initially we set to be 5) multiplied by the value of b1move (which we set to be 1). This means that to begin with the block will move down the screen at a rate of 5 pixels per loop. Don’t forget that in Flash, and most web-design, the numbers on the y axis increase as you go down the screen.

We then have an if statement:

if (block1._y >= BOTTOM) {

Simply, if after the previous adjustment to the value of block1._y it is now a value bigger than or equal to BOTTOM then run the code in curly brackets. We set the variable BOTTOM in frame two, so this should be pretty easy to understand, it just means that if the block is at the bottom of the screen then the code is run. I put ‘BOTTOM’ in capital letters when I was defining my variables to remind me that this is a variable that isn’t changed by the code at any point.

Let’s have a look at what’s run next:

block1._y = BOTTOM;
b1move *= -1;
b1speed = Math.random()*(score/2)+5;
}

first we set bock1._y to be the same as the BOTTOM value, this makes sure it doesn’t disappear off the screen at any point. We then get the value ‘b1move’ and multiply it by -1. We could write this line as

b1move = b1move*1

but using the ‘*=’ code does this in a quicker way.

Lastly we set a new value for the speed of the block, b1speed. Let’s look at that line more carefully:

b1speed = Math.random()*(score/2)+5;

In English that says:

We’re talking about b1speed here and we want to change its value. Make the value of b1speed equal the following… Pick a random number between zero and one, multiply it by half the value of ‘score’, then add five.

‘Math.random()’ gives you a random number between zero and one. This is fine, but we want to change the speed a little more than just adding .3 of a pixel to each loop! To do this we multiply it by a number that is increasing as the player gets further into the game, ie. the score. Everytime a person gets a piece of cheese the score goes up. To begin with this won’t make much difference, if the score is ‘2’ then we get something like:

b1speed = (randomly generated .3) * (2/2) + 5

Which would mean that the new speed of the block is 5.3 . I decided to divide the score by two because otherwise the speed of the blocks increased too fast. Given that the game is perhaps a bit too difficult, maybe I should have divided it more… It’s in changing things like this that you can create difficulty levels for your games. Anyway, with a score of 2 things don’t change much, let’s have a look at a score of 8:

b1speed = (randomly generated .3) * (8/2) + 5

That gives us 6.2, which is more than 20% faster than the basic speed. With a score of eight you can get speed values between 5 and 9, making it far harder to get across safely.

These new values for b1move and b1speed are then applied each loop until the value of block1._y is less than or equal to TOP. I’m sure you get the idea of what’s going on here.

To keep things simple I then just copied this code out another two times and changed the names to block2, b2move, b2 speed, block3, etc.

So, how do we make things hit eachother?

At the very start of the actions for the frame, before the movement code, I put in this:

if (playerhit.hitTest(block1)) {
gotoAndPlay(“gameover”);
} else if (playerhit.hitTest(block2)) {
gotoAndPlay(“gameover”);
} else if(playerhit.hitTest(block3)) {
gotoAndPlay(“gameover”);
}

This is a simple bit of code that checks to see if ‘playerhit’ is overlapping ‘block1’, or ‘block2’, or ‘block3’. the ‘hitTest’ code is very useful, it also has optional parameters for greater accuracy, but if you use my method of having an invisible ‘playerhit’ box rather than using the actual visible mousey then you don’t really need to worry about those.

I think the hitTest code is pretty self-explanatory, and it triggers a movement to the timeline frame with the label ‘gameover’.

One quick point here: to begin with I had my hitTest code running after the movement code. As I said above, it’s important to put it above this. The reason for this is that when the movement code runs it sets the new values of x and y axis variables. If the player is hit and you check for that hit after the movement code has run then the person playing never actually sees the impact before getting sent to the gameover screen. If you check the hit before the code runs then the movement animation happens and the hit is detected on the next loop. You only see the changes made by actionscript on screen when the playhead goes to the next frame, so if you check the hit after the actionscript has moved the mousey then it won’t have time to be shown to the user before they are sent to the gameover point. If you check at the start of each loop then you are really checking to see if the movement from the previous loop has created a hit. ‘Hope that makes sense!

I’ve not covered here the ways to tie the movement of the mousey into the user’s mouse movements and I don’t have time at the moment, so I’ll just say this: if you have the mousey correspond precisely with the position of the user’s arrow then the user could take their arrow off the side of the movie (where Flash can’t detect it) on one side and bring it back on on the other and according to the movie the mouse will have warpped from one side to the other, missing all obstacles and rather defeating the point of the game. For this reason I put in place the acceleration scale at the bottom of the screen. It’s quite a neat idea, but I think it might be a bit too obscure for many players. Oh well, you live and you learn!

Control is a design challenge all on its own, so maybe I’ll tackle that another day. Until then, I hope this has been an interesting insight into the use of actionscript in Flash games programming.

Gabba gabba gabba

Ultraviolence – I Am Destructor video

I told you that there would be more from that thing I was playing with yesterday!

The blobby effect is made by hand-drawing a graphic animation loop of around 18 frames with the blobs moving around on the spot. This is easier if you turn on the onion-skin option (the button that looks like two little squares on top of each-other just below the timeline). You then put the loop into a new graphic-clip and put another keyframe on the timeline 18 frames later with the blob-loop motion tweened to a new position. Put an empty keyframe after the end of the loop (frame 19) otherwise it will start again. Copy those frames and into a new layer and move them along one, so the first frame of the motion-tween is now frame 2. Repeat this, staggering the first frame by one until you’ve got an effect you like. I chose to do eighteen layers for eighteen frame clips, but that’s just a personal choice.

If you have a look at the clip now it will look pretty silly. Because the clips all start and end in identical positions, the individual frames lay directly on top of each-other so there is no effect of movement. To fix this, go through and individually move around the beginning and end positions of the graphic clips. It’s best to keep the beginning points close to each-other if you want a clear ‘point of origin’ for the blobs, but you can spread out the end points over a big distance. Really there’s no hard set rule here, so just do whatever looks good to you.

Now you’ve got a graphic clip of the blobs moving in a very pleasing multilayered way across the screen. For interest you might want to go down into the original blob loop and draw a few strings of dots, the main blob dividing, or to fill in some of them with colours. Experimentation is the key here. I think I’ve got a lot to learn about this technique, but it’s certainly fun to play with!