KURT Comics (2)

E’ stato un po’ faticoso (non ho trovato un modo automatico di importare le strisce e alla fine le ho aggiunte nel pannello di Toocheke a mano tutte e 293) ma ora l’archivio è di nuovo completamente disponibile tramite la voce nella barra in altro. Nel caso, buona lettura :-)

KURT Comics

Dovendo, per necessità, cambiare hosting provider (iBrave, con il quale avevo fatto un contratto pluriennale nel 2021, ha detto che a novembre chiuderà i battenti), e avendo visto sulla mia pelle quanto una installazione WordPress multisite (come è quella per marcogiorgini.me) sia terrificante da spostare, sto iniziando a “compattare” e riorganizzare cose su questa parte del sito – utilizzando la barra a destra (a cui ho aggiunto i riferimenti ai libri in cui c’è qualcosa di mio) e le pagine (barra in alto).

Tra le cose che ho deciso di aggiungere qui c’è anche il contenuto di comics.marcogiorgini.me / kurtcomics.com – vittima non solo delle difficoltà incontrate per il discorso multisite ma anche (e soprattutto) della fine del supporto per comicpress-manager (il plugin con cui avevo messo in piedi la parte di visualizzazione del mio webcomic).

Il cambio da ComicPress a Toocheke richiederà un tempo indefinito – ma direi che il risultato sia simile (ed è già predisposto per potere procedere nel caso con altre strisce, se mai avessi tempo per farlo).

Se siete curiosi di dare una occhiata (o per vedere la gestione, o perché di KURT non avete semplicemente mai sentito parlare) non dovete fare altro che cliccare qui – ricordandovi solo che delle quasi 300 strisce realizzate al momento solo una trentina sono state riportate in questo nuovo spazio.

Modenesi per Sempre – Edizioni della Sera

Il 15 marzo scorso è uscita una antologia a tema (curata da Gabriele Sorrentino, edita da Edizioni della Sera) con anche un mio breve racconto (diciamo di fantascienza, anche se ovviamente il focus rimane assolutamente la città di Modena). So che le antologie, soprattutto quando sono iperspecifiche come argomento, possono risultare poco interessanti ai più, e la mia opinione sulla qualità complessiva (buona) è chiaramente di parte, ma se avete qualche minuto da perdere vi invito a dare almeno una occhiata all’elenco dei tanti autori perché, anche se tutti o quasi della zona, potreste conoscerne alcuni.
In più, se siete anche solo curiosi, qui potete trovare una bella recensione (di Renzo Romagnoli) che vi darà qualche informazione extra su come l’argomento città è stato affrontato.

Di presentazioni ne sono già state fatte quattro, ma ce ne sarà almeno un’altra dopo l’estate, e ci sarà una bella iniziativa collegata ad alcuni dei testi presenti, di cui però vi parlerò quando tutto sarà ufficializzato.

Ah, nel caso alla fine vi interessi comprarne una copia, questo è il link alla pagina amazon (necessaria, a meno che non siate in grado di passare in qualche libreria in zona).

Brown Bird – Fingers To The Bone

I’ve worked my fingers to the bone
Not a pretty little penny have I got to show
I ain’t looking for much
Just a little bit of rest by the side of the road
I lift my voice to the forces above
The lords of labor and the goddess of love
Ain’t I been a good, hard working
Faithful servant and son

Then the sky turns black
And it cracks with a thundering voice
Work is what you are when you’re breathing in and out
‘Til your final breath falls to the floor

So swing down that sledgehammer through the wood
A little test of mind over flesh oughta do you good
Get up off the ground
You can lay down when the day is done
And on the seventh day
You can lay in the morning sun

I want to make my home on a mountain high
Just me and my lover and the big old sky
I ain’t asking for much
Just a little bit of rest before the day that I die
I lift my voice to the forces above
The lords of labor and the goddess of love
Ain’t I been a good, hard working
Faithful servant and son

Then the sky turns black
And it cracks with a thundering voice
Work is what you are when you’re breathing in and out
‘Til your final breath falls to the floor

So swing down that sledgehammer through the wood
A little test of mind over flesh oughta do you good
Get up off the ground
You can lay down when the day is done
And on the seventh day
You can lay in the morning sun

Swing down that sledgehammer through the wood
A little test of mind over flesh oughta do you good
Get up off the ground
You can lay down when the day is done
And on the seventh day
You can lay in the morning sun

NPA – Come se

Come se…
La pioggia mi bagnasse…
Come se…
Fosse l’apocalisse…
Come se…
Tutta la mia eclisse suscitasse fuori fuoco fuoco mosse…
Come se…
I miei sospiri rubano i tuoi fremiti…
Come se…
Ridendo dei miei demoni tenessi fra le mani gli angeli…
Come se…
Come se tu…
Onda del mio oceano…
Ti stringo di più…
Ma le mie mani tremano…
Come se tu…
Ti facessi in musica…
Capendo di più…
Il veleno che ho nell’anima…

Come se…
Il grido fosse fatto col megafono…
Come se…
Dentro me girasse la puntina di un grammofono…
Quando la ragione e il sentimento…
Per un processo armonico…
Come se…
Dallo spazio vuoto una galassia si fa luce per difendermi
Come se…
Fra le tue calze a rete sto perdendomi…
Come se…
Da piccolo provavo a nascondermi…
Come se…
Nei meandri del cervello io sentivo i fulmini  (8)
Come se…
Fuori c’era il sole e dentro avevo i brividi
Come se…
Come se tu…
Onda del mio oceano…
Ti stringo di più…
Ma le mie mani tremano…
Come se tu…
Ti facessi in musica…
Capendo di più…
Il veleno che ho nell’anima…

Come se…
Anche quella lacrima…
Vale più del platino…
Come se…
Dentro la mia retina…
Fosse scolpito l’attimo…
Come se…
Affari come i vostri sguardi vigili…
Serpenti pronti a mordermi…
Come se…
Dentro me cercavo negli abissi le mie origini…
Come se…
Viaggiando nei miei geni poco limpidi…
Tenessi fra le mani dei coralli fragili…
Cambiando le visuali oniriche e inconfondibilmente labili
Nei fondali immensi dei miei limiti…
Come se…
Come se tu…
Onda del mio oceano…
Ti stringo di più…
Ma le mie mani tremano…
Come se tu…
Ti facessi in musica…
Capendo di piùùùùùùù…
Il veleno che ho nell’anima…

Come se tu…
Fossi l’alcool che consola…
E che ti tira più su…
Di qualsiasi mia parola…
Come seeee tuuu…
Come se tuuu uuuu…
Come se tu…
Come se tu…
Come se tu…
Come seeeee tuuuuuuu…

Nesterin Trail

https://marcogiorgini.itch.io/nesterin-trail
(full game will be available in February)

After almost six months after the demo’s release, I’ve finally finished the full game, of course using the StoryTll64 engine.

Or better, I should say that I’ve finished the full game AND I’ve changed the engine enough so to be able to have a game like that based on that engine.

Most of the engine changes are technical (I’ve switched from cc65 to oscar64 as compiler – and that required me some time but helped me to reduce player code footprint, I’ve improved several time the text compression algorithm, I’ve improved a bit also the image compression one, but mostly I’ve changed the way it works so to have a minimal decompression temp area) but some are related to the script too – for things I simply missed during the first implementation (and there still are others I should add) or for things I didn’t implement in the “best” way – even for such a simple tool.

I hope to find time to update the git release (even if in that case I must also update the demo games), but I also hope to find time to write more about it, in the unlikely case someone else wants to try to use it for his/her own game.

But for today, I simply want to say that it’s been a really long and hard journey, to go from Nesterin Trail initial idea to this full game, but the challenge has also been really rewarding. Yes, the first thing I should have learned (and I’ve not) is that trying to create a long game, with strict limits (I’ve also had problems with DISK space!) with a young engine, used just for minimal projects, is really a bad idea.

I’ve fought more against the code than against the story development and at the end I’ve cut a lot of things because I could not bypass (my) C64 memory issues (surely not without slowing down MORE the development time). I’ve spent nights debugging asm code with VICE because something didn’t work – and it was a problem related to memory overrun that happened because things were getting huge and I wasn’t exactly aware of where certain data overlapped others.

It was hard – to reach almost a crying point while trying to keep eyes opened.

But – uh – it was also FUN. I wasn’t ready or good enough for this kind of work when in the 80s I was a kid with a real C64 at home trying to create games to store on an unreliable tape. But maybe I’m now, ready to fight, even if probably still not good enough.

Anyway – I really lived in Nesterin this month – even if a Nesterin that was a fantasy setting, with a nerd technical feeling – and I really hope someone else could live there too and share this world with me, for the few hours of gameplay.

I’ll discover that soon – game’s ready but I’ve still a week to way before its release – and for a nice reason.

StoryTllrC64 – your first project (4)

Ok, time to finish this small sample project. We won’t do anything too complex, but we’ll add something that the player would need to understand to solve at least one puzzle.

Let’s start adding a new room – the outside.

and then let’s add a south direction to go there from the living room – but with a difference, compared to the other movements.

Something that will show this thing:

Yes, we’re “trapped” in our own apartment!

To handle that we just need to use a variable, that needs to be set to a certain value to let us out.

A locked door means we need to find a key – that will add to normalobj – but stating that’s not “normal” – because it starts without attributes – and that means we won’t be able to see, or take it, even if we put it in the bedroom. It’s more or less a hidden object.

How should the player take it, if it’s not visible? Well, we’ll add a description for the bedside table, telling that it’s got a drawer. And then, if we check the drawer, we’ll let the player find the key – changing the object attributes.

That way, after examining the drawer, the key would be handled by our default take verb.

With that in our inventory, we just need to add handling for unlock

And here we go.

Then we can leave our home, and finish the game (actually, the game won’t stop – but there’s nothing more to do, if not moving back and read some other descriptions)

What do you think about that? Things are quite straightforward – even if of course that doesn’t mean you won’t find some difficulty, at least at the start, because of the syntax and/or because this starts to be “linear” only after some tests.

But the point is – yes – with this tool, it all but impossible to build a graphic text adventure for C64.

I’ll add (and possibly change) something here and there, trying to simplify things and improve the whole system, but if you’re curious / interested, consider saving a bookmark for this blog, for my github page, or for my itch.io page.

(the whole project is available here)

StoryTllrC64 – your first project (3.1)

Before finishing this small sample adventure there’s a thing that may not be clear, and that I’ve decided to explain and handle better (I mean, changing the script compiler).

The point is: we defined an object (i.e. our bike), then we added a name property (“your bike“).

Doing that, we’ve told our engine not only to be aware of the existence of an object in our game but also how this object must be called when asked. Is that all? Nope. We’ve also implicitly told our engine how that object can be referenced by the user in the game. “take bike” can be handled, because bike is both the object name for the game engine AND the object name for the player.

I guess this can’t be immediately clear – so, to explain what I’m saying, let’s say we want to localize our little game, adding an Italian version. Of course, I could clone the whole script file, and localize everything in Italian (changing bike to bici, for instance). BUT I may want to have the same script, able to handle BOTH languages at the same time, just because I could want to improve/bugfix it in the future, without having to worry about syncing the two scripts.

To do so, I can split the object name, used by the engine, from the object name used by the player, adding a way to express a synonym property.

Doing so I can have ONE object name for the script part (bike – but I could have called it obj01 for what is worth) and a set of name, description AND synonyms for each language I want to handle.

bike will be used in the script to reference the object INSIDE the game script, while localized synonyms will handle user input.

Then, I just need to add a configuration property to state WHICH one I currently want to compile into our C64 program to have the resulting game. (No, I don’t want to have multilanguage selectable runtime – we’ve got really few kb of memory and I prefer using them for the game. I mean, we can distribute TWO different versions, simply doing two builds)

The last thing I still needed to do was to add also the ability to localize even the msg command. After that, we’re ready to go.

And now we can have this

or this

Simply changing the config parameter

A note: this new feature is NOT mandatory. If we DON’T specify a two-letter language before name, desc, msg or synonym we’ll simply got them used like before

Even in this now-bilingual sample I still have a not localized msg that’ll work in the same way as compiling the Italian or the English version of the game.

StoryTllrC64 – your first project (3)

Before going on, as already anticipated, we’re going to remove the specific global verb handling and simply include the standard library.

That way we’re getting all the default behaviors – including the messages for unknown verbs.

Then let’s add an image for each room, just so that they look cooler.

But even if now these two locations look cooler, they’re still not good enough. Why so? Because, being this a graphical-text-adventure, we don’t want only (or mainly) graphics, but also text. We want to be able to interact, to explore the game locations, using verbs. So we need descriptions at least for some of the objects we mention (or that they’re supposed to be there).

To do that we need to add objects in the game script. But what kind of objects do we really need?

If you don’t even get the question, it’s fine. In the real world, objects are simply straight objects.

But in a game, some objects are more real than others.

The ones that are important for the game can probably be taken and moved around, while the ones that are just there to enrich a room perception, well, they are scenery. They just need a description. Or a few specific verb handling.

In the stdlib.hjt you’ll find some object classes. They can be changed or added, but they are just different for the attributes they’re assigning to their objects.

In our library scenery are the objects that are there, that you can check or interact with, but that you won’t see in the room objects list. sceneryobj are instead automatically “visible” in the room description in a special way. The normalobj have also a takeable flag that’s used by the get/take verb to know if it’s possible to put them inside your inventory.

Let’s add something to our rooms, so that’s easier to understand the differences between these three kinds of elements.

And let’s also add a “real” object – your cellphone – not tied to a specific room, even if starting in one specifically.

If we’ve something like that in the stdlib…

…entering in the living room we’ll get 1) the room description and 2) a list of listable objects – in this case our bike.

We can’t get it (so we’ll get the default message for this verb) but we can examine it. And we can of course examine also all the other local objects, even if they’re not so important for the game that we want them listed when you check the room.

The last thing I want to underline is the normal object – that’s to say our cellphone. A visible, listable, and takeable “global” object that we decide to put in the bedroom from the start.

So entering the bedroom we can see it, but we can also take it, and have it in our inventory.

And, well, if we want to do so, we can also drop it in the living room, adding this object to the listable ones there.

The game so far is minimal – but it starts to feel like a game, doesn’t it?

The only missing thing is at least a puzzle to solve. Something we need to figure out, to reach a goal.

StoryTllrC64 – your first project (2)

Ok, let’s see how to go from one starting location with no interaction possible to something, still minimal, but playable.

Let’s start adding two rooms, a bedroom (with the game starts) and a living room.

For those two locations, we need to have at least a description, so let’s add it, this way:

  • Please note that we can put the part after the : or inline or as text under the same node. In this case, we prefer to have a description, that’s longer, as text on the right, while we keep the name directly visible on the tree structure.
  • And please note also that we don’t have msg: command in the description because that’s an attribute, and not “code”.

Let’s go on. Now we change the $start onfirst code so that after a simple initial message we’ll set the game starting point to the bedroom.

  • as you can see there are two new commands: waitkey and goto:
  • here we’ve used references to the config part (we already had name, now we’re going to add the other two elements)

With these changes we’ll get that:

And, after pressing a key, we’ll go there

That’s not what you expected, is it? why don’t we see any description – and we still have the previous text?

Because my engine doesn’t assume you want something in a specific way. It’s built to be as extendible as I thought it was wise (for a very small one, being designed to run on a 8bit computer)

So, we need to tell it what we want.

And that means that we need (and want) libraries of standard behaviors.

Instead of adding each behavior inside the game script, we can create a stdlibj.hjt (read that as “standard library.hjt”) and “include” it, of course knowing that we can change everything we want if we need it.

Ah, of course a standard “standard library” is provided on GitHub, so you don’t need to understand everything and build your own (for now).

But, let’s fix this thing in our sample game, before including that, so that you can understand better what’s under the hood.

To do so we need to add a verb section and define what we want to achieve for onfirst and onenter events.

We want to have the screen cleared (clear) we want to read the room description and if there are visible, listable objects in the room, we want to read their list.

Added that, we’ll see this:

That’s surely better, isn’t it?

But 1) we still can’t do anything and 2) you may ask: hey, but now we have TWO onfirst, why’s that?

About the 2) – yes, we got two of them. BUT, and this is quite important, we have TWO main level for everything. One is the global level (something that must exist or happen everywhere, with specific limits) and one is the local level (the room we’re in). So we can have a generic, global, verb handling, and an override, in a specific room.

And so, to move from one room to the other, we can choose the second level, and add a specific verb handling in each room, like that:

This way we can move from one room to the other.

BUT if I ask to move east from the living room, nothing happens, not even a message. And that’s why we need to add a global handling for movements – that simply say that we CANNOT move that way.

To do so we can add each verb where we put onfirst with a message, but my engine can do a bit better than that.

We can define classes – we can add a behavior – we can associate verbs to that class.

Like that:

And added that we’ll get this:

(Actually we get this after a small change – if we call a synonym set e|east we must refer everywhere else to that set using (only) the FIRST element. So we need to change the reference in bedroom and living room accordingly)

But, after that, we can move to and from the two rooms without problems. Still not a great game, but now we can interact.

Webmaster: Marco Giorgini - mail: info @ marcogiorgini.com - this site is hosted on ONE.COM

Marco Giorgini [Blog] is powered by WordPress - site based on LouiseBrooks theme by Themocracy