예제 #1
0
 public override void SetCommand(SceneWord command)
 {
     base.SetCommand(command);
     SegmentAddress = Command.Data2;
     if (SegmentAddress.Segment != (byte)ORom.Bank.scene)
     {
         throw new Exception();
     }
 }
예제 #2
0
 public override void SetCommand(SceneWord command)
 {
     base.SetCommand(command);
     TransitionActors = Command.Data1;
     SegmentAddress   = Command.Data2;
     if (command[4] != (byte)ORom.Bank.scene)
     {
         throw new Exception();
     }
 }
예제 #3
0
            public Scene_MQJson(BinaryReader br, int id, int start, int end)
            {
                File = new File_MQJson()
                {
                    Name  = $"Scene {id}",
                    Start = start.ToString("X8"),
                    End   = end.ToString("X8"),
                };

                Id = id;

                SceneWord cmd = new SceneWord();

                do
                {
                    br.Read(cmd, 0, 8);

                    var            seekback = br.BaseStream.Position;
                    HeaderCommands code     = (HeaderCommands)cmd.Code;


                    if (code == HeaderCommands.PathList)
                    {
                        SegmentAddress offset = cmd.Data2;
                        br.BaseStream.Position = offset.Offset;

                        InitPaths(br);
                    }
                    else if (code == HeaderCommands.TransitionActorList)
                    {
                        SegmentAddress actorOff = cmd.Data2;
                        br.BaseStream.Position = actorOff.Offset;

                        for (int i = 0; i < cmd.Data1; i++)
                        {
                            TActors.Add(Actor_MQJson.Read(br));
                        }
                    }
                    if (code == HeaderCommands.RoomList)
                    {
                        RoomsCount   = (int)cmd.Data1;
                        RoomsAddress = cmd.Data2;
                    }

                    br.BaseStream.Position = seekback;
                }while ((HeaderCommands)cmd.Code != HeaderCommands.End);
            }
예제 #4
0
            public Room_MQJson(BinaryReader br, int sceneId, int roomId, int start, int end)
            {
                File = new File_MQJson()
                {
                    Name  = $"Scene {sceneId}, Room {roomId}",
                    Start = start.ToString("X8"),
                    End   = end.ToString("X8"),
                };

                Id = roomId;

                SceneWord cmd = new SceneWord();

                do
                {
                    br.Read(cmd, 0, 8);

                    var seekback = br.BaseStream.Position;

                    if ((HeaderCommands)cmd.Code == HeaderCommands.ObjectList)
                    {
                        SegmentAddress offset = cmd.Data2;
                        br.BaseStream.Position = offset.Offset;

                        for (int i = 0; i < cmd.Data1; i++)
                        {
                            Objects.Add(br.ReadBigInt16().ToString("X4"));
                        }
                    }
                    else if ((HeaderCommands)cmd.Code == HeaderCommands.ActorList)
                    {
                        SegmentAddress actorOff = cmd.Data2;
                        br.BaseStream.Position = actorOff.Offset;

                        for (int i = 0; i < cmd.Data1; i++)
                        {
                            Actors.Add(Actor_MQJson.Read(br));
                        }
                    }

                    br.BaseStream.Position = seekback;
                }while ((HeaderCommands)cmd.Code != HeaderCommands.End);
            }
예제 #5
0
 public override void SetCommand(SceneWord command)
 {
     base.SetCommand(command);
     SegmentAddress = Command.Data2;
 }
예제 #6
0
 public virtual void SetCommand(SceneWord command)
 {
     Command = command;
 }
예제 #7
0
 public override void SetCommand(SceneWord command)
 {
     Command = command;
 }
예제 #8
0
        public static void MQRandoCompareHeaders(IExperimentFace face, List <string> filePath)
        {
            Rom n0 = new ORom(filePath[0], ORom.Build.N0);
            Rom mq = new ORom(filePath[1], ORom.Build.MQU);

            StringWriter sw = new StringWriter();

            foreach (Rom rom in new Rom[] { n0, mq })
            {
                for (int i = 0; i < 16; i++)
                {
                    var          scn = rom.Files.GetSceneFile(i);
                    BinaryReader br  = new BinaryReader(scn);

                    SceneWord cmd;
                    SceneWord roomCmd = new SceneWord();
                    bool      hasRoom = false;
                    do
                    {
                        cmd = new SceneWord();
                        br.Read(cmd, 0, 8);
                        //sw.WriteLine($"{i} -1 {cmd}");

                        if ((HeaderCommands)cmd.Code == HeaderCommands.RoomList)
                        {
                            hasRoom = true;
                            roomCmd = cmd;
                        }
                    }while ((HeaderCommands)cmd.Code != HeaderCommands.End);

                    if (hasRoom)
                    {
                        var seekback = br.BaseStream.Position;

                        br.BaseStream.Position = ((SegmentAddress)roomCmd.Data2).Offset;
                        for (int j = 0; j < roomCmd.Data1; j++)
                        {
                            var roomAddr = br.ReadBigInt32();
                            br.ReadBigInt32();

                            var          roomFile = rom.Files.GetFile(roomAddr);
                            BinaryReader brRoom   = new BinaryReader(roomFile);
                            do
                            {
                                cmd = new SceneWord();
                                brRoom.Read(cmd, 0, 8);
                                //sw.WriteLine($"{i} {j} {cmd}");

                                if ((HeaderCommands)cmd.Code == HeaderCommands.ActorList)
                                {
                                    var va = roomFile.Record.VRom;
                                    sw.WriteLine($"{i} {j} {va.Start:X8} {va.End:X8} {(cmd.Data1 * 0x10):X8}");
                                }
                            }while ((HeaderCommands)cmd.Code != HeaderCommands.End);
                        }
                        br.BaseStream.Position = seekback;
                    }
                }
            }
            face.OutputText(sw.ToString());
        }
예제 #9
0
 public abstract void SetCommand(SceneWord command);