Workshop log / FABULA C64 & Amiga

From the workshop.

LOG.

What changes in FABULA, day by day: in the engine and in the workshop, for the Commodore 64 and for the Amiga. The C64 version comes out on 16 October 2026 and has been in testing since 17 September – the shape of the first release is set, and the work is on bugs and on handling, with what comes up while making a game added as it comes – while the Amiga version is in the middle of development.

  1. C64Workshop

    FABULA C64 1.5 is out

    As of today there is FABULA C64 1.5 – a free update for everyone who bought FABULA, downloaded from itch.io as before. Projects open and build with it unchanged. One thing for finished games: rooms are now stored packed on the cartridge, and a cartridge rebuilt with 1.5 no longer offers saved games from an old one – anyone in the middle of a game is best off finishing it on the old cartridge.

    New are over 100 rooms instead of around 45, twelve verbs or a bar with only the inventory, questions with answers, narrator voices, hires characters, the MIDI import, a GIF export and a workshop with a new look, a start page, templates and a game’s connections as a graph – all in detail in the entry below. With that, every wish from the forum and from Forum64 is done; new ones are collected in the wish thread in the forum.

  2. C64Workshop

    A preview of FABULA C64 1.5: out tomorrow

    So much has come in since 1.2 that the next version is called 1.5 – and with it every wish from the forums is done. In the game, rooms are now stored packed on the cartridge: over 100 instead of around 45, plus up to 1020 flags. There are twelve verbs in four columns with “Give X to Y”, a bar with only the inventory, a bag with 18 or 24 places, questions with up to six answers, narrator voices, objects without a room, conversations over a radio or a phone, longer texts in cutscenes and credits with a picture. Characters may be drawn entirely in hires or wear a fine hires outline over the multicolour figure.

    The workshop has a new look with four colour themes, a project tree and a start page, objects are dragged out right in the room, a search field finds everything, and the project overview shows how a game hangs together as a graph, with a jump into the editor. MIDI files come in as songs, a thing in the room picture becomes takeable with one click, and a room with its animations can be saved as a GIF. Plus two new examples, HAFENNACHT and DACHBODEN, and four templates with bitmap rooms. FABULA C64 1.5 comes out on Friday, 30 October 2026, and is free for everyone who bought FABULA.

  3. C64Workshop

    FABULA C64 1.2: bitmap rooms, smooth scrolling and many wishes

    A room that doesn’t scroll may now be a multicolour bitmap by the Koala rule or a real hires bitmap with 320 pixels and two colours per cell – one click in the toolbar above the canvas switches it, from what is already painted. Koala pictures go onto the title screen pixel for pixel, packed Koala and Doodle files import, and the template stays in the project, so a picture can be converted again later with other settings.

    In the game, wide rooms now scroll smoothly, pixel by pixel, RESTORE or F1 opens a small menu with music, saved games and keys, and standard sentences may have several versions. Much of it came from the forum and Forum64: the same name for several doors, walk-to points as numbers, your own colours for the bar, a joystick with momentum and a magnet. Plus an emergency backup and a crash log. Projects open and build unchanged; 1.2 is free for everyone who bought FABULA.

  4. C64Engine

    FABULA C64 1.1: more room for big games

    While we were building SCHATTENFELS, one corner of the C64's memory ran full: the area from $8000 that holds the credits and the scripts of the objects you carry. In the end there were 32 bytes left, and a credits roll with the full cast no longer fit. In 1.1 the credits have a bank of their own on the cartridge and are fetched line by line while they scroll – up to 204 lines, without a single byte of the computer's memory. What the scripts of carried objects say now lives on the cartridge as well, and the tables behind them only list objects that actually have such a script. In SCHATTENFELS the free space there went from 32 bytes to about 2.6 KB.

    On top of that, the image import has two new settings: a colour plan that decides which C64 colour wood, stone, flames or sky become, and scaling down without mixed colours, where every pixel takes the most common colour around it. Fixed: a mouse click on port 1 could pause the game, and “Now you are playing …” can now be translated. Projects open and build unchanged; 1.1 is free for everyone who bought FABULA.

  5. C64Workshop

    SCHATTENFELS: a whole game as a test

    To see how far FABULA goes, we built a whole game with it: SCHATTENFELS, Chapter 1 – nine rooms, two playable characters you switch with W, three puzzle threads side by side, its own SID music, a hires title screen, flickering candles and a fire in the hearth. Built with the workshop as everyone has it, in English and German from one project.

    The build showed where it gets tight – the memory from $8000, which then became 1.1 – and two small bugs that were fixed for everyone with 1.1. The trailer was recorded live from a Commodore 64 Ultimate; the game comes out free on 23 October.

  6. C64Workshop

    FABULA C64 is out

    Since 16 October, FABULA C64 is on itch.io: the workshop for Windows, macOS (Apple Silicon and Intel) and Linux – on the Steam Deck it runs without Proton –, the engine with its own assembler, SENDESCHLUSS as a complete project to take apart, and the manual in English and German, also as a free PDF to read before you buy. Everything that comes to the page later is free for buyers.

    The release trailer was recorded live from a Commodore 64 Ultimate – picture and SID straight from the machine.

  7. C64Workshop

    The last days before the release

    Almost everything that came in the week before 16 October came out of testing. The title picture may now be hires – 320 × 200 pixels, two of the 16 colours per cell –, and the memory display sits live in the status bar, updated shortly after every change. Walk areas can be drawn as polygons, and Alt+click shows the path the character will take.

    A test run can start with a chosen inventory, flags already set and the character where you want it. The project overview lists every object with its room and scripts, doors know an arrival point, and in the script a colour box shows in which colour each sentence will appear in the game.

  8. C64Engine

    A steady line below the room

    When the mouse pointer was in the bottom strip of the room, a single line of pixels flickered directly below the picture, in the room’s background colour. It turned up during testing in the Promenade example. At that height the pointer costs a few cycles, and in some pictures the switch to the black background of the bar came one cycle too late as a result – for one line, the room’s colour was still showing.

    Rather than chasing that one cycle, the build now makes sure it no longer matters: this line is black, whenever the switch happens. Where necessary, the build adds a character of its own to the room’s character set for it.

  9. C64Engine

    A way that only opens later

    A question came out of testing: a room with two walk areas, where the second one may only be entered once the deadly piranha poodles are asleep. For that there is now a script command, “Walk area walkable”, in the room group. It blocks a walk area of the room or opens it again, numbered as in the list of walk areas. No path leads into a blocked area; a click there ends at the edge in front of it. On entering a room every area is open, so a way that should stay blocked is blocked in the room script. The manual shows it with an example, the check reports a number that does not exist in the room, and games that do not use the command build as before.

    The same day brought to light a walk area that could never be walked on. Dragging one with W beyond the edge of the canvas gave values outside the room – in the test up to y 257. That does not fit into a byte, the build turned it into 1, and the area ran “from 54 to 1” – without any message. Now the rectangle stays inside the room while dragging, the build holds the values at 255, and the check reports an area that sticks out that far at the bottom.

  10. C64Engine

    “Ends it” now means at once

    A dialogue line with the “ends it” tick box closes the dialogue – but until now only a good three seconds after its reply had finished, once the last sentence had run out. In testing, a character went off to fetch a beer mid-conversation, was long out of the room, and you still could not play on.

    Now the verbs come back as soon as the reply has run. The last sentence stays in the sentence line until it has been read – just as after a scene.

  11. C64Workshop

    A walkthrough worked out from the puzzle chain

    “Project → Walkthrough …” writes down a way through the game: room, verb, thing, dialogue line, and, before a thing is first used, how you get it. It is worked out from the puzzle chain, so it always fits the game as it currently stands – one possible way, not necessarily the one the story tells. For a translation it is written in that language; room names are translated in the Languages window. Copy and Save pass it on to players.

    The first version still followed the order in which the chain check does its sums: room by room, as they appear in the project. In a longer game the walkthrough therefore began in a room in the middle of the story instead of in the scene the game opens with. Now it starts where the game starts, follows room changes that happen by themselves, and always takes as its next step the one that can be reached through the fewest doors. What you carry comes up once there is nothing left to do here and next door.

  12. C64Workshop

    Lettering in the picture, credits with a preview

    The Write tool (T key) now opens a window with a preview. It writes several lines, in the game’s font or in a narrow pixel font of its own, 3 × 5 dots, which fits twice as much text into a line. Width and height can be stretched separately from 1× to 4×, the game font can be set in bold and italic, and there are spacing, line spacing and a shadow in a second colour. Until now there was one size and one font.

    “Edit → Credits” shows the screen on the right as the game will show it: centred, light grey on black, in the game’s character set. A line clicked in the text appears there, “Play” runs the credits at the game’s speed, and the running time is shown below. Characters the C64 does not have are reported with their line. Text, background and border colour and the speed – slow, normal, fast – can now be chosen; the preview shows it at once, and the game builds it in. Anyone who changes nothing gets the credits as before.

  13. C64Workshop

    A game in several languages – SENDESCHLUSS in English too

    “Project → Languages …” lists every text a player gets to see: verbs, names of things, “Look at” and default replies, dialogue lines, every text from the scripts, the engine texts and the credits. German is on the left, the translation on the right; an empty field stays German. A counter shows how far along you are, and Export and Import hand the table to whoever is translating. If a German sentence is changed later, the window shows its old translation as “orphaned”. The engine texts now also include the words of the saved-game menu and the mouse messages on F3, which until now were hard-wired.

    On the C64 each language gets a cartridge of its own: “Build in en” puts sendeschluss-en.crt next to sendeschluss.crt. Object names and verbs follow along in every script, and the check runs on the translated version. Once a project has a translation, every entry in the Game menu – Build, VICE, U64, Export – becomes a submenu: “German” with the usual shortcut, and every other language below it. SENDESCHLUSS is the first game to be fully translated, 345 texts; the German version builds exactly as before. One fixed word came to light along the way: the “mit” in “Use X with Y” appeared in German even in the English cartridge. It is now an engine text, and SENDESCHLUSS says “with”.

  14. C64Engine

    PAL and NTSC: the cartridge adjusts itself

    A C64 from the USA, Canada or Japan shows 60 frames a second instead of 50 and runs on a slightly faster clock. Until now a FABULA game ran a fifth too fast there – music, walking, reading time, pauses, alarms – and every note sounded 3.8 per cent too high.

    Now the cartridge detects at power-on which machine it is plugged into and, on NTSC, makes up for both: the same speed as on PAL, the right notes, samples at their proper rate. There is nothing to set. Not compensated are the colours, which the NTSC chip shows slightly differently, and an imported foreign SID: it plays at the right speed, but 3.8 per cent too high. For this, every game needs to be built once more. To try it out, set the model to NTSC in VICE, or use the “System Mode” on the Ultimate 64.

  15. C64Engine

    The player character comments on what you carry

    A text from a thing’s script is said by the player character – that is what the manual says, and that is how it was, as long as the thing lay in the room. Once you carried it, the same sentence came as narration: in the narration colour and without a mouth moving. In SENDESCHLUSS that applied, for instance, to “Look at” on the note in your pocket.

    Now the player character speaks there too. Where a script names someone else with “Who is speaking”, that still holds. Only games whose carried things have sentences of their own are affected; all others build as before.

  16. C64Workshop

    The manual, ready to print

    The manual now also comes as a typeset PDF next to the workshop, in German and in English. It has a title page and a table of contents with page numbers, every chapter starts on a new page, the chapter is named at the top and the page number at the bottom. Tables and script examples do not break apart across a page turn, and in a PDF reader the bookmarks and the table of contents jump to the place with a click. In the manual window, “Print / PDF …” opens this PDF in the computer’s PDF reader. The request came from the Forum64.

    Checking the manual against engine and workshop turned up places where the workshop said or did something other than what the game then does. A dialogue has six lines at most, in total, conditions included – the hint used to suggest staggering more lines via flags, which the build rejects; now the check says so beforehand. Animation cells in the eighth character row need a twin for the seam with the lower half of the room and count twice. Every extra player character costs the saved game a few rooms, 56 instead of 59 with two characters. Whatever lies beyond the right edge after a room has been made narrower is now reported by the check. And unrelated to all that: a door’s own arrival point jumped back to the start point of the target room whenever the thing was changed – a single letter in “Look at” was enough. Now it stays put until the door’s destination is changed.

  17. C64Engine

    Whoever stands further forward now covers the player character

    When the player character walked behind a supporting character – along a fence, say, behind someone standing in front of it – it was drawn in front of them all the same. The C64 puts the sprite with the lower number in front, and the player character always got the lower numbers. The report came from the Forum64.

    Now a supporting character whose feet are lower in the picture than the player character’s gets the lower numbers and so lies in front; at the same height the player character stays in front as before. This holds as long as all characters together with the pointer fit into the eight sprites – the player character and one large supporting character, or two small ones. With more characters in the room, the engine shares the sprites out line by line, and there the old order stays, or characters could lose parts of themselves. Games without supporting characters build as before.

  18. C64Workshop

    Cut in a script cuts commands, not the thing

    In a thing’s “Script” tab you would cut a verb’s commands with Ctrl+X to attach them to another thing – and the whole thing was gone. The command list caught the keys, but only while it had the focus itself. If the focus was on the list of verbs above it, on a selector or on a button, the key went to “Edit → Cut”, and that cuts the selected thing. A click in the menu did so even while the command list had the focus.

    Now Ctrl+X, Ctrl+C and Ctrl+V (Cmd on the Mac) in the “Script” and “Dialogue” tabs always apply to commands, never to the thing, by key and by menu alike: in the command list to the selected commands, in the list of verbs to all commands of the selected verb, in the dialogue to the reply of the selected line. That is how a verb’s commands move house: click the verb, Ctrl+X, click a verb on the other thing, Ctrl+V. Cut and paste are also a step of their own now, which Ctrl+Z takes back at once; until now, if the cut was the first step since opening, Ctrl+Z stayed silent for a moment.

  19. C64Workshop

    Dragging files into the window

    “Import picture”, “From sheet …”, “Import music” and the Samples window now also accept a file dragged in from the Finder or the Explorer. The open dialog stays shut – handy when the file is lying open anyway, and when recording a video it means the dialog does not show the sidebar and folders of your own computer. Only what the window can actually read is accepted: a picture into the picture window, a .sng or .swm into the music import, a WAV into the Samples window. For a sample, the file name becomes its name, as when it is loaded through the dialog: “Tor.wav” becomes “Tor”.

    Two changes around the edges as well. In the German interface the point the character walks to before acting on a thing is now called “Wegpunkt” instead of “Gehpunkt”, in the tool, the check and the manual; the English interface keeps the walk-to point, still on the G key, and nothing changes in the projects. And the small Musikwege example is no longer included for now. The examples are now Promenade, Proberaum and Meteor; the routes to music – the built-in music editor, GoatTracker, SID-Wizard, a foreign SID – are still described in the manual’s chapter on music.

  20. C64Engine

    No garbled screen on a sample, no yellow pattern after the credits

    When a script played a sample or changed the music while the room was on screen, garbage showed for a moment: the room in the bar’s font, or the bar in the room’s character set. Once for every sample and every music change – a script with two samples and a change of music flickered three times. Samples and music are fetched from the cartridge before playing, and during that copy the interrupts that switch the screen between room and bar stood still. Now they keep running. The picture stays calm, and as a side effect the music no longer stutters on a room change.

    The second bug came at the very end. When the credits had run and nothing followed in the script, the engine switched back to the room – but screen memory still held the spaces of the credits. The result was a yellow pattern over the whole room with the characters on top, and it stayed that way; every game ending with the credits was affected, the Proberaum example among them. Now the screen stays black afterwards, without characters, and no click does anything any more: the game is over. If the script brings an end picture or a room change after that, it takes over the screen without a flash and in the right place – the end picture of SENDESCHLUSS used to sit four dots too low. Every game gets a new core for this on its next build; rooms and pictures stay the same byte for byte.

  21. C64Engine

    A sentence says what you received in a dialogue

    When a dialogue reply gave the player character something, the engine drew the inventory bar straight away – right over the lines of the dialogue, until the reply was over. Now the bar stays closed during the dialogue and comes back, with the new thing, as soon as it ends. What you have received is told by a sentence in the narration colour that the build places after the pick-up, such as “Archivschl. erhalten.”; afterwards whoever spoke before speaks again. The wording is an engine text, and games without such a reply build byte for byte as before.

    A silent gap was closed as well. The engine has only one lock per dialogue line. With “once” ticked, it fills that lock with a flag of its own, and an additional “not if” was quietly left out of the build. It showed with a key that can be fetched from two characters: both lines carried “once” and “not if key taken”, and you got the key twice. The check now reports the combination, with room, thing and line. If the reply sets the flag anyway, “not if” is enough – the line then disappears by itself.

  22. C64Workshop

    Seeing behind the supporting characters

    The canvas shows every supporting character where it stands in the game, and until now you painted blind behind it. A wrong dot behind a character could not be found, and the red mark of the colour rule lay under the character too: the status bar named a cell, and nothing could be seen.

    Now “View → Characters in the room picture” (Ctrl+Shift+N) hides the characters on the canvas, and you see and paint what lies behind them. Nothing changes in the game, and on the next start they are back. The red cells of the colour rule also lie above the characters now instead of below them.

  23. C64Workshop

    A circle to paint with, and T writes again

    Next to the rectangle there is now the circle (K key): drag a rectangle, and a circle or an ellipse fills it, filled in the selected colour. With Shift the shape becomes round. The rectangle then stays square on screen and is therefore twice as many dots high as it is wide, because a dot is twice as wide as it is high. With Alt, Option on the Mac, only the outline remains, one dot thin. While dragging you already see what will appear, and snapping to cells works as with the rectangle.

    Two painting bugs were fixed along with it. The T key did nothing at all: it was assigned twice, to the Write tool and to “transparent” inside a layer, and Qt does not carry out two actions on the same key at all. T now picks Write, Shift+T the colour transparent. And filling a still empty, transparent layer of a thing brought the workshop to a halt: the fill ran over the edge of the layer into the whole room, could not paint over anything there and never finished, while memory grew until the program could not even be quit. Now it stays inside the layer, every dot is visited only once, and filling has become much faster in the process.

  24. C64Workshop

    Copy and paste, even from project to project

    “Edit” now has Cut, Copy and Paste (Ctrl+X, Ctrl+C, Ctrl+V, Cmd on the Mac), and a right click on the list of rooms, pictures or things does the same. Whatever is selected is copied – a picture, a thing or a room – and pasted where it belongs: a picture after the selected picture, a room after the selected room, a thing into the selected room, with scripts, dialogue, character and painted layer. The clipboard is the computer’s own, so it also works from one project to another. If a name is already taken there, it counts on (“telefon1” becomes “telefon2”); any references a room or thing brings from another project that are missing there are reported by the check. There is also a new “Duplicate picture” button, for a row of nearly identical cutscene pictures.

    In the script editor several commands can be selected and copied, cut and pasted in the same way – into another script, another thing, a dialogue, another project; an If comes with everything inside it. A copied room now points to its own things: a “Put thing back” on the chest in the copied room used to make the chest in the original appear, not “Truhe 2” in the copy. Renaming now carries every reference along as well. Three commands – “Who is speaking”, “If carrying …” and “Hold conversation” – were missing from the list, afterwards pointed to a name that no longer existed, and the build stopped. The list is no longer kept by hand but follows from the commands themselves; any future command that names a thing is covered at once.

  25. C64Workshop

    Memory full: the build says what is in there

    When one of the three memory areas overflowed during a build, the message used to give nothing but an address – and for the area at $8000 it even said “The credits text no longer fits”, when something else entirely was filling it, usually the scripts of things you can carry. Now the message names the area as the project overview does, says what lies there and what helps, in German and in English.

    The manual also says how many rooms fit onto the cartridge. A room takes two banks, every picture, piece of music and sample one. With pictures and music that comes to about 45 rooms – long before the 59 the saved game can hold.

  26. C64Engine

    Pause with the space bar

    As at Lucasfilm: press the space bar once, and everything stops. A black box with a frame and “PAUSE” appears in the middle of the room, the characters stay visible, the music plays on. Press the space bar again, and the game continues. A mouse or a joystick in port 1 does not trigger the pause.

    The pause is a project setting and on for new projects; older ones open without it and build byte for byte as before. The word in the box can be changed as an engine text.

  27. C64Engine

    Several player characters: each keeps its speech colour

    Until now the character you were playing always spoke in white. Switching to a second player character, you suddenly saw it talk in a different colour from a moment ago, when it was a supporting character. Now each keeps its colour, as at Lucasfilm: the first player character goes on speaking in white, every further one in the speech colour of its character. Games with only one player character build byte for byte as before.

    There is also a new command, “Hold conversation”. A script for “Talk to” always wins over a thing’s dialogue. Anyone who wanted “Talk to” to behave differently only in a particular case – only while a certain player character is being played, say – lost the whole dialogue that way. Now the script can ask first and then show the list after all with “Hold conversation”. The check reports it when the named thing has no lines at all.

  28. C64Engine

    What is gone stays gone – even after a cutscene picture

    When a picture was cleared – with “Picture off” or a click on a full-screen picture – the engine redrew the room and, in doing so, fetched the state of things as it was when the room was last left. Whatever a script had taken away, shown, changed or picked up since entering was back as before: a character stood in the room again, a pocketed thing lay there again and was in the pocket at the same time.

    It was found through a character that the room script takes away on entering and that was nevertheless back in the room in the morning, after a cutscene picture. Every game with cutscene pictures was affected, SENDESCHLUSS included: anyone who pockets the note in the control room and then plays the tape found it back in the room afterwards. Now the state is saved before the redraw. Games without cutscene pictures, or without such scripts, build byte for byte as before.

  29. C64Workshop

    The check reports fewer false alarms

    In a larger game currently in the making, the check showed 46 messages. 14 of them were wrong, six were duplicates – and in all that noise a real one got lost. Four rules have become more precise. “Meant to go into the bag but has no layer” now only applies to things you pick up yourself; whatever someone hands over or whatever comes out of a chest is not meant to lie in the room at all. A hotspot now only counts as covered by something that never goes away; a thing in front of it that a script can take away does not cover it for ever. The warning that a character without walking frames glides now comes once per character instead of at every walk command. And two versions of a character in exactly the same place count only once towards “more than four supporting characters”. The cases the rules were made for still show up; in SENDESCHLUSS and the examples not a single message has disappeared.

    One rule has been added: if the reply of a dialogue line removes its own counterpart from the room with “Object disappears”, the line must also carry “ends it” – otherwise the engine draws the list again afterwards, and the player character goes on talking to an empty spot. Two workshop bugs were fixed as well. Undo forgot six things about the project – the control bar, the SID voice for sound effects, the title script, the samples, flags created in advance and imported SID pieces – although a self-check that finds exactly this had been ready since 30 August; it was simply never called and now runs with the automated tests. And “In VICE from this room” got stuck on a fixed title picture that is otherwise cleared by the actual starting room; a trial run now adds a “Picture off” after the start script.

  30. C64Engine

    Who are you playing right now?

    If a game has several player characters, one of them often also stands around as a supporting character, waiting while you play the other. If you are then playing that very character, both stand in the room, and you can talk to yourself – in testing, one character stood there twice like that. The engine cannot notice this by itself: to it, player character and supporting character are two characters with pictures of their own, and that is intended, because a waiting character needs fewer blocks than a walking one.

    So there is now the condition “If playing …”. With it the room script asks who is being played right now and takes the waiting version away – best at the end of the room script, or a later “Put thing back” brings it back. The condition only exists in games with several player characters; otherwise the build rejects it rather than building something that can never be true. With it comes the check’s 116th rule: if a room contains a supporting character with the same name as a player character and the room script does not ask about it, the check says so, with room and name.

  31. C64Engine

    Sentences that stay long enough – and have a speaker

    While a script is running, the pause after a sentence alone decides how long that sentence stays; the built-in good three seconds only run once the script has finished. That is how the engine has always worked. A pause that is too short therefore lets a sentence flash past, and nobody noticed it when building. That is why the settings now have “Sentences stay as long as it takes to read”. With the box ticked, the build raises a pause that is too short to three frames per character, and at least 150. A sentence that uses all 76 characters then stays for a good four and a half seconds.

    Only the number is touched, never the script: a longer pause stays as it is, a click still cuts any pause short, and a sentence at the end of a script stays anyway. New projects get the tick, older ones build byte for byte as before; in one game that was checked, 50 pauses became longer, a good 44 seconds in all. With the box unticked, the check reports every pause shorter than the reading time, with actual and target value.

    A second setting is for speakers without a character. When a thing that carries no character speaks – someone painted into the room picture – its sentence used to appear in the narration colour and looked as if nobody were saying it. Under “Speakers without a character” they can be given a colour of their own; the default, “like the narration”, builds as before. Such things still do not move a mouth.

  32. C64Engine

    Switching character with one click

    If a game has several player characters, until now only the W key switched between them. Now there is an icon in the top right of the toolbar – two heads with a double arrow – and a click on it switches to the next character, a right click to the previous one. It costs no space: the sentence line is 38 characters wide, the bar is 40, so two columns were free. It appears in both toolbars, the one with words and the one with icons. Anyone who wants a different icon paints characters 120 to 123 themselves; they override the one supplied.

    The colour says whether it works right now: light green means “a click switches now”, dark grey “not at the moment”. During a cutscene, a picture or a dialogue the icon is gone altogether – there the corner belongs to the picture – and switching is blocked for that time, with the key as well. A script still switches at any time. Key and icon hang on the same setting; with it off, both drop out of the cartridge. Games with only one player character build byte for byte as before.

  33. C64Engine

    The story says when switching is allowed

    Testing showed that switching was open from the very first minute: even in the first cutscene you could switch to the second character, who then stood in a room the story had not reached yet. Now there is a command for it, “Player may switch” with yes and no. At the start of a game the player may – a game that never uses the command behaves as before. While it is blocked, key and icon do nothing; “Switch player character” in a script still works. The state is part of the saved game, so a saved game from an older version is rejected.

    One more rule joins the pre-build check: if the command is used while switching has been turned off for the player altogether, there is a warning – the command would have no effect there. That makes 113 rules.

  34. C64Workshop

    A whole character from one picture

    Until now a character came into the workshop frame by frame, and with eight to twelve frames it looked slightly different in each. “From sheet …” takes a character sheet instead: the character in all poses in a row – passing, step, passing, counter-step, standing from the side, from the front, from the back, action, and with twelve poses the steps from the front and the back as well. The workshop separates the poses at the gaps, shows each one the way the C64 will show it, and suggests a frame slot for each; where one is wrong, you change it below the pose.

    The calculation is done for all of them together, not frame by frame: one scale, one ground line, and the head sits in the same place in every pose – so the character does not bob while walking and the head does not wobble. The character fills the full height; if it is drawn too wide for twelve dots, it is squeezed horizontally, by the same amount in every pose. The height – 42 or 63 dots – is chosen in the window, and the cost in blocks shows at once. Almost identical colour bands are unified, or a large character blows the budget: 35 blocks became 27 that way.

  35. C64Workshop

    The manual with contents and a hit list

    With 43 hits for one word and only the Enter key to step through them, searching takes forever. The manual inside the program now has two tabs on the left: “Contents”, with every chapter and section to click, marked at the place you are currently reading – and “Hits”, which fills while you type: the hits grouped by section, with a count and a piece of surrounding text, the search word in bold.

    In the text every hit is highlighted yellow, the current one orange; above are buttons for forward and back and the count “7 / 43”. Enter jumps to the next, with Shift to the previous, F3 does the same; the down arrow leads from the search box into the list, Escape clears the search. “Whole word” leaves out hits inside other words – in the English manual a search for “sid” otherwise also found side and inside. Search and reading position stay put until the workshop is closed.

  36. C64Workshop

    Dialogs that fit on the screen

    A screenshot from a laptop came out of testing: the game settings were taller than the screen, OK and Cancel sat below the edge – however the window was dragged. The music window was at least 1742 points wide, because its top bar carried 26 parts in a single row. Now the game settings scroll, with OK and Cancel always visible at the bottom; the music window has its bar on two rows, and the Instruments and Filter tabs scroll – at least 952 points wide instead of 1742. Checked at 1920 × 1200, 1366 × 768, 1280 × 720 and on Windows at 1024 × 768.

    The other way round holds now too: no dialog opens larger than the screen, and each one grows on opening until its content fits completely. Until now the size was fixed in the program, and with larger type it was not always enough – the workshop settings opened 158 points tall, their content needs 188, and the help text was cut off at the bottom. The same applies to a remembered size that has become too small because a dialog gained a field. Anyone who has dragged a dialog larger keeps it that way.

  37. C64Workshop

    Bugs from testing

    On Windows the workshop crashed as soon as the music window opened – no message, in every project, because every new one brings filter programs along and the selector for them greys some out. For each greyed-out entry an object was created that lived on after the selection was cleared; Windows soon put an event at the same place in memory, and the workshop took it for the old entry. On the Mac memory is laid out differently, so it never showed there. Greying out now happens without such objects being created.

    Smaller finds came with it. A click on a verb no longer triggers anything on the previous thing: the remembering of the last thing touched, built in on 11 September, is out again, because none of the classics work that way – after an action the line reads “Walk to” again. Answering “No” to the question when removing a piece of music removed it anyway. A new project was still called SENDESCHLUSS. And the check now compares the hotspot of a non-player character with its painted height instead of with a fixed number.

  38. C64Workshop

    Projects in the cloud are built locally

    A build writes dozens of files afresh on every run that nobody needs, and a cloud service has to upload every one of them. On one day that kept a Mac busy uploading for half a day.

    So when a project sits in a cloud folder – iCloud Drive, Desktop or Documents in iCloud, OneDrive, Dropbox, Google Drive – the workshop no longer builds next to it but in a local cache. Only the finished cartridge is put beside the project, and only when it has changed; the status bar says where the build happened. Anyone keeping projects on a local disk notices nothing – there the build folder stays where it was.

  39. C64Workshop

    Music from outside: three ways into a game

    Alongside GoatTracker songs, the import window now also takes SID-Wizard songs (.swm). The conversion is done by SWMconvert, the tool written by the author of SID-Wizard himself; it sits next to the workshop, and its licence expressly allows this. Writing our own reader would have been two days’ work and would have got the details more wrong than a converter from the same hand as the format. Anyone working in SID Factory II exports a finished .sid there and packs it to the top end of memory – how that works is now in the manual.

    And a foreign .sid can be taken over as music. A .sid is not a data set but 6502 code with a player of its own, and that player almost always loads where FABULA keeps its core. The workshop relocates it and proves that it then writes the same SID registers: both versions run in a 6502 written in Python, and the writes are compared byte for byte, by now across more than five minutes of playing time. Whatever fails that test does not go into the project, and the window says why. The price: at most 8186 bytes per piece, no music of your own in the same game, and a sound effect interrupts it.

  40. C64Workshop

    An example that shows the ways to music

    A new small project has joined the examples: “Musikwege”, the ways to music. Ron – the character from WebFritzi’s demo, used with permission – explains the routes music can take into a game and what each one costs. His study is the do-it-yourself route: computer, bookshelf, book and window say in turn what the music editor can do, how much space a piece needs, and why a foreign player is a guest that wants the whole window.

    In the corridor – wider than the screen, you walk to the right – there are three doors: GoatTracker, SID-Wizard and foreign SID. The first two open and tell their story; on the GoatTracker route the music changes while they do, so you can hear what is being talked about. The third door stays shut – and that is exactly the lesson: a foreign SID and music of your own cannot be in the same game. The project is meant to be taken apart: two rooms, two pieces, nothing you could not rebuild in half an hour.

  41. C64Engine

    Four large characters, fifty frames a second again

    With four large characters on screen at once – the player character and three non-player characters at 63 dots – the main loop only managed 25 frames a second. It did not show as stutter but as time: every pause, every timer and the trailing time of the voice playback took twice as long, and in a cutscene text and voice drifted apart.

    The spot was found by measuring, not by guessing: a counter in the loop against the frame counter, then leaving out section after section. It was the distribution of the sprites across the bands – with thirteen bands, ninety passes per frame, and every comparison recalculated the same band ends again. Now the ends are worked out once per band, and the distribution is only recalculated at all when the number or the rows of the bands have changed – never while standing, every few frames while walking. Measured again in the same situation: 1.00 instead of 0.50 passes per frame.

  42. C64Workshop

    Thirty-eight characters, already in the editor

    The two answer fields on an object – “Look at” and the default answer – are now exactly as wide as the bar in the game: two lines of 38 characters, fixed pitch, breaking in the same place. Anything that no longer fits is not accepted, and the frame flashes briefly.

    Before, the fields were any size, and a sentence that was too long only showed up at build time (“text needs 4 lines”). That was late and in the wrong place: the rule applies to every text that appears in the bar. Whatever is already too long in an older project stays and can be shortened, just not lengthened – and the check now says so, with room, object and character count.

  43. C64Workshop

    What came up while working

    Small things that only show up when you really work with the workshop. Flags can now be created in advance without being used anywhere yet. The sound window shows how loud a sound has turned out. After a build there is no longer a box just because an action frame is unused – that is part of the check now. And a piece that stops starts from the beginning next time instead of staying silent.

    The change list itself joined in: it now carries an overview at the top with dates, newest first, and below it a section for every line in the same wording. At over ninety kilobytes of text that was needed to see at all what has been added since your own package.

  44. C64Engine

    First your own line, then the reply

    In a dialogue the player character now says the chosen line first, in white and with the mouth moving, and only then does the other character reply. Until now the reply came at once, and the choice in the list stayed silent. The line stays for one to three seconds depending on its length; a click skips ahead. Quotation marks at the start and end are left out when it is said: if you mark spoken lines that way in the list, they stay marked there.

    Not every line is a sentence. “Pick up the receiver.” or “Hang up.” is something the character does, not says; for that the dialogue editor has the “Action” tick box. The whole thing is switched on in the settings and is on for new projects. Older projects open with the switch off and build byte for byte as before, so SENDESCHLUSS plays unchanged.

  45. C64Workshop

    Painting the mouth yourself

    Where a character's mouth opens while speaking used to be found by the build: in the lowest row of the face, horizontally in the middle. In profile that often put it too far back, and where a mouth line was already painted, only a single dot opened next to it. Every improvement to the search found the next gap with the next character.

    Now you paint it yourself in the characters window. With “Mouth” you paint the dots that appear while speaking into a layer of their own above the frame, once from the side and once from the front; the build mirrors it for facing left. As long as nothing is painted, the window shows dashed where the search would put it, and the preview talks along. A painted mouth may touch two bytes, so it can cross a byte border or be two rows tall. Only a game that needs it gets the part of the engine for the second byte.

  46. C64Engine

    Facing left means facing left

    A character without a standing frame of its own stood facing left with its face to the right: the player character as soon as it looked at something to its left or stopped after walking left, and every other character looking left. When speaking, the mouth then opened at the spot for facing left, which in the right-facing picture is the back of the head.

    The bug came with the block tables of 16 September. A frame a character does not have always fell back to the walking frame facing right there, including the standing frame facing left. Now whatever faces left falls back to the walking frame facing left, as before the rebuild. That costs no new blocks, only different numbers in the table.

  47. C64Workshop

    The one exception to the freeze: music

    The music part has grown considerably since the freeze, as the only part to do so. It was prompted by the GoatTracker import (entry below), which showed how tightly player and music window were built. If several pieces no longer fit into one block together, each now gets its own with only what it plays. Games with imported music put their player into four kilobytes below the I/O area that nobody had used, and read the pieces more densely there: packed patterns, waits in the wavetable, envelope, vibrato and waveform as commands. One example piece needs 1,431 instead of 4,470 bytes. Pieces whose loop only points to empty bars fall silent at the end instead of sounding on quietly.

    In the music window you can now select, copy, cut and paste, also into another piece. On top of that there is transposing by semitone and octave, inserting and deleting rows and bars, clearing, copying and swapping tracks, and step-by-step undo. The window handles up to 255 bars instead of 64. The instruments now also offer what only the import could set before: the gate timer, a hard restart with gate only, and a filter program started by every note. Pieces that already fitted together build byte for byte as before.

  48. C64Workshop

    GoatTracker pieces now sound like the original

    An imported GoatTracker piece went almost silent after the first bars. Measured in the emulator, the original held its level while the import dropped to almost nothing within seconds. The import had taken the gate bit from GoatTracker's wavetable, and the FABULA player, which switches the gate itself, could never close it again: no voice struck a new note after the first. Four more bugs of the same kind came with it. Empty wavetable entries turned into silence, the gate timer landed the wrong way round, the filter type switched voice 3 off, and filter programs never started.

    After that it was about more than “plays again”: the import was to come as close as possible to the original, without noticeable losses. GoatTracker itself was built for listening side by side, and the result was compared frame by frame at the SID. The player learned, only in games with imported music, tempo per voice, 16-bit portamento, vibrato as in the original, fixed notes and commands in the wavetable, a gate timer per instrument, funk tempo, and gate changes two frames ahead of their row. One piece now differs in 6 of 9,600 frames, and all fourteen GoatTracker example pieces fit. Before importing, the window names every overflow and offers to drop unplayed instruments along the way.

  49. C64Workshop

    What came up while working

    Since the freeze, the workshop is being worked with rather than on, and that shows what gets in the way. The project overview (Ctrl+I) shows the whole game at a glance: rooms and exits, an order in which the puzzle chain works out, and how full memory and supplies are. “Project → Open recent” lists the last five projects. Objects can be reordered in the list, script commands are grouped by topic in submenus, and you can look at the room underneath a layer.

    A picture can now be imported into a single object: into the room picture inside its hotspot, or into the thing's layer, also from a transparent template and with one accent colour for logos and lettering. The symbol bar has a fixed order: Walk, Look, Talk, Take, Use. Opening and closing belong to Use there, so a door opens with the first click.

  50. C64Engine

    Bugs found while testing

    What came up while playing through is fixed. A click below a full-screen picture now shortens the running pause like everywhere else; before, the room underneath stayed visible for a few more seconds. Setting “Silence” in the starting room without a title picture broke the room and put garbage into the bar, because a music block announced at start was never picked up. And on a thing that only looks different, such as an opened door, the action ran without the character walking there.

    A door with a second look could be taken until now, because the layer for it only came together with “Takeable”; now there is the “Stays put” tick box for it. And redrawing a hotspot moved the drawing inside it, after which the next build reported colour errors although nothing had been repainted. The drawing now stays where it is.

  51. C64Workshop

    Frozen: the state for the first release

    On 17 September the feature set of the first release was frozen. Since then it is being tested, with real games and on real hardware. Whatever comes up is fixed, and where handling gets in the way, it gets better. New features come after release.

    The entries above show what that means in practice: almost all of it is bugs and handling, found while working with the workshop. A big chunk was the GoatTracker import, which now sounds like the original. The only exception to the freeze is the music part, which grew considerably along the way.

  52. C64Engine

    Speech via the FunMP3 player

    There is an add-on device for the user port that plays MP3 and WAV files from a microSD card: the FunMP3 player. FABULA now talks to it with two script commands. “Play MP3” takes the number of the file on the card and optionally “loop”, “Stop MP3” ends it. A game can now speak, or play music the SID cannot. Without the device both commands do nothing, and a game that does not use them never touches the user port.

    The device repeats every file on its own. If a spoken line should play only once, the engine therefore tells it after 0.3 seconds not to repeat. That gap comes from a game that runs on the real device. The counting happens in the interrupt, so that even a skipped cutscene cannot turn a line into an endless loop. For trying it out, the workshop hands the emulator the device and the folder with the files, provided that VICE can emulate it, and the check reports missing files. It has been tested in the emulator; a real device was not available yet. Fixed along the way: rolling the dice was forbidden in the title script, although the manual allows it there.

  53. C64Engine

    A command bar with symbols

    A suggestion from the forum: a row of symbols instead of nine words in three lines. It has become a setting. The old bar stays the default, and existing games build byte for byte as before. The symbol bar frees up a line, so the inventory shows nine things at once instead of six. The mouse pointer carries the symbol of the chosen verb in that verb's colour, and the right mouse button cycles through the verbs.

    You can paint the symbols yourself in the workshop: 16 by 16 dots per verb, labelled with the verbs of your own game. “Restore default” brings back the supplied drawing. Five symbols are supplied rather than four, because the right button has a different job here: without “Look at” in the bar, the game would have lost examining altogether. Anyone playing with a joystick, and so without a right button, simply clicks the bar.

  54. C64Workshop

    Loading and saving character sets

    The character set editor can now load and save sets, as an ordinary 2 KB file, also with a load address in front. Only what differs from the C64's own character set is taken over, and on request only the characters a text can actually reach. For a set from the forum that meant 72 instead of 173 characters, 649 instead of 1558 bytes.

    That set had been drawn specially for FABULA, with real umlauts and an ß, and at first they got lost: the import always skipped those seven slots. Now they come along whenever something is drawn there that differs from the C64 set and from the umlauts FABULA brings itself. Custom characters also now live in the cartridge instead of the fixed memory next to the program, so they no longer cost anything where space is tight. A game without custom characters stays as it was.

  55. C64Workshop

    Music from GoatTracker

    GoatTracker songs can now be imported, with instruments, wavetables, pulse and filter programs. Tone portamento, cutoff, volume and tempo are carried over. Vibrato, envelope and waveform are properties of the instrument in FABULA; they become variants, and only what is actually played gets created. Whatever has no counterpart, the window names before the import.

    It also says beforehand whether the song fits. Patterns, instruments and tables are shared by all songs of a project, so an import makes the existing ones grow too. If it does not fit, “Import” stays disabled and the report gives the reason. Usually it is unplayed instruments, which cost space in every song. A SID file cannot be imported: it is not a data format but a program with its own player.

  56. C64Engine

    Characters need less space

    Until now the engine calculated every sprite block of a character from direction and frame number. That required every frame to be stored in full, and a character's head sat in memory eight times, even if it never changed. Now every character has its own table, and identical blocks are stored only once. A 63-pixel character with four walking frames, a standing frame and two steps into depth now fits, and four identical NPCs in different colours cost four blocks instead of sixteen.

    Two rules disappear with that: a character no longer has to fit entirely into one pool, and several player characters no longer have to be built the same way. The display in the character window and the check calculate exactly like the build.

  57. C64Engine

    No save menu at power-on

    On an Ultimate 64 a game started right in the save menu. For remote testing the engine has a small hook in the cassette buffer: if something is there, it opens the menu. At start-up it cleared two of its three remote-control bytes, but not this one. In the emulator that memory is empty at power-on, so it never showed there. A real C64 holds whatever the RAM happens to hold.

    Reproduced on the same machine: with the byte set by hand, the old cartridge opened the menu and the new one did not. Now the start clears this byte as well.

  58. C64Workshop

    English interface, German project

    With the English interface, a project written in German could no longer be built, and vice versa. Two values are stored as translated text in the project file: the placeholder for the player character in the “Who is speaking” command and the music piece “Silence”. They were only compared with the language currently set, and if that did not match, the build stopped. Now every language version counts, and both languages demonstrably build the same cartridge.

  59. C64Engine

    The after-tone is gone for good

    The first fix for the bright tone after a step only shortened it; a short beep remained. The SID only applies a faster release after up to 33 milliseconds, but the music switched its tone back onto the voice after just 20. Now a sound keeps the voice silent for another 60 milliseconds after it ends, before the music gets it back. This applies to every sound.

  60. C64Engine

    No more bright tone after a step

    After every footstep a small bright tone rang on. A sound borrows a voice from the music and gives it back afterwards. But the step ended after 80 milliseconds, in the middle of its envelope, and the rest kept sounding with the music's release: a good 300 milliseconds long, at the pitch the music had last used on that voice. A recording of the SID registers in the emulator found it. The same recording also disproved the first guess, that the note was being struck again.

    Now the sound hands the voice back without a release, and the music's next note sets its own. The tone is gone within a few milliseconds. The obvious fix, simply muting the voice, would have cut off held notes. This applies to every sound, but you heard it mostly on the footsteps.

  61. C64Engine

    Twelve things in the bag

    The character now carries up to twelve things instead of eight, and six are visible per page. You page with arrows at the ends of the dividing line: right for the second page, left to go back. The arrows only appear when there are more than six things. A version with three rows and no dividing line, nine things at once, had already been built and tested in the emulator. It was dropped, because the bag and the verbs should be kept apart by a border.

    The room for it came from the tightest part of the program: the names and look texts of carried things now live elsewhere, which frees around 800 bytes there. The save game has a new version as a result. The engine rejects older ones instead of reading them wrongly.

  62. C64Engine

    Towards the viewer and away

    A wish from the forum: characters should be able to walk into the depth of the picture too, because otherwise a long corridor leading into the screen is off limits. Until now front and back were standing images only, and every character turned sideways before its first step. Now a player character walks towards the viewer and away. It needs its standing images from the front and back, plus one or two step frames per view. The walk goes standing image, step 1, standing image, step 2.

    The character turns to the front or back as soon as it is only moving vertically and has at least ten pixels left to go. Otherwise the short end of a diagonal path would turn it towards the viewer before every single thing. At the destination it stays that way. Without step frames nothing changes, and supporting characters walked by a script still move sideways. Found along the way: when the player character was switched, the copy of its sprites wrote past its space. Whatever lay there, a side standing image for instance, was overwritten. That is fixed too.

  63. C64Workshop

    Front and back in the character window

    Below the frame buttons there is now a second row: frames 8 and 9 are steps from the front, 10 and 11 from the back. Step 1 from the front and from the back is enough, and step 2 makes the walk smoother. The preview runs from the chosen view, the onion skin puts the matching standing image underneath, and a red line tells you when painted steps do not count. Next to it is a new Mirror button that flips the chosen frame left to right, because step 2 from the front is usually step 1 mirrored.

    A supporting character that only stands now gets its front and back views as well. The two buttons used to be greyed out for it, although the engine and the check both know those views. The room view now shows such a character that way too, instead of from the side. And the workshop's windows open where they were last, at the size you dragged them to, even after a restart.

  64. C64Engine

    The mouth where it belongs

    Characters facing left moved the back of their head when they spoke. Facing left, the engine shows mirrored sprites, but it put the mouth where it sits in the right-facing image. In the mirror image that spot is in the hair. This affected player and supporting characters alike, in every game, ever since the talking mouth was added. Now the build mirrors the mouth position as well.

    Seen from the front, a character used to speak at the spot taken from its profile, next to the middle of the face. Now the build reads the mouth from the front view. If a short mouth line is painted there, the mouth opens one row below it. Before, the search found the tip of the nose instead. The day before, the search for the face had already improved: it now finds skin in the second shared sprite colour too, and with hair in the character's own colour it looks for the face where an eye is. Before, such characters moved two dots in their hairdo when they spoke.

  65. C64Engine

    You can see who is speaking

    Until now every spoken line was white, so you could not tell whether the player character, a supporting character or the narrator was talking. Now the player character speaks in white, every supporting character in its speech colour and the narration in a colour of its own. The speech colour is set in the character window, and its default, “automatic”, gives every character a readable colour. The narration colour is in the settings, light grey by default.

    Older project files stay byte for byte what they were. The tightest part of the program even got eleven bytes smaller, because the colouring now happens outside it.

  66. C64Engine

    No more characters in the credits

    At the first credits roll of a game in the making, the names scrolled over a black screen, and in the middle stood the characters from the last room. The credits did switch the sprites off in every frame. But since the sprite multiplexer of 13 September, the raster interrupt switched them straight back on from its last plan. Now it treats the credits like a full-screen picture: no sprite changes, all sprites off. That costs three bytes.

    Measured in the emulator on a real credits roll: without the fix, sprites were on in 10 out of 279 samples, and with it in none. Incidentally, the first test never started real credits and saw nothing but zeros by chance. That only came to light on an honest second attempt.

  67. AmigaEngine

    Music from fast RAM, without dropouts

    During playtesting on the Vampire V4SA, the music in the intro broke off with every picture and then took seconds to come back. The cause was the loading pause. While data is being read, the engine hands the hardware back to the operating system, and in doing so it also switched off Paula's sound channels. They only came back on with the next note. With a recording played in sections of 7.68 seconds, that can take up to eight seconds. Now the sound channels keep running through every pause.

    That raised a second question: why keep everything in chip RAM? Until now the whole piece of music sat there, 723 KB for 69 seconds. A recording in sections does not need that. It now lives entirely in fast RAM, and chip RAM holds just two buffers of 80 KB each. Paula plays one while the other is already queued and gets picked up seamlessly on the next pass. The engine then fills the freed buffer with the next section. The music plays centred on two channels, which leaves two free for sound effects. Such a piece is recognised from the module itself, so the workshop needs no switch for it. One last stutter during cutscenes came from the master switch for all DMA channels, which the pause briefly turned off as well. It now stays on.

  68. AmigaWorkshop

    A line stays as long as it takes to read

    On the V4SA the texts ran by too fast. Measured in the script, almost every line was followed by a pause of just over a second. The engine would have kept the line up longer, but by then the next one had already arrived. That is not a mistake in one script. It is simply the easiest way to write one, and it would happen again in every game.

    So the rule FABULA found on the C64 now applies here too: at most eight seconds for a full line of 76 characters, shorter lines in proportion, and never less than 1.8 seconds. The build lengthens a pause that is too short after a line on its own, and the engine keeps the text on screen just as long. Because the workshop goes through the same build, this holds for every game without anyone touching a number. A click still cuts any pause short.

  69. C64Engine

    The dashed line across the middle of the room

    Sometimes a dashed line ran across the room at the height of its middle, and in a full room it was there in every frame. That is where the raster interrupt switches to the second character set, and in some frames it came too late. At exactly that moment the VIC fetches the data of the sprites crossing that line and halts the CPU to do so. The more characters stand at that height, the longer it takes. No fixed timing helps, as measured with six values: a timing that writes too early in an empty room still comes too late in a full one.

    So the fix is not a timing but the content. Under every character in character row 7, the build places one in the second set with the same bottom pixel row. The line where the switch happens then looks the same with both sets, and the exact moment no longer matters. Measured in the emulator and on the Ultimate 64: in the full room the line used to appear in all 16 frames, and now it appears in none. It costs anywhere from a handful to a good twenty characters in the lower half of the room. The import already counts them, and if a room overflows the build names the room and the number. Fixed during the same search: in rooms wider than the screen, animations wrote their character too far to the left. The light of a lantern glowed in the middle of a house wall.

  70. C64Engine

    On time, even with a crowded room

    In a room with many characters, the switch to the second character set came a few lines late. The result was a strip in the wrong character set at the middle of the room, and under overload a striped floor and a control bar full of garbage. Measured with breakpoints in the emulator, the middle arrived at line 117 to 124 instead of 113, even in a setup the check had no complaint about. The cause was that a sprite change worked out its registers bit by bit and took four to five raster lines in busy lines. It was allowed to run into the fixed stage anyway.

    Now every change is worked out in advance and takes half as long, and none runs into a stage any more. In every measurement the stage came on time. In return, a band that starts just after such a stage gets no sprite whose change would only come after it. The check now also accounts for the time a change takes. It warns when the player character itself loses a band, separately with and without the cursor. This was cross-checked with seven setups: wherever it predicted a missing band, exactly that band was missing, and no other.

  71. C64Engine

    Three supporting characters side by side

    Sprites are now handed out by line, no longer in the order in which characters register. The head and leg bands of a 63-pixel character share one sprite, and characters standing at staggered heights are shown in full, where they used to lose bands. Next to a 63-pixel player character, three supporting characters of the same size now fit side by side. Before, the third had no head and torso. Only when the cursor is at their height does it lose its leg band.

    This brought two faults in the raster interrupt to light. If a sprite change fell just before the middle of the room, every further change in that frame was lost. And a change whose line had already been reached was pushed back to the control bar, too late for any character. Both are fixed. The new allocation costs not a single byte in the tightest part of the program. The check works it out exactly and tells you whether bands are missing, or only when the cursor is next to them.

  72. C64Engine

    Supporting characters live in their room

    So far the sprite pool of 47 blocks had to hold every character in a game. With a 63-pixel player character that left three supporting characters of the same size, or two with an action image, and a game in the making needs seven. The fix copies nothing. Each room's block had only empty space between the colours and the second character set, and the VIC can read sprites there directly. That is where a room's supporting characters now live: 35 sprite blocks at 40 columns, 30 at 50 and 24 at 63. In a 40-column room that is enough for five standing 63-pixel characters or eight 42-pixel ones, in any number of rooms. Only the cursor and the player characters stay in the pool.

    A character that is drawn but does not appear anywhere yet no longer costs any space. Before, the build stopped and reported that there was no room left. Existing projects look the same, compared frame by frame against the old version in the emulator. More room turned up in a second place as well: the engine's fixed sentences no longer sit with the game data but in free memory behind the credits. They include the reply when something cannot be taken, the speed announcements and the save menu messages. That gives around 500 more bytes for rooms, things and flags, which had been getting tight at two dozen rooms.

  73. C64Workshop

    The standard character walks in profile

    In the forum it was pointed out that the character could only be seen from the front, even while walking. That was true, and the engine was not to blame, the drawing was. In the old walk cycle only the head was in profile. The torso, both arms and the crossing legs were still drawn from the front, like someone walking towards the camera. Now the character has a narrow torso, one arm, legs in mid-stride and a shoe pointing forward.

    The arm swings forward with the step, half, then full, then half again, and hangs down when standing, as with the character Ron. A first version swung it against the leg and let it go behind the back. That is right for a person, but in a sprite it looked backwards: both legs have the same colour, and nobody can tell which one is nearer. The new character applies to every new project and to the examples, and your own project keeps its character. There is also a new example, Promenade, an empty catwalk with four posts for scale. It is there so you can watch a character walk.

  74. C64Engine

    The W key can be switched off

    In a game with several player characters, W cycles through all of them. A story in which a second character is played only in certain passages, and is somewhere else the rest of the time, had no way to lock that. Now the settings have a switch, The player switches with W. When it is off, only a script changes the character, and the key handling drops out of the cartridge entirely at build time. That saves 40 bytes in the tightest part of the program. If W is off and no script switches the character, the check says so, because the second character could then never be played.

  75. C64Workshop

    The tools catch up

    Since 13 September a room has had two character sets of 256 characters each. The image import still counted the whole room against 256, though, and simplified pictures the engine could have shown unchanged. Now it counts and simplifies per half of the room, and the result lists the top and bottom separately. Measured with 26 source images: twelve used to need cells merged, up to 220 of them, and now none do. Title and cutscene pictures still have a single character set.

    Found along the way: the import never set characters aside for animations, because it looked up their size under a name an animation does not have. It now counts one character per animation cell. And the character window cut 63-pixel characters off after 42 rows, because the painting area kept the size it had when the window opened. The character itself was always saved in full, and now the painting area grows with it.

  76. C64Engine

    A side standing image, learned from Ron

    The engine can really make a character walk sideways, and it all comes down to the drawing. To show that, Ron moved into FABULA: the character WebFritzi from Forum64 drew for a design of his own. He came over unchanged, with three sprites stacked on top of each other, four walking frames and a standing image of his own. WebFritzi has given permission to keep using Ron as a demo. The engine learned something lasting from him, because a character can now have an eighth image: how it stands, seen from the side. Until now a character at rest showed its first walking frame. That frame had to be both a step and a pose at rest, or the character stood with one foot in the air. With the standing image the walk cycle can have four real steps. It is painted facing right, the build mirrors it for facing left, and supporting characters use it too.

    Ron also uncovered a bug. Since 13 September the engine had read the colour after the first band from the wrong place. Ron's legs turned light grey, and in another game one character wore another's trousers. Everything was painted and saved correctly, and only the game showed it wrong. The automatic comparison of built files could not see that.

  77. C64Engine

    The first room's opening never came

    At the start a game enters its first room — and starts its start script right afterwards. But the engine has only one slot for a running script, so one overwrote the other: whoever had an intro silently lost the opening of their first room. There was nothing to see, something was simply missing. Now the room script is noted down and runs when the start script has finished — in whichever room you are standing in by then.

  78. C64Engine

    Sound for the title screen

    The title screen used to just sit there. Now a small script may run while it is up — for a sample, a sound, a piece of music. A click ends it and the game begins. Deliberately nothing but sound: the first room is not loaded at that time, and anything that needs one is stopped by the check before the build starts.

  79. C64Engine

    Whoever speaks moves their mouth

    When a character says something, two dots in their face jump from the skin colour to the outline colour and back — six times a second, for as long as the sentence lasts. It costs no drawn talking frame and no second sprite block: the engine changes a single byte in the head band and puts it back first thing in the next frame. Where the mouth sits is read from the standing image at build time; whoever has no face — a moon, a figure under a hood — gets none.

    By itself the player character speaks when they answer, and the supporting character you are talking to; a room script narrates and moves no mouth. For everything else there is a command: Who is speaking. A cutscene then reads like a screenplay — every line preceded by who says it.

  80. C64Engine

    No more blink when putting something back

    Putting something back in a wide room used to cost a whole room change: eight kilobytes out of the cartridge, and the screen was off meanwhile — a blink in the middle of a narrative moment. Now only the cells the thing covers are fetched, a few dozen bytes. Measured in the emulator: before, the screen was off in 17 out of 7,214 samples; now in none out of 7,894.

  81. C64Engine

    An intro like 1987

    Maniac Mansion opens with a meteor falling on a house. The question was whether the engine could do that — so it was rebuilt: the meteor crosses the hill, the flash strikes, the moon rises behind the hill and the house builds up piece by piece while the camera pans along. Three things were needed: a script command Camera that moves the window of a wide room to a spot and leaves it there; supporting characters that can stand behind the background — a moon behind the hill, someone behind the counter; and a walking character that survives a “Show” instead of jumping back to where it started. The example project comes with every package.

  82. C64Engine

    Four supporting characters, and nobody owns a sprite any more

    Sprite 0 belonged to the cursor, 1 to 3 to the player character, the rest to the supporting cast — fixed, whether needed or not. In a cutscene the cursor held its sprite anyway (and stood there for all to see), a character with two bands held on to its third, and three characters side by side were impossible.

    Now everyone registers what they need, once per frame, and the engine hands the sprites out — the order of registration is the priority. Whatever goes beyond eight is multiplexed: a sprite whose character is finished at the top gets a second one further down. That helps characters at different heights; side by side on the same line it stays eight, and no trick changes that. The check now works it out and says so.

  83. C64Engine

    Twice 256 characters per room

    A room consisted of 256 different characters — for the background, the things you can pick up and the animations together. Import a photo or build a wide room and you ran into it. Now there are 256 for the upper half of the screen and 256 for the lower; the raster interrupt switches over in the middle of the picture. Older projects look the same pixel for pixel, measured.

  84. C64Engine

    An impact that really bangs

    Besides the eight built-in sounds a game can now play samples: a blow, a scream, thunder, up to a good two seconds. They come into the workshop from a WAV file, and what the C64 makes of them — sixteen steps, 7,882 values per second — the window shows as a curve. You do not preview them on this computer but in the emulator or on real hardware, with the same player the game uses: here you would hear the recording, not the SID.

  85. C64Workshop

    What you see is what is stored

    A dropdown in the script editor displayed something that was never saved: for “change room” the Room field visibly showed the first room — but none had been chosen. You only noticed when the build stopped with “script names room '', which does not exist”. A fixed list cannot display anything that is not in it, and handing it the empty value simply did nothing. Now what you see is what is stored, and old commands heal as soon as you click them.

  86. C64Workshop

    The build now says where

    Its messages named what was missing, not where — and with an empty name nothing was left to go by. Now the room, the thing and the verb come first: start2/light switch 2 / Push: script names object 'TV', which does not exist in this room.

    And it does not even start when the check finds a gap — a script pointing at a name that does not exist. No bytecode can be made of that. The check knew all along; it was just only allowed to say so after a successful build, and after a failed one you never saw it. Ordinary hints still leave the build alone.

  87. C64Workshop

    A demonstration room to look things up in

    The new example project shows every ability of the engine in two rooms, and the character explains them as you look at things. If you want to know how a counter, a dialogue or a living cell is built, you look there instead of in the manual. It ships with every package.

  88. C64Workshop

    The dead-end check

    Lucasfilm's house rule was “no dead ends, no death” — and it was a rule, kept by hand. Now it is measured: the check reports a thing being used up although somewhere else still needs it. That the second door stays locked may be intended — the check only says there is an order of play after which nothing works any more.

    And a second one: a thing meant for the bag that has no layer of its own. It would be invisible in the room. On its first run it promptly found a real case in TIEFENRUF.

  89. C64Engine

    More than one player character

    As in Maniac Mansion: a game may have several player characters, each with their own place and their own bag. The world is shared — switch off the power downstairs and the light goes out upstairs. You switch with W or from a script.

    The room for it came out of the cartridge: three full characters would be 48 sprite blocks and the VIC has 47. So all player characters share one slot and their pictures are reloaded on each switch — the same way rooms, pictures and music travel anyway.

  90. C64Engine

    The character reaches out

    Every character now has a seventh image: reaching, bending down, lifting the lamp. A script shows it, and it holds until they walk off. Before, a door opened without anyone stretching out a hand.

  91. C64Engine

    Counters, and a question about the bag

    Flags are on or off — “turn the wheel three times” cost three of them, and a supply running low was not possible at all. Now there are eight counters from 0 to 255, with the six comparisons. They stop at the ends instead of wrapping: an empty supply that kept giving would otherwise stand at 255.

    And a script can finally ask whether the character is carrying something. Until now you had to set a flag when picking it up and remember to — which is exactly where flags that are set and never tested come from.

  92. C64Engine

    Cutscenes can be skipped

    RUN/STOP skips a scene. Skipped does not mean cancelled: the script runs all the way through, only without the waiting, and on foot the character moves eight times as fast. Everything the scene sets and takes away still happens — otherwise you would be left in a world where it never took place.

  93. C64Engine

    Music and sound at the same time

    A sound borrows a SID voice for its duration and gives it back — the engine could always do that, you just could not choose which voice. Now you can, per game and per room. The borrowed voice loses its running note: on the melody that tears a hole, on the drums nobody notices.

  94. C64Engine

    The capitals with umlauts are back on the line

    Until now the engine built Ä, Ö and Ü out of A, O and U: the letter one row lower, two dots above. Readable — but they sat lower than every other capital and bumped into the line below. The three are now drawn and sit on the same baseline as everything else, just like the ß, which never could be derived. The price is real: draw your own A and you no longer get a matching Ä for free. For the lower-case ä, ö, ü the derivation stays, and there it is right.

  95. C64Workshop

    The pen erases without a right mouse button

    In the character-set editor you could paint pixels but not take them away: the right mouse button was the only eraser, and nothing in the window said so. Now the first dot of a stroke decides what it does — if there is already a pixel there, the whole stroke erases, otherwise it paints. In the character and cursor editors such a toggle does not fit, as there are four values rather than on and off; instead they now say that the value “transparent” is the eraser.

  96. C64Workshop

    The workshop knows which version it is

    Version and build now appear in the window title and under “About” — before there was no number to quote in a bug report. While a version is a preview, it says so clearly in four places, so that no test build passes for a finished one. And the menu bar finally reads FABULA instead of “Python”.

  97. C64Engine

    Aligned text and an inventory in three columns

    The sentence line was offset by one character against the verbs below it; now it lines up. The inventory sits in three columns under the verbs, six things are visible at once, and the whole column is clickable instead of just the name. Two old faults came to light on the way that nobody had reported: on a picture change the control bar flashed briefly in the colour of the room, and one row above the bar stayed in that colour. Both are gone — measured on real hardware, not only in the emulator.

  98. AmigaEngine

    Verbs on the inventory

    When tested on the V4SA, “Look at postcard” only highlighted the postcard, and nothing else happened. A click in the inventory put the item in your hand, whatever the verb. The items' scripts were there, but nothing could reach them. It now works as in Monkey Island 2 and Indiana Jones 4. If an item has a script of its own for the verb, or the verb only needs one object, it runs at once. With “Use” or “Give” the item goes into your hand and waits for the second object. Clicking the same item again puts it away, and the right mouse button on an item means “Look at”.

    In the same test a car boot could be opened without anyone being able to see that it was open. The engine lacked two things. A closed state was not painted again when you re-entered the room. And an object coming back into the picture brought its original image with it, including everything that had long since been pocketed. Now, when an object reappears, the layers of the other objects that are gone or changed are repainted over it in their proper order. That holds for any object lying on top of another.

  99. AmigaEngine

    The picture decides how tall a figure is

    At the edge of town the player character was taller than the town gate. How tall a figure gets at the front and back of a room used to be one setting for every room: 70 pixels at the front, 58 at the back. But a room painted from close up needs tall figures and a wide shot needs small ones. How tall a person appears is a property of the picture.

    Now every room has its own depth: a front and a back floor row, each with the figure's height there, and the engine divides the space in between. The workshop shows two measuring figures in the picture for this, because you can only tell whether a person fits through the gate by looking at a person. The blitter does not scale, so the engine picks from the figure's ready-made size steps, and a room painted far away needs smaller steps. Older game files still work. A room without its own depth looks exactly as before: photographed in the emulator before and after the change, not a single pixel differs.

  100. AmigaEngine

    The Guru on quitting

    The game ran on the V4SA but threw a Guru every time it was quit. The emulator reproduced it: crash, reboot, and the game started again from the beginning. The bug had been in the source since the second milestone. A call that belongs to intuition.library went to graphics.library instead. At the same number there is a function that sets up a memory structure, and on quitting it wrote that structure over the lowest 40 bytes of memory. That is where the pointer to exec.library and the exception vectors live, and after that every reach for them went into the void.

    It stayed hidden for so long because the one build used for hunting it, the one with logging, happened to have a valid pointer in that register. It wrote its 40 bytes somewhere nobody needed any more and ran through cleanly. Now the call goes to the right library, every other library call in the engine has been checked, and quitting on the V4SA is clean.

  101. C64Engine

    Things in the bag

    Carried things now have scripts of their own. You can talk to them, use them on their own and combine two of them — if the combination works, both vanish from the inventory and the new thing remains. For that a script may pick up a thing from a completely different room; that is also how a game can put something in the character’s bag right at the start. Checked in the emulator and by playing SENDESCHLUSS from the title to the end.

  102. C64Engine

    Room to breathe

    The engine was nearly full in two places: below the graphics one game had 60 bytes left, in the game data another had 28. Two moves solved it without rewriting a line of game code — the credits text now sits in free memory behind the state of the rooms, the note table with the game data. Afterwards more than 500 bytes are free below the graphics again and up to 1000 in the game data. Checked by playing SENDESCHLUSS from the title to the end.

  103. C64Engine

    The right mouse button gets a job

    Two more wishes from the forum. A right click on a thing carries out a verb at once — “Look at” by default, selectable or switched off in the settings. And the remembered thing can now be seen: if the pointer is on nothing, it stands in the sentence line; if it is on another thing, that one does, as in the later classics.

  104. C64Engine

    The characters turn to things

    Until now the characters only knew the side view. Now they also have a picture from the front and one from behind, and the player character turns to whatever they are dealing with — at the wall clock you see their back, as in Zak McKracken. Other characters can face front or back the same way, and for cutscenes there is a script command that turns the player character towards the viewer. The workshop works out the direction from where the thing sits; where it gets it wrong, you set it on the thing itself.

  105. C64Engine

    Fewer clicks, fewer verbs

    Two wishes from the forum. The last thing you touched stays picked: look at the mug, then click “Take”, and you do not have to click the mug again. And a game may do with fewer than nine verbs — leave a field empty in the settings and the others close up in the bar. The scripts of a verb you leave out are not lost; they apply again once it comes back.

  106. C64Engine

    No more flashes at start-up

    Between the title picture and the intro, things used to flash up briefly that do not belong there: the control bar, the first room, a “Walk to” in the sentence line. If a game starts with a picture or a scene, the screen now stays calm until it is there. Measured frame by frame in the emulator, before and after.

  107. AmigaWorkshop

    Inventory pictures are drawn, not cut out

    Until now the build cut the inventory picture out of the room picture, 32 × 24 pixels around the centre of the hotspot. What came out was a piece of background with an object in it, such as a key on a car boot lid rather than simply a key.

    Now every object has its own inventory picture, 32 × 24 pixels on a transparent ground. The workshop shows it with a preview on the object, along with a small painter: ten times enlarged, sixteen colours plus a picker for others, pencil and fill, with the right button erasing. It is deliberately not a second big paint editor. The big one paints rooms, the small one paints items, and each is the size of what it paints. The build converts all inventory pictures together to the bar's ten colours. An object without a picture of its own is cut out as before.

  108. AmigaEngine

    Two languages in one game file

    Everything that shows words in the game fetches them by number from a text store: verbs, object names, lines, conversation options, the end credits and the engine's own texts. A second language is therefore a second store with the same numbers, and switching means moving three pointers. The rest of the engine does not need to know. Up to three further languages fit into one game file. Anything without a translation stays German, and the build counts it. The check measures the translation against the same limits as the original.

    In the game, the menu then gets a fifth entry naming the other language: “English” in German, “Deutsch” in English. In the workshop, a window shows every visible text next to its translation and counts how many are still missing. That is how WILLKOMMEN ZURÜCK got 921 of its 931 texts in English. The remaining ten are names.

  109. AmigaEngine

    Played through on real hardware

    On the evening of 9 September an automated run made it through all of SENDESCHLUSS for the first time. On the way it hit a crash nobody had seen, because nobody had got that far. The main loop takes the back drawing buffer at the start of a frame and paints into it at the end. If a room change to a room of a different width happened in between, new buffers were allocated and the old ones freed, and the rest of the frame painted into memory that was already free again. It only showed at the system's next memory operation, as a Guru or as a machine frozen on a black screen. After the fix, the game ran from the first scene to the last.

    On 10 September SENDESCHLUSS was then played through by hand on the Vampire V4SA. The first line of the feedback: no crashes. Along with it came notes that turned into rules. Once the game was over, there was no way out. On the C64 the power switch is the usual exit, on the Amiga it is not. The rule now is that if a picture stands that no click will clear and no script is running, the menu and mouse pointer come back. Also, the sentence line now shows “with …” only after verbs that really take a second object in that particular game. This is read from the scripts, not from a list somebody has to maintain.

  110. AmigaWorkshop

    Pointer, font, figures and music

    A comparison with the C64 editor, command by command and menu by menu, showed two things. The engine can do everything the C64 engine can, plus three commands. The workshop, however, lacked four tools, and the engine had its own lines built into the program, so an English game would have had a German menu. That was the most serious point, so it came first. The engine's fourteen texts, from the line when you pocket something to the words of the menu, now belong to the game, and every game can replace them.

    Then came the tools. The mouse pointer was not even in a file but inside the program. Now it lives in the game file and has its own painter. The font painter shows a sample line under the grid, because a single character tells you nothing: only next to its neighbours can you see whether it sits too tight. The figure painter does not paint into the finished figure file but into the individual frames it is built from, since otherwise the next build would wipe everything out. For music there is no editor of its own but an import for MOD and XM. Whatever an XM can do beyond a ProTracker module is reported, not made up.

  111. AmigaEngine

    The crash after quitting

    On the V4SA the machine froze after quitting through the menu, or showed a Software Failure. In the emulator the same path was clean. A log was meant to show how far quitting got, but no file arrived, not even a screenshot taken long before. So the first check was whether the program could write anything at all on this machine. Only once a marker arrived, written before the engine takes over the hardware, did the missing second file tell us something. A measurement that delivers nothing has to check itself first.

    The cause was one missing line. The engine runs for minutes with interrupts disabled while Paula keeps playing her sound channels, and their interrupt requests pile up. The moment the operating system got its interrupts back, they all fired at once, straight into the handlers of the audio driver, which knew nothing about those channels. Now the pending requests are cleared first. Three more runs on the V4SA, with no measuring at all and only that one line: no Guru.

  112. C64Workshop

    Importing Koala pictures and characters

    The workshop now reads Koala files, the exchange format of many C64 paint programs. Nothing is scaled and no colour is guessed — only where Koala allows more colours in a cell than FABULA does, one has to give way. For rooms there is a crop that cuts out instead of shrinking. And characters no longer have to be painted dot by dot: import a picture, the workshop suggests the colours and shows next to each one how much it actually colours.

  113. AmigaWorkshop

    The conversation editor

    There was no way at all to create a conversation line in the workshop. An object's details only counted how many lines it had, so anyone wanting to build a game with conversations had to write them somewhere else. Everything underneath was ready: the build, the engine and the check had known about conversations for a long time. Only the interface was missing, and that was the biggest gap compared with the C64 editor.

    Now there is a fourth tab on the right, next to Details, Scripts and Animated. A separate window would be the wrong place, since a conversation belongs to an object just like its hotspot. The lines are at the top, then “only if”, “as long as not”, “can be said only once” and “ends the conversation”, and below them the answer. The answer uses the same script view as the neighbouring tab. A second, smaller answer editor would sooner or later have been able to do less than the big one, and nobody would have known why. On the same day the door became a field, as on the C64, and “Use X with Y” can now be created directly.

  114. C64Workshop

    A test that really plays the game

    The puzzle check says that a game can be solved. It does not say whether the sentences along the way fit together. For that there is now a test piece that plays SENDESCHLUSS from the title to the end with real clicks and reads the sentence line before every click — like a person would. It still does not replace a person: whether a sentence feels like a dead end, only someone sitting in front of it notices.

  115. C64Workshop

    One package per system

    FABULA can now be built as a finished package: for the Mac a standalone app, for Apple Silicon and for Intel, for Windows a folder that starts without installation. The bundled SENDESCHLUSS becomes the same cartridge on all three systems, byte for byte.

  116. C64Engine

    What the forum found

    A thing you can use on its own now reacts on the very first click on “Use” — before, the game always waited for a second one. If the same thing also has a combination, it keeps waiting, or nobody would ever reach the solution. And the manual has a new chapter, “Can it be done?”: seven typical wishes, each with the shortest script that fulfils it, plus a section on what cannot be done.

  117. AmigaEngine

    SENDESCHLUSS moves over

    The honest question for an engine and a workshop is not whether a test runs, but whether a finished game runs. So SENDESCHLUSS was brought over from the C64: eight rooms, 58 objects, 385 script commands. All 19 kinds of command it uses exist on both sides, and the check ran without a single message. What was missing made a list of five points, and it was worked through the same evening.

    Wide rooms now scroll smoothly, pixel by pixel. To make that possible, room and bar share a single bitmap, one above the other, so nothing has to be switched at the seam. Whether a figure disappears behind a railing is decided by a mask, pixel by pixel, not by a colour rule, because in a dithered picture with 192 colours a colour rule gives you a sieve, not a fence. Figures, music and all eight sound effects were calculated from the C64 data. Whatever the SID changes every frame and Paula cannot do, such as filter and pulse-width modulation, is dropped. The rooms also got an Amiga coat of paint: from the same pictures come around 190 colours instead of seven, with coloured shadows, volume and glow, and nothing invented along the way.

  118. AmigaEngine

    The first real machine

    Until now the emulator had been the only judge. Since 6 September FABULA has also been running on a Vampire V4 Standalone. It is not the target machine: a 68080 with a gigabyte of memory tells you nothing about loading times on an A1200. But it answers the other question, whether it runs at all.

    Loading worked straight away, including unpacking and matching checksums. The engine, though, stopped. The raster counter never went past line 262, so the machine was running in NTSC. The whole display, however, is built for PAL. The same would have happened on any NTSC Amiga, only the emulator was set to PAL and could never show it. Now the engine switches to PAL on start and restores the previous setting on exit. That setting is measured from the raster counter, because the register in question cannot be read. Two waiting loops that would have spun forever on an unexpected machine got an emergency brake. After that the game ran for thirty minutes without a break, played by hand.

  119. AmigaWorkshop

    The workshop takes shape

    The workshop is a program for modern computers, written in Python with Qt. The Amiga gets the finished game, not the tool. A second workshop on the Amiga would mean the same logic existing twice, forever, with every new command and every check rule having to go into both. To keep that door open anyway, the project file is a plain block format that another tool could read too. The proof: the saved project file produces a game file identical byte for byte to the one built from the original source.

    The room view, script editor and paint editor followed that same day. The room view does not show the PNG but the converted room picture, because hotspots dragged onto a picture that does not exist like that in the game end up in the wrong place. The paint editor works on colour numbers, not RGB, because an editor that converts on saving changes the artist's colours. Finally the workshop was tested on itself by building a game from nothing. That turned up a dead end: a freshly created object had no scripts, and the list only showed existing ones, so a new object got you nowhere. Now every verb is listed there, with the empty ones marked “(still empty)”. By the afternoon animated patches had followed, along with a single undo stack for everything, the manual and key list in the window, and an English interface.

  120. AmigaEngine

    The whole engine runs under WHDLoad

    TheA500 Mini, MiSTer and the usual collections expect a WHDLoad package. So FABULA got its own slave, written in assembler, because WHDLoad requires a single, fully relocatable block of code. Behind it runs the same engine, built without an operating system and without a C library: files come through WHDLoad, and memory through a small allocator of its own. Room, figure, bar, scripts, inventory and room changes with loading, unpacking and checksums all work. What gets shipped is one drawer with both builds and a single game file.

    The next morning showed what was not right yet: under WHDLoad the screen stayed black for twelve seconds on every room change. The first suspect was chip RAM, and fixing that gained eight percent. The real reason was the instruction cache. WHDLoad switches it off on machines without an MMU so that old games that modify their own code keep working, and a 68020 without a cache fetches every single instruction from memory. The slave now switches the instruction cache on, but not the data cache, and asks for fast RAM. Twelve seconds became just under three.

  121. AmigaEngine

    One bit, 54 percent less time

    On the first day the toolchain was set up inside the project and the first AGA picture appeared: 320 × 256 pixels in eight bitplanes, every line in a colour of its own. Soon after came a real room picture with 256 colours of its own, two drawing buffers and a figure the blitter places masked and pixel-exact. By midnight walk areas, pathfinding, a walk cycle and size by depth had been added, then the control bar below the room and an inventory with pictures as in Monkey Island 2.

    Things were measured from the start, on an emulated A1200 without fast RAM. Clearing and redrawing three figures every frame cost 178 of 313 raster lines. With a palette range of their own, which leaves the figures five bitplanes instead of eight, it was 129. Then came a single bit that gives the blitter priority over the CPU on the chip bus. Without it, the loop waiting for the blitter was stealing exactly the cycles it was waiting for. With the bit it took 59 lines, which is 54 percent less time.

  122. C64Workshop

    The manual in English

    The whole manual is now available in English as well. It was not translated word for word but against the English interface: every command and every field is called in the manual what it is called on screen.

  123. C64Engine

    SENDESCHLUSS is out

    The game for the engine is available today, free — an EasyFlash cartridge for a real C64, the Ultimate 64 or an emulator. Eight rooms, a good half hour. The engine it was built with follows later.

  124. C64Workshop

    The workshop has become a real application

    FABULA now starts like any other Mac application — with its own name in the menu and its own icon, instead of out of a terminal window. For the work itself this changes nothing; for how it feels to use, everything.

  125. C64Engine

    SENDESCHLUSS has been played through once, completely

    The small sample game has grown into a showcase: a radio studio, a cellar, a roof, a phone call that really rings, and an ending only those find who went downstairs first. Playing it through turned up five inconsistencies — all fixed. A game you can play from beginning to end is the best test an engine can get.

  126. C64Engine

    The mouse no longer trembles

    In the emulator the pointer twitched. The first suspicion fell on the emulator — wrong, as it turned out. Measuring now happens at the start of the frame, and the pointer sits still. The mistake and the hasty explanation are both written down in the manual.

  127. C64Workshop

    Many small annoyances in the workshop

    An undo deleted a whole script. A button did nothing. While drawing you could not see what you were painting. Without a mouse you could not get past the intro. Things like these only show up in real use — and they are the reason the game gets played through carefully once more before release.

  128. C64Workshop

    No more Java needed

    FABULA now translates its C64 code with a self-written tool. Before that it needed Java and someone else's program — nobody who works with FABULA later has to install either. That the swap changed nothing is proven: the finished games are byte for byte the same as before.