Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Topics - Denzil Quixode

Pages: [1]
I have recently opened a project that was started in AGS 3.3.3 in version 3.3.4 and discovered that one of the dialogs is now consistently being replaced with a different one when I try to .Start() it. The one that it gets replaced by happens to be the dialog with ID 0. I tried going back to AGS 3.3.3 but the problem persists, so maybe it is just a coincidence that I noticed this now.

There are other dialogs in the game that do not seem to be affected. I tried creating a new dialog, but the new one had the same problem.

I did have a custom dialog rendering routine, but I tried disabling it and that didn't fix it. I also tried putting this in dialog_options_get_dimensions:

Code: Adventure Game Studio
  1. Display("%d", info.DialogToRender.ID);

...and confirmed that the ID of the dialog is 0, not the ID that it should be.

I also tried dialog[<x>].Start() instead of dDialog<x>.Start(), but that didn't fix it.

Has anyone had a similar problem? And any suggestions for what might fix it?

I'm trying to track down as many earlier versions of Reality-on-the-Norm games as I can, particularly the original releases of games that got updated later.

If you are someone who has a long history of downloading RON games as soon as they were released, and you still have access to the computer you did it on, you could be the one to help!

(The one that I would personally really, really like to see again is the original DOS version of Cabbages and Kings...)

Here are some that I know about, there may be more:

Cabbages and Kings v1 - found!! thanks to Renegade Implementor :)

RON Beach Party (incomplete) - found!! thanks to Renegade Implementor :)

Reality Check v1 - found!! thanks to Retro Wolf :)

Night and Day v1 - found!! thanks to HandsFree :)

Night and Day v1.1 - found!! thanks to HandsFree :)

I Spy 1 v1
Date: April 9th, 2001
Filesize: (unknown)

The Postman Only Dies Once v1 - found!! thanks to Renegade Implementor :)

I Spy II v1 - found!! thanks to Renegade Implementor :)

The First Stitch v1 - found!! thanks to Renegade Implementor :)

Disappearance Time v1 - found!! thanks to Renegade Implementor :)

I'd be hugely thankful for any help! :)

If I am doing a lot of processing in an AGSE_SAVEGAME event handler, potentially enough to cause sound skipping, is it safe to call the PollSystem() method to avoid the sound skip?

Inspired by this thread from last year, I have been working on a proof-of-concept demo for an AGS game running in a browser, a similar idea to clarvalon's XAGE running on .NET Silverlight, except that the primary language is the browser's own JavaScript, using HTML5 or Flash to handle the audio and graphics output.

The demo is of Ben Chandler's awesome miniature-epic "!", for which he graciously released the source code last year.

Any relatively recent version of Firefox, Opera, Chrome or Safari should be able to play this without requiring Flash. IE8 (and hopefully IE7 and maybe IE6, though I haven't been able to test) should be able to play it, but will require Flash 10+ plugin. You can also see it in Flash mode in other browsers if you like:

The "engine" is very incomplete, in fact it just barely covers the functionality needed to play this one specific game, and I even cut some corners towards the end because I was getting impatient :P But not too much, and I am pretty confident it could be fleshed out into something that could run most any AGS game. The question is, of course, whether this is something people really want, particularly as it is much, much harder to "protect" your game's resources. Someone determined who knows what they're doing can easily download all the files, read the script code, etc.

Feedback and discussion welcome!

So, I'm not sure how many people here care about the modern text adventure/interactive fiction scene. But if there are any, and you are one of them, and in particular if you have enjoyed the work of Andrew "Zarf" Plotkin (Spider & Web, So Far, Shade and others) at some point over the last 15 years you may be interested in helping support this:

At the end of this year, he is planning to leave his day job, and work full-time in 2011 on a serious attempt at commercial IF. The first step is a new game called "Hadean Lands", which will initially only be officially available for the iPhone/iPad/iPod Touch. I don't have any of those myself, but the project is not just about the game itself - he is planning to spend some serious development time on the low-level code and infrastructure for polished, professional IF on mobile devices in general, which will be released back to the IF community as open source. If it's successful, the game will be ported to other mobile devices and then to desktops.

There's a lot more information at the link (also see the "Updates" page for a bit about why he does not want to release straight to PC) and I'm probably getting something wrong somewhere anyway. :)

It is quite easy to get a Bitmap from any sprite or room background, but it seems like these are always full-colour RGB Bitmaps, including when they were originally 8-bit paletted, which loses the palette information. Is there any way to get these out as an 8-bit Bitmap, so it includes the palette? This would be very useful for an exporter plugin I'm working on. (I know 8-bit games are unusual nowadays but I'd still like to support them ;D)

Advanced Technical Forum / The .WFN font file format
« on: 28 Jun 2010, 20:17 »
I've been working on a new experimental editor plugin that involves exporting various stuff from the loaded game. It's going pretty well, but I've hit a problem - see, I'd like to be able to export a game's SCI fonts in a custom format. I thought there'd be no problem, since there is information online about the format of SCI font resource files, and I could just follow that. But I just realised that the .WFN font files that get created when you import a SCI font are actually a custom format, not simply the SCI font renamed like I assumed :P

So... does anyone have a technical description of what a .WFN file contains? I mean, at the level of bits-and-bytes, endianness, signed/unsigned integers, that kind of deal. I have tried to look online but could not find anything. I'd really appreciate it!

The IAGSEngine interface available to runtime plugins lets you loop over every AGSCharacter* quite easily:

Code: Adventure Game Studio
  1. void IterateCharacters() {
  2.         int i;
  3.         for (i = 0; i < engine->GetNumCharacters(); i++) {
  4.                 AGSCharacter* c = engine->GetCharacter(i);
  5.                 // do something with the AGSCharacter pointer ...
  6.         }
  7. }

However, I would really like to be able to do similar things for other AGS objects than Characters (edit: and also Room Objects). This is as far as I've got for InventoryItem:

Code: Adventure Game Studio
  1. typedef int (*GETNUMINVENTORYITEMS)();
  3. void IterateInventoryItems() {
  4.         GETNUMINVENTORYITEMS GetNumInventoryItems = (GETNUMINVENTORYITEMS)engine->GetScriptFunctionAddress("Game::get_InventoryItemCount");
  5.         if (!GetNumInventoryItems) {
  6.                 engine->AbortGame("Cannot find Game.InventoryItemCount static property");
  7.         }
  8.         for (i = 0; i < GetNumInventoryItems(); i++) {
  9.                 // ... but how to get the pointer for the "i-th" InventoryItem?
  10.         }
  11. }

All I want is the pointer, so I can pass it to other functions and methods that take an InventoryItem. I'm focusing on InventoryItem as an example, but there's other things like Dialogs. Is there any existing way to get the pointers? I don't mind it being a bit weird, as long as it works  :=

Modules & Plugins / PLUGIN: Lua for AGS
« on: 04 Sep 2009, 19:30 »
Edit: I decided to update my original post for the new version rather than trying to have several threads, or post updated versions throughout this one. Sorry if this confuses anyone, it just seemed like the best option.


This is my first plugin. It is quite experimental, but I'm fairly pleased with the way it's gone so far. I've developed it against version 3.1.2SP1 (build and haven't had a chance to try it with other versions, so I'm not sure how well it works with them.

Download it here:

The purpose of the plugin is to allow you to write parts of your game's code in Lua, an alternate scripting language to AGS-Script. It is intended for people who are already fairly comfortable with scripting and are interested in trying something a bit different.

The files included in the package are five DLLs - AGS.Plugin.Lua.dll, AGSPlugin.SciLexer.dll, agslua.dll, lua51.dll and lua5.1.dll. Copy all of them into the AGS application home directory. Once you have these DLLs in place and you fire up AGS, there will be a new icon in the project tree called simply "Lua", and also a new entry in "Plugins" called "Lua Run-Time Component". Both of these are disabled by default, and should have no effect until you choose to activate them for a particular game. You need to have both of them active or inactive or you will probably get odd errors. (I'd recommend trying it first on a demo game rather than something important, just in case.)

To create your first Lua script, expand the "Lua" icon, right-click on the "Lua Scripts" icon inside it and select "New Lua script...". Choose a suitable name for it in the window that pops up, and click "Create".

Okay, you will now have to enter some Lua code. How to write Lua itself is not something I'll go into too deeply just yet, but to get you started:
  • Lua has strings, numbers and boolean values, just like in AGS-Script. (However, there is only one "kind" of number, rather than int, short, float etc.)
  • You do not need to declare the type of your variables - i.e. just 'a = 5' is fine, you do not need to tell Lua that 'a' is a number.
  • However, you do need to declare that a variable should be local to a function, by putting 'local' before it the first time you use it, e.g. 'local a = 5'. Otherwise, you are setting the value of a global variable called 'a' that other functions could overwrite.
  • In Lua, zero is not considered to be "false". For example, in Lua if you write "if (0) then ... end", the inside of the block is run - compare this to AGS-Script, Javascript and other "C"-based languages where "if (0) { ... }" will not run the statements inside the block. (That is a fakey example, a more realistic one is that you might have a function that returns 0 or 1 to indicate success or failure.) The only values considered "false" are the boolean value false, and nil (which is basically what Lua calls null).
  • You do not need to end your statements with a semicolon - but you can if you want;
  • Blocks start and end with words, instead of C-style { } curly braces:
  • function funcname(param1,param2,param3)  [...]  end
  • if [condition] then  [...]  elseif [condition] then  [...]  else  [...]  end
  • while [condition] do  [...]  end
  • If you want a series of if-else-if conditions, you will most likely want to use use elseif (all one word) rather than "else if", which is valid but not what you might expect.
The scripts are saved in a subfolder of your game project directory called "lscripts". You can right-click on the "Lua Scripts" icon and select "Refresh" to reflect changes to the lscripts directory made outside of the AGS Editor.

Once you have written a Lua script, you will want to run it as the game is starting up. If you don't do this, any functions you define inside the script will not be available later on. Open the GlobalScript.asc file and add Lua.RunScript("test.lua"); into the game_start() function (replace "test.lua" with the name of your script if you called it something different):

Code: Lua
  1. function game_start()
  2. {
  3.   Lua.RunScript("test.lua")
  4.   // (... the rest of your initialisation code ...)
  5. }

Okay. Now to test calling your function. Go to a room script and in the handler function for some activity (looking at a hotspot or something), add:

Code: Lua
  1. function hHotspot1_Look()
  2. {
  3.   LuaValue* result = Lua.Call("hello");
  4.   player.Say(result.AsString);
  5. }

What this does is to call the Lua global function "hello", convert the return value to a string, and pass it to player.Say(). It is the equivalent of player.Say(hello());, if hello() was an AGS function rather than a Lua one.

Okay! You are now ready to try compiling and running your game. Hopefully, your player character will say the string returned from the Lua function. (If not, please let me know!)

If you are wondering how using this plugin affects things:
  • A file called lscripts.dat will be created in your "Compiled" folder. This file contains all of the files from the lscripts directory. It is from this that Lua.RunScript() is actually loading them, not from the original source code files. This file is not a plain-text file and should provide enough protection to stop casual curious people from snooping in your scripts (it's not strongly encrypted or anything, but it doesn't make it easy).
  • Save games are bigger - by a few dozen kilobytes, even if you don't define your own functions. The more you add into the Lua "universe", the bigger this will get. But it should remain sensible - let me know if it seems to be making your save files really huge.

I have put up a page explaining more about what you can do with the plugin here: Link not working

I have no idea if Ron Gilbert's "Grumpy Gamer" blog is already being checked by everyone here on a regular basis, but anyway, he's just put up a very interesting entry about what trying to do a commercial 2D adventure today would entail:

This is a very short, silly parody. Apologies to DGMacphee :) (and anyone who tries to understand it without playing the original)

It started off as a sort of joke side-project while I was trying to get an entry done for Xmas MAGS. The main project never got off the ground, and this does not qualify for the comp, but here it is.

Critics' Lounge / [w.i.p.] Small, old building
« on: 09 Aug 2003, 21:24 »
Try to ignore the flat, blank surrounding walls & sky :) Not because I couldn't be bothered, but because I'm still unsure what I want them to look like, & I'd like to know what people think of the foreground stuff...

Critics' Lounge / Minimalist bedroom
« on: 28 Jul 2003, 18:38 »
I don't have any specific plans for this yet...

Any feedback appreciated :)

Pages: [1]