Vespers3D: Adventures with NPCs, Part III
by Rubes · 09/03/2007 (11:46 am) · 9 comments
Vespers3D: Adventures with NPCs, Part III
Vespers3D is our attempt to bring old-school text-based adventure games (interactive fiction) into the world of real-time first-person 3D - a new genre we are calling 3D/if (3D interactive fiction). It is based on Vespers, Jason Devlin's fantastic text IF game that won numerous awards from the IF community, including Best Game at the IFComp'05 and the 2006 XYZZY awards. Vespers provides a compelling setting and a storyline for a game that will, in the end, be something akin to Myst but with a fully interactive 3D environment and good old-fashioned text command input and output.
Here we resume our efforts to bring our NPCs to life, beginning with bits and pieces of text from the IF version of Vespers and ending with a modeled, animated, and voice-acted 3D character. Last time I discussed the development of Constantin, the large hulking monk with a short temper. This time I relate the development of Lucca, who had some interesting and unique challenges of his own.
Lucca: From Concept to Character
Lucca was going to be a tough character to convincingly recreate. He's the youngest member of the monastery, a teenager who recently joined the order. He's very attached to Matteo, one of the monastery's father figures, and is generally an emotional character during the course of the game. Again, we didn't have a lot of text to go on initially aside from a short description:
The youngest of those who remain, Lucca joined the monastery only a few short months ago. The son of a count, he had never seen death before the arrival of the plague. It haunts him.
After some discussion between myself and Jason Devlin (the author), we decided we wanted Lucca to have pale skin (maybe slightly paler than the rest), blue eyes, and delicate facial features; probably quite frail overall with a slight build and thin face. We presented these ideas to N.R. Bharathae, our lead artist, who came up with his concept for Lucca.
Figure 1. Lucca (with Matteo) concept sketch.
This looked like a perfect starting point. Using this, N.R. designed Lucca's 3D model and then applied some of his slick textures. As with the others, we were going for a more realistic appearance for our characters, and N.R. did a really great job with him:
Figure 2. Lucca textures.
Figure 3. The Lucca model.
During this time, we continued in our task of finding and recording a voice actor for the part. Matching a voice for a young man would not be as difficult as for some other parts, but the real challenge was finding someone who could play the part convincingly, given that Lucca expresses a great deal of tearful emotion during the game. Fortunately, we were able to find Christopher LeCluyse.
Christopher is a veteran of the stage, both acting and singing. Not only that, he also has expertise in medieval literature, and was able to help out with some little-known facts and inconsistencies in our story. For instance, Christopher pointed out to us that, during the time period of our game (ca. 1300-1400), pews did not yet exist in churches -- only choir stalls. So we were able to make that adjustment in our storyline and setting.
Figure 4. Christopher and Lucca.
"Christopher LeCluyse (Lucca) brings to Vespers twenty years of professional vocal training and performance and a doctorate in medieval language and literature. He sings regularly with a variety of choral and early music groups and has appeared on recordings with Conspirare. Chris is also a professor of English and writing center director at Westminster College in Salt Lake City." -- C.L.
Finally, there's the work of our animator, Matt Chin. Lucca presented a different kind of challenge than the previous characters, because we wanted to try something a little more complex with the way he idles. At the beginning of the game, Lucca is first seen running into Matteo's room in the dormitory, where he then scrabbles frantically at the ground, trying to unearth one of the stones in the floor:
[b]Matteo's Room[/b] This room is small: the same as all the others. A bed is pushed up against one wall, opposite the door to the north. Lucca scrabbles frantically at the ground, his blood staining the stones. >[b]EXAMINE GROUND[/b] (the flagstone) Lucca scrabbles at the stone, trying desperately to unearth it from all sides. >[b]TALK TO LUCCA[/b] "Why do you dig, Lucca?" you ask. "Matteo is hiding something. I just know it's under here." >[b]AGAIN[/b] "Why do you think that?" The blood pours from his fingers. "I just know," he sobs. "He scrapes around here at night." >[b]AGAIN[/b] "Leave me alone," he blubbers through the tear-laden mucus that streams from his nose. >[b]ASK LUCCA ABOUT MATTEO[/b] "He knows something, but he won't tell me," he sobs more heavily for a moment. "He tells me nothing anymore."
My thought was to have Lucca idle using a cyclic sequence, showing him repeatedly scraping at the stone in the floor. But playing this sequence over and over again, without any alteration, would quickly get old and not look very professional. My thought was to try and break the monotony by including a few additional idle sequences played at random points during the cyclic sequence -- one trying to pull up the stone, one showing him rubbing his bloody hands, and another showing him wiping the tears from his eyes. That means four idle sequences -- one cyclic and three non-cyclic. All need to be designed using the root position as a launching point for any speech animations called from player interaction:
Figure 5. Modifications to the usual animation flow sequence to accomodate additional idle sequences
What the hell does all that mean? Basically, only that each sequence -- whether it's an idle sequence or speech sequence -- has to start and finish in the root position to maintain consistency. The thing we need to keep in mind is that speech can be triggered during the cyclic idle sequence or during one of the other idle sequences and to account for that. Once a speech animation is finished, we always return to the cyclic idle sequence and start again. It can look a little robotic at times, but overall I think it works well.
Here is the text portion of the game given above, as we developed it in 3D with animation and sound. Click the image below to see the Google video:
Figure 6. Click image above to see Lucca in action.
So that's how we went through the process of developing Lucca from a text character in an interactive fiction game into a 3D animated and speaking NPC model -- a nice combination of writing, modeling, texturing, animating, and voice work. Next time I'll introduce Ignatius, one of the more mysterious and suspicious characters in the game.
Thanks for reading!