Jump to content

Home

Adventure scripting languages


superqult

Recommended Posts

Out of interest, what is blast-text used for? Unlike, Sierra adventures, LEC ones don't have a narrator and I can't remeber anything not being said by an actor. (O.K. , there was this "Deep in the Caribbean..." thingy.)

Link to comment
Share on other sites

  • 1 month later...

No, didn't make this a poll, because I want opinions, not statistics.

 

As some of you are aware by now, one part of the SCUMMBag family (see another thread) is the ScummIDE - a tool to create new games using the original SCUMM engines - or, sometime in the future, scummvm (and WinSPUTM, which is still the least likely to ever be done of all the SCUMMBag programs, though).

 

Anyway, finished 99% of the grammar for the language this tool is going to use. In other words, currently it's not using SCUMM syntax, but rather something C/Java-like called LECHUCK (this is also the syntax the CMI Decompiler uses by default). However, ran into a couple of problems, the major one being very special commands in SCUMM. As an example:

blast-text wrap charset 1 color 21 
 center at 320, current-lyric-y "/S9BL360/Door hinge?"

I broke the lines to avoid making them break the board layout... Will do so longer down too.

 

This is something resembling original SCUMM code for part of a well-known song from CMI. What it does is print the line "Door hinge?" word wrapped, with character set 1, color 21, centered, at the coordinates (320, current-lyric-y). Any of these settings may be left out in original SCUMM (the engine will then use the default), and they may come in any order.

 

So, something like BlastText("Door hinge?", 320,current_lyric_y,21,1,TRUE,TRUE) won't work. It doesn't allow the freedom I want for creating text like that. So, how to do this in a C/Java-like language? Not sure. However, it's beginning to make me think that maybe a SCUMM-like syntax would be better after all. Either that, or I'll have to invent some new kind of intuitive structure that'll allow things like that in LECHUCK.

 

But I need your opinions. So, which language would you prefer for scripting an adventure game? LECHUCK or something SCUMM-like? I'll give a short scripting example for each below, also taken from CMI, with Guybrush saying a few lines and turning around a bit:

 

LECHUCK:

SleepJiffies(50);
guybrush.SayLine("/CYGT308/Well Murray, are you ready 
 to continue our heady adventuring?");
WaitForMessage;
SleepJiffies(30);
guybrush.SayLine(1,"/CYGT309/Murray?");
WaitForMessage;
do {
 guybrush.Turn(225);
} while WaitForActor(guybrush);
do {
 guybrush.Turn(135);
} while WaitForActor(guybrush);
guybrush.SayLine("/CYGT310/Where'd he go?");

SCUMM:

 sleep-for 50 jiffies
 say-line guybrush "/CYGT308/Well Murray, are you ready 
   to continue our heady adventuring?"
 wait-for-message
 sleep-for 30 jiffies
 say-line guybrush "/CYGT309/Murray?"
 wait-for-message
 waitingloop1:
   actor guybrush turn 225
 wait-for-actor guybrush waitingloop1
 waitingloop2:
   actor guybrush turn 135
 wait-for-actor guybrush waitingloop2
 say-line guybrush "/CYGT310/Where'd he go?"

Broke lines again, you can't do it that way in the actual language, but again, don't want to break the board layout.

 

This is not the best example, especially since I haven't decided on how to do waiting for actors in either language. Also, be aware that although original SCUMM allows the character "-" to appear inside a command name, actor name, whatever, the SCUMM derivation for ScummIDE most likely won't, mainly because it gives problems with doing subtraction ;).

 

Enough babbling. Please, your opinions :)

 

- Serge

Link to comment
Share on other sites

I know that i know next to *nothing* about programming, but i always found it easier to control C coding rather than SCUMM.

I just thought u might like the opinion of somebody who does not know anything much.

Link to comment
Share on other sites

Thanks for your opinions so far :)

 

My main reasons for prefering SCUMM (right now) are mainly a mix of the nostalgia of using the original language, and the more streamlined way of handling multiple optional any-order arguments for stuff like blast-text. This approach also comes in handy (and is used in original SCUMM syntax) in stuff like say-line, or actor:

 

actor largo name "Largo" costume largo-screaming

 

or verb:

 

verb pickup new name "Pick up" at 520,320

 

etc. The main problem I have with it right now (other than introducing a new language to people who might already have gone through the trouble of learning, say, 15 other languages for various purposes) is the use of "-" in variable names, actor names, verb names, commands etc. It's simply a matter of "How does the compiler know your intentions?" For example, should it regard this:

 

blast-text at 50,screen-center-y "Hello"

 

... as "screen-center-y" or "screen minus center minus y"? It may be obvious to us (if the variable names make sense to us), but it's a troublesome decision for the compiler to make. It CAN be done in various ways. I have no idea how the original SCUMM compilers did it. One way to solve it is to require spaces between a minus and the terms. As in:

 

x = some-variable1 - some-variable2

 

... but I really don't like forcing spacing on the programmer like that. Another way that's much more complex (but gives more freedom to the user), I won't get into here. This post has grown long enough. Suffice to say, it's hairy.

 

- Serge

Link to comment
Share on other sites

Hee, thats why im no use at decisions like these either:D

 

Looking at them both there I can see lots of things that I like about LECHUCK but my inherrent fear of curly brackets means i'll plump for SCUMM here too.

Link to comment
Share on other sites

The curly brackets are in SCUMM too:

if (current-actor == guybrush) {
 sayline guybrush "Hi! I'm the current actor!"
} else {
 blast-text at 320,50 "We locked Guybrush inside a box. 
   He tends to get too much attention!"
}

And the most obvious way to get rid of the minus ambiguity turns the example script into this:

 SleepFor 50 Jiffies
 SayLine guybrush "/CYGT308/Well Murray, are you ready 
   to continue our heady adventuring?"
 WaitForMessage
 SleepFor 30 Jiffies
 SayLine guybrush "/CYGT309/Murray?"
 WaitForMessage
waitingloop1:
 actor guybrush turn 225
 WaitForActor guybrush waitingloop1
waitingloop2:
 actor guybrush turn 135
 WaitForActor guybrush waitingloop2
 SayLine guybrush "/CYGT310/Where'd he go?"

i.e., simply disallowing minuses in variable names, command names etc.

 

- Serge

Link to comment
Share on other sites

  • 4 weeks later...

A tecnical question: (maybe OT) Once you have defined the syntax of your script language, how do you compile it? How you store it in a file? So how the intertpreter read your compiled script? It's like the C/C++ compiler transform the source file in an exe file?

 

Ok stop question :)

 

Greetings

 

P.S. Sorry form my little english

Link to comment
Share on other sites

Yeah, pretty much the same as a C/C++ compiler. The compiler turns the script into opcodes used by the virtual machine that is the SCUMM interpreter. The choice of language doesn't change the final output, just the way the output is created by the compiler.

 

- Serge

Link to comment
Share on other sites

Well, I think an intermediate solution can be achieved: just pick the best concepts around every language and mix them with some new ingredients.

Make it a procedural language, like C/C++/Java/others and add some SCUMMish semantics. You can try to substitute the "-" symbol for that SCUMM operator by another symbol --like ":" or "::"-- that don't clash with the minus sign and you're on the way.

Hope my opinion will be useful.

Link to comment
Share on other sites

Thought of those options, and decided they're no good :) Won't use :: or : both due to other languages' grammars and because it's not really easy to type, as '-' is. And I really don't want to make the language too much a mix of everything else - we have language outthere, that pretty much make sense syntactically and semantically - no use in creating another bastard language (such as Visual Basic). I've already learned in the proximity of 30 languages - human and programming ones (and I'm one of those people who really prefer not spending time at the computer :p), and I personally don't feel like making a huge leap to learn one more :)

 

Of course, some kind of mix will have to be done, but it'll take time. Guess I have plenty of time to think about it now that it's Summer and SCUMMBag is on hold to allow my real life to exist :)

 

- Serge

Link to comment
Share on other sites

  • 3 weeks later...

Well, since I'm using AGS I'm used to the c++ language (LeChuck).

But I wouldn't mind learning SCUMM(Bag) in LeChuck language.

 

It'll just take a while to learn;)

 

Anyway, if you use the more SCUMM like script....

Can't LEC shut it down, for 'distrubating' SCUMM?

 

They're doing it for ScummVM atm, but I don't know if LEC will succeed because ScummVM supports Simon1 too! :D

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

I'd prefer SCUMM, from my experience. (which obviously isn't C or Java :-)

 

In IF there are 2 main languages: TADS, with a more C-like syntax, and Inform (for the Z-machine VM that runs Infocom adventures) with a syntax created from the outset for the specific purpose of compiling to the Z-machine.

 

I find that for a very specific task (like this one), sometimes having a non-standard syntax allows for tighter, clearer code, and I found it easier to read Inform than TADS, for instance.

 

Also since SCUMM has been around for so long, it probably has more kinks worked out than a new language which hasn't yet been through many trials to dig up structural or syntactic problems (see the bit about how to deal with '-')

 

BUT, of course, if it could lead to problems with LEC, and subsequently the shutdown of this project, I don't mind learning ANY other language/syntax :-)

Link to comment
Share on other sites

Thanks for the information and the examples! :)

 

If you want any-order arguments, perhaps it would be possible to add (optional) passing of arguments as name=value pairs. But I don't know how hard that would be to implement nor whether this would help or only unnecessarily complicate things. :confused:

Link to comment
Share on other sites

Since I only have CMI decompiled with the correct command names, I'll only be able to give examples from that one, really. The entire Pirate Song (at least the barber shop trio singing) is done with blast-text (to position the text so it reads OK (also when lines are sung at the same time), which it wouldn't if it was placed relative to the characters' position. Also, as far as I recall (it's been a long time since I looked at the decompiled scripts), blast-text is also used for the talking interface (you know, the sentence list), probably for the sentence-building interface (inhale helium balloons etc.)

 

In MI1 we have occasions such as "Meanwhile Beneath Monkey Island LeChuck's pirate ship blah blah blah". "Later"... "Even later"... "Much later" when Guybrush is digging for the Melee Island treasure, etc. Probably also the credits sequence (same goes for most of the other games' credit sequences - including the end credits of CMI).

 

I could go on. I think. But I won't. Because I don't remember more examples at the moment :)

 

- Serge

Link to comment
Share on other sites

Personally I'd prefer the C/Java-like syntax from LECHUCK as it'd save me from learning yet another language from scratch. I'd use the SCUMM syntax anyways if I really had to, but it seems a tad messy to me.

Just my 20 cents :) Looking really forward to the Scummbag tools.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...