I've never used CRL, but if it's looking for a template that sounds problematic. SmartAoE uses direct html output. Also, for the individual saving throw rolls it uses a Promise.all mapped to a tokenRolls array and processes the results before final output (see below). I stole this code from Jakob's GroupChat script, and have no idea how this would/should interact with CRL. Posting this here in case someone else familiar with CRL sees this thread. Promise.all(tokenRolls.map(o => new Promise((resolve) => {
sendChat("", `${o.formula}${o.roll2x ? `<br>${o.formula}` : ""}`, resolve);
})))
.then(async(messages) => processFinalMessages(messages, damageRolls, tokenRolls, aoeLink))
.catch(sendErrorMessage); The ProcessFinalMessages function parses these api-generated inline roll results and builds the final html output for presentation in chat (see the buildTitle, buildDamageRow, buildSaveHeaderRow, buildDescRow, buildTableBody, and buildGMOutput functions for the html content). It looks like this could get ugly. I should probably try adding soundFX support to the script, but note that this month is really busy for me.