Well, didn't join you TODAY, but can't wait to watch this one in particular.
One bit I randomly stumbled upon because I did skip around a bit to give myself a teaser... Aric not being able to answer how the dialogue trees worked is totally fair, because indeed, the SCUMM tools, compilers etc. knew nothing about it. All of it was implemented for Last Crusade mostly (almost exclusively) using functionality that was there already in Zak McKracken and Maniac Mansion on PC - a lot of it was even there in Maniac Mansion C64, before the tools and language really became portable.
The short version is: Dialogue lines are just verbs repurposed - Maniac Mansion could already clear the verbs and replace them with entirely new verbs placed anywhere on the screen (as far as I recall, that was only added after the C64 version). The intricacies of doing the setup were hidden inside a few scripts and macros (like Aric mentions), which made it look like "not verbs at all" - macros which pushed the existing verbs on a stack, cleared them, created new custom verbs, placed them on screen based on their number, and set up the actions each verb would trigger. This combined with using the existing case ... of (similar to the typical switch ... case statement) for the choices. But since macros allow literally adding to the syntax of the language, this turned into something like (EDIT: using the real syntax, since that's already visible in the VGHF interview with Ron Gilbert):
start-dialog
set-dialog 1 "I want to be a pirate!"
set-dialog 2 "I want to be a fireman!"
set-dialog 3 "I mean to kill you all!"
; "wait-for-dialog" is what replaced the "case" keyword - in practice it worked like built-in "wait" commands -
; allowed other scripts to run while waiting for the player to pick a dialogue line.
wait-for-dialog {
of dialog-1 {
jump dialogue-about-three-trials
}
of dialog-2 {
jump beat-it-kid
}
of dialog-3 {
jump beat-it-kid
}
}
dialog-about-three-trials:
; SCUMM code for this discussion
beat-it-kid:
; SCUMM code for this discussion
The wait-for-dialog macro, as mentioned, would wait for the player to pick a line - allowing other scripts to run in the meantime. When a verb was chosen, its number would be stored in a variable, choice. So, the end of the macro would just be case choice, leading into the following of dialog-1... lines. dialog-1, 2, 3... being constants also defined within the SCUMM scripts. So, the entire "system" was all done in SCUMM without needing to change the tooling.
After that, it's basically "goto's" all the way down - and to my knowledge there was never any tooling to make it easier to follow complex dialogue trees. ETA: Of course, the jumps here could be replaced with the actual response being inside the of... clauses (and in this particular case, they were) - that's up to the SCUMMlet. But jumps back to the choices within a branch after a response was finished, or back to the initial dialog choices in the conversation, etc. - would be done using jump.