TADS vs. AGT

For a mid-level game programmer with mid-level ambitions who does enjoy altering source code to make it more to his liking (e.g. in-game automatic text color changes) what are the advantages to TADS over AGT 1.7 Big?

I’ve played some of the first Unnkulia game and so far have seen nothing AGT cannot do. Is it just better organized, or are there actual practical advantages for an intermediate game?

I will admit AGT has some quirks, such as one-item-kill-monster-cannot-leave-room (from its GAGS incarnation), but so far even without knowing too much about PASCAL I am managing to overcome them- in one test game THREE items can kill a monster and yes you can leave the room- but each time there is an increased chance it will break its chain and kill you when you try to leave.

Heck, I’ve gotten games of chance like slot machine, roulette, dice, even a version of Blackjack, running.

But people who like TADS better must have practical reasons- what are they? Can TADS change text color automatically in-game already for example?

If they are really good reasons then how does one start programming on TADS so I can try it?

Thanks!

I don’t know the inner workings of either system the best and others here will be able to address your technical concerns more directly, but for my two cents, the major benefit for TADS 3 over AGT is that (at least around these parts) there’s not an AGT developer community, while there is a pretty decent TADS 3 community.

If AGT is Pascal-like, then the syntax here will be somewhat similar, if perhaps a little heavier on the declarative side of things.

1 Like

Uh…based on what you’ve written so far, it seems like AGT has a lot of really weird and arbitrary limitations that must be extensively worked around, in order to expand its full potential.

I don’t know much about AGT, so please forgive me if I’m not quite understanding you correctly.

While I’m not sure what you mean by “automatically”, text color changes are absolutely a thing, and I’ve seen people animate/automate different style elements in a TADS game before.

OVERVIEW
Basically, TADS is a programming language that is extremely generalized, similar to Java or JavaScript, but it includes a lot of shorthand and parsing conventions that make it way easier to code IF games, or anything else that uses a lot of text.

At it’s core, though, it’s just another programming language, and could technically handle business applications, if needed, but its two main libraries specialize it for IF. Those libraries are Adv3 and Adv3Lite. (Honestly, I recommend the latter; it’s thorough where it needs to be, but allows for plenty of room for customization, and is overall more streamlined and faster to learn.)

Since those are both libraries, though, you can change and re-program every single facet of it, or make your own library.

You can do anything with TADS, and there’s very little bodging or work-around required. The path from idea to code is pretty direct.

I once made an environment that is simulated with 3D cellular automata, and the player swims through it with a ship to hunt down traces of their enemy. You could also do vehicle combat, with full component simulation and everything. Obviously, you can also do your standard puzzle-oriented person-in-a-room IF game, which both libraries are primed for.

It even lets you do multiplayer (though I’ve never attempted this for myself).

I could probably crank out a full turn-based combat system in the style of Final Fantasy X in two or three days of crunch, without even planning it first. These limitations wouldn’t be a thing, unless I specifically wanted them to be.

TADS, like most programming languages, gives you everything to the horizon for possibilities. Honestly, the difficulty you’re more likely to have is trying to narrow it down to what you specifically want to achieve for your own game, instead of trying to expand its possibilities.

You can learn the Adv3 library here.

And you can learn the Adv3Lite library here.
(I don’t know why this is hosted on faroutscience.com)

As far as how to get started, this entirely depends on the operating system you use. Windows users can simply download the TADS 3 workbench with no issue. Linux users need to use VSCode with a few TADS 3 extensions. Mac users: I have no idea.

If you have any other questions on TADS 3 Adv3 or Adv3Lite, plenty of people on the forum would be happy to help!

Happy coding!

4 Likes

AGT is pretty much a dead authoring system now. IFDB doesn’t have any AGT entries since 2003. I’m sure you could use it, but it seems like there isn’t even a retrocomputing community using AGT like there is for ZIL.

In practical terms, there’s less interpreter support for AGT than TADS, and most notably no online play. (Well, not completely true. archive.org has it working somehow with dosbox: The Adventures of Peter Patzer, Who Sought Masterhood and Returned Not Quite the Same : John C. Knudsen : Free Download, Borrow, and Streaming : Internet Archive)

3 Likes

Adding to the above, I’d say it also really depends on what your goals are. A lot of people on this forum have the goal of ‘make a game that can do well in large competitions’ (including me), so the advice will generally lean towards that goal.

But what is your goal? Are you writing text adventures because it’s fun to poke around in the code and see what technical feats you want to accomplish? Are you doing it for nostalgia? Or do you want other people to see your game and think ‘wow, that’s great!’

If you want other people to comment favorably on your games, the best you could do is to find the people whose approval you seek, see what they currently like, and make something that has the features they like in it. That will probably lead to using a language like TADS, Inform, ZIL or Dialog, since they all have features that are popular in current games (including things like ‘scenes’, disambiguation, recognition of adjectives/verbs, systematic ways of creating object attributes, pronouns, smooth conversation, web play). If you have a more graphical bent, Adventuron can do some neat graphical things and has a pretty strong engine.

Or do you just want to have fun tinkering with things? If you don’t care about audience approval, and just want to make something you personally have fun with, then AGT definitely might be the best thing for you.

If you want something in the middle, I’ve found it really rewarding to take one of the web-play friendly languages and ‘hack’ the html to do fun things (like connecting Inform to a 2d adventure game, with typing N/E/S/W mapping to moving the character around). Or trying to make Inform 7 look like an old Apple II console. You might even write a library for others to use, which would be strongly appreciated.

7 Likes

You might be the first person I’ve come across that’s played some of the Unnkulians! Those were the games that got me into text adventures as a kid. Hope you have fun with TADS!

2 Likes

The comment about “what you are aiming for” pretty much hits the nail on the head for the entire Interactive Fiction effort. If all you want to do is run off a quick, ultra-simple game then “TextWorld” (White Divine’s version) would be good enough, and quite frankly even it is capable of doing more than one might think.

In my case, and at my age, AGT probably fits the bill. It is easy to pick up on, and even though I do not know Turbo PASCAL I’ve already made a number of alterations which are good for what I’m working on. They include:

AGT can make color changes in-program. If you have a black screen with green text then run into a skeleton that keyboard-drawn image can be grey- with say red text describing it and what it does; yours can be green. In a forest the text can be green, on the rocky mountainside grey, inside the mountain in volcanic caverns red. Colors can be horizontally layered. Any such color changes can be temporary or permanent. “SanctuaryRPG Black” inspired that. Note that the player does NOT have to do this, AGT itself does.

A new verb, SITUATE, is hardwired in. This costs two extra turns to use, and is only to be used with the preposition ON. It is for specific instances, like puzzles.

AGT can now not only check to see if something is ON or OFF, but it can do so itself. There is no need to switch nouns with lit/unlit lanterns, for example.

Creatures can act as light sources. They are neither carried nor of a room, so this expands game possibilities considerably- a pesky flame elemental might make sneaking away at night rather difficult, and increase enemy chances of hitting you.

Worn items can act as light sources. If you wear a tunic defined as a light source and light it AGT says it’s lit, but normally this has no effect on anything. Well, now it does. Thus a worn crown of illumination can in fact do so.

AGT asks which item you mean if you want to do something with one of two or more nouns of the same kind (like GEM). If you enter a dark room and try to drop a RED GEM while there was a GREEN GEM in there you will get that message even though you shouldn’t know about the GREEN GEM. Well, no longer.

AGT can now put something ON, BEHIND, BESIDE, UNDER…normally only you can. But now, if you SEARCH a bookcase you can be told
THERE IS A BRASS KEY HERE. (behind the bookcase)
This also allows same-nouns to actually be placed ON, UNDER, etc. each other.

Numerous text changes to cover more bases in a generic way. Melody Grandy in her “Zim Greenleaf’s Laboratory” (play it!) points out that even if something is mentioned in a room description the game may disavow knowledge of it- my messages imply that it may be there but is of no use to you.

Along the way I also figured out how to give AGT the ability to remove or give an item light source ability. My next goal is to specify prepositions- right now if you want to PUT LUNCHBOX UNDER BRASS BLOCK and it is a five-ton block on a perfectly smooth marble floor the best you can do is a generic “The best you can do is put the lunchbox ON the block. So there it is. Nothing happens.” (or does if you want). The new commands would bar certain actions- you can put that lunchbox ON, BESIDE, NEAR, etc. the block but NOT under or behind.

Serendipity abounds with AGT. The very same changes I’ve made can lock or unlock doors so in fact just one is needed, among other features. This frees up nouns for even larger games.

The problem is this- with my previous compiler you couldn’t even compile the unaltered PA3 (for COMPILE.EXE) files! Thanks to the TPC.EXE compiler and associated files (that took some doing) now all of the original meta-commands plus TEN more can be compiled in the COMMAND.PA3 file, but no more. Absolutely nothing I’ve tried with switches, memory numbers, even using DOSBox-X, has had any effect whatsoever with the problem. After ten new meta-commands for every new one you must remove another. If anyone can help me with this it would be appreciated- if going from the first compiler to the second allows all+ten commands then logically there might be a way for even more. The error is ERROR 71 STACK OVERFLOW in the COMMAND.PA3 file.

It is plain to see that AGT is capable of creating complex, sophisticated, and enjoyable games. It’s overall ability and learning curve is just right for me, and with some more practice the end results would be quite impressive indeed. As mentioned above I know how to have monster encounters without AGT imitations and that didn’t even involve source code alterations- and yes there can be hit points, special abilities, weapon enhancements, etc. There can be various games of chance, including a version of Blackjack, roulette, slot machines, etc.

Joey Cramsey said:

“I once made an environment that is simulated with 3D cellular automata, and the player swims through it with a ship to hunt down traces of their enemy. You could also do vehicle combat, with full component simulation and everything.”

Tell me more about that- and can you post any images of that? It sounds very impressive, very impressive. If you mean Rubik’s Cube-style environment in a text game I’ve also done that with TextWorld, although you are limited to only two layers. An AGT maze of mine is as if you ARE trapped in a sort of Rubik’s Cube.
But from what you say it sounds as if you accomplished something more than that. Do you use keyboard-created images too?

AGT modifications allow:

(I cannot upload images- just get that miserable spinning circle)

Let’s try this:

https://intfiction.org/uploads/default/original/2X/a/aed7870a0a67a82f0a54b844c4ff020122c132d7.png

https://intfiction.org/uploads/default/original/2X/2/24e6b17365eab6bcfabe917d0885c6ff632761f0.png

This sounds like AGT recently changed. Was there a major update recently?

No, I did it.

1 Like

So what advantages does AGT have over TADS or ZIL or Inform 6?

1 Like

It wasn’t anything visual; it was entirely communicated to the player through text descriptions.

Note on cellular automata here, as this was my primary inspiration.

The premise of the game was that you were traveling through a surreal volume of living tides in a submarine-like combat vehicle, hunting down another intruder in a similar vehicle. I had the tides divided into multiple layers: 36x36, 36x36 (again, but with different propagation rules), 12x12, 3x3, and a layer with a single cell. Vertically, the cells in each layer connected in various ways, but the major idea was with every passing turn, every cell would exchange signals with surrounding cells. Different events and agents would introduce new signals into a cell at a certain “volume”, and as signals propagated, they would decay.

Signals propagated and decayed differently based on multiple factors, including which layer the signal was in, what previous signals might have “primed” the cell to hold onto the next signal for longer, signal type, competing signals in surrounding cells, etc. One trend the player could rely on was that the smaller layers propagated a lot faster, but the signals decayed really quickly, too. The effect was that you could see your opponent in real-time, but the opponent seemed to surround you (when they were, in fact, quite far away). Meanwhile, the “deepest” layer almost failed to propagate at all, but would hold onto signals for a very long time, leaving a lingering “trail” in the layers above, which would propagate what was found below.

Certain signals, when the volume built too great (either through intense induction or constructive waves from surrounding cells) would spawn a new predator agent, which would hunt both the player and the player’s opponent. Other signals might cause cells to remember the presence of your opponent for longer, or slow their method of travel (as travel was accomplished with cooperation from the surrounding cells).

Effectively, it was designed to be a cat-and-mouse game with frequent role reversals, where each opponent would habitually leave a trail as they traveled between cells, and could even coerce cells or leave false trails.

As the player, you would need to inspect the displays and instruments inside of your vehicle, and try to make sense of the readings, put clues together, and operate the vehicle using the control panels.

The project ran into a bit of an issue, as I was abusing the garbage collection of TADS 3 with the BigNumber class too much, which meant that a passing turn took quite a lot of computation time to complete. Since then, I think I’ve found my solutions while working on other projects, so I’d be interesting in trying this again in the future. Otherwise, I did get the propagation of signals working; I was mostly working on getting a working cockpit for the player to use.

All in all, it did work; just needed to have faster execution and more efficient usage of RAM. I’ve learned my lessons.

2 Likes

That sounds cool. I’ve thought about doing vehicular combat in TADS, space combat in particular, but I suck at math and my brain doesn’t work well enough to figure out how to do it.

1 Like

The main theme of my TADS projects is usually centered around operation of a vehicle, one way or another.

It’s certainly challenging, but I feel like things are often confusing or overwhelming at first, and then a long trail of failures finally gives us enough pieces to succeed with.

It’s a decision of “what am I interested in, vs how much time do I want to invest”.

As someone with severe ADHD (on top of many other mental illnesses and disorders), I’m surprised I can function at all, some days. I don’t have many successes that I can point to, but sometimes the trail of failures is just longer for certain people. I’m starting to gather enough pieces, though.

If the Portia spider can chip away at major intellectual challenges and problem-solving obstacles, then so can I.

You don’t have to immediately pick the biggest challenge in the room, of course, but I think you can gradually work towards it, mostly between smaller goals.

I run tests in node.js, Wolfram Alpha, and Desmos, if I ever need to take on a math issue in particular.

2 Likes

AGT Big allows a maximum of about 300 spaces, so I don’t see anything like your project happening, assuming I’m picturing this properly.

I’ve looked over TADS3 a bit, and it reminds me a little of website design, along with Ruby.

If there’s an advantage with AGT it’s that it is accessible. I’m going to next work on OPEN and CLOSE for things by meta-command.

1 Like

AGT is just too primitive IMHO. Also, I don’t feel like using DOSBox as my development environment.

1 Like

Fun fact, actually!! The whole game was made of a single room, which was the cockpit of the vehicle!

The entire volume of cells that ran the game was actually stored as a data structure in an unseen object, and I just polled the cells surrounding the player vehicle’s position to figure out how the monitors, instruments, and other devices in the cockpit would react.

The reason why I used this method is because each cell is really big, and could take the vehicle multiple turns to cross, especially if the signals made the surrounding volume more resistant to movement. For this reason, I interpolated the samples of the current cell and surrounding cells, according to how close to the cell edges the player was, which would give the illusion of a continuous environment.

Another reason why I used this method is because there was no way to physically look into the surrounding volume, for story reasons. You wouldn’t spot your opponent outside the windshield or anything; all you could see were more devices, controls, and panels. It was meant to be like operating a submarine without a periscope.

The only way you would “see” your opponent is if the readings you got from your devices suggested that the enemy was right beside you, but recognizing this was entirely up to the interpretation abilities of the player. You had a limited number of attempts to guess if the opponent was around or not, and getting the wrong answer too many times would result in a failure state.

So it didn’t matter if I simulated the volume as a room or not; the player would not be able to “look around” anyways. So I decided to keep the memory footprint lower, and represent the cell space as a minimalist data structure.

Right?? I usually describe it as JavaScript trying really hard to be C++, with neat HTML-style string definitions.

3 Likes

I have actually assesed vehicular combat in IF engine, and the outcome was, obviously, that depends on the complexity of the vehicles involved & that the rules governing combat is more “wargame” than “simulation”.

For sure, even Inform 7 and TADS can’t handle the fighting vehicles I’m more expert (that is, those wooden, then steel leviathans prowling the waters…) but for simpler vehicles, e.g. tank or aircraft with wargame-style rules, perhaps is more feasible, but no large-scale battles.

OTOH, in a scenario aboard a doomed warship, taking hits from an enemy, a major weakness of AGT (static room connections) can be actually turned, judo-style, into a strength, albeit is very easy to reach high level in the Zarfian cruelty scale.

Best regards from Italy,
dott. Piergiorgio.

1 Like

It’s so accessible. Got a text editor and any DOS emulator? You’re ready to go. Even I’ve been able to make some significant alterations to the source code and plan on even more if I can get past that ERROR 71 STACK OVERFLOW problem even TPC.EXE is having now.

In a way its “ramshackle style” is a strength because you can do so much putting those meta-commands together in so many ways. Flexibility.

I think I understand partially that simulation game- you are not moving from room to room. In AGT it would be possible using variables, counters, and simple mathematical functions to stay in one “room” but have different replies/events. That could be useful if I want someone to fly or swim in a 3D environment yet conserve rooms. A simple example is you “fly” 20 “clicks” forward, 3 “clicks” up, and end up in a room on a floating fortress- in reality only two rooms were used. Since counters can count pretty high and there are 255 this would work. I would expect six would be needed assuming you start from a point and can go in any direction from there- say you start on a mountaintop or from a blimp like Indiana Jones did.

In fact one modification I’m going to try is to adjust room/noun/creature ranges. I will NEVER use 200 creatures so maybe I can leave 50 creatures (even that much is unlikely) and divide up the 150 among rooms and nouns.

I’m learning how to do this…

Actually, AGT can have dynamic room connections. Using variables and meta-commands you can have it so if A then an exit leads to Room 10 but if B then Room 20. You can interconnect it so if A then another exit leads to Room 15 but if B it leads to 25, both using one variable. I use this for “random teleportation” or “it’s night so now it leads to…” situations.

I think the way meta-commands are set up there is quite a bit of flexibility. It hasn’t been too difficult even for me to alter source code so maybe that preposition-specific meta-command is possible, except for the Error 71 Stack Overflow error. But even now I have AGT doing things it could not do before- put something ON, UNDER, OVER, WITH, BEHIND something; creatures as light sources, worn items as light sources, and more. I do not really know any Turbo PASCAL.