Sunday, 22 November 2015

5.0.34 out now

The latest version of ADRIFT is now available for download.  This contains the following changes:

Export Module (ID 19011)

When exporting a module, you can now opt to export only a particular folder, or just the items you currently have selected.  This means you can easily create modules for particular parts of your game.  There are two ways to do this - either right-click on a folder and select Export folder like so:

Or if you select Export Module from the main menu and if you have items selected, you will be prompted whether you wish to export just the selected items.

Runner Window Size Settings for Individual Adventures (ID 18913)

Last Window Size and position are now stored within a Blorb/EXE, so you can distribute your game with your preferred layout.

Advanced task option - Prevent merging of task outputs (ID 18824)

The default for ADRIFT, is to aggregate the output of tasks.  So for example, if you type "get all" and there are two objects in the room, it will state "You pick up the red ball and the green ball" instead of "You pick up the red ball.  You pick up the green ball."

You can now change this behaviour on a task by task basis by deselecting the Aggregate output, where possible checkbox on the Advanced tab of tasks.

Loops (ID 18479)

Loops can now be created around task calls, allowing for much greater flexibility.

A no repeat RAND() function (ID 18384)

I have added a new URand (Unique Random) function, which takes the same parameters as the Rand function (i.e. a single value, or a Min and Max values), but which will return Unique values within the range until all values are exhausted.

e.g. URand(1, 5) might return 3 the first time you call it, then 2 the next time, then 5, then 1 then 4.  On the next call it will return any random number from the range and uniquely work through them again.

As well as the above enhancements, the following bugs have also been fixed:

  • Restriction string in PlayerMovement task returns "nothing" (ID 19039)
  • Copy/paste in the runner causes images vanish (ID 19038)
  • Locking down/password protect Blorb files (ID 19037)
  • Custom Player Name not saved/restored (ID 19036)
  • Interrupting looping audio can crash the runner (ID 19035)
  • "Locking" graphics in games (ID 19029)
  • Map Bug (ID 19027)
  • Cancel button when exporting window executable (ID 19026)
  • EVENT will not continue if game is saved/restored (ID 19024)
  • Extra quotes added in restrictions when using Copy & Paste (ID 19022)
  • Undo do not undo ProperName changes for the player character (ID 19020)
  • Standard library-PutObjectOnOther restrictionerror (ID 19019)
  • Extra window panes cannot display graphics (ID 19016)
  • Standard library "Wear all" failure message (ID 18465)

Monday, 4 May 2015

5.0.33 out now

Again, it has taken me quite a while to get this release out, having squeezed in development as and when I can, but hopefully it will be worth the wait.  There are some exciting enhancements, amongst which is the ability to make debugging your games easier and more enjoyable.

Support <bgcolour> tags (ID 19010)

ADRIFT 4.0 supported the ability for the game designer to change the background colour.  This functionality is now available in ADRIFT 5.0, allowing background colours to be changed at any point within the game.  The background will remain this colour until changed again, or set back to the default.

The format is:

   <bgcolour = "colour">

Where colour is a named colour (e.g. red, green, blue etc), a hexadecimal colour code (e.g. #FF8800, #123456) or simply "default" to set back to the default colour.

Add default background colour in Developer (ID 19009)

Default colours for the game can now be set in Developer.  This allows the author to set the game colours appropriately for the atmosphere of the game.  It also allows them to set a suitable background colour for any font colour changes within the game.

To set default colours, go to Options > General > Default Colours

The person playing the game can choose whether to allow these colours, or to use their own preferred colours.

Allow more than one of all reference types (ID 18985)

All reference types now support multiple references per task command.  This means you can have %location1% and %location2% in the same command.  Same goes for Number, Text, Direction and Item (previously only Object and Character supported multiple references).

Ability to copy-paste restrictions/actions (ID 18844)

Actions and Restrictions can now be copied and pasted within Developer.  To access this feature, right-click on any Action or Restriction, where the new options will be available on the menu:

Debugger Enhancements (ID 18387)

The debugger has been significantly improved, providing visibility and the option to change all property values of each of the item types.  To see the properties, select the individual item within the debugger tree view, where they will be listed like so:

The property values can be changed by either selecting a new value from the dropdown, or by over-keying the value currently there.  Changes will be reflected immediate within the game currently being played in Runner.

Player controlled wait command (ID 8125)

A new task action has been added, allowing a particular task to cause a certain amount of time to pass.

As well as the above enhancements, the following bugs have also been fixed:
  • Variables set to strings with spaces (ID 18994)
  • %object% %object1% %objects% confusion (ID 18986)
  • Saving array values does not work (ID 18984)
  • Cancel Open File can still load file (ID 18979)
  • IF expression not resolved before actions execution (ID 18973)
  • Restriction: reference must exist, does not check type (ID 18971)
  • Pop-up for adding restrictions to new task appears twice (ID 18968)
  • Character not known & indefinite (ID 18964)
  • Character1.Known function generate a error dialog (ID 18963)
  • Undo fail to UNDO unselect property (ID 18962)
  • Player.Held.OpenStatus(Closed/Open) does not return value (ID 18961)
  • %object2% reference with no %object1% fails "exists" restriction (ID 18957)
  • Old games load new libraries (ID 18946)
  • ToDo: Selection only item functions (ID 18925)
  • reference parameters scrambled if order changed (ID 18924)
  • Property restriction comparing < kills debugger (ID 18858)
  • Set default user dictionary location (ID 18422)

Monday, 4 August 2014

5.0.32 out now

Sorry it has been quite so long since the last release.  On a personal level there have been big changes at work, we've embarked upon a renovation project at home, and of course there's the birth of our beautiful baby boy.  Anyway, it was about time I got a new release out, so here's a list of what's new:

Retain selections when changing object type

If you change an object from Static to Dynamic (or vice-versa), the location of the object is no longer reset to hidden.  So a static object in a single location will default to a dynamic object within that same location, and similarly objects that are parts of characters default to being held by that character.  This makes it easier to make changes to object types in the game, and is especially useful if you use the Add Object to Location menu item.

Scroll folders into view when selecting

When you select a folder from the tree view, that folder will automatically scroll into view if it happens to be off screen.  This is useful if you have lots of folders open, and lose track of where each one is.

Right click location - Add Player-enters task

There is now a new menu item in the Add Specific Task menu when right-clicking on a Location to run a task whenever the player enters that location.  This shortcut will create a System task with that trigger pre-set.

Allow Specific Tasks to be hidden.

The Prevent this task from being inherited checkbox is now available on Specific Tasks (as opposed to just General Tasks) when that Specific Task does not "use up" all its references from its parent task.  This allows you to prevent the Specific Task appearing in the dropdown menu when creating other Specific Tasks, thus reducing unnecessary clutter.

"Return to Default" Option for Last Alternative Description

If you have a description that only displays once, you now have a new option that will "reset" the message back to the default description.  This effectively allows you to cycle through the descriptions infinitely.

Show file name with save/load

When loading and saving games, the filename is now displayed.  This is useful when the command "save" is used, so you are reminded which filename is in use, and also when looking back over transcripts.

Option to check if a character is visible to a character

A new restriction to check whether a character is visible to another character has been added.  This takes closed objects into account.

Moving tasks etc. to folder

Items can now be dragged from a folder onto another folder in the tree view, making organisation even easier.

Multi Select Restrictions/Actions (with Shift/Ctrl)

Multiple restrictions and actions can now be selected in the task windows, allowing them all to be moved or deleted in bulk.

The remaining changes are bug fixes, and are as follows:
  • Can't use %direction% in expression if direction is "Up" (ID 18956)
  • Using Ctrl-v to paste text into search & replace creates a variable (ID 18949)
  • Crashdump if PartOf parent put inside container (ID 18944)
  • task actions ... will kill the developer. (ID 18940)
  • Find All crashes (ID 18927)
  • Copy-paste of a User Function causes exception (ID 18922)
  • Restriction summary wrong, char same loc as object (ID 18921)
  • User functions only work once per text box (ID 18911)
  • Players not correctly removed from objects when moving (ID 18909)
  • Key Prefix Problem (ID 18908)
  • Expressions can't subtract a negative number (ID 18907)
  • Sound loop not working (ID 18903)
  • Brackets don't nest inside user function parameters (ID 18899)
  • Broken Action- Add Everyone with property to group (ID 18898)
  • Space in %objects%.Children(Objects, On) stops it working (ID 18893)
  • not working (ID 18885)
  • Editing a task from an event control causes error (ID 18881)
  • Location function not working for objects (ID 18871)
  • Exits function of Locations not working (ID 18870)
  • Object that are PartOf do not follow players into closed objects (ID 18860)
  • UNDO fail to undo "Move objects to groups" command (ID 18859)
  • Object set to be placed on itself causes runner to crash (ID 18805)
  • Zero Value Disappears When Amending Restriction (ID 18611)
  • Adding room in the map window may put it in other folders (ID 18333)
  • Sitting Position not being updated (ID 10087)

Sunday, 25 August 2013

5.0.31 out now

It has been a little while since the previous release, somewhat hampered by work, computer crashes and relocating the website, but the new release is finally available.  This brings some exciting new enhancements, plus a few critical bug fixes.

Allow item functions to filter by property value (ID 18857)

Item functions have, since 5.0.26, been able to restrict a list (of characters, objects etc) to those having a particular property.  This has been taken one step further by allowing to restrict by properties with a particular value.

So for example, if you wanted to know how many heavy items the player was carrying, you could use the function


Allow Increase and Decrease variables (ID 18856)

Rather than only allowing you to Set variables to a value (which means having to write a function when increasing or decreasing the value of a variable), you can simply select Increase or Decrease from the first dropdown on the Variable Action screen, like so:

Expose Characters in locations (ID 18796)

Item functions that resolve to a Location can now access all characters within that location.  For example, to list all characters in the same location as the Player you could use:


Allow a separate window layout per game (ID 18795)

Each game you play will now store it's window layout separately.  This is handy because you may resize the map in one game to be a particular size based on that game layout, but have a completely different layout for a different game.  It is also very useful for the Multiple frames enhancement below.

Relative Locations (ID 18794)

You can now use an Item Function to reference one location from another.  For example, to return the name of the location to the north of the player's current location, you could use:


Allow List function to list items per row (ID 18788)

The List Item Function can now take a parameter "Rows", which will return the list items on individual rows rather than being comma separated.  For example:


%item% (ID 64)

Tasks can now refer to Referenced Items, rather than just Referenced Objects or Referenced Characters.  A Referenced Item is either a Location, Object or Character that the player referred to in the command.

For example, you could create an "examine %item%" task, that would match on "examine bird", "examine Hamish" or "examine bedroom".

Properties of items (ID 18784)

In conjunction with the new Referenced Items, properties can now be assigned to items generally.  This can allow more efficient tasks to be written for properties that any item could have, such as odour, colour, sound etc.

Referenced Text CONTAINS Keyword (ID 18706)

Restrictions can now check to see whether a text variable contains a particular value, like so:

Add Front End For Handling Synonyms (ID 18631)

Synonyms have been supported in ADRIFT 5 for some time now. However, there was no way to edit them in Developer.  This has now been added.

For further info, see

User Functions (ID 18608)

User Defined Functions allow you to create your own custom functions, with parameters if necessary, that you can use within any text section or expression.

For further info, see

Multiple text output frames (ID 180)

It is now possible to output text into a different text frame from the default.  To do this, simply use the new "window" tag.  This takes the name of the frame as an attribute, like so:

   <window Location><cls>%Player%.Location.Description</window>

This will bring up the additional frame, which can be repositioned wherever you want it, like so:

The remaining changes are bug fixes, and are as follows:

Bug Fixes
  • Crash when executing multiple tasks using actions (ID 18853)
  • Variable Wait length (ID 18849)
  • Having a numbered array with an empty last entry corrupts save file! (ID 18845)
  • Exception if hidden object has character on or in it (ID 18835)
  • Variables dissapear + unexplainable "Key already exists" errors (ID 18821)
  • Property Hidden does not exist (ID 18819)
  • Options - Wait - resets when developer runs again (ID 18816)
  • Date created / Date modified are broken (ID 18815)
  • Item clash loading from multiple libraries (ID 18797)
  • Restrict key names to alphanumeric characters (ID 18787)
  • Ability to prioritize alternative descriptions (ID 18779)
  • Using keys with functions very confusing (ID 10011)

Friday, 29 March 2013

5.0.30 out now

ADRIFT 5 release 30 is now available for download from the ADRIFT website. The main enhancements in this release are:

Private Properties (ID 3040)

Properties for Objects, Locations, Characters and Groups can now be made "Private".  This means that the new property will only be listed in the particular item that it has been made private to, thus not cluttering up all the other items with irrelevant properties.

Property descriptions (ID 15073)

Properties can now be given descriptions.  These appear as tool-tips when viewing the properties in items, to give additional information to the game author.

Completion Message default (ID 18692)

A default for whether to make task messages appear before before or after actions can now be set in Settings.  This can be overridden in each task on the Advanced tab.

Group function (ID 18748)

Group keys can now be used as Item functions to insert lists or summary information in text boxes.  E.g. you could type


to get a list of all the items in that particular group.

Make properties friendlier (ID 18754)

The property editor has had a makeover, so options that are not required for the current property are hidden away.  This makes it less cluttered, and hopefully a little easier to use.

Auto generate keys from names (ID 18757)

In Settings, you can now specify that key names should be generated based off their item names.

So for example, if you create a character called "Bob", instead of his key being Character1, it will now be Bob.  This makes any item functions more intuitive, e.g. you can type Bob.Held.Count instead of Character1.Held.Count to get the number of items he is carrying.

Add a manual (ID 18758)

Yes, ADRIFT finally has built in help.  To access help, simply click on the question mark icon in the top-right of Developer, or click on the question mark on any screen to go straight to help for that section.

The help file has detailed help for each section, plus lots of tutorials.  It is also still being added to.  An online version can be found at

Improve Add Specific Task menu (ID 18765)

The menu when you right-click on an object or character has been enhanced to show more relevant tasks.  This makes it easier to find the specific task you want, rather than a long list of tasks you would never use.

The remaining changes are bug fixes, and are as follows:

Bug Fixes
  • %text% not working in expressions (ID 18778)
  • String concatenation in expressions doesn't work (ID 18776)
  • Transcript appends but states it overwrites (ID 18774)
  • Only-display-once sequence skips half the tabs (ID 18773)
  • Run after task failure output (ID 18771)
  • Item functions returning object keys from objects is broken (ID 18769)
  • Display only once is being ignored in alternative desc (ID 18763)
  • Bad expressions with Objects.Children (ID 18762)
  • Character walks not upgrading properly (ID 18761)
  • Updates to Player in library (ID 18760)
  • window in set properties to small (ID 18753)
  • Functions Parent & InsideOf do not output key (ID 18749)
  • Boolean values stored in registry (ID 18743)
  • Scrollbar obsurces expression box (ID 18737)
  • Expression not evaluating (ID 18736)
  • Crash when cancelling blank step for character walk (ID 18730)
  • OO menus don't display correctly (ID 18729)
  • String expressions containing variables dont work (ID 18688)
  • Displaying Direction Restrictions Text Issue (ID 18483)

Tuesday, 29 January 2013

5.0.29 out now

ADRIFT 5 release 29 is now available for download from the ADRIFT website. Rather than simply list the changes, I thought I might try and give some explanation of the enhancements this time.

Access Events in OO functions (ID 18718)

If you type the name of an event key in any text box followed by the dot character, it will now bring up a menu where you can select either Length or Position.  These two new functions will return an Integer value of the length of the event (in turns), or the current position of the event from the start.

These can be useful, as you can create restrictions that an event must be before or after a certain position.

Repeat Countdown option on Events (ID 18715)

I have added a new checkbox on Events, so that if you have a delay at the start of the event (i.e. the event should start off waiting for X turns) and also you have the event set to repeat on completion, you can now select this new checkbox to wait again before the event starts, effectively allowing you to insert a pause between each run of the event.

OneOf expression function (ID 18714)

Similar to the existing Either function, there is now a OneOf function.  This function can take any number of parameters, and will return one of the parameters randomly.  For example, you could embed the function into a piece of text like so:

The top card is the Queen of <# OneOf("club", "spade", "diamond", "heart") #>s. 

Add new sound interface (ID 18709)

Several users have had problems with the DirectX sound interface.  As a result, I have added a new interface, using WinMM.  This is now the default interface for sound, as it doesn't require additional DLLs (so Runner no longer requires the Microsoft.DirectX files).  You can enable or disable individual interfaces in Runner Options > Advanced in case any particular interface causes a problem on your machine.

In addition to this, the debugger will now specify which interface is being used when a sound file is being played.

New function: Replace (ID 18707)

Expressions can now use the function Replace.  This takes three parameters - the first is the piece of text to be altered, the second is the text to find, and the third is the text to replace the found text with.  So for example,

Replace("one two three", "two", "TWO") would return "one TWO three".

Map Shortcut (ID 18699)

Ctrl+M now closes the map in Developer, as well as opening it.

Global Text override view/edit (ID 9737)

In the previous release I added an option to Import Text Overrides from file.  I have now added the corresponding Export option:

This will create an *.alr file, in the same format as that used in version 4.

The remaining changes are bug fixes, and are as follows:

Bug Fixes
  • Unhandled Exceptions - Boolean conversions (ID 18728)
  • Tab order on Properties form (ID 18725)
  • Character movement not displayed when Player on an object (ID 18722)
  • Scroll Bars (ID 18721)
  • Editing a text property causes value copying (ID 18719)
  • Dragging Variable - Value incorrect (ID 18717)
  • Double-spacing when appending blank text (ID 18716)
  • Carriage Returns break expressions (ID 18713)
  • Timing problem on character walks (ID 18712)
  • Appended StateList values aren't saving (ID 18711)
  • Mono - crash when clicking in output area (ID 18708)
  • Text boxes not scrolling to end on open (ID 18705)
  • Developer hangs when selecting certain text (ID 18704)
  • Abort map walk if task kicks in (ID 18698)
  • Object group properties not recognised by runner (ID 18634)
  • Audio doesn't work on some systems (ID 18473)
  • Missing Object Properties in Actions (ID 691)
  • Changing property types (ID 68)

Friday, 11 January 2013

5.0.28 out now

ADRIFT 5 release 28 is now available for download from the ADRIFT website. This is somewhat earlier than expected, but I felt it necessary in order to fix some irritating bugs for new users playing packaged games. There are two enhancements in this release; being able to import v4 style ALR files, and the ability to print out the map.

A full list of changes is as follows:


Bug Fixes
  • Error stopping audio (ID 18697)
  • Error loading blorb/exe, Layout path not found (ID 18696)
  • Cant set value-list property with an action (ID 18694)
  • Cant test value-list property in a restriction (ID 18693)
  • Error Loading Adventure. Invalid character (ID 18690)
  • Corrupt text window (ID 18687)
  • %text% not passing as a parameter (ID 18686)
  • Object orientated functions aren't recursive (ID 18685)
  • Integer Properties Cannot Be Dependent on Value (ID 18459)
  • Assigning values to properties in actions (ID 18391)