Exemple #1
0
        public Message(EndianBinaryReader reader, int index)
        {
            Name   = $"msg_{ index }";
            IsUsed = "False";

            int msgBeginTest = reader.PeekReadInt32();

            while (msgBeginTest > (int)TextBoxType.COSMOSPHERE_CENTER_PORTRAIT || msgBeginTest < 0)
            {
                msgBeginTest = reader.ReadInt32();
                if (msgBeginTest <= (int)TextBoxType.COSMOSPHERE_CENTER_PORTRAIT && msgBeginTest >= 0)
                {
                    reader.BaseStream.Position -= 4;
                }
            }

            mBoxType               = (TextBoxType)reader.ReadInt32();
            mCharacterName         = (CharacterNameID)reader.ReadInt32();
            mCharacterIDOrPortrait = reader.ReadInt32();
            mMessageIndex          = reader.ReadInt32();
            mPortraitPosition      = (PortraitPosition)reader.ReadInt16();
            mUnknown1              = reader.ReadInt16();
            mMessageLength         = reader.ReadInt32();

            byte[] rawMessageData = reader.ReadBytes(mMessageLength);
            mMessageData = MessageDataProcessor.DecodeBytes(rawMessageData).Trim();

            MessageDataProcessor.PadMessageReader(reader);
        }
Exemple #2
0
        public Message(EndianBinaryReader reader)
        {
            boxType       = (TextboxType)reader.ReadInt32();
            characterName = (NameID)reader.ReadInt32();
            characterID   = reader.ReadInt32();
            index         = reader.ReadInt32();
            pos           = (PortraitPosition)reader.ReadInt16();
            unknown1      = reader.ReadInt16();

            int         messageSize = reader.ReadInt32();
            List <byte> chars       = new List <byte>();

            // Switch endianness because text is stored in big endian
            reader.CurrentEndian = Endian.Big;

            for (int i = 0; i < messageSize; i++)
            {
                if (reader.PeekReadByte() == (byte)'C' || reader.PeekReadByte() == (byte)'#' || reader.PeekReadByte() == (byte)'I')
                {
                    long curPos = reader.BaseStream.Position;
                    GetControlCode(reader, chars);
                    i--;
                    i += (int)(reader.BaseStream.Position - curPos);
                }
                else
                {
                    chars.Add(reader.ReadByte());
                }
            }

            if (chars[chars.Count - 1] != 0)
            {
                chars[chars.Count - 1] = 0;
            }

            reader.CurrentEndian = Endian.Little;

            Encoding shiftJis = Encoding.GetEncoding(932);

            char[] test = shiftJis.GetChars(chars.ToArray());

            string testString = new string(test);

            message = testString.Normalize(NormalizationForm.FormKD).Trim('\0');

            PadStream(reader, 4);

            while (reader.PeekReadUInt32() > 12)
            {
                reader.SkipByte();
            }
        }
Exemple #3
0
 public PortraitInfo(PortraitPosition portrait, CharacterType character, EmotionType emotion)
 {
     portraitType  = portrait;
     characterType = character;
     emotionType   = emotion;
 }
Exemple #4
0
 public void SetPortrait(PortraitPosition position, Texture2D portrait = null)
 {
     portraits[position].material.mainTexture = portrait;
     portraits[position].SetAllDirty();
     portraits[position].gameObject.SetActive(portrait != null);
 }
Exemple #5
0
 public DialogueScript(PortraitPosition portrait, CharacterType character, EmotionType emotion, string message)
     : this(message)
 {
     portraitInfo = new PortraitInfo(portrait, character, emotion);
 }