Profile for Walker White

Error message

Deprecated function: implode(): Passing glue string after array is deprecated. Swap the parameters in drupal_get_feeds() (line 394 of /var/www/pied-piper.ermarian.net/includes/common.inc).

Recent posts

Pages

AuthorRecent posts
Is this game nothing but combat? in Avernum 4
Apprentice
Member # 4127
Profile #4
quote:
Originally written by Student of Trinity:

In a word, yes. I'm not a big fan of mechanical puzzles or riddles in FRPGs, since it's extremely hard to make them seem remotely realistic in context. There are only so many plausible scenarios where you should be faced by these things.

It depends. It depends on whether you view fantasy RPGs as the legacy of Tolkien or the legacy of Vance. Gygax only got his races from Tolkien, and one or two character classes. Everything else in D&D and the early RPGs came from Vance's Dying Earth series. (Gygax is on record admitting this, to the point where he got explicit permission for several of the spells and magic items from Vance). And this type of stuff makes perfect sense in that context.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Is this game nothing but combat? in Avernum 4
Apprentice
Member # 4127
Profile #0
Okay, the plot in Exile III/Avernum III may not have been the greatest. But what was nice about it was that it had a lot more going for it other than combat. There were lots of riddles, puzzles, and gismos everywhere. Things you had to think about rather than hack your way through. This was a feature that I have always liked about Jeff's games, despite their primitive feel.

I have reached Blosk and as far as I can tell, this game is nothing but combat with "fetch-it" missions. Most of what you need to solve a problem flows naturally from searching the nearby chests after killing a boss. The only challenge is the combat strategy. No rays and mirrors. No conveyor belts. No single character rooms. No control panels. Nothing.

The combat certainly is more challenging than the previous AVs (but these have all been easier than the Exiles because the number of creatures to a room is capped an order of magnitude lower). However, I always felt the puzzles were what gave these games their distinctive feel. Am I alone on this?
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #9
quote:
Originally written by Banana:

This allows for granularity within states without having to swap memory cells around or massively overload return_offset, but it does turn some states into a mass of
if (s0 == STATE) {
} else if (s0 == STATE_A) {
} else if (s0 == STATE_B) {
}
I'm thinking of writing a set of m4 macros (or a "compiler") to turn all this out given c-like functions as input :)

Yeah. I have known you can do that for some time, but I am trying to keep overhead down some. The hack in AdvancedNPC works only because the function calls are in an initial loop. You are suggesting to turn the states into basic code blocks (that's the compiler terminology) around a function call. This necessitates breaking up branches and loops if there are function calls in them. What you are suggesting is the clean and proper way, it just causes state explosion.

At that point it becomes an exercise in "What can AvernumScript do?". Which can be fun (that's certainly the game I have been playing), but we should always temper this with providing helpful stuff to the community here. If we write convoluted scripts that they cannot understand or at least customize through memory cells, then it won't be too useful.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum
Apprentice
Member # 4127
Profile #9
quote:
Originally written by Banana:

This allows for granularity within states without having to swap memory cells around or massively overload return_offset, but it does turn some states into a mass of
if (s0 == STATE) {
} else if (s0 == STATE_A) {
} else if (s0 == STATE_B) {
}
I'm thinking of writing a set of m4 macros (or a "compiler") to turn all this out given c-like functions as input :)

Yeah. I have known you can do that for some time, but I am trying to keep overhead down some. The hack in AdvancedNPC works only because the function calls are in an initial loop. You are suggesting to turn the states into basic code blocks (that's the compiler terminology) around a function call. This necessitates breaking up branches and loops if there are function calls in them. What you are suggesting is the clean and proper way, it just causes state explosion.

At that point it becomes an exercise in "What can AvernumScript do?". Which can be fun (that's certainly the game I have been playing), but we should always temper this with providing helpful stuff to the community here. If we write convoluted scripts that they cannot understand or at least customize through memory cells, then it won't be too useful.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #7
quote:
Originally written by Banana:

We could just set aside a range of, say, 1000 SDFs as the 'array area' and reuse it as necessary. Of course, you'd need to make sure to initialise it every use, which could get slow.
It just occurred to me that I thought you were suggesting one thing, when you were really suggesting another. Are you suggesting arrays that only persist within a single state and need to be reinitialized each time the state is called? Because yes, we can do that, but you are right in saying that it is expensive. Even my G4 400 would probably not like that.

Anything else you must be much more careful with, because we are looking at a class OS shared resource problem here. Each script is a thread. That's why I think these sorts of tricks should be avoided in terrain and creature scripts (which have memory cells anyway).
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum
Apprentice
Member # 4127
Profile #7
quote:
Originally written by Banana:

We could just set aside a range of, say, 1000 SDFs as the 'array area' and reuse it as necessary. Of course, you'd need to make sure to initialise it every use, which could get slow.
It just occurred to me that I thought you were suggesting one thing, when you were really suggesting another. Are you suggesting arrays that only persist within a single state and need to be reinitialized each time the state is called? Because yes, we can do that, but you are right in saying that it is expensive. Even my G4 400 would probably not like that.

Anything else you must be much more careful with, because we are looking at a class OS shared resource problem here. Each script is a thread. That's why I think these sorts of tricks should be avoided in terrain and creature scripts (which have memory cells anyway).
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #6
quote:
Originally written by Banana:

We could just set aside a range of, say, 1000 SDFs as the 'array area' and reuse it as necessary. Of course, you'd need to make sure to initialise it every use, which could get slow.
I am thinking of using y values 27, 28, and 29 as heap space in my scripts. This can be used for arrays, queues, whatever. This gives us 900 bytes and still leaves over 8k for story. Someone who is actually writing adventures (Drake? TM?) should comment on whether this is acceptible; I am just script support right now (Think of me as a magic item artificer).

As for initialization, I think this depends on whether you want a formal allocation system in the scenario script. Right now, I am inclined just to have scripts manually carve out their own space. To have a real allocation system we would probably need the following:

A pointer to the next free memory location.A stack to keep track of what memory is in use.The ability to garbage collect occasionally. As linked lists require two nodes per pointer, Stop and Copy is probably the most efficient here. However, that leaves half the memory unused at any give time.As you see, this gets really expensive for <1k.
As I said in the beginning, oh what we couldn't do with 64k.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum
Apprentice
Member # 4127
Profile #6
quote:
Originally written by Banana:

We could just set aside a range of, say, 1000 SDFs as the 'array area' and reuse it as necessary. Of course, you'd need to make sure to initialise it every use, which could get slow.
I am thinking of using y values 27, 28, and 29 as heap space in my scripts. This can be used for arrays, queues, whatever. This gives us 900 bytes and still leaves over 8k for story. Someone who is actually writing adventures (Drake? TM?) should comment on whether this is acceptible; I am just script support right now (Think of me as a magic item artificer).

As for initialization, I think this depends on whether you want a formal allocation system in the scenario script. Right now, I am inclined just to have scripts manually carve out their own space. To have a real allocation system we would probably need the following:

A pointer to the next free memory location.A stack to keep track of what memory is in use.The ability to garbage collect occasionally. As linked lists require two nodes per pointer, Stop and Copy is probably the most efficient here. However, that leaves half the memory unused at any give time.As you see, this gets really expensive for <1k.
As I said in the beginning, oh what we couldn't do with 64k.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #5
Circular queues turn out to be quite efficient in the SDFs when you are willing to allow a buffer limit. Last night I figured out how to use them to reintroduce area effect spells (with delayed effect even) into the game with an event queue.

Unfortunately, work is picking up again, so you all will have to wait a week or two for those scripts.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum
Apprentice
Member # 4127
Profile #5
Circular queues turn out to be quite efficient in the SDFs when you are willing to allow a buffer limit. Last night I figured out how to use them to reintroduce area effect spells (with delayed effect even) into the game with an event queue.

Unfortunately, work is picking up again, so you all will have to wait a week or two for those scripts.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #0
I must be slipping in my old age.

While writing my scripts I have been periodically lamenting the lack of arrays and dynamic structures. And then it hit me.

The SDFs are heap space. Persistent heap space that is saved when you quit the game (so long as you saved). We can make arrays, linked lists, binary trees, and whatever we want here. And you can use memory cells as pointers.

Of course, every space used as the heap takes away from legitimate use in the story line, which is very uncool. And there are only 300 x 30 = 9000 spaces, so that starts to make it look a little tight.

If only Jeff had given us more SDFs. Of course I am not expecting full 32 bit addressing (as the SDFs are indexed by two 16 bit shorts). But he could have given us 16 bit addressing (256 x 256). That ups the number of nodes to 64k and Blades of Avernum becomes the equivalent of a C64. And the save file cannot be that much larger from it, can it?
Posts: 48 | Registered: Saturday, March 20 2004 08:00
I cannot believe I did not think of this earlier in Blades of Avernum
Apprentice
Member # 4127
Profile #0
I must be slipping in my old age.

While writing my scripts I have been periodically lamenting the lack of arrays and dynamic structures. And then it hit me.

The SDFs are heap space. Persistent heap space that is saved when you quit the game (so long as you saved). We can make arrays, linked lists, binary trees, and whatever we want here. And you can use memory cells as pointers.

Of course, every space used as the heap takes away from legitimate use in the story line, which is very uncool. And there are only 300 x 30 = 9000 spaces, so that starts to make it look a little tight.

If only Jeff had given us more SDFs. Of course I am not expecting full 32 bit addressing (as the SDFs are indexed by two 16 bit shorts). But he could have given us 16 bit addressing (256 x 256). That ups the number of nodes to 64k and Blades of Avernum becomes the equivalent of a C64. And the save file cannot be that much larger from it, can it?
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Calls that we wish existed in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #28
quote:
Originally written by Eldiran:

Wands combine anyway, no matter what the docs say. At least, they do in Valley of Dying Things. Not that this bug is bad. It saves a lot of space for my 1-PC parties.
Now that's just bizarre. Can you elect to split the wand back up when you trade it between characters like you do with potions?
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Calls that we wish existed in Blades of Avernum
Apprentice
Member # 4127
Profile #28
quote:
Originally written by Eldiran:

Wands combine anyway, no matter what the docs say. At least, they do in Valley of Dying Things. Not that this bug is bad. It saves a lot of space for my 1-PC parties.
Now that's just bizarre. Can you elect to split the wand back up when you trade it between characters like you do with potions?
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Calls that we wish existed in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #25
quote:
Originally written by Drakefyre:

has_num_of_item(item) will return the number of charges.
If you have two wands of the same type, it will sum the charges. These are wand-only functions that I am thinking of. That function is great for potions and objects.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Calls that we wish existed in Blades of Avernum
Apprentice
Member # 4127
Profile #25
quote:
Originally written by Drakefyre:

has_num_of_item(item) will return the number of charges.
If you have two wands of the same type, it will sum the charges. These are wand-only functions that I am thinking of. That function is great for potions and objects.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Calls that we wish existed in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #21
Yet another that just occurred to me:

crumble_terrain(short loc_x, short loc_y)

This is the analogue of flip_terrain() except that it uses the crumble counterpart instead of the swap counterpart.

I just figured how to make radio-detonated plastique and it might be nice to be able to blast walls as well as monsters with it.

[ Tuesday, April 06, 2004 16:43: Message edited by: Walker White ]
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Calls that we wish existed in Blades of Avernum
Apprentice
Member # 4127
Profile #21
Yet another that just occurred to me:

crumble_terrain(short loc_x, short loc_y)

This is the analogue of flip_terrain() except that it uses the crumble counterpart instead of the swap counterpart.

I just figured how to make radio-detonated plastique and it might be nice to be able to blast walls as well as monsters with it.

[ Tuesday, April 06, 2004 16:43: Message edited by: Walker White ]
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #17
quote:
Originally written by Newtfeet:

"Public" means about the same thing as "known by the interpreter".
If you are a Microsoft programmer "not public" means "it is there and usable by anyone, but Microsoft won't tell me what it is so their Office programs can be better than mine." That's why I assumed that interpretation.

I didn't mean any insult by it.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum
Apprentice
Member # 4127
Profile #17
quote:
Originally written by Newtfeet:

"Public" means about the same thing as "known by the interpreter".
If you are a Microsoft programmer "not public" means "it is there and usable by anyone, but Microsoft won't tell me what it is so their Office programs can be better than mine." That's why I assumed that interpretation.

I didn't mean any insult by it.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #15
quote:
Originally written by spyderbytes:

I mean, if all food has the same value for 'variety', he's bound to have some way to query inventory by variety, I would think. It's likely just not public.

It's more than not just public; it is not in the scripting language. He has functions in his engine for doing it. Those are C++ calls. The way scripts work, however, is part of the engine reads in the script text file (the thing doing the reader is called the interpreter) and converts it to C++ calls. If the interpreter does not know to translate calls about item variety into the existing C++ calls, then you can never use them in a script, whether you know their name or not.

This is the big deal in the "Calls We Wish Existed Thread". If those calls already exist in C++ form in the engine, it is very easy for him to add them to AvernumScript; he could do it in a few minutes. If they don't, it is much harder to add them, and not necessarily advisable to do so, as it could break the engine.

It's like the difference between needing a word in French for which the language translator does not know the correct word, and when there is no such word in French at all.

[ Tuesday, April 06, 2004 14:51: Message edited by: Walker White ]
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum
Apprentice
Member # 4127
Profile #15
quote:
Originally written by spyderbytes:

I mean, if all food has the same value for 'variety', he's bound to have some way to query inventory by variety, I would think. It's likely just not public.

It's more than not just public; it is not in the scripting language. He has functions in his engine for doing it. Those are C++ calls. The way scripts work, however, is part of the engine reads in the script text file (the thing doing the reader is called the interpreter) and converts it to C++ calls. If the interpreter does not know to translate calls about item variety into the existing C++ calls, then you can never use them in a script, whether you know their name or not.

This is the big deal in the "Calls We Wish Existed Thread". If those calls already exist in C++ form in the engine, it is very easy for him to add them to AvernumScript; he could do it in a few minutes. If they don't, it is much harder to add them, and not necessarily advisable to do so, as it could break the engine.

It's like the difference between needing a word in French for which the language translator does not know the correct word, and when there is no such word in French at all.

[ Tuesday, April 06, 2004 14:51: Message edited by: Walker White ]
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #14
quote:
Originally written by Newtfeet:

Ok, so let me set this all out.

clear: Obvious. Sets all the values for the object currently being edited to their defaults.
property = new_value: Also obvious. Sets the value "property" to "new_value" for the object currently being edited.
import = which_object: Replaces all the values for the object currently being edited to the values for "which_object". If "which_object" was already edited in this same script, it imports that. If it hasn't been, it imports from the core data.
begindefine which_object: Sets the object currently being edited to "which_object". Copies the data from the object that was edited before this statement over the data of "which_object".

Is that right?

Yes.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum
Apprentice
Member # 4127
Profile #14
quote:
Originally written by Newtfeet:

Ok, so let me set this all out.

clear: Obvious. Sets all the values for the object currently being edited to their defaults.
property = new_value: Also obvious. Sets the value "property" to "new_value" for the object currently being edited.
import = which_object: Replaces all the values for the object currently being edited to the values for "which_object". If "which_object" was already edited in this same script, it imports that. If it hasn't been, it imports from the core data.
begindefine which_object: Sets the object currently being edited to "which_object". Copies the data from the object that was edited before this statement over the data of "which_object".

Is that right?

Yes.
Posts: 48 | Registered: Saturday, March 20 2004 08:00
Am I missing something? (food items) in Blades of Avernum Editor
Apprentice
Member # 4127
Profile #9
quote:
Originally written by Newtfeet:

Remind me why we have those "begindefineitem 450" and "import = 450" lines in there.

Edit: And crap, I double posted and the first post is complete nonsense.

Simple. I copied Bread into slot 450 which is the first empty item slot. I then cleared slot 4 (you can redefine ANY item slot you want) so that I could alter it. I loaded in all the data for Bread (which is now in slot 450) and added the extra definition to give it a special class.

Rinse, lather, repeat.

You cannot just say begindefineitem 4 as that will erase all the old Bread information. And I did not want to leave Bread as item 450, as then I would have two different types of Bread.
Posts: 48 | Registered: Saturday, March 20 2004 08:00

Pages