Esempio n. 1
0
        public void InitializeTable()
        {
            Dictionary <ushort, MessageEntry> messageTable = new Dictionary <ushort, MessageEntry>();

            int    fileIndex     = RomUtils.GetFileIndexForWriting(MESSAGE_TABLE_ADDRESS);
            MMFile file          = RomData.MMFileList[fileIndex];
            int    code_baseAddr = MESSAGE_TABLE_ADDRESS - file.Addr;
            var    code_data     = file.Data;

            fileIndex = RomUtils.GetFileIndexForWriting(MESSAGE_DATA_ADDRESS);
            file      = RomData.MMFileList[fileIndex];

            var message_data = file.Data;

            while (true)
            {
                ushort textId = ReadWriteUtils.Arr_ReadU16(code_data, code_baseAddr);
                if (textId >= 0xFFFF)
                {
                    break;
                }

                int address = ReadWriteUtils.Arr_ReadS32(code_data, code_baseAddr + 4) & 0xFFFFFF;

                byte[] header = new byte[11];
                Array.Copy(message_data, address, header, 0, 11);

                int    cur     = address + 11 - 1;
                string message = "";

                do
                {
                    cur++;
                    message += (char)message_data[cur];
                }while (message_data[cur] != 0xBF);


                MessageEntry messageEntry = new MessageEntry()
                {
                    Id      = textId,
                    Header  = header,
                    Message = message
                };
                messageTable.Add(textId, messageEntry);
                code_baseAddr += 8;
            }

            messages = messageTable;
        }