Am I really the only person who doesn't get I7

I don’t get your problem. In I7 everything is either a subclass of Thing or Value. It doesn’t meant anything. You know a person is a subclass of Thing right? Why isn’t that a problem?

Dannii: I believe I said that I was going to accept the implementation of the snippet as written. So I did not take exception to the derivation of either kind. I pointed out that I didn’t think that clan derived from value fit in with my real-world notion of a clan.

If a kind were only a mechanical framework on which we hang things, I suppose I would agree with you. Apparently, we would only need a single kind. I believe a kind carries with it the notion of a domain over which it exercises some control. When a kind is created the domain and control are chosen so that they “make sense”. Taking the cube root of a value is something that can make sense. Taking the cube root of my mother is another thing entirely.

Further, I believe kind exhibits a behavior called inheritance. When we have a specific kind, say dog, it has its own domain. However, I know that dog is a subtype of mammal. This relieves me of having to state that dogs are warm blooded. Since mammals are animals, I do not have to explicitly state that dogs can move.

In so far as the choice of kinds is concerned, I believe it is an arbitrary choice. But it is one guided by an overarching sense of purpose. Many of us are aware of this incompletely stated but purposeful hierarchy:

Kind: Nihil
[list] Kind: Light(day) methods to collect light into the sun, moon and stars
Kind: Darkness(night)
Kind: Firmament(skies above) (methods to mark the passage of days, seasons, and years)
[list] Kind: Birds(method to be fruitful and multiply)
Kind: Waters below
Kind: Seas
[list] Kind: Living creatures (method to be fruitful and multiply)
Kind:Dry Land
Kind: Plants
[list] Kind: Grass
Kind: Fruit Bearing Trees
Kind: Living creatures
Kind: Wild beasts
Kind: Reptiles
Kind: Livestock
Kind: Man(methods to be fruitful and multiply, fill the earth, subdue the earth)

[/list:u]
[/list:u]
[/list:u]
[/list:u]

Since we are creating a game-world, in our own way I feel we need to be as purposeful.

Are you familiar with the WordNet database? I’ve had idle thoughts about using it to implement some kind of AI model of the universe.

wordnet.princeton.edu/

The danger, however, is that when you make the world model too open-ended, you lose the chance to tell your own story. The storytelling gets left up to the player, and what you are providing ends up being more of a simulation. I love the opportunity that I7 provides to simplify the PC’s view of the world to the barest minimum. If that means a complex social grouping is defined as a “kind of value,” that’s fine with me.

One of the first things I ever learned about storytelling was that choosing what to leave out is at least as important as what to include.

Let’s face it - simulation is limited in its worldview, too. Especially game sims, where elements are chosen and tweaked and smoothed over and simplified and sacrificed for gameplay, but even “real” simulations are going to be doing something similar. You’re always going to have to choose a frame of reference.

I think there’s something to be said for having a language that feels intuitive to the user, and I wonder if that’s what we’re discussing - do the ways that the language operates, and the words it uses, feel natural and make programming flow? I actually think I7 is pretty good at that - it’s not perfect, but there’s only a few things I haven’t been able to get used to. (I still have to go back and change lots of things to “enclosed by” rather than “in”. I have a sticky on my monitor, and it’s still not good enough.)

I feel like there are a few issues getting mixed up here and it isn’t helping. I think it’s been mentioned before that I7 is more of a set of domain languages than a single language, like C for example. In I7 the syntax for defining a room and exits is quite a different matter than the syntax for lists and tables, and for a good reason. Second, if you always map the game objects to the code objects, like the person in the game is one instance of a person object in the program, I think you limit your games and programming to an unnecessary degree (though I’ll grant this may make the programming simpler).

Finally, IMO the player couldn’t care less about what programming paradigm you write the game in, and this is crucial – because as the author, you are a player, the first player, and to get too deep into the programming structure will skew your perspective in that regard.

Well put. If I had to approach Inform7 as say, C/C++, Ada or any of the other programming languages with which I’m familiar, my writing would take on the aspect of function, not gestalt. I would tend to think more about forming proper procedures and less about the “fuzzier” end result. Programming in I7 has a wonderful sense of being “relaxed” … and it’s just plain fun IMO.

Cheers.

As a somewhat reformed procedural / object-oriented programmer with some event-driven programming for GUIs, I think Inform7 has a lot of good things going for it in the declarative style, tools, extensions etc.

But the hard part for me is learning to think in a manner that fits with the declarative / rule based style. I suspect that some of the code I’m writing is just not the best way to do it in Inform. Sort of like how a C programmer might program in Lisp or vice verse.

Aaron’s book is excellent, but it would be great if there were more comprehensive reference materials. Still, I am writing my first game, albeit slowly. But I have no doubt at some point I’ll look back at this code and laugh.

–Zack

This has always been the case for me, in any language. Even in LambaMOO (which is pretty much a classical single-inheritance OO language), I now have probably a dozen stylistically distinct historical layers of code of things I have built over the last 7-9 years for different purposes, and they all interlock so I am always facing (and laughing at) several different ‘eras’ of development of my own MOO coding technique in any extensive building or debugging session. I can’t believe I was writing loops that way 4 years ago, and 6 years ago I was apparently afraid of trapping errors and preferred to carefully pre-check the validity of all variables instead. 2 years ago I had no idea how much of a CPU hit some of my simplest code was imposing on me, and etc. etc. I love it when these self-observations happen; it’s how I know I’ve learned stuff.

Paul.