Thanks for giving adv3Lite a go and sharing your experiences.
Concerning the matters about which you requested help:
(a) There’s no pcReferralPerson property or FirstPerson macro in adv3Lite. Instead you need to set the person property of your PC object to 1 (meaning first person) and its vocab property to ‘I’, something like:
+ me: Thing 'I'
isFixed = true
proper = true
ownsContents = true
person = 1
contType = Carrier
;
(b) asDobjFor() should work in adv3Lite much as it does in adv3, so the problem is likely to lie elsewhere. Neither WakeUp nor Shake is defined as an action in the adv3Lite library, so if they’re not defined in your game code that could be the problem. Note also that action definitions, especially VerbRules, aren’t quite the same in adv3Lite as they are in adv3.
© I’m not entirely sure I fully understand the problem you’re having with ShuffledEventList, since this should work exactly the same in adv3Lite as it does in adv3 (as I recall I simply copied the code straight from the adv3 library). I can see one problem with the code sample you give, namely that it seems to rely on a non-existent template for ShuffledEventList (non-existent in adv3Lite, at any rate). In particular, you need to specify explicitly that you’re defining
the eventList property, like so:
showMSG : ShuffledEventList {
eventList = [
'The iguana thrash{s/ed} her tail! ',
'The iguana bobbed her head up and down! ',
'The iguana moved faster than I thought any other organism ever could.
All the way to the other side of the room. ',
'The iguana chirped rudely. '
]}
Another problem you’ll have with the above code in adv3Lite is that ‘{s/ed}’ won’t work as a message parameter substitution. I suspect you could just write:
'The iguana thrashed her tail! '
Since none of your other messages seem to have any mechanism for changing tense. (If you do need a message that changes tense, I can explain how to do it, but since I suspect you don’t need it here I shan’t clutter this reply with an explanation).
I confess to being a bit mystified by your comment about not minding moving this code into check, since on the face of it, it looks like it belongs in action() (Your messages seem to be reporting the outcome of an action, not reasons why the action can’t go ahead).
(d) You can use DMsg to display a message at the action stage, but it’s almost certainly overkill in game code. DMsg is really only needed in library code (or in a library extension) to allow other users to customize default messages. In game code it’s simpler and more direct to use a double-quoted string.
Note also that the tense switching parameter substitution {|ed} won’t work in adv3Lite. So what you probably need is something like:
dobjFor(Scrunch) { action() { "Scrunch<<tSel('','ed'>>! "; }}
If your game never changes tense, however, there’s no need to use the tSel() macro; you’d simply write:
dobjFor(Scrunch) { action() { "Scrunched! "; }}
Another point to consider is whether this response belongs in the action() or the report() method. If you’re defining it on a particular object, then using action() is the right way to go. If this is the generic response defined on the Thing class it might be better to use report(), i.e.:
dobjFor(Scrunch) { report() { "Scrunched! "; }}
Or, even better perhaps:
dobjFor(Scrunch) { report() { "Scrunched! |{I} {scrunch} <<gActionListStr>>. "; }}
For which you’d also need to define:
myCustomVocab: CustomVocab
verbParams = [
'scrunch/scrunches/scrunched'
]
;
This is one area in which adv3Lite is quite a bit different from adv3. Note, for example, that adv3Lite has no transcript, hence the absence of the mainReport() macro, since there’s no transcript to add a report to. Instead, most of the time, output is displayed straight to the game window (there are exceptions, e.g. to deal with implicit action reports, but that’s true in the main).
Another area in which adv3Lite is quite a bit different from adv3 is in the conversation system, despite superficial resemblances. This is one of the parts of the adv3Library I more or less wrote from scratch, with the aim of coming up with something rather more flexible (at the cost of giving game authors a bit more work to do in one or two places). So unless you’ve only used the very basics of the adv3 conversation system you’ll probably find you need to make a lot of changes to your conversation code to make it work as expected in adv3Lite. Among some of the things to look out for are:
(1) There are no subclasses of ActorState in adv3Lite. Every actor state is simply an ActorState (you can get the same effects as you can from adv3’s various different ActorState classes, but you have to go about it differently).
(2) There is no AltTopic class in adv3Lite. If you have any AltTopics you’ll have to convert them to the equivalent AskTopics etc., and control when they’re used via their matchScore and/or isActive (and/or activated) properties.
(3) There are no SuggestedTopic classes (SuggestedAskTopic and the like) in adv3Lite. Instead, to make a topic entry act like a SuggestedTopic, you just define its name property.
(4) The adv3Lite SpecialTopic class is rather different from the adv3 SpecialTopic class. In particular you don’t use SpecialTopic directly in game code, instead you’d use one of its subclasses: QueryTopic or SayTopic. Unlike an adv3 SpecialTopic, adv3Lite SayTopics and QueryTopics are not restricted to Conversation Nodes.
(5) The adv3Lite ConvNode class is much simpler than the adv3 ConvNode class. Instead of defining methods like npcContinuationList or canEndConversation() on your ConvNodes you need to define seperate NodeContinuationTopic and NodeEndCheck objects.
Coming from adv3 you may thus find the adv3Lite conversation system a bit of a challenge to get to grips with at first, but once you’ve got the hang of it you’ll find it lets you do quite a few things that would be difficult or impossible in adv3 (such as sharing the same topic entry among a number of conversation nodes).
Once again, thanks for giving adv3Lite a go. I hope that your porting goes reasonably smoothly once you get the hang of the differences, but do get back to me if you have any more problems or queries.