No, no I haven't, I'm still using Harlowe 2.1.
I found a way to do it, it should considerably reduce the copy paste. However, it is a little bit ugly.
Anyway, add the code in "Edit Story Javascript"
// define a dialog object under global window object, like a namespace
window.dialog = window.dialog || {};
// define function for main character
window.dialog.me = function(text) {
return '<div class="max"><img class="portrait" src="pics/portrait/max1.jpg"> ' + text + '</div>';
}
// make the dialog object global accessible
var dialog = window.dialog;
And in the story, you use
(print: dialog.me("Are you crazy, of course they will, specially the girls."))
instead of
<div class="max"><img class="portrait" src="pics/portrait/max1.jpg"> Are you crazy, of course they will, specially the girls.</div>
For other girls, you just need to define different function in the Edit Story Javascript and execute the function accordingly in story.
Mia for example:
javascript
// define function for mia
window.dialog.mia = function(text) {
return '<div class="woman"><img class="portrait" src="pics/portrait/Mia.jpg"> ' + text + '</div>';
}
execute the function in story
(print: dialog.mia("Please bro, I need to take a shower now or I will be late for my class"))