ConSpace Usability

Still no daylight on my local compilation problem, but works fine with chopped up source files. Wanted to document some usability fixes I needed to make. I was primarily engaging to take advantage of Enterable ComplexContainers (ECContainer in the module’s parlance). I noticed two behaviors that seemed slightly off:

  1. When attempting to get in/on/under/behind anything forbidden, the error message was You cannot stand {in/on/behind/under} that. Even for >SIT BEHIND, >LIE UNDER etc The appropriate sit/lie error messages are provisioned in the code.

  2. When attempting to >WALK OVER TO SOMEOBJ in a room without a defined connectionGroup, you got the standard The someobj is too far away. error message. Even though you are in the same room with SOMEOBJ. (Note, without a true ConSpace implementation, >WALK OVER TO doesn’t do much, but according to my sensibilities it shouldn’t FAIL with deceptive message.)

Both issues I traced to the new verifyStandClose method in ConSpace.t Locally hacked fixes below:

  verifyStandClose(pos, post)
  {
    local locProp = whichLocProp(pos);
    if(self.(locProp) == nil) {
    // (1) Modified to get sit/stand/lie messaging correct - JJMcC
    //
      //illogical(&cannotStandCloseMsg, pos);  // original code
      switch(post) {
          case sitting:
            illogical(&cannotSitCloseMsg, pos);
            break;
          case lying:
            illogical(&cannotLieCloseMsg, pos);
            break;
          default:
            illogical(&cannotStandCloseMsg, pos);
            break;
      }
    }

    if(gActor.isIn(self.(locProp))
       && !gActor.roomLocation.ofKind(NestedRoom)
       && gActor.posture == post)
      illogicalAlready(&actorPostureThereMsg, self, pos);

   /* Don't allow this kind of travel to occur unless
    * the object is within the same connectionGroup
    * as the actor, and autoApproach is allowed (true)
    * for this object, unless the actor is in one of the
    * locations specified in my extraApproachRooms list.
    */
    /*  Also allow if in same room!  JJMcC */

   if (((gActor.CSGetOutermostRoom.connectionGroup == nil
       || !inSameConnectionGroup(gActor)
          || !autoApproach)
       && extraApproachRooms.indexOf(gActor.CSGetOutermostRoom) == nil)
   // (2) Needed to add test for same room, as otherwise fails here without
   //  defined connectionGroup! - JJMcC
        && (!gActor.isIn(self.(locProp))))
     illogical(&tooDistantMsg, self);
  }

Other than these glitches, ECContainers do pretty much exactly what I wanted, and even without a true ConSpace implementation, the new verbs are nicely flexible. Think I still prefer Open Door Patterns as lighter to customize than ConSpace’s SpaceConnectorDoor. Though this could just be sunk cost fallacy.

1 Like