Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags
(1 edit) (+1)

Adventuron's solution prints the get and drop response, but it doesn't seem to refresh the screen - at least not in my game. If you want something a bit more polished, try this:

booleans {
   is_refresh : boolean "false";
}
on_command {
   : match "get -" {
      : print {(camel(original_verb()) + " what?")}
      : done;
   }
   : match "get *" {
      : if (is_beside (s1())) {
         : get quiet = "true";
         : set_string var = "message" text = "Taken.";
         : gosub "refresh";
      }
   }
   : match "drop -" {
      : print {(camel(original_verb()) + " what?")}
      : done;
   }
   : match "drop *" {
      : if (is_carried (s1()) && !is_worn (s1())) {
         : drop quiet = "true";
         : set_string var = "message" text = "Dropped.";
         : gosub "refresh";
      }
   }
}
on_describe {
   : if (is_refresh) {
      : set_false "is_refresh";
      : print {(message)};
   }
}
subroutines {
   refresh : subroutine {
      : set_true "is_refresh";
      : redescribe;
   }
}

The idea is that rather than printing a message, you put the message in a string and call a subroutine. The subroutine sets a flag and does a redescribe. You can't do anything after redescribe, so you test the flag in on_describe. If the flag is set, you clear it (for next time around) and print the string. Works like a charm.