<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hemodding.wiki/index.php?action=history&amp;feed=atom&amp;title=Resources%2FMaster_Level</id>
	<title>Resources/Master Level - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://hemodding.wiki/index.php?action=history&amp;feed=atom&amp;title=Resources%2FMaster_Level"/>
	<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;action=history"/>
	<updated>2026-04-30T11:10:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=826&amp;oldid=prev</id>
		<title>Angryzor at 01:05, 18 February 2025</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=826&amp;oldid=prev"/>
		<updated>2025-02-18T01:05:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:05, 18 February 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Infobox Resource&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|type=[[Resources#Levels|Levels]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|extension=.mlevel&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|games=* [[Sonic Frontiers|Sonic Frontiers]] &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Shadow Generations|Shadow Generations]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|tools=* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Tools/KnuxTools|KnuxTools]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|status=Done&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|container=BINA&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|name=Master Level&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Starting with Sonic Frontiers, HE2 includes the Levels system to automatically and dynamically load resources when they are needed. Master Level is a resource type that contains information on which resources should be loaded to load a level, and also describes the dependencies between different levels. Master Level is stored in a Binary File container.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Starting with Sonic Frontiers, HE2 includes the Levels system to automatically and dynamically load resources when they are needed. Master Level is a resource type that contains information on which resources should be loaded to load a level, and also describes the dependencies between different levels. Master Level is stored in a Binary File container.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key hewiki:diff:1.41:old-825:rev-826:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=825&amp;oldid=prev</id>
		<title>Angryzor: Created page with &quot;Starting with Sonic Frontiers, HE2 includes the Levels system to automatically and dynamically load resources when they are needed. Master Level is a resource type that contains information on which resources should be loaded to load a level, and also describes the dependencies between different levels. Master Level is stored in a Binary File container.  == Structure == &lt;syntaxhighlight lang=&quot;cpp&quot;&gt; struct DependencyData { 	const char* name; 	unsigned long long unk1; };...&quot;</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=825&amp;oldid=prev"/>
		<updated>2025-02-18T01:03:06Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Starting with Sonic Frontiers, HE2 includes the Levels system to automatically and dynamically load resources when they are needed. Master Level is a resource type that contains information on which resources should be loaded to load a level, and also describes the dependencies between different levels. Master Level is stored in a Binary File container.  == Structure == &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt; struct DependencyData { 	const char* name; 	unsigned long long unk1; };...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Starting with Sonic Frontiers, HE2 includes the Levels system to automatically and dynamically load resources when they are needed. Master Level is a resource type that contains information on which resources should be loaded to load a level, and also describes the dependencies between different levels. Master Level is stored in a Binary File container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct DependencyData {&lt;br /&gt;
	const char* name;&lt;br /&gt;
	unsigned long long unk1;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResourceData {&lt;br /&gt;
	const char* path;&lt;br /&gt;
	const char* resourceType;&lt;br /&gt;
	unsigned long long unk1;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct LevelData {&lt;br /&gt;
	const char* name;&lt;br /&gt;
	int resourceCount;&lt;br /&gt;
	int dependencyCount;&lt;br /&gt;
	ResourceData** resources;&lt;br /&gt;
	DependencyData** dependencies;&lt;br /&gt;
	bool isPublic;&lt;br /&gt;
	bool hasResources;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct MasterLevelData {&lt;br /&gt;
	unsigned int magic;&lt;br /&gt;
	unsigned int version;&lt;br /&gt;
	int levelCount;&lt;br /&gt;
	LevelData** levels;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LevelData ===&lt;br /&gt;
The structure of the Master Level resource is fairly simple. At the top level, it simply consists of a list of level definitions. Each of these definitions contains the following data within them:&lt;br /&gt;
&lt;br /&gt;
* The level name. This name is a unique identifier that&amp;#039;s used whenever the game refers to the level, e.g. when it submits a &amp;quot;LoadLevel&amp;quot; request. &lt;br /&gt;
* A list of resources that must be loaded to load this level.&lt;br /&gt;
* A list of dependency levels, which will automatically be loaded when this level is loaded.&lt;br /&gt;
* A boolean &amp;lt;code&amp;gt;isPublic&amp;lt;/code&amp;gt; flag. If this flag is true, the level will be registered as a loadable level. If it is not, then the level can only be loaded as a dependency of other levels.&lt;br /&gt;
* A boolean &amp;lt;code&amp;gt;hasResources&amp;lt;/code&amp;gt; flag. If this flag is false, the game will not try to load the resources associated with this level. It is unclear what the purpose of this flag is.&lt;br /&gt;
&lt;br /&gt;
=== DependencyData ===&lt;br /&gt;
Every dependency of a level is described by a &amp;lt;code&amp;gt;DependencyData&amp;lt;/code&amp;gt; structure. It contains a pointer to the name of the dependency level. It also contains a second 64 bit zero value &amp;lt;code&amp;gt;unk1&amp;lt;/code&amp;gt;. It is possible that the whole of &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;unk1&amp;lt;/code&amp;gt; is actually a &amp;lt;code&amp;gt;csl::ut::VariableString&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
=== ResourceData ===&lt;br /&gt;
Every resource associated with a level is described by a &amp;lt;code&amp;gt;ResourceData&amp;lt;/code&amp;gt; structure. This structure contains the following:&lt;br /&gt;
&lt;br /&gt;
* The path to the resource. This is a standard ResourceManager URI.&lt;br /&gt;
* The resource type. This is an engine internal resource type name like &amp;lt;code&amp;gt;ResReflection&amp;lt;/code&amp;gt;. If this property is a null pointer, the resource type is deduced from the filename extension.&lt;br /&gt;
* A 64 bit zero value property &amp;lt;code&amp;gt;unk1&amp;lt;/code&amp;gt;. It is possible that the whole of &amp;lt;code&amp;gt;resourceType&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;unk1&amp;lt;/code&amp;gt; is actually a &amp;lt;code&amp;gt;csl::ut::VariableString&amp;lt;/code&amp;gt; object.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
</feed>