예제 #1
0
            /// <summary>Returns a CacheFile object based on a ResourcePtr</summary>
            /// <param name="cf">Halo2 cache housing the <paramref name="ptr"/> value</param>
            /// <param name="ptr">ResourcePtr to use</param>
            /// <returns>The CacheFile <paramref name="ptr"/> references</returns>
            /// <remarks>Returns null if <paramref name="ptr"/> doesn't point to anything</remarks>
            public static Blam.Halo2.CacheFile FromLocation(Blam.Halo2.CacheFile cf, Blam.ResourcePtr ptr)
            {
                if (ptr.Offset == -1)
                {
                    return(null);
                }

                var ver = cf.EngineVersion;

                if (ptr.Map == BlamLib.Blam.ResourcePtr.Location.Internal)
                {
                    return(cf);
                }

                if (ver == BlamVersion.Halo2_Xbox)
                {
                    switch (ptr.Map)
                    {
                    case BlamLib.Blam.ResourcePtr.Location.MainMenu: return(XboxMainmenu);

                    case BlamLib.Blam.ResourcePtr.Location.Shared:  return(XboxShared);

                    case BlamLib.Blam.ResourcePtr.Location.Campaign: return(XboxCampaign);
                    }
                }
                else if (ver == BlamVersion.Halo2_Alpha)
                {
                    switch (ptr.Map)
                    {
                    case BlamLib.Blam.ResourcePtr.Location.MainMenu: return(AlphaMainmenu);

                    case BlamLib.Blam.ResourcePtr.Location.Shared:  return(AlphaShared);

                    case BlamLib.Blam.ResourcePtr.Location.Campaign: throw new Debug.Exceptions.UnreachableException();
                    }
                }
                else if (ver == BlamVersion.Halo2_PC)
                {
                    switch (ptr.Map)
                    {
                    case BlamLib.Blam.ResourcePtr.Location.MainMenu: return(PcMainmenu);

                    case BlamLib.Blam.ResourcePtr.Location.Shared:  return(PcShared);

                    case BlamLib.Blam.ResourcePtr.Location.Campaign: return(PcCampaign);
                    }
                }

                return(null);
            }
예제 #2
0
            /// <summary>Returns a CacheFile object based on a ResourcePtr</summary>
            /// <remarks>
            /// If the resource is internal then <paramref name="is_internal"/> gets set to true
            /// and <paramref name="cf"/> is returned. If null and <paramref name="is_internal"/> is not set,
            /// the CacheFile is either not loaded or the location was invalid.
            ///
            /// Returns null if <paramref name="ptr"/> doesn't point to anything
            /// </remarks>
            /// <param name="cf">Halo2 cache housing the <paramref name="ptr"/> value</param>
            /// <param name="ptr">ResourcePtr to use</param>
            /// <param name="is_internal">bool reference to set if <paramref name="ptr"/> is internal</param>
            /// <returns>The CacheFile <paramref name="ptr"/> references</returns>
            public static Blam.Halo2.CacheFile FromLocation(Blam.Halo2.CacheFile cf, Blam.ResourcePtr ptr, out bool is_internal)
            {
                var ver = cf.EngineVersion;

                is_internal = false;

                if (ptr.Offset == -1)
                {
                    return(null);
                }

                if (ptr.Map == BlamLib.Blam.ResourcePtr.Location.Internal)
                {
                    is_internal = true;
                    return(cf);
                }

                return(FromLocation(cf, ptr));
            }