I tried the code below.
I liked the first version, with macros called within other macros,
it's a thing I was used on Inform. If it's not possible, it doesn't
matter but I wanted to be sure.
--------------------
location blip
grammar sing >sing_only
{+sing_only
write "You sing something.^"
write "It's a song about " player{song}"^"
}
integer ALEATOIRE
integer ALEAT2
{+macro_song
set max_rand = 3
set ALEATOIRE = random
if ALEATOIRE = 1
setstring return_value "a man."
endif
if ALEATOIRE = 2
setstring return_value "a dog."
endif
if ALEATOIRE = 3
setstring return_value "a woman who is "
set max_rand = 2
set ALEAT2 = random
if ALEAT2 = 1
setstring return_value "called Margareth."
endif
if ALEAT2 = 2
setstring return_value "drinking a cup of tea."
endif
endif
}
object kryten: kryten myself self me moi moi-même moi-meme joueur
has ANIMATE
short name "moi"
capacity 42
parent blip
player
#include "verbs.library"