This was done pretty easily, here's the code that I used:
void Idle(){ g_Timer.Start(); dftin::DirectInput::GetSingleton()->Update(); dftgfx::Direct3D::GetSingleton()->GetDeviceComPtr()->Clear(0, 0, D3DCLEAR_TARGET, 0xff000000, 1.0f, 0); dftgfx::Direct3D::GetSingleton()->GetDeviceComPtr()->BeginScene(); static int nTalkingIndex = 0; static int nMsgIndex = 0; static float fTalkingTime = 0.0f; static float fMsgTime = 0.0f; static bool bDone = false; fTalkingTime += g_Timer.GetTimeElapsed(); fMsgTime += g_Timer.GetTimeElapsed(); std::string Talking = "Talking..."; std::string Message = "This is a complete message that will be\nrendered one character at a time!"; if(fTalkingTime > 0.5f) { ++nTalkingIndex; if(nTalkingIndex > 3) nTalkingIndex = 0; fTalkingTime = 0.0f; } if(fMsgTime > 0.125f) { if(!bDone) ++nMsgIndex; if(nMsgIndex >= Message.length()) bDone = true; fMsgTime = 0.0f; } if(bDone) Talking = "Finished talking!!!"; dftgfx::FontEngine::GetSingleton()->GetItem(DEF_FONT)->DrawText(Message.c_str(), nMsgIndex, 0.0f, 0.0f, 0xffffffff); dftgfx::FontEngine::GetSingleton()->GetItem(DEF_FONT)->DrawText(Talking.c_str(), bDone ? Talking.length() : Talking.length() + (nTalkingIndex - 3), 800.0f - (Talking.length() * 11), 600.0f - 24.0f, 0xffffffff); dftgfx::Direct3D::GetSingleton()->GetDeviceComPtr()->EndScene(); dftgfx::Direct3D::GetSingleton()->GetDeviceComPtr()->Present(0, 0, 0, 0); g_Timer.End();}