#include "Z2AudioLib/Z2SpeechMgr2.h" #include "Z2AudioLib/Z2AudioMgr.h" #include "Z2AudioLib/Z2EnvSeMgr.h" #include "Z2AudioLib/Z2SceneMgr.h" #include "Z2AudioLib/Z2SeMgr.h" #include "JSystem/JMath/JMath.h" struct Z2MdnPrm { struct Unit { u8 start; u8 end; }; struct Prm { const Unit* main; const u8* tail; u8 mainNum; u8 tailNum1; u8 tailNum2; }; static Unit const sReply[50]; static u8 const sReplyTail[10]; static Unit const sJoke[50]; static u8 const sJokeTail[10]; static Unit const sSexy[50]; static u8 const sSexyTail[10]; static Unit const sRidicule[50]; static u8 const sRidiculeTail[10]; static Unit const sBoring[54]; static u8 const sBoringTail[6]; static Unit const sIrritated[47]; static u8 const sIrritatedTail[10]; static Unit const sOrder[57]; static u8 const sOrderTail[6]; static Unit const sResent[53]; static u8 const sResentTail[5]; static Unit const sCheerful[53]; static u8 const sCheerfulTail[8]; static Unit const sConfused[53]; static u8 const sConfusedTail[5]; static Unit const sHostility[52]; static u8 const sHostilityTail[7]; static Unit const sTired[53]; static u8 const sTiredTail[8]; static Unit const sSerious[53]; static u8 const sSeriousTail[7]; static Unit const sReplyb[42]; static u8 const sReplybTail[7]; static Unit const sApologize[50]; static u8 const sApologizeTail[9]; static Unit const sDeside[50]; static u8 const sDesideTail[8]; static Unit const sAfford[52]; static u8 const sAffordTail[12]; static Prm const sPrm[17]; }; Z2MdnPrm::Unit const Z2MdnPrm::sReply[50] = { 0x6A, 0x8A, 0x50, 0x5F, 0x53, 0x37, 0x37, 0x4F, 0x4F, 0x5E, 0xAA, 0x46, 0x52, 0x5A, 0x5A, 0x4F, 0x4F, 0x45, 0x45, 0x56, 0x64, 0x79, 0x79, 0x79, 0x87, 0x95, 0x95, 0x89, 0x89, 0x4C, 0x4C, 0x4B, 0x52, 0x41, 0x41, 0x5B, 0x5F, 0x71, 0x53, 0x47, 0x89, 0x7D, 0x77, 0x88, 0x88, 0x80, 0x80, 0x77, 0x52, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x53, 0x53, 0x4C, 0x4C, 0x5B, 0x5A, 0x70, 0x75, 0x33, 0x5E, 0x5F, 0x5F, 0x60, 0x5E, 0x68, 0x4B, 0x3B, 0x3B, 0x58, 0x59, 0x5D, 0x60, 0x63, 0x63, 0x54, 0x3E, 0x38, 0x38, 0x39, 0x35, 0x41, 0x41, 0x41, 0x41, 0x56, 0x71, 0x85, 0x85, 0xA2, 0xA2, 0x52, 0x52, 0x5C, 0x5C, 0x75, }; u8 const Z2MdnPrm::sReplyTail[10] = { 0x5E, 0x7F, 0x68, 0x39, 0x56, 0x75, 0x47, 0x71, 0x7D, 0x33, }; Z2MdnPrm::Unit const Z2MdnPrm::sJoke[50] = { 0x68, 0x57, 0x57, 0x55, 0x55, 0x51, 0x5B, 0x64, 0x6B, 0x7B, 0x7B, 0x5C, 0x77, 0x97, 0x8D, 0x97, 0x97, 0x8D, 0x66, 0x69, 0xA2, 0x5C, 0x87, 0x4F, 0x69, 0x5F, 0x5F, 0x83, 0x83, 0x82, 0x7F, 0x96, 0x96, 0xB0, 0x70, 0xA1, 0x6D, 0x6D, 0x6D, 0x59, 0x4C, 0x4B, 0x5A, 0x40, 0x4A, 0xAD, 0xA3, 0xAE, 0xAE, 0x63, 0x46, 0x45, 0x3D, 0x47, 0x47, 0x5A, 0x4D, 0x6E, 0x6A, 0x7F, 0x7F, 0x7F, 0x7F, 0xA1, 0xA1, 0xA5, 0x5C, 0x60, 0x5C, 0x6B, 0x6B, 0x7E, 0x81, 0x60, 0x66, 0x64, 0x60, 0xB1, 0x6C, 0x6D, 0x6D, 0x7E, 0x7A, 0x97, 0x97, 0x99, 0xA5, 0x89, 0x90, 0xA4, 0x45, 0x45, 0x29, 0x4C, 0x4B, 0x64, 0x64, 0x60, 0x5C, 0xB1, }; u8 const Z2MdnPrm::sJokeTail[10] = { 0x51, 0x97, 0x60, 0xB0, 0x6F, 0x5E, 0x5A, 0xA6, 0x4F, 0x4F, }; Z2MdnPrm::Unit const Z2MdnPrm::sSexy[50] = { 0x5E, 0x60, 0x5F, 0x63, 0x63, 0x72, 0x72, 0x78, 0x4D, 0x7A, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x59, 0x59, 0x7A, 0x7A, 0xA5, 0x90, 0x8D, 0x86, 0x62, 0x72, 0x79, 0x79, 0x86, 0x7F, 0x8B, 0x85, 0x7B, 0x7B, 0x5E, 0x5E, 0x6D, 0x6D, 0x88, 0x5F, 0xA3, 0xA3, 0x95, 0x95, 0x7F, 0x79, 0x79, 0x79, 0x73, 0x5E, 0x54, 0x45, 0x4F, 0x4F, 0x63, 0x51, 0x56, 0x54, 0x63, 0x63, 0x7B, 0x7B, 0x7B, 0x7B, 0x3B, 0x3B, 0x52, 0x88, 0x8C, 0x6B, 0x98, 0x98, 0xA3, 0xA6, 0x86, 0x89, 0x76, 0x79, 0x79, 0x5C, 0x6A, 0x90, 0xAB, 0x5C, 0x7D, 0x52, 0x49, 0x54, 0x57, 0x49, 0x55, 0x79, 0x65, 0x65, 0x4A, 0x5C, 0x78, 0x78, 0x8B, 0x8D, 0x7C, }; u8 const Z2MdnPrm::sSexyTail[10] = { 0x52, 0x79, 0x82, 0xA5, 0x62, 0x86, 0x3F, 0x7D, 0x57, 0x7C, }; Z2MdnPrm::Unit const Z2MdnPrm::sRidicule[50] = { 0xA7, 0x5A, 0x5A, 0x52, 0x52, 0x85, 0x85, 0x8C, 0x63, 0x73, 0x73, 0x90, 0x50, 0x46, 0x74, 0x74, 0xA3, 0xA7, 0x41, 0x51, 0x58, 0x34, 0x34, 0x2A, 0x5A, 0x81, 0x5D, 0x42, 0x4B, 0x70, 0x70, 0xB1, 0xB1, 0xB1, 0xB1, 0x65, 0x6A, 0xB1, 0x54, 0xA8, 0xA8, 0x6B, 0x6C, 0x55, 0x55, 0x63, 0x63, 0x6F, 0x7E, 0x64, 0x58, 0x62, 0x63, 0x47, 0x5C, 0x5C, 0x5C, 0x4D, 0x79, 0x40, 0x40, 0x58, 0x48, 0x54, 0x54, 0x4E, 0x4E, 0x6E, 0x6E, 0x4B, 0x47, 0x67, 0x90, 0xA0, 0x79, 0x79, 0x79, 0x7C, 0x7C, 0x6C, 0x6C, 0x73, 0x73, 0x6E, 0x6E, 0x36, 0x3F, 0x3C, 0x56, 0x2D, 0x2D, 0x2D, 0x2D, 0x8C, 0x8C, 0x8B, 0x8B, 0x93, 0x93, 0x6E, }; u8 const Z2MdnPrm::sRidiculeTail[10] = { 0x81, 0x67, 0x6D, 0x8C, 0x90, 0x85, 0xB1, 0x4D, 0x4F, 0x6E, }; Z2MdnPrm::Unit const Z2MdnPrm::sBoring[54] = { 0x8E, 0x9C, 0x9C, 0x5A, 0x5A, 0x52, 0x52, 0x5B, 0x5C, 0x56, 0x5C, 0x52, 0x52, 0x2D, 0x2D, 0x5B, 0x59, 0x56, 0x56, 0x56, 0x56, 0x6B, 0x6B, 0x58, 0x4C, 0x8E, 0x8E, 0x59, 0x61, 0x54, 0xA0, 0x4D, 0x5D, 0x59, 0x48, 0x30, 0x30, 0x5B, 0x5B, 0x5B, 0x4A, 0x64, 0x64, 0x7A, 0x7A, 0x92, 0x62, 0x62, 0x65, 0xA0, 0xA0, 0xB3, 0xB3, 0x4E, 0x4A, 0x49, 0x49, 0x98, 0x98, 0x83, 0x83, 0x76, 0x76, 0x7E, 0x7F, 0x58, 0x5A, 0x51, 0x57, 0x65, 0x65, 0x60, 0x60, 0x72, 0x72, 0x85, 0x8C, 0x89, 0x89, 0x89, 0x89, 0x5A, 0x5A, 0x63, 0x66, 0x5E, 0x5E, 0x71, 0x62, 0x55, 0x55, 0x85, 0x85, 0x5B, 0x5B, 0x5B, 0x5B, 0x5E, 0x70, 0x56, 0x56, 0x4C, 0x4C, 0x59, 0x59, 0x5B, 0x5B, 0x71, }; u8 const Z2MdnPrm::sBoringTail[6] = { 0x92, 0x58, 0x59, 0x5B, 0x70, 0x71, }; Z2MdnPrm::Unit const Z2MdnPrm::sIrritated[47] = { 0x6C, 0x91, 0x67, 0x8B, 0x8B, 0xA2, 0xA2, 0xAB, 0x48, 0x64, 0x73, 0x61, 0x61, 0x64, 0x64, 0x6D, 0x60, 0x7E, 0x4A, 0x55, 0x6A, 0x63, 0x66, 0x78, 0x5C, 0x5A, 0x6E, 0x79, 0x75, 0x62, 0x62, 0x57, 0x85, 0x3F, 0x3C, 0x83, 0x83, 0x9B, 0x78, 0x65, 0x65, 0x67, 0x65, 0x65, 0x87, 0x88, 0x88, 0x3D, 0x4C, 0x68, 0x68, 0x4D, 0x5B, 0x6E, 0x6E, 0x74, 0x56, 0x63, 0x6B, 0x8C, 0x8C, 0x93, 0x93, 0x4E, 0x4E, 0x69, 0x77, 0x75, 0x75, 0x71, 0x79, 0x4F, 0x4F, 0x6F, 0x4E, 0x42, 0x71, 0x75, 0x5E, 0x68, 0xAD, 0x6E, 0x72, 0x82, 0x83, 0x87, 0x85, 0x85, 0x85, 0x8E, 0x60, 0x6D, 0x80, 0x80, }; u8 const Z2MdnPrm::sIrritatedTail[10] = { 0x64, 0x61, 0x4E, 0x91, 0xA0, 0x85, 0x9B, 0x67, 0x6F, 0x64, }; Z2MdnPrm::Unit const Z2MdnPrm::sOrder[57] = { 0x77, 0x5F, 0x5F, 0x73, 0x73, 0x66, 0x66, 0x6B, 0x6B, 0x7A, 0x7A, 0x60, 0x54, 0x5F, 0x5F, 0x69, 0x69, 0x5A, 0x86, 0x84, 0x84, 0x96, 0x96, 0x94, 0x94, 0x8A, 0x87, 0x84, 0x5A, 0x2C, 0x4E, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x6E, 0x62, 0x5E, 0x6C, 0xA3, 0xA3, 0x5B, 0x62, 0x63, 0x63, 0x66, 0x66, 0x51, 0x51, 0x5B, 0x5B, 0x78, 0x78, 0x8F, 0x8F, 0x83, 0x61, 0x7A, 0x7A, 0x4E, 0x75, 0x81, 0x81, 0x71, 0x71, 0x83, 0x83, 0x66, 0x5D, 0x5D, 0x65, 0x47, 0x53, 0x6D, 0x6D, 0x8C, 0x8F, 0x8F, 0x8F, 0x2C, 0x2B, 0x6A, 0x6A, 0x5C, 0x5C, 0x54, 0x54, 0x60, 0xAC, 0xA1, 0x4E, 0x5B, 0x5B, 0x5F, 0x5F, 0x79, 0x4A, 0x60, 0x60, 0x5A, 0x5A, 0x35, 0x2E, 0x48, 0x48, 0x69, 0x69, 0x6D, 0x6D, 0x94, 0x94, 0x97, }; u8 const Z2MdnPrm::sOrderTail[6] = { 0x60, 0xA8, 0x5B, 0x4E, 0x5D, 0x87, }; Z2MdnPrm::Unit const Z2MdnPrm::sResent[53] = { 0x6F, 0x5F, 0x5F, 0x66, 0x66, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x4B, 0x4B, 0x6B, 0x6B, 0x86, 0x86, 0x4A, 0x4A, 0x6D, 0x6D, 0x6D, 0x6D, 0x8C, 0x8C, 0x84, 0x84, 0x64, 0x64, 0x6C, 0x6C, 0x92, 0x92, 0x6A, 0x5F, 0x6F, 0x6F, 0x62, 0x62, 0x62, 0x75, 0x5A, 0x5A, 0x5A, 0x5A, 0x60, 0x60, 0x6A, 0x6A, 0x76, 0x76, 0x6A, 0x6A, 0x7F, 0x7F, 0x9A, 0x9A, 0x98, 0x56, 0x5B, 0x5B, 0x6F, 0x82, 0x98, 0x98, 0x9B, 0x9B, 0x6E, 0x6E, 0x61, 0x61, 0x5C, 0x5F, 0x67, 0x62, 0x8A, 0xA9, 0x65, 0x65, 0x31, 0x31, 0x8C, 0x8C, 0x69, 0x69, 0x7E, 0x67, 0x67, 0x5B, 0x73, 0x73, 0x65, 0x65, 0x56, 0x56, 0x5E, 0x5E, 0xAA, 0xAA, 0x9E, 0x9E, 0x5A, 0x5A, 0x57, 0x57, 0x57, }; u8 const Z2MdnPrm::sResentTail[5] = { 0x4A, 0x98, 0x8A, 0x7E, 0x57, }; Z2MdnPrm::Unit const Z2MdnPrm::sCheerful[53] = { 0x64, 0x6D, 0x6D, 0x6D, 0x99, 0x6D, 0x40, 0x51, 0x51, 0x6F, 0x6F, 0x66, 0x66, 0x60, 0xA7, 0xAF, 0xB3, 0x61, 0x61, 0xA7, 0xA7, 0x5E, 0x8B, 0x75, 0x77, 0x72, 0x72, 0x93, 0x93, 0x8B, 0x8B, 0x88, 0x88, 0x77, 0x77, 0x80, 0x80, 0x80, 0x80, 0x67, 0x67, 0x4D, 0x4A, 0x69, 0x44, 0xA1, 0x64, 0xA8, 0xAE, 0x85, 0x85, 0x8D, 0x95, 0xA9, 0xA9, 0x91, 0x91, 0x67, 0x69, 0x60, 0x60, 0x5E, 0x5E, 0x54, 0x34, 0x6B, 0x63, 0x4F, 0x4F, 0x46, 0x46, 0x55, 0x6F, 0x6A, 0x6A, 0x75, 0x75, 0x75, 0x75, 0x70, 0x70, 0x9F, 0x9F, 0x55, 0x55, 0x63, 0x63, 0x63, 0x62, 0x9C, 0x9C, 0xA8, 0x85, 0x65, 0x65, 0x65, 0x65, 0x70, 0x6B, 0x6B, 0x6B, 0x6D, 0x6D, 0x57, 0x57, 0x7B, }; u8 const Z2MdnPrm::sCheerfulTail[8] = { 0x60, 0x6D, 0x4D, 0x44, 0x9C, 0x54, 0x70, 0x7B, }; Z2MdnPrm::Unit const Z2MdnPrm::sConfused[53] = { 0x83, 0x80, 0x80, 0x82, 0x82, 0x82, 0x82, 0x5B, 0x75, 0x84, 0x84, 0x84, 0x84, 0x75, 0x75, 0x62, 0x62, 0x62, 0x4D, 0x56, 0x56, 0x59, 0x59, 0x59, 0x59, 0x74, 0x74, 0x85, 0x7D, 0x8D, 0x8D, 0x70, 0x70, 0x5A, 0x5A, 0x6B, 0x6B, 0x6B, 0x6B, 0x70, 0x79, 0x73, 0x73, 0x71, 0x71, 0x75, 0x75, 0x7B, 0x7B, 0x5F, 0x5F, 0x62, 0x76, 0x64, 0x7B, 0x7B, 0x7B, 0x7C, 0x7F, 0x65, 0x7C, 0x7C, 0x68, 0x43, 0x40, 0x67, 0x67, 0x69, 0x69, 0x5F, 0x5F, 0x5D, 0x5D, 0x5D, 0xA2, 0xA2, 0xA2, 0xA6, 0xA6, 0x9A, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x8E, 0x8E, 0x94, 0x8E, 0x95, 0x95, 0x95, 0x95, 0x42, 0x38, 0x38, 0x38, 0x83, 0x83, 0x8E, 0x8E, 0x4C, 0x56, 0x56, }; u8 const Z2MdnPrm::sConfusedTail[5] = { 0x2C, 0x42, 0x4C, 0x7C, 0x49, }; Z2MdnPrm::Unit const Z2MdnPrm::sHostility[52] = { 0x85, 0x71, 0x71, 0x73, 0x73, 0x3B, 0x62, 0x84, 0x94, 0x94, 0x94, 0xAF, 0x98, 0xAD, 0xAD, 0x5A, 0x5A, 0x63, 0x63, 0x97, 0x90, 0x90, 0x7B, 0x73, 0x73, 0x63, 0x63, 0x55, 0x55, 0x65, 0x66, 0x7F, 0x7F, 0x87, 0x87, 0x8A, 0x8A, 0x94, 0x5D, 0x5C, 0x5A, 0x67, 0x67, 0x68, 0x68, 0x5C, 0x5C, 0x56, 0x56, 0x53, 0x53, 0x73, 0x73, 0x87, 0x87, 0x8B, 0x8B, 0x74, 0x74, 0x5B, 0x6F, 0x78, 0x73, 0x6E, 0x6E, 0x71, 0x71, 0x5B, 0x5B, 0x6E, 0x6E, 0x66, 0x57, 0x5C, 0x61, 0x65, 0x6B, 0x6E, 0x6E, 0x83, 0x83, 0x96, 0x3F, 0x56, 0x56, 0x56, 0x56, 0x4F, 0x5F, 0x57, 0x62, 0x6A, 0x5F, 0x72, 0x72, 0x62, 0x62, 0x65, 0x5E, 0x69, 0x69, 0x63, 0x63, 0x7F, }; u8 const Z2MdnPrm::sHostilityTail[7] = { 0x97, 0x67, 0x94, 0x6A, 0x66, 0x4F, 0x6A, }; Z2MdnPrm::Unit const Z2MdnPrm::sTired[53] = { 0x70, 0x70, 0x70, 0x5C, 0x5C, 0x5C, 0x6F, 0x6F, 0x6F, 0x93, 0x8C, 0x9A, 0x9D, 0x89, 0x99, 0x7A, 0x91, 0x8D, 0x8D, 0x8D, 0x8D, 0x69, 0x69, 0x72, 0x72, 0x65, 0x65, 0x65, 0x9E, 0x98, 0x98, 0x2A, 0x50, 0x54, 0x54, 0x49, 0x64, 0x59, 0x59, 0x62, 0x62, 0x62, 0x44, 0x5E, 0x9F, 0x91, 0x63, 0x63, 0x63, 0x57, 0x57, 0x2A, 0x64, 0x52, 0x5B, 0x5C, 0x5C, 0x5C, 0x5C, 0x59, 0x63, 0x75, 0x66, 0x69, 0x61, 0x67, 0x67, 0x67, 0x67, 0x65, 0x6A, 0x6A, 0x7B, 0x75, 0x75, 0x75, 0x75, 0x69, 0x69, 0x64, 0x64, 0x51, 0x67, 0x68, 0x68, 0x6F, 0x6F, 0x6F, 0x7F, 0x95, 0x9C, 0x87, 0x84, 0x8A, 0x72, 0x84, 0x84, 0x6D, 0x6D, 0x6A, 0x6A, 0x8D, 0x8D, 0x8D, 0x8D, 0x3B, }; u8 const Z2MdnPrm::sTiredTail[8] = { 0x66, 0x6F, 0x3B, 0x7A, 0x49, 0x91, 0x5C, 0x6A, }; Z2MdnPrm::Unit const Z2MdnPrm::sSerious[53] = { 0x52, 0x65, 0x65, 0x72, 0x5A, 0x61, 0x61, 0x7B, 0x80, 0x92, 0x93, 0x9D, 0x9D, 0x70, 0x79, 0x76, 0x62, 0x57, 0x5A, 0x53, 0x53, 0x59, 0x59, 0x65, 0x63, 0x60, 0x60, 0x6A, 0x83, 0x80, 0x7F, 0x5D, 0x5C, 0x45, 0x5D, 0x71, 0x72, 0x65, 0x65, 0x65, 0x66, 0x4B, 0xB2, 0x60, 0x5C, 0x5C, 0x5C, 0x5B, 0x5F, 0x55, 0x55, 0x5E, 0x5E, 0x5F, 0x5B, 0x4D, 0x58, 0x60, 0x5B, 0x50, 0x50, 0x56, 0x56, 0x56, 0x7D, 0x6E, 0x72, 0x73, 0x73, 0x6A, 0x64, 0x54, 0x58, 0x57, 0x57, 0x5D, 0x5D, 0x64, 0x5F, 0x53, 0x53, 0x52, 0x54, 0x4D, 0x4D, 0x4D, 0x4D, 0x59, 0x59, 0x59, 0x69, 0x6B, 0x6B, 0x5A, 0x72, 0x69, 0x70, 0x60, 0x3C, 0x81, 0x81, 0x92, 0x92, 0x8E, 0x98, 0x87, }; u8 const Z2MdnPrm::sSeriousTail[7] = { 0x7B, 0x69, 0x4B, 0x61, 0x52, 0x59, 0x87, }; Z2MdnPrm::Unit const Z2MdnPrm::sReplyb[42] = { 0x5C, 0x45, 0x45, 0x71, 0x9F, 0x57, 0xB4, 0xB4, 0x56, 0x62, 0x8E, 0x61, 0x61, 0xB0, 0xB0, 0x3C, 0x59, 0x4A, 0x64, 0xA4, 0xA4, 0x5A, 0x5A, 0x5A, 0x5A, 0x72, 0x72, 0x4B, 0x6B, 0x97, 0x97, 0x59, 0x60, 0x60, 0x60, 0x69, 0x3E, 0x3E, 0x57, 0x42, 0x5E, 0x76, 0x76, 0x6C, 0x6C, 0x9B, 0x6E, 0x84, 0x6F, 0x9B, 0x9B, 0x90, 0x90, 0x76, 0x76, 0x72, 0x72, 0x8A, 0x2C, 0x1F, 0x1F, 0x95, 0x95, 0x69, 0x4C, 0x59, 0x59, 0x79, 0x5B, 0x44, 0x44, 0x4F, 0x52, 0x58, 0x5A, 0x6F, 0x6E, 0x8A, 0x8E, 0x8E, 0x8E, 0x8C, 0x8C, 0x9B, }; u8 const Z2MdnPrm::sReplybTail[7] = { 0x4F, 0x4A, 0xA2, 0x4F, 0x65, 0x98, 0x5C, }; Z2MdnPrm::Unit const Z2MdnPrm::sApologize[50] = { 0x6A, 0x6A, 0x6A, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x57, 0x57, 0x57, 0x63, 0x61, 0x54, 0x54, 0x54, 0x54, 0x58, 0x58, 0x58, 0x58, 0x45, 0x45, 0x56, 0x56, 0x5B, 0x5B, 0x37, 0x53, 0x53, 0x53, 0x59, 0x59, 0x59, 0x49, 0x58, 0x58, 0x55, 0x56, 0x56, 0x83, 0x7F, 0x7F, 0x83, 0x83, 0x75, 0x75, 0x88, 0x76, 0x7E, 0x75, 0x75, 0x83, 0x85, 0x85, 0x85, 0x85, 0x8E, 0x89, 0x89, 0x89, 0x5C, 0x5C, 0x6E, 0x6E, 0x6E, 0x6E, 0x68, 0x65, 0x5F, 0x5F, 0x6A, 0x58, 0x5B, 0x70, 0x72, 0x72, 0x72, 0x72, 0x6E, 0x76, 0x6B, 0x6B, 0x58, 0x69, 0x66, 0x66, 0x64, 0x64, 0x60, 0x61, 0x63, 0x6A, 0x62, 0x62, 0x64, 0x65, 0x71, }; u8 const Z2MdnPrm::sApologizeTail[9] = { 0x7C, 0x6E, 0x63, 0x71, 0x51, 0x37, 0x75, 0x58, 0x5C, }; Z2MdnPrm::Unit const Z2MdnPrm::sDeside[50] = { 0x77, 0x77, 0x77, 0x58, 0x58, 0x6F, 0x78, 0x5F, 0x66, 0x5E, 0x6E, 0x62, 0x62, 0x2E, 0x5A, 0x58, 0x54, 0x52, 0x52, 0x5C, 0x59, 0x56, 0x56, 0x4B, 0x4B, 0x63, 0x63, 0x4D, 0x4E, 0x4A, 0x69, 0x71, 0x71, 0x76, 0x80, 0x80, 0x80, 0x73, 0x73, 0x5C, 0x7C, 0x64, 0x83, 0x89, 0x89, 0x82, 0x82, 0x7F, 0x7F, 0x88, 0x88, 0x90, 0x91, 0x89, 0x89, 0x57, 0x73, 0x67, 0x67, 0x81, 0x84, 0x6C, 0x6C, 0x5F, 0x69, 0x76, 0x76, 0x6C, 0x75, 0x82, 0x64, 0x75, 0x72, 0x80, 0x69, 0x62, 0x5D, 0x67, 0x5D, 0x5F, 0x62, 0x59, 0x5D, 0x55, 0x55, 0x48, 0x5F, 0x5F, 0x5F, 0x5D, 0x75, 0x6A, 0x66, 0x76, 0x69, 0x69, 0x69, 0x60, 0x60, 0x5F, }; u8 const Z2MdnPrm::sDesideTail[8] = { 0x64, 0x2E, 0x4A, 0x57, 0x80, 0x48, 0x7C, 0x5F, }; Z2MdnPrm::Unit const Z2MdnPrm::sAfford[52] = { 0x4E, 0x45, 0x52, 0x5B, 0x56, 0x5B, 0x59, 0x52, 0x52, 0x57, 0x5C, 0x50, 0x50, 0x49, 0x80, 0x6E, 0x6E, 0x5A, 0x5C, 0x60, 0x6A, 0x62, 0x62, 0x6A, 0x71, 0x48, 0x4C, 0x5B, 0x5A, 0x40, 0x40, 0x49, 0x49, 0x50, 0x51, 0x51, 0x51, 0x3A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x5A, 0x7F, 0x6A, 0x6A, 0x69, 0x69, 0x8C, 0x57, 0x57, 0x48, 0x48, 0x48, 0x4B, 0x4C, 0x49, 0x45, 0x47, 0x47, 0x4C, 0x48, 0x50, 0x50, 0x49, 0x42, 0x42, 0x42, 0x34, 0x26, 0x3C, 0x2C, 0x7D, 0x6E, 0x56, 0x79, 0x79, 0x50, 0x4C, 0x50, 0x43, 0x52, 0x51, 0x66, 0x6C, 0x64, 0x63, 0x63, 0x5D, 0x69, 0x70, 0x56, 0x50, 0x4B, 0x92, 0x86, 0x8F, 0x4B, 0x4F, 0x57, 0x56, }; u8 const Z2MdnPrm::sAffordTail[12] = { 0x63, 0x8E, 0x5B, 0x59, 0x4C, 0x3A, 0x69, 0x47, 0x41, 0x59, 0x50, 0x55, }; const Z2MdnPrm::Prm Z2MdnPrm::sPrm[17] = { {Z2MdnPrm::sReply, Z2MdnPrm::sReplyTail, ARRAY_SIZE(Z2MdnPrm::sReply), 6, 4}, {Z2MdnPrm::sJoke, Z2MdnPrm::sJokeTail, ARRAY_SIZE(Z2MdnPrm::sJoke), 3, 7}, {Z2MdnPrm::sSexy, Z2MdnPrm::sSexyTail, ARRAY_SIZE(Z2MdnPrm::sSexy), 3, 7}, {Z2MdnPrm::sRidicule, Z2MdnPrm::sRidiculeTail, ARRAY_SIZE(Z2MdnPrm::sRidicule), 3, 7}, {Z2MdnPrm::sBoring, Z2MdnPrm::sBoringTail, ARRAY_SIZE(Z2MdnPrm::sBoring), 1, 5}, {Z2MdnPrm::sIrritated, Z2MdnPrm::sIrritatedTail, ARRAY_SIZE(Z2MdnPrm::sIrritated), 3, 7}, {Z2MdnPrm::sOrder, Z2MdnPrm::sOrderTail, ARRAY_SIZE(Z2MdnPrm::sOrder), 2, 4}, {Z2MdnPrm::sResent, Z2MdnPrm::sResentTail, ARRAY_SIZE(Z2MdnPrm::sResent), 2, 3}, {Z2MdnPrm::sCheerful, Z2MdnPrm::sCheerfulTail, ARRAY_SIZE(Z2MdnPrm::sCheerful), 1, 7}, {Z2MdnPrm::sConfused, Z2MdnPrm::sConfusedTail, ARRAY_SIZE(Z2MdnPrm::sConfused), 3, 2}, {Z2MdnPrm::sHostility, Z2MdnPrm::sHostilityTail, ARRAY_SIZE(Z2MdnPrm::sHostility), 2, 5}, {Z2MdnPrm::sTired, Z2MdnPrm::sTiredTail, ARRAY_SIZE(Z2MdnPrm::sTired), 3, 5}, {Z2MdnPrm::sSerious, Z2MdnPrm::sSeriousTail, ARRAY_SIZE(Z2MdnPrm::sSerious), 2, 5}, {Z2MdnPrm::sReplyb, Z2MdnPrm::sReplybTail, ARRAY_SIZE(Z2MdnPrm::sReplyb), 4, 3}, {Z2MdnPrm::sApologize, Z2MdnPrm::sApologizeTail, ARRAY_SIZE(Z2MdnPrm::sApologize), 4, 5}, {Z2MdnPrm::sDeside, Z2MdnPrm::sDesideTail, ARRAY_SIZE(Z2MdnPrm::sDeside), 1, 7}, {Z2MdnPrm::sAfford, Z2MdnPrm::sAffordTail, ARRAY_SIZE(Z2MdnPrm::sAfford), 2, 10}, }; Z2SpeechMgr2::Z2SpeechMgr2() : JASGlobalInstance(true), random(0) { mTextNum = 0; mTextCount = -1; mMood = 0; mVoice = 0; field_0x3ff = 0; field_0x401 = 0; for (int i = 0; i < 64; i++) { field_0x402[i] = -1; } } void Z2SpeechMgr2::setString(const u16* s, s16 textNum, u8 speakerID, u16 mood) { switch (speakerID) { case 0x13: case 0x15: mVoice = 1; break; case 0x12: case 0x14: mVoice = 2; break; case 0x04: case 0x07: case 0x0a: case 0x16: case 0x19: case 0x1d: case 0x21: case 0x24: case 0x29: case 0x2c: case 0x2d: case 0x32: case 0x33: case 0x3f: case 0x40: case 0x41: case 0x53: case 0x54: case 0x55: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: mVoice = 12; break; case 0x1e: case 0x1f: case 0x22: case 0x25: case 0x27: case 0x3d: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6a: mVoice = 13; break; case 0x37: case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x6c: case 0x6d: mVoice = 14; break; case 0x2f: mVoice = 15; break; case 0x0f: case 0x10: case 0x34: case 0x35: case 0x36: case 0x70: mVoice = 16; break; case 0x0e: case 0x42: case 0x44: mVoice = 17; break; case 0x0c: mVoice = 18; break; case 0x09: case 0x26: case 0x6f: mVoice = 30; break; case 0x08: mVoice = 31; break; case 0x00: case 0x01: case 0x02: case 0x03: mVoice = 99; return; case 0x71: default: mVoice = 11; break; } if (mVoice == 1 || mVoice == 2) { if (mood == 0) { mMood = 0; } else { if (mood > 17) { if ((mVoice == 21) || (mVoice == 20)) { mMood = 0; } } else { mMood = mood - 1; } } } else { mMood = mood; } for (int i = 0; i < 500; i++) { mText[i] = 0; } JUT_ASSERT(383, s != NULL); if (textNum > 500) { mTextNum = 500; JUT_WARN_DEVICE(387, 1, "TOO MANY TEXT : now(%d) > max(%d)", textNum, 500); } else { mTextNum = textNum; } #if VERSION >= VERSION_WII_USA_R2 for (int i = 0; i <= mTextNum; i++) #else for (int i = 0; i < mTextNum; i++) #endif { mText[i] = s[i]; } mTextCount = 0; field_0x3ff = 0; field_0x400 = 0; field_0x401 = 0; for (int i = 0; i < 64; i++) { field_0x402[i] = -1; } selectUnit(false); } void Z2SpeechMgr2::setTextCount(s16 textCount) { if (mVoice != 99) { field_0x3ff = 0x0; #if VERSION != VERSION_SHIELD_DEBUG textCount = (textCount == 0) ? 0 : textCount - 1; #endif bool all_text = false; if (mTextCount == 0 && textCount >= mTextNum) { all_text = true; } mTextCount = textCount; if (mTextCount >= mTextNum) { mTextCount = mTextNum; } if (mVoice == 1 || mVoice == 2) { if (!field_0x0.isSoundAttached()) { speakOneWord(false); } } else if (all_text) { if (mMood == 0) { mSpeech.startSound(Z2SE_SY_TEXT_DISP_ALL, &field_0x4, NULL, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0); } } else { if (!isNonVerbal()) { JAISoundID sound_id; switch (mVoice) { case 0xb: sound_id = Z2SE_SY_TEXT_OUT; break; case 0xc: sound_id = Z2SE_SY_TEXT_OUT_FEMALE; break; case 0xd: sound_id = Z2SE_SY_TEXT_OUT_CHILD; break; case 0xe: sound_id = Z2SE_SY_TEXT_OUT_GORON; break; case 0xf: sound_id = Z2SE_SY_TEXT_OUT_ZORA; break; case 0x10: sound_id = Z2SE_SY_TEXT_OUT_GREY; break; case 0x11: sound_id = Z2SE_SY_TEXT_OUT_SPIRIT; break; case 0x12: sound_id = Z2SE_SY_TEXT_OUT_BRAVE; break; case 0x1e: sound_id = Z2SE_SY_TEXT_OUT_GANON; break; case 0x1f: sound_id = Z2SE_SY_TEXT_OUT_ZANT; break; } mSpeech.startSound(sound_id, &field_0x4, NULL, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0); } } } } void Z2SpeechMgr2::speakOneWord(bool param_0) { if (Z2GetSceneMgr()->isSceneExist() && (mVoice == 1 || mVoice == 2) && field_0x400 == 0 && field_0x3ff <= 30) { if (mTextCount >= mTextNum) { selectTail(); field_0x400 = 1; } else if (isNonVerbal()) { return; } u32 soundID = mMood + Z2SE_HYL_MDN_RPLY; f32 fxMix = Z2GetSceneMgr()->getRoomReverb() / 127.0f; bool soundStarted = mSpeech.startSound(soundID, &field_0x0, NULL, 0, fxMix, 1.0f, 1.0f, -1.0f, -1.0f, 0); mSpeech.setPortData(&field_0x0, 8, field_0x402[field_0x401 - 1] + 1, -1); if (field_0x400 == 0) { selectUnit(param_0); } } } bool Z2SpeechMgr2::isNonVerbal() { switch(mText[mTextCount]) { case '\0': case ' ': case '!': case '\"': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case 'K': case 'L': case 'M': case 'N': case 'O': case '[': case '\\': case ']': case '^': case '_': case 0x813f: case 0x8140: case 0x8141: case 0x8142: case 0x8143: case 0x8144: case 0x8145: case 0x8146: case 0x8147: case 0x8148: case 0x8149: case 0x814a: case 0x814b: case 0x8151: case 0x815e: case 0x8162: case 0x8166: case 0x8168: case 0x8169: case 0x816a: case 0x816d: case 0x816e: case 0x816f: case 0x8170: case 0x8171: case 0x8172: case 0x8175: case 0x8176: case 0x817b: case 0x817c: case 0x8181: case 0x818f: case 0x8190: case 0x8193: case 0x8194: case 0x8195: case 0x8196: return true; } #if VERSION != VERSION_SHIELD_DEBUG if(mText[mTextCount] == 0xA) { switch (mVoice) { case 1: case 2: return false; default: return true; } } #endif return false; } typedef struct { s8 unitIndex; u8 field_0x1; } Z2ConnectCost; void Z2SpeechMgr2::selectUnit(bool param_0) { Z2ConnectCost cost[5]; if (field_0x401 >= 64) { field_0x0->stop(); return; } s8 unitIndex = random.get_uint8(Z2MdnPrm::sPrm[mMood].mainNum); s8 ZVar3; s8 cVar5; if (field_0x401 != 0 && param_0) { cVar5 = 0; s8 ZVar4 = field_0x402[field_0x401 - 1]; while (true) { bool bVar1 = false; unitIndex = random.get_uint8(Z2MdnPrm::sPrm[mMood].mainNum); for (int i = 0; i < field_0x401; i++) { if (field_0x402[i] == unitIndex) { bVar1 = true; break; } } if (bVar1) { continue; } for (int i = 0; i < cVar5; i++) { if (unitIndex == cost[i].unitIndex) { bVar1 = true; break; } } if (bVar1) { continue; } const Z2MdnPrm::Unit* units = Z2MdnPrm::sPrm[mMood].main; u8 local_3f = JMAAbs(units[unitIndex].start - units[ZVar4].end); Z2ConnectCost connectCost = {unitIndex, local_3f}; cost[cVar5] = connectCost; cVar5++; if (cVar5 == 5) { break; } } u16 tmp = cost[0].field_0x1; unitIndex = cost[0].unitIndex; for (int i = 0; i < 5; i++) { if (cost[i].field_0x1 < tmp) { tmp = cost[i].field_0x1; unitIndex = cost[i].unitIndex; } } } field_0x402[field_0x401] = unitIndex; field_0x401++; } void Z2SpeechMgr2::selectTail() { Z2ConnectCost cost[5]; s8 cVar9 = 0; s8 ZVar1 = field_0x402[field_0x401 - 1]; s8 ZVar6; u8 bVar3 = 0; while (true) { bool bVar5 = false; switch (mVoice) { case 2: bVar3 = Z2MdnPrm::sPrm[mMood].tailNum1; ZVar6 = random.get_uint8(bVar3); break; case 1: bVar3 = Z2MdnPrm::sPrm[mMood].tailNum2; ZVar6 = Z2MdnPrm::sPrm[mMood].tailNum1 + random.get_uint8(bVar3); break; default: return; } for (int i = 0; i < cVar9; i++) { if (ZVar6 == cost[i].unitIndex) { bVar5 = true; break; } } if (!bVar5) { u8 local_3f = JMAAbs(Z2MdnPrm::sPrm[mMood].tail[ZVar6] - Z2MdnPrm::sPrm[mMood].main[ZVar1].end); Z2ConnectCost connectCost = {ZVar6, local_3f}; cost[cVar9] = connectCost; cVar9++; if (cVar9 == bVar3 || cVar9 == 5) { s8 tmp_r8; u16 tmp_r9 = cost[0].field_0x1; tmp_r8 = cost[0].unitIndex; int local_3c = bVar3 < 5 ? bVar3 : 5; for (int i = 0; i < local_3c; i++) { if (cost[i].field_0x1 < tmp_r9) { tmp_r9 = cost[i].field_0x1; tmp_r8 = cost[i].unitIndex; } } field_0x402[field_0x401 - 1] = tmp_r8 + Z2MdnPrm::sPrm[mMood].mainNum; return; } } } } void Z2SpeechMgr2::framework() { switch (mVoice) { case 1: case 2: if (field_0x0) { field_0x3ff++; if (field_0x3ff > 30) { return; } } else { mTextCount = 0; } break; } } void Z2SpeechMgr2::playOneShotVoice(u8 speakerID, u16 param_1, Vec* posPtr, s8 param_3) { if (speakerID == 0) { return; } f32 fxmix = Z2GetSceneMgr()->getRoomReverb() / 127.0f; if (mVoice == 1 || mVoice == 2) { JAISoundID sound_id(-1); switch (param_1) { case 25: sound_id = Z2SE_MSG_V_MDN_D21; break; case 30: sound_id = Z2SE_MSG_V_MDN_LAUGH_30; break; case 31: sound_id = Z2SE_MSG_V_MDN_LAUGH_31; break; case 32: sound_id = Z2SE_MSG_V_MDN_LAUGH_32; break; case 100: sound_id = Z2SE_MSG_V_A_MDN_1; break; case 101: sound_id = Z2SE_MSG_V_A_MDN_2; break; case 102: sound_id = Z2SE_MSG_V_A_MDN_102; break; case 103: sound_id = Z2SE_MSG_V_A_MDN_103; break; case 104: sound_id = Z2SE_MSG_V_A_MDN_104; break; default: return; } if (sound_id != -1) { mSpeech.startSound(sound_id, &field_0x0, (JGeometry::TVec3*)posPtr, speakerID, fxmix, 1.0f, 1.0f, -1.0f, -1.0f, 0); } } else { JAISoundID sound_id = Z2SE_MESSAGE_SE_COMMON; switch (speakerID) { case 3: if (param_1 == 1) { Z2GetSeqMgr()->subBgmStart(Z2BGM_ITEM_GET_MINI); return; } break; case 30: if (param_1 == 15) { sound_id = Z2SE_TAMABE_V_TUTO_BIKKURI; } break; case 29: if (param_1 == 4) { sound_id = Z2SE_KYURY_MV_ZEKKU; } else if (param_1 == 5) { sound_id = Z2SE_KYURY_MV_WORRY; } break; case 32: if (param_1 == 6) { sound_id = Z2SE_MOI_MV_WOUND_UMEKI; } break; case 35: if (param_1 == 10) { sound_id = Z2SE_HANJO_MV_CRY; } break; case 37: if (param_1 == 10) { sound_id = Z2SE_BESU_MV_DOUYOU; } break; case 47: if (param_1 == 15) { sound_id = Z2SE_ZRA_MV_WOUND_BREATH; } else if (param_1 == 17) { sound_id = Z2SE_ZRA_MV_WOUND_COUGH; } break; case 69: if (param_1 == 1) { sound_id = Z2SE_MSG_V_CAT; } else if (param_1 == 2) { sound_id = Z2SE_MSG_V_PERU; } break; case 70: if (param_1 == 1) { sound_id = Z2SE_MSG_V_DOG; } break; case 71: if (param_1 == 1) { sound_id = Z2SE_MSG_V_KOKKO; } break; case 72: if (param_1 == 1) { sound_id = Z2SE_MSG_V_SQUIRREL; } break; case 73: if (param_1 == 1) { sound_id = Z2SE_MSG_V_MONKEY; } break; case 74: if (param_1 == 1) { sound_id = Z2SE_MSG_V_FROG; } break; case 107: if (param_1 == 1) { sound_id = Z2SE_MSG_V_MYNA; } break; case 113: if (param_1 == 1) { sound_id = Z2SE_HS_V_CRY_UMAKUSA; } break; case 112: if (param_1 == 1) { sound_id = Z2SE_TKJ_V_SHOP_TALK; } break; case 38: if (param_1 == 4) { sound_id = Z2SE_D21V_MDN_HATTOSURU; } break; } if (field_0x0) { field_0x0.releaseSound(); } mSpeech.startSound(sound_id, &field_0x0, (JGeometry::TVec3*)posPtr, speakerID, fxmix, 1.0f, 1.0f, -1.0f, -1.0f, 0); if (field_0x0) { mSpeech.setPortData(&field_0x0, 8, param_1, -1); } } } bool Z2SpeechMgr2::isMidnaSpeak() { if ((mVoice == 1 || mVoice == 2) && field_0x0) { return true; } return false; } Z2SpeechStarter::Z2SpeechStarter() : Z2SoundStarter(false) {} bool Z2SpeechStarter::startSound(JAISoundID soundID, JAISoundHandle* handlePtr, const JGeometry::TVec3* posPtr, u32 portData, f32 fxmix, f32 pitch, f32 volume, f32 pan, f32 dolby, u32 moveSteps) { JUT_ASSERT(1076, handlePtr); if (Z2GetSceneMgr()->isInDarkness() && Z2GetSceneMgr()->getDemoSeWaveNum() != 0x77 && Z2GetSceneMgr()->getDemoSeWaveNum() != 0x78) { fxmix = 1.0f; } else { f32 tmp = Z2GetStatusMgr()->getCameraInWaterDepthRatio() > 0.0f; if (tmp) { fxmix = tmp; } else if (Z2GetSceneMgr()->getDemoSeWaveNum() == 0x6c || Z2GetSceneMgr()->getDemoSeWaveNum() == 0x77) { fxmix = 0.07f; } else { fxmix += Z2GetEnvSeMgr()->getFogDensity() * 0.5f; if (fxmix > 1.0f) { fxmix = 1.0f; } } } bool ret = Z2GetAudioMgr()->startSound(soundID, handlePtr, posPtr); if (*handlePtr) { if (portData != 0) { setPortData(handlePtr, 6, portData, -1); } if (fxmix > 0.0f) { (*handlePtr)->getAuxiliary().moveFxMix(fxmix, moveSteps); } if (pitch != 1.0f) { (*handlePtr)->getAuxiliary().movePitch(pitch, moveSteps); } if (volume != 1.0f) { (*handlePtr)->getAuxiliary().moveVolume(volume, moveSteps); } if (pan != -1.0f) { (*handlePtr)->getAuxiliary().movePan(pan, moveSteps); } if (dolby != -1.0f) { (*handlePtr)->getAuxiliary().moveDolby(dolby, moveSteps); } } return ret; }