Author Topic: Official AGI Documentation  (Read 146753 times)

lance.ewing and 1 Guest are viewing this topic.

Offline Collector

Re: Official AGI Documentation
« Reply #45 on: April 09, 2017, 06:38:30 PM »
Given that most of the template and fan games are late AGI2 it seems that the documentation focus on those interpreters.
KQII Remake Pic

Online lance.ewing

Re: Official AGI Documentation
« Reply #46 on: April 12, 2017, 04:42:35 PM »
Yeah, that is exactly right. I wrote quite a lot of the fan made AGI specs, and from memory I think it was based mainly on 2.9XX and above. I don't remember ever having the DDP game at that time, which is our closest match to the official Sierra AGI doc.

Offline Collector

Re: Official AGI Documentation
« Reply #47 on: March 28, 2018, 09:19:45 PM »
I finally got around to Adding this to the AGI Wiki.

http://agiwiki.sierrahelp.com/index.php?title=Official_AGDS/AGI_Documentation
KQII Remake Pic

Online AGKorson

Re: Official AGI Documentation
« Reply #48 on: March 29, 2018, 02:44:52 AM »
I think you should clearly indicate that the information is for 2.001 (or whatever version you think it is). There is a significant amount of difference between these specs and what we see in the most commonly used versions for fanmade games. I'm mostly done a full decompile on v2.917 and will be sharing what I've learned in the WinAGI help files. Lots of interesting things I've found by going through all the code.

Offline Collector

Re: Official AGI Documentation
« Reply #49 on: March 29, 2018, 09:13:53 AM »
Good point. It would be nice if you could contribute what you have found to the Wiki
KQII Remake Pic

Online AGKorson

Re: Official AGI Documentation
« Reply #50 on: March 29, 2018, 10:12:08 AM »
I will add that to my list of things to do. Hopefully I'll be able to get to that in next couple of months.

Offline Collector

Re: Official AGI Documentation
« Reply #51 on: March 29, 2018, 07:10:38 PM »
Thanks for any contribution that you might be able to make. I don't believe you currently have an account on the Wiki. When you are ready let me know and I'll add one for you. You probably contributed to the original AGI Wiki. A lot of the current Wiki is reconstructed from the original one via the Wayback. If you get a chance you could look through the Wiki and see what might need attention or correction.
KQII Remake Pic

Offline RamoramaInteractive

Re: Official AGI Documentation
« Reply #52 on: November 29, 2022, 12:02:52 PM »
Do you know where I can find good tutorials how to start programming an AGI game with WinAGI?

Online AGKorson

Re: Official AGI Documentation
« Reply #53 on: November 30, 2022, 09:13:54 PM »
HI RamoramaInteractive,

I don't think there are any tutorials out there for WinAGI. At least not yet. I was thinking I might make some as soon as I finish the big project I'm working on right now.

In the meantime, take a look at the WinAGI Help file- I put a lot of information in there that I hope you will find useful in getting you up and running. There are two main topics in the Help file - one that explains how to use WinAGI and one that explains how AGI works in general, including detailed explanations for all the resource types and logic commands.

And if you have any questions, please post them here. Folks on the forum are super helpful.

Offline RamoramaInteractive

Re: Official AGI Documentation
« Reply #54 on: December 03, 2022, 08:35:51 AM »
Thanks @AGKorson!

Offline bokkers

Re: Official AGI Documentation
« Reply #55 on: April 03, 2025, 04:36:17 PM »
Best thread ever! Can't believe I'm only discovering this now, but better late than never I guess...
Thanks for the massive heap of info everyone!

Offline watch-out-graham

Re: Official AGI Documentation
« Reply #56 on: Yesterday at 06:58:44 PM »
Not sure if this has been posted here before or not, but snippets of a more recent version of this doc have been mistakenly published on a few disks :

Leisure Suit Larry v1.0 int. 2.917 360K disk 1

A difference in the first segment, div.v(VAR, VAR), is not in the original document.

Code: (0x010A00-0x010C00) [Select]
he result in the var.

div.v(VAR, VAR)
    Parameters: destination, divisor
    No alternate way to write it in the compiler.
    Divide the first var by the second, leaving the quotient in the
    first var.

lindirectv(VAR, VAR)
    [Written as var1 @= var2]
    Left indirect assignment of vars.  Takes the value in var1 and uses it
    as the var number in which to store the value of var2.  In essence,
    var1 is a 'pointer' to the var for the assignment.  Thus,

        %var        var1        39
        %var        var2        56
        var1 = 27;
   

A difference here, show.pri.screen() is not in the posted document.

Code: (0x011600-0x011800) [Select]
rks
    on white and the picture being overlayed is probably not all white.
    As in draw.pic(), a call to show.pic() is necessary to bring the
    new picture to the foreground screen.

show.pri.screen()
    Show the priority screen, then wait for ENTER or ESC before returning
    to the game.  Generally implemented as a debug action.



------ View actions

load.view(VIEW)
    Load the view whose number is given by the number.

load.view.f(var)
    Load the view whose number is in the var.

discard.view(VI

Code: (0x011A00-0x011C00) [Select]
t.motion(), start.cycling(), normal.cycle(), observe.blocks(),
    observe.horizon(), on.anything(), release.priority(), release.loop(),
    and observe.objects() on the object and sets its direction to 0.

unanimate.all()
    Unanimate all animated objects.  If you're going to draw a second picture
    in a room (using draw.pic() without doing a new.room()) do this first
    to make sure that you don't end up with a number of animated objects
    which you don't want in the new picture.  You'll have to do an
    anima

Code: (0x011E03-0x012000) [Select]

    Erase the object from the screen.  Erased objects do not move or
    interact with drawn objects.

position(OBJECT, NUM, NUM)
    Parameters: object, x coord, y coord.
    Set the position of the object (the lower left corner of its baseline)
    to the (x, y) coords given in the numbers.  x is measured from the right
    edge of the screen, y from the top.  If part of the object will be off
    the screen, if the object is above the horizon and must observe it, or
    if the object's baseline is on a priority lin

Code: (0x014600-0x014800) [Select]
to that corresponding to an object's
    current direction.  A non-moving object (direction = 0) remains in
    its last loop.

set.loop.f(OBJECT, VAR)
    Set the object's loop to that in the var.

fix.loop(OBJECT)
    Fix the object's loop.  It will no longer adjust to the direction
    in which the object is moving.

release.loop(OBJECT)
    Undo a fix.loop().  The object will now face in the direction
    appropriate to its direction.

set.cel(OBJECT, NUM)
    Set the object's cel to that in the number.  Cels

Code: (0x015600-0x015800) [Select]
s is done by
    animate.obj().

end.of.loop(OBJECT, FLAG)
    Reset the flag.  Increment the cel  number at each animation cycle.
    When the last cel of the loop is reached, stop cycling and set the flag.

reverse.cycle(OBJECT)
    Cycle the object from the current cel number to cel 0.  When cel 0
    is reached, start again at the last cel of the current loop.
   
reverse.loop(OBJECT, FLAG)
    Reset the flag.  Decrement the cel number at each animation cycle.
    When    cel 0 is reached, stop cycling and set the fl

Code: (0x017200-0x017400) [Select]
nd background colors for text.  Not all combinations
    will necessarily be supported on all machines.  We will try to
    approximate where we can, but no guarantees.  The colors are:

        0   black
        1   dark blue
        2   dark green
        3   cyan
        4   red
        5   magenta
        6   brown
        7   light grey
        8   dark grey
        9   light blue
        10  light green
        11  light cyan
        12  pink
        13  light magenta
        14  yellow
        15  white

    All combinations will (I believe) be supported on the Atari ST, Amiga,
    and the NEC 9801.
   
    On th

This one is interesting, it contains a small note that the original doesn't on number of screen lines

Code: (0x017600-0x017800) [Select]
  The number is the
    number of figure eights to do.  This will be a no-op on some hardware,
    so don't depend on it.



------ Screen handling

[*  25 lines total

configure.screen(NUM, NUM, NUM)
    Parameters: picture row, input row, status row.
    This call, which should be done as soon as the game starts, sets
    where the various components of the screen are placed.  The first
    number is the CHARACTER row number (starting at zero) for the upper
    left corner of the picture, the second is the row n

Code: (0x017A00-0x017C00) [Select]
ers: string number, message number.
    Copy the message into the string given by the number.

get.string(NUM, MSGNUM, NUM, NUM)
    Parameters: string number, message number, row, column.

    Prints the message as a prompt at the given screen position, then
    allows the user to enter the string for string number NUM.  If the
    row is >24, the message will be printed at the current cursor
    position.

    Since string 0 is the prompt, set the prompt by
        %message    1   "> "
        set.string(0, 1);

    The code to le

Code: (0x017E00-0x018000) [Select]
ilable to all said() tests for the remainder
    of the current logic scan.

get.num(MSGNUM, VAR)
    Prompt the user with the message and get a (purportedly) numeric reply.
    Put the number into var.  If a non-numeric reply is typed, var will
    be 0.



------ Input handling

prevent.input()
    Clear the input line and do not accept input from the user.  Input
    is off at startup.

accept.input()
    Display the input line and accept input from the user.

set.key(NUM, NUM, NUM)
    Parameters: low byte

Code: (0x018600-0x018800) [Select]
        set.key(27, 0, c.pause);            [ESC
        set.key(18, 0, c.rgb.toggle);       [^R
        set.key(16, 0, c.new.prompt);       [^P

        set.key(joy.low.byte, button0, c.doit);
        set.key(joy.low.byte, button1, c.useit);
        set.key(joy.low.byte, button0.dbl, c.lookit);
        set.key(joy.low.byte, button1.dbl, c.status);

    The controller definitions are in 'sysdefs'.  You may map up to
    29 keys.  More than one key may map to a single controller, but
    a single key can't map to more than one controller.

****** Note that the key

Space Quest II v2.0A int. 2.912 360K disk 1

Code: (0x012A00-0x012C00) [Select]
he result in the var.

div.v(VAR, VAR)
    Parameters: destination, divisor
    No alternate way to write it in the compiler.
    Divide the first var by the second, leaving the quotient in the
    first var.

lindirectv(VAR, VAR)
    [Written as var1 @= var2]
    Left indirect assignment of vars.  Takes the value in var1 and uses it
    as the var number in which to store the value of var2.  In essence,
    var1 is a 'pointer' to the var for the assignment.  Thus,

        %var        var1        39
        %var        var2        56
        var1 = 27;
   

Code: (0x013600-0x013800) [Select]
rks
    on white and the picture being overlayed is probably not all white.
    As in draw.pic(), a call to show.pic() is necessary to bring the
    new picture to the foreground screen.

show.pri.screen()
    Show the priority screen, then wait for ENTER or ESC before returning
    to the game.  Generally implemented as a debug action.



------ View actions

load.view(VIEW)
    Load the view whose number is given by the number.

load.view.f(var)
    Load the view whose number is in the var.

discard.view(VI

Code: (0x013A00-0x013C00) [Select]
t.motion(), start.cycling(), normal.cycle(), observe.blocks(),
    observe.horizon(), on.anything(), release.priority(), release.loop(),
    and observe.objects() on the object and sets its direction to 0.

unanimate.all()
    Unanimate all animated objects.  If you're going to draw a second picture
    in a room (using draw.pic() without doing a new.room()) do this first
    to make sure that you don't end up with a number of animated objects
    which you don't want in the new picture.  You'll have to do an
    anima

Code: (0x013E05-0x014000) [Select]
Erase the object from the screen.  Erased objects do not move or
    interact with drawn objects.

position(OBJECT, NUM, NUM)
    Parameters: object, x coord, y coord.
    Set the position of the object (the lower left corner of its baseline)
    to the (x, y) coords given in the numbers.  x is measured from the right
    edge of the screen, y from the top.  If part of the object will be off
    the screen, if the object is above the horizon and must observe it, or
    if the object's baseline is on a priority lin

Code: (0x014601-0x014800) [Select]
to that corresponding to an object's
    current direction.  A non-moving object (direction = 0) remains in
    its last loop.

set.loop.f(OBJECT, VAR)
    Set the object's loop to that in the var.

fix.loop(OBJECT)
    Fix the object's loop.  It will no longer adjust to the direction
    in which the object is moving.

release.loop(OBJECT)
    Undo a fix.loop().  The object will now face in the direction
    appropriate to its direction.

set.cel(OBJECT, NUM)
    Set the object's cel to that in the number.  Cels

Code: (0x015601-0x015800) [Select]
is done by
    animate.obj().

end.of.loop(OBJECT, FLAG)
    Reset the flag.  Increment the cel  number at each animation cycle.
    When the last cel of the loop is reached, stop cycling and set the flag.

reverse.cycle(OBJECT)
    Cycle the object from the current cel number to cel 0.  When cel 0
    is reached, start again at the last cel of the current loop.
   
reverse.loop(OBJECT, FLAG)
    Reset the flag.  Decrement the cel number at each animation cycle.
    When    cel 0 is reached, stop cycling and set the fl

Code: (0x015A01-0x015C00) [Select]
to the number in var.  Reset to 1 by new.room().

step.time(OBJECT, VAR)
    Set the step frequency of the object (the number of animation cycles
    betweeen moves of the object) to the number in var.  Reset to 1 by
    new.room().

move.obj(OBJECT, NUM, NUM, NUM, FLAG)
    Parameters: object, x coord, y coord, step size, flag.
    Reset the flag, then start moving the object to the given (x, y)
    position.  Change the appropriate coordinates by the step size at
    each animation  interval.  If the step size par

Code: (0x015DFF-0x016000) [Select]
    s current
    stepsize.  When the distance to the object is less than the greater
    of the object's stepsize and the specified distance for collision,
    stop the object's motion and set the flag.

wander(OBJECT)
    Start the object wandering in random directions for random distances.

normal.motion(OBJECT)
    Undoes a previous follow.ego(), move.obj(), or wander() before it is
    completed.

set.dir(OBJECT, VAR)
    Set the direction of the object to that in the var.  Note that this
    will not work for ego -

Code: (0x016200-0x016400) [Select]
y one block at a time may be
    set.        * minimum is 3x3
****** How about a number of blocks?

unblock()
    Remove the block set by block().



------ Inventory object actions

get(OBJECT)
    Add the object to ego's inventory.

getf(VAR)
    Add the object whose number is in var to ego's inventory.  Generally
    used for debugging, not in the game.

drop(OBJECT)
    Remove the object from ego's inventory.  The object is now gone forever.

put(OBJECT, VAR)
    Put the number in var into the room number fi

Online AGKorson

Re: Official AGI Documentation
« Reply #57 on: Today at 01:46:55 AM »
Nice find!


SMF 2.0.19 | SMF © 2021, Simple Machines
Simple Audio Video Embedder

Page created in 0.059 seconds with 22 queries.