Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Denzil Quixode

#101
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:

http://kck.st/95Cf7v

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. :)
#102
I've started my own JavaScript library (MIT License) for bitmap mask-based path finding which might be a useful component to anyone interested in doing a point and click adventure game, or game engine, in JavaScript/HTML5.

Here is a simple demo (should work in recent versions of Firefox, Chrome, Opera):

http://mbpf.googlecode.com/svn/trunk/js/test/mbpf-html5-test-simple.html
#103
I did need the irrKlang.NET2.0.dll, and this Post-Build event caused me a problem:

E:\Code\ags\netedit\UpdateCPPVersion\bin\Release\UpdateCPPVersion.exe $(TargetPath)

...as I don't even have an E: drive ;D - is UpdateCPPVersion important? - but after I removed that, VC#2008 Express compiled it no problem:

#104
I don't want AGS to go commercial, but I'd still buy it.
#105
Ah, to be honest I think I only tried to do it with room backgrounds and assumed sprites would have the same problem without checking :-X Sorry... so if sprites already do preserve the palette, could room backgrounds do the same?
#106
Quote from: Pumaman on Thu 02/09/2010 22:06:04
This is because the .NET framework has various limitations with 8-bit bitmaps, and even internally the editor doesn't have any functionality to deal with 8-bit .NET Bitmap objects. Potentially the plugin API could expose this raw format, but it wouldn't be easily handled by .NET code.
Even so I would really appreciate it, even if I had to deal with raw byte[] arrays or something.
#107
I'm not sure it would be so easy to have a game load every room and run a special script in each one without a lot of tedious manual editing of room scripts, particularly on a large game, and then you'd have to go back and remove it all again... or, maybe it could be done with a very clever bit of on_event() hacking? Even so, I think it still wouldn't be ideal, to require people to change their game in some way to use the exporter... you'd expect it to be fully automatic.

Thanks for the suggestion though! I don't mean to be ungrateful :)
#108
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)
#109
Yeah, that is a problem that would need to be overcome on a game-by-game basis. Flash also won't let you reposition the mouse or restrict it to a section of the screen, although thankfully those AGS features are rarely used. (Also, personally I stop normal HTML/JS pages from overriding the right-click context menu behaviour too, with the advanced JS settings in Firefox, because of crappy sites that abused it to pop up "DON'T STEAL FROM ME!!!", so for me HTML5 would have the same problem...)

One cool thing that Flash can do: since version 10, it is capable of dynamic audio generation. What that means is that Flash programs can support music formats that weren't built in, like .MOD:

http://www.photonstorm.com/flod (pure-Flash .MOD player)

I've also seen a work-in-progress one for .XM which was already close to completion. Because of these I'm sure a .MIDI one would be possible too, although I haven't found one yet.
#110
I've been working on a prototype of a port of the AGS demo game in Flash. (Sorry HTML5 fans.) It's not based on any official AGS code, so it won't be compatible with existing compiled game formats and would need a special editor plugin to export a game (which I haven't made, this is a hardcoded demo specific to the game). There's only one room and the inventory GUI doesn't work so far:

http://octospherics.com/toolbox/Loader.swf
#111
(I know this is an old quote but anyway)
QuoteGame Script - JS has a very similar syntax and capabilities as AGS script with a few differences that would appear to be easily translatable from one language to another.

The main problem would be transforming "blocking"/"synchronous" functions to "non-blocking"/"asynchronous" ones. For example, the AGS script:

Code: ags
function myfunc()
{
  player.Say("Hi there!");
  npc.Say("Hello!");
  Wait(40);
  player.Say("Well... goodbye.");
}


...now, the player.Say() call may take several seconds to complete. But that isn't allowed in Javascript - if code takes too long to complete, the whole browser/tab can hang, or it will pop up a message saying something is taking too long to complete. So you would need to find a way to transform "blocking" to "nonblocking". In Javascript you can pass around functions like variables, so you can pass a function that says what to do once an action has been completed:

Code: ags
function myfunc()
{
  player.Say("Hi there!",
     function() {
       npc.Say("Hello!",
         function() {
           Wait(40,
             function() {
               player.Say("Well... goodbye.");
             });
         });
     });
}


Ugly! And also, what do you do if myfunc() wants to return a value...? And how do you deal with while() { } loops...?  ;D

Not an impossible problem to overcome, probably, but a pretty big hurdle.
#112
Probably not an intentional reference but there was a bit in the movie Hard Candy that was like a perfect adventure game puzzle cliche brought to life. The protagonist breaks into a number combination lock using a date she found written on the back of a photo. :)

Maybe if they make a sequel, someone will befriend an animal for life by feeding it one piece of food.
#113
Aha! Ok, thanks to you both. This is what I've pieced together now:

(All addresses are little-endian 16-bit integers.)

Header (start of the file)

  • First 15 bytes: "WFN Font Format  " (note: extra two spaces at the end) encoded in ASCII.
  • Immediately followed by: Address of the start of the character address table.
Character Address Table

  • A simple array of addresses to each character.
  • The table ends at the end of the whole file. (The number of characters never seems to be mentioned. I'm not sure if that means the number of characters is ((length of file - start of character address table)/2), or if it is permanently hardcoded to 128.)
Character

  • 16-bit little-endian int: width of character
  • 16-bit little-endian int: height of character
  • Bitmask: (height * RoundUp(width / 8.0)) bytes of data
#114
Quote from: Rulaman on Tue 29/06/2010 07:40:18
I did also a little research in the net.
I found out about 50 percent by investigate the differences.
I haven't a doku, but I could send you my information and some source code.
Yes, if you would, that would be very helpful! I don't mind informal/incomplete info.

Quote
So I have the byte-order and the bytelength.
But There is alo a tail, I didn't know about.

Code: ags

|----------|
|    ok    |
-----------|
|  not ok  |
|----------|


You mean, data right at the end of the file with no obvious purpose?
#115
;D I sent Radiant a PM first, before I made the thread. He said he couldn't remember and to ask here, instead...
#116
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!
#117
It doesn't look blurry to me. Looks pretty awesome, in fact :)

My only (minor) gripe about the way Mario moves is that you can't control the height of the jump by tapping the key instead of holding it down. I don't know how difficult that would be to script, though. If you managed that I think you'd get it feeling close to indistinguishable from the original game.
#118
Quote from: Pumaman on Wed 14/10/2009 22:23:59
That's really useful -- it's something I've been meaning to add natively to AGS for ages but never got around to it, and a lot of people have been asking for this run-time scripting ability.

Great work!
Thank you!

One noticeable that you can't do now is call your own script functions (as in, functions you write yourself in the main script). I know that the plugin docs say that calling script functions from a plugin function just isn't supported, but is that something that could ever be overcome?
#120
Okay, I'm still working on a proper demo, but in the meantime here is a little "extra" demo to show how Lua could be used to help with debugging.

If you want to be able to do all sorts of little things (add specific inventory, teleport to a specific room, etc.) while debugging/playtesting your game, the usual thing is to set up a load of special key combinations, or a special GUI with a whole load of buttons, something like that. Either way, each new thing that you want to do in-game has to be specially coded, and if you realise you need a new one while playing you have to stop the game to code it in.

The alternative is to be able to type in and run Lua code while the game is running. This is just the standard "Demo Quest" that comes with AGS, with the addition of an interactive Lua prompt:


The game loads and plays as normal, but press Ctrl-L to show a prompt at the bottom of the screen that accepts Lua commands. You can also use the Page Up/Page Down keys to find older commands you've typed and repeat them.

For example, try:
Code: ags
print("Hello World from " .. _VERSION .. "!")




The prompt tries to be clever, in that if you just enter a value it will try to display it. For example, entering this does the same thing as the previous one:
Code: ags
"Hello World from " .. _VERSION .. "!"


Here are some other commands you can try:
Code: ags
ags.Debug(1,0)

Code: ags
ags.GiveScore(728)

Code: ags
ags.Mouse.GetPosition()

Code: ags
1 + 2

Code: ags
ags.cCris:Say("Hi, I'm %s!", ags.cCris:Name());

Code: ags
ags.cCris:ChangeRoom(16,170,180);

Code: ags
ags.cCris:GiveInventory(ags.iKey)

Code: ags
ags.StopMusic()

Code: ags
obey = ags.Overlay.CreateTextual(10,30,100,2,36,"OBEY!!!!")


As well as directly calling "raw" AGS functions like this, you could also write your own functions in Lua that never get called by the game, but are only meant for being called from this interface.

By the way, this prompt isn't a "standard" feature of the plugin, it's custom-written for this demo but is pretty simple and should be quite easy to integrate into any game.

(Also I've just noticed the game stops with an error if you try to save. This is something to do with the plugin not being able to handle Text Window GUIs I think, I will try to get this fixed asap.)
SMF spam blocked by CleanTalk