I note that some IF engines do not have true objects. Some have work-arounds, but what languages truly have objects/things? Inform & Dialog are two, to start with.
TADS3 is object-oriented…
Can you explain what counts as a true object for your purposes?
Are you asking about object-oriented programming practices, or objects in a world model?
If we’re talking about which IF systems are object-oriented ones, I believe that Inform 6, Inform 7, TADS 2, TADS 3, Hugo, and Dialog all qualify, while ALAN, ADRIFT, and Quest do not, although I haven’t seen any Quest 5 code to verify my opinion on that one, but Quest 4 was, shall we say, rustic. I have no idea what Adventuron does… yet.
(…or between a language like SmallTalk where everything is an Object including “Primitive” values like integers & booleans, and a language like Java where “Primitive” values like integers & booleans aren’t objects (a). )
Exacting what Object Oriented Programming features are you using to distinguish a “true object” from an object that isn’t “true”.
eg. Interfaces; Method overloading; etc?
(a) Yes, I know Java includes Object based variants of the int & boolean data types, but those aren’t the “Primitive” data types are they!
not talking about language objects but rather IF objects (or things). A small brass hook is an object/thing.
In that case, don’t all parser engines have objects? Which ones don’t?
Neither have I, and I’ve been using it for years!
In Inform 7, you define a thing, and the inventory is automatic. If your def allows, you can take, drop, or wear the thing, and the inventory is auto updated. >>> I >>> You are carrying a cloak (being worn). Not all languages have what I call “true” objects and things. In other languages, you simulate these items often by using variables, and custom write your own inventory routine. Ones that don’t (please correct me if I am wrong) are Ink, Inklewriter, Squiffy, and ChoiceScript. The shorter list probably will be who has true objects/things with built in inventory.
I suspect you’ll find that practically all parser-based engines support picking up and dropping things right out of the box, and practically no choice-based engines do. Parser IF has a long history of being based around object manipulations like this, while choice IF generally hasn’t. (There are plenty of choice games that implement an inventory, but it’s not considered a standard thing.)
That sounds to me like the difference between parser engines and choice-based engines. The former have real objects, and the latter don’t? But I’m no expert!
Every retro adventure system I’ve ever used (including modern takes on retro systems like Adventuron) have had objects that fit that definition then, with the simple built in properties such as “wearable”. Some have more definable properties than others, such as weight, whether they’re containers etc. Still not sure about the whole “truly have objects/things” part of the initial question.
not sure about whole “truly have objects/things” part of the initial question. in choice based and hyper-link type games, one simulates a thing by using variables. There is no built in inventory in Twine for example. You would need to custom write it (or borrow someone else’s). In writing my own engine, I can easily simulate things with variables but having defined objects or things and attaching verbs and inventory to them is not trivial.
It must be fairly trivial, though, surely? Given how even the most basic of BASIC systems have defined objects in them. But I guess some of the difficulty might be that you’re trying to fuse a Twine style system with a parser-style system?
In many of the old retro text adventure engines, every aspect of the games are defined in tables of data. So objects are just entries in the table and their properties are basically just variables that denote the properties in those tables; the object number, a noun number for the object, an adjective number for the object, a location for the position of the object, the object weight, a true/false as to whether it is wearable.
Right - I guess there’s some metaphysical point between “this isn’t really an object, just a bunch of variables dummied up on an ad him basis to fake one” and “the bunch of variables is now big enough, and their behavior sufficiently consistent, that there’s a real object system” but beyond noting that pretty much all existing parser systems (plus Gruescript and no other choice systems I don’t think?) are on one side of the line it’s hard to suss out where exactly it sits.
the point is the automatic verbs and inventory associations leaves (a lot) less for the author to worry about. This comes into play more when you are designing an engine as I am trying.
So based on answers, parsers are better at “things” and inventory than choice based. Is anyone aware of
a hybrid between the two?
There are also various Inform extensions that can allow it to operate in a choice-based mode- Hybrid Choices by AW Freyr is I think the most popular - and many many Twine games with parser-like world models but I’m not sure whether any have been systematized and made public.
Quest 5 and QuestJS both use objects. I do not know about Quest 4, but it has not been supported for well over 10 years.
Adventuron (which is parser-based) has a choice system and also an (experimental) gamebook mode. See the “cookbook” for an example of how it is implemented… Adventuron - Cookbook
In terms of what you want to do, I would imagine it would be easier to bake in an inventory/object system (and other parser-related systems) from the start and allow your choice mode to use that, than try and build parser-based systems onto a choice mode framework.
(Just thinking of existing engines…, it is pretty easy to code a choice-based game in a parser-based system… but not easy to code a parser-based game in a choice-based engine; something that your original thread seemed to indicate was the rationale behind wanting to create a new “retro-style” adventure system.)