コード例 #1
0
        public Character(Database db, DNA dna, GTime time, int id) : this(db)
        {
            List <Gene> genes = dna.Genes;
            this.CID       = id;
            this.BirthTime = time;
            this.Dead      = false;
            this.DueDate   = new GTime(true);
            this.IsSingle  = true;
            this.Dna       = dna;

            // Gene Pair 1
            int gone = genes[0].ToInt() % 2;
            int gtwo = genes[1].ToInt() % 2;

            if (gone + gtwo == 1)
            {
                this.Gender = true;
            }

            else if (gone + gtwo == 0)
            {
                this.Gender = false;
            }

            else
            {
                Console.WriteLine("{0} has two y chromosomes", id);
            }

            this.Fname = NDB.GenFname(this.Gender);

            this.Lname = NDB.GenLname();
        }
コード例 #2
0
ファイル: RDB.cs プロジェクト: yretenai/Cethleann
        /// <summary>
        ///     Initialize with buffer and basic info about the FS
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="name"></param>
        /// <param name="directory"></param>
        public RDB(Span <byte> buffer, string name, string directory)
        {
            Name          = name;
            Header        = MemoryMarshal.Read <RDBHeader>(buffer);
            RDBDirectory  = directory;
            DataDirectory = buffer.Slice(SizeHelper.SizeOf <RDBHeader>(), Header.HeaderSize - SizeHelper.SizeOf <RDBHeader>()).ReadString() ?? string.Empty;
            Directory     = Path.Combine(directory, DataDirectory);

            var offset = Header.HeaderSize;

            for (var i = 0; i < Header.Count; ++i)
            {
                var(entry, typeblob, data) = ReadRDBEntry(buffer.Slice(offset));
                var fileEntry = entry.GetValueOrDefault();
                offset += (int)fileEntry.EntrySize.Align(4);
                Entries.Add((fileEntry, typeblob, DecodeOffset(((Span <byte>)data).ReadString() ?? "0")));
                KTIDToEntryId[fileEntry.FileKTID] = i;
            }

            if (!KTIDToEntryId.TryGetValue(Header.NameDatabaseKTID, out var nameDatabaseId))
            {
                return;
            }
            var nameBuffer = ReadEntry(nameDatabaseId);

            if (nameBuffer.Length == 0)
            {
                return;
            }
            NameDatabase = new NDB(nameBuffer.Span);
        }
コード例 #3
0
        public static void Main(string[] args)
        {
            Logger.PrintVersion("Nyotengu");
            var flags = CommandLineFlags.ParseFlags <FilelistFlags>(CommandLineFlags.PrintHelp, args);

            if (flags == null || string.IsNullOrWhiteSpace(flags.GameDir))
            {
                return;
            }

            Logger.Info("Nyotengu", "Generating filename list...");
            var nyotengu = new Cethleann.ManagedFS.Nyotengu(flags);

            nyotengu.LoadFileList(flags.FileList, flags.GameId);
            foreach (var rdb in Directory.GetFiles(flags.GameDir, "*.rdb"))
            {
                nyotengu.AddDataFS(rdb);
            }
            nyotengu.SaveGeneratedFileList(null, flags.GameId);

            Logger.Info("Nyotengu", "Generating KTID property list...");
            var propertyList = Cethleann.ManagedFS.Nyotengu.LoadKTIDFileListEx(null, "PropertyList");

            foreach (var rdb in nyotengu.RDBs)
            {
                for (var i = 0; i < rdb.Entries.Count; ++i)
                {
                    var entry = rdb.GetEntry(i);
                    if (entry.FileKTID == rdb.Header.NameDatabaseKTID)
                    {
                        continue;
                    }
                    if (entry.TypeInfoKTID != 0xbf6b52c7)
                    {
                        continue;
                    }
                    var namedb = new NDB(rdb.ReadEntry(i).Span);
                    foreach (var(_, strings) in namedb.Entries)
                    {
                        if (strings[1].Length == 0)
                        {
                            continue;
                        }
                        propertyList[RDB.Hash(strings[1])] = ("TypeInfo", strings[1]);
                        foreach (var str in strings.Skip(2))
                        {
                            propertyList[RDB.Hash(str)] = ("Property", str);
                        }
                    }
                }
            }
            Cethleann.ManagedFS.Nyotengu.SaveGeneratedFileList(propertyList, null, "DEBUG");
        }
コード例 #4
0
        private static void HashNDB(Span <byte> buffer, Dictionary <KTIDReference, string> typeInfo, Dictionary <KTIDReference, string> extra, DatabaseFlags flags)
        {
            var name = new NDB(buffer);

            foreach (var(_, strings) in name.Entries)
            {
                typeInfo[RDB.Hash(strings[1])] = strings[1];
                foreach (var str in strings.Skip(2))
                {
                    extra[RDB.Hash(str)] = str;
                }
            }
        }
コード例 #5
0
        private static void NDBFilelist(Span <byte> buffer, string ns, DatabaseFlags?flags, Dictionary <KTIDReference, string> filelist)
        {
            var name = new NDB(buffer);

            foreach (var(entry, _) in name.Entries)
            {
                if (filelist.ContainsKey(entry.KTID))
                {
                    continue;
                }
                var filename = name.NameMap[entry.KTID];
                Console.WriteLine($"{ns},{entry.KTID:x8},{filename}");
            }
        }
コード例 #6
0
        private static void ProcessNDB(Span <byte> buffer, DatabaseFlags flags)
        {
            var name = new NDB(buffer);

            foreach (var(entry, strings) in name.Entries)
            {
                var filename = name.NameMap[entry.KTID];
                var text     = $"{entry.KTID:x8},{RDB.Hash(strings[0]):x8},{strings.ElementAt(0)},{filename},{RDB.Hash(strings[1]):x8},{strings[1]}";
                if (strings.Length > 2)
                {
                    text += string.Join(string.Empty, strings.Skip(2));
                }
                Console.WriteLine(text);
            }
        }
コード例 #7
0
        private static string GetKTIDNameValue(KTIDReference ktid, bool ignoreNames, NDB ndb, params Dictionary <KTIDReference, string>[] filelists)
        {
            var name = ktid.GetName(ndb, filelists);

            if (name == null)
            {
                name = $"KTID {ktid:x8}";
            }
            else if (ignoreNames)
            {
                name = $"{name} (KTID {ktid:x8})";
            }

            return(name);
        }
コード例 #8
0
        private static void ProcessOBJDB(Span <byte> buffer, Dictionary <KTIDReference, string> ndbFiles, Dictionary <KTIDReference, string> filelist, Dictionary <KTIDReference, string> propertyList, HashSet <KTIDReference> filters, DatabaseFlags flags, HashSet <KTIDReference> missingProperties)
        {
            var db  = new OBJDB(buffer);
            var ndb = new NDB();

            if (ndbFiles.TryGetValue(db.Header.NameKTID, out var ndbPath))
            {
                ndb = new NDB(File.ReadAllBytes(ndbPath));
            }

            foreach (var(ktid, (entry, properties)) in db.Entries)
            {
                if (filters.Count != 0 && !filters.Contains(entry.TypeInfoKTID))
                {
                    continue;
                }
                var lines = new List <string>
                {
                    $"KTID: {GetKTIDNameValue(ktid, flags.ShowKTIDs, ndb, filelist, propertyList)}",
                    $"TypeInfo: {GetKTIDNameValue(entry.TypeInfoKTID, flags.ShowKTIDs, ndb, filelist, propertyList)}",
                    $"Parent: {GetKTIDNameValue(entry.ParentKTID, flags.ShowKTIDs, ndb, filelist, propertyList)}"
                };

                foreach (var(property, values) in properties)
                {
                    if (flags.CreateMissingList && !HasKTIDNameValue(property.PropertyKTID, ndb, propertyList))
                    {
                        missingProperties.Add(property.PropertyKTID);
                    }
                    lines.Add($"{property.TypeId} {GetKTIDNameValue(property.PropertyKTID, flags.ShowKTIDs, ndb, propertyList)}: {(values.Length == 0 ? "NULL" : string.Join(", ", values.Select(x => property.TypeId == OBJDBPropertyType.UInt32 && x != null ? GetKTIDNameValue((uint) x, flags.ShowKTIDs, ndb, filelist, propertyList) : x?.ToString() ?? "NULL")))}");
                }

                foreach (var line in lines)
                {
                    Console.Out.WriteLine(line);
                }

                Console.Out.WriteLine();
            }
        }
コード例 #9
0
        private static void Main(string[] args)
        {
            Logger.PrintVersion("Nyotengu");
            var flags = CommandLineFlags.ParseFlags <KTIDFlags>(CommandLineFlags.PrintHelp, args);

            if (flags == null)
            {
                return;
            }

            var ndb = new NDB();

            if (!string.IsNullOrEmpty(flags.NDBPath) && File.Exists(flags.NDBPath))
            {
                ndb = new NDB(File.ReadAllBytes(flags.NDBPath));
            }

            var objdb    = new OBJDB(File.ReadAllBytes(flags.OBJDBPath));
            var filelist = Cethleann.ManagedFS.Nyotengu.LoadKTIDFileList(flags.FileList, flags.GameId);

            var textureSection = new ResourceSectionHeader
            {
                Magic   = DataType.TextureGroup,
                Version = 0x30303630
            };

            var textureHeader = new TextureGroupHeader
            {
                System = objdb.Header.System
            };

            foreach (var ktid in flags.Paths)
            {
                if (!File.Exists(ktid))
                {
                    continue;
                }
                var ktidgroup    = new KTIDTextureSet(File.ReadAllBytes(ktid));
                var ktidsystem   = ktidgroup.Textures.Select(x => objdb.Entries.TryGetValue(x, out var tuple) ? tuple : default).ToArray();
コード例 #10
0
ファイル: NouchDBTests.cs プロジェクト: Kirosoft/NouchDB
        public string RevsDiff(NDB.NouchDB db, RemoteDB remoteDB, DocInfo[] docInfo)
        {
            var result = "[";
            Dictionary<string,string> docList = new Dictionary<string,string>();

            for (int f = 0; f < docInfo.Length; f++ )
            {
                DocInfo remoteDoc = docInfo[f];
                long revision = Convert.ToInt64(remoteDoc.Revision.Split('-')[0]);
                Node localDoc = db.GetDocInfo(remoteDoc.ID);

                if (localDoc == null)
                {
                    if (Convert.ToInt64(localDoc.currentVersion) < revision)
                    {
                        if (!docList.ContainsKey(remoteDoc.ID))
                        {
                            docList.Add(remoteDoc.ID,"");
                        }
                    }

                }
                else
                {
                    if (!docList.ContainsKey(remoteDoc.ID))
                    {
                        docList.Add(remoteDoc.ID, "");
                    }
                }

            }

            return JsonMapper.ToJson(docList.Keys);
        }
コード例 #11
0
 private static bool HasKTIDNameValue(KTIDReference ktid, NDB ndb, params Dictionary <KTIDReference, string>[] filelists) => ktid.GetName(ndb, filelists) == null;
コード例 #12
0
 public Character(Database db, Character dad, Character mom, GTime time, int id) : this(db, new DNA(dad.Dna.Miosis(), mom.Dna.Miosis()), time, id)
 {
     this.Fname = NDB.GenFname(this.Gender);
     this.Lname = dad.Lname;
 }
コード例 #13
0
ファイル: Program.cs プロジェクト: zarroboogs/Cethleann
        private static void Main(string[] args)
        {
            Logger.PrintVersion("Nyotengu");
            var flags = CommandLineFlags.ParseFlags <AnimationGraphFlags>(CommandLineFlags.PrintHelp, args);

            if (flags == null)
            {
                return;
            }

            var objdbNdb     = new NDB();
            var singletonNdb = new NDB();

            if (!string.IsNullOrEmpty(flags.OBJDBNDBPath) && File.Exists(flags.OBJDBNDBPath))
            {
                objdbNdb = new NDB(File.ReadAllBytes(flags.OBJDBNDBPath));
            }
            if (!string.IsNullOrEmpty(flags.SingletonDBNDBPath) && File.Exists(flags.SingletonDBNDBPath))
            {
                singletonNdb = new NDB(File.ReadAllBytes(flags.SingletonDBNDBPath));
            }

            // ReSharper disable InconsistentNaming
            var CE1DB        = new OBJDB(File.ReadAllBytes(flags.OBJDBPath));
            var CE1Singleton = new OBJDB(File.ReadAllBytes(flags.SingletonPath));
            // ReSharper restore InconsistentNaming
            var filelist       = Cethleann.ManagedFS.Nyotengu.LoadKTIDFileList(flags.FileList, flags.GameId);
            var animationFiles = new Dictionary <KTIDReference, string>();

            foreach (var directory in flags.AnimationDirectories ?? new HashSet <string?>())
            {
                if (directory == null || !Directory.Exists(directory))
                {
                    continue;
                }
                foreach (var file in Directory.GetFiles(directory))
                {
                    var basename = Path.GetFileNameWithoutExtension(file);
                    if (basename.Length != 8 || !KTIDReference.TryParse(basename, out var reference))
                    {
                        reference = RDB.Hash(file, "G1A");
                    }

                    animationFiles[reference] = file;
                }
            }

            var typeKTID = RDB.Hash("TypeInfo::Object::MotorCharacterSetting");

            foreach (var entry in CE1DB.Entries.Select(x => x.Value).Where(entry => entry.Record.TypeInfoKTID == typeKTID))
            {
                var(_, values) = entry.GetProperty("CharacterModelNameHash");
                if (values == null)
                {
                    continue;
                }
                var(_, actions) = entry.GetProperty("CharacterActionObjectNameHashArray");
                if (actions == null || actions.Length == 0)
                {
                    continue;
                }
                var nameHashes = values.Where(x => x != null).Select(x => new KTIDReference(x)).ToArray();
                if (!nameHashes.Any(x => flags.Hashes.Contains(x)))
                {
                    continue;
                }
                Logger.Info("ANIM", $"Found Character Settings: {string.Join(", ", nameHashes.Select(x => GetKTIDNameValue(x, false, objdbNdb, filelist)))}");
                var done = new HashSet <KTIDReference>();
                foreach (var actionHash in actions.Select(x => new KTIDReference(x)))
                {
                    if (!CE1Singleton.Entries.TryGetValue(actionHash, out var player))
                    {
                        Logger.Error("ANIM", $"Can't find animation player settings for {GetKTIDNameValue(actionHash, false, singletonNdb, filelist)}");
                        continue;
                    }

                    var properties          = player.GetProperties("AnimationDataObjectNameHashArray", "SrcAnimationDataObjectNameHash", "DstAnimationDataObjectNameHash", "FCurveAnimationDataObjectNameHash");
                    var animationDataHashes = properties.SelectMany(x => x.values ?? Array.Empty <object?>()).ToArray();
                    var ktidHashes          = animationDataHashes.Where(x => x != null).Select(x => new KTIDReference(x)).ToArray();
                    foreach (var animationDataHash in ktidHashes)
                    {
                        if (!CE1Singleton.Entries.TryGetValue(animationDataHash, out var animationData))
                        {
                            Logger.Error("ANIM", $"Can't find animation data for {GetKTIDNameValue(animationDataHash, false, singletonNdb, filelist)}");
                            continue;
                        }

                        var(_, animationHashes) = animationData.GetProperty("G1AFileResourceHash");
                        if (animationHashes == null)
                        {
                            Logger.Error("ANIM", $"Can't find animation references for {GetKTIDNameValue(animationDataHash, false, singletonNdb, filelist)}");
                            continue;
                        }

                        foreach (var animationHashActual in animationHashes.Where(x => x != null).Select(x => new KTIDReference(x)))
                        {
                            if (!done.Add(animationHashActual))
                            {
                                continue;
                            }
                            Logger.Info("ANIM", GetKTIDNameValue(animationHashActual, false, singletonNdb, filelist));

                            if (string.IsNullOrWhiteSpace(flags.Output) || !animationFiles.TryGetValue(animationHashActual, out var path))
                            {
                                continue;
                            }

                            if (!Directory.Exists(flags.Output))
                            {
                                Directory.CreateDirectory(flags.Output);
                            }
                            File.Copy(path, Path.Combine(flags.Output, Path.GetFileName(path)), true);
                        }
                    }
                }

                Console.WriteLine();
            }
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: zarroboogs/Cethleann
        private static string GetKTIDNameValue(KTIDReference ktid, bool ignoreNames, NDB ndb, params Dictionary <KTIDReference, string>[] filelists)
        {
            var name = $"{ktid:x8}";

            return(ignoreNames ? name : $"{ktid.GetName(ndb, filelists) ?? name}");
        }