<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hemodding.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Angryzor</id>
	<title>HEModdingWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hemodding.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Angryzor"/>
	<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php/Special:Contributions/Angryzor"/>
	<updated>2026-05-01T03:05:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Rendering&amp;diff=964</id>
		<title>Rendering</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Rendering&amp;diff=964"/>
		<updated>2025-11-01T16:45:38Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: Testing webhook&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page tries to document the various rendering aspects of Hedgehog Engine and Hedgehog Engine 2.&lt;br /&gt;
&lt;br /&gt;
== Rendering Concepts ==&lt;br /&gt;
&lt;br /&gt;
There are many different rendering &amp;quot;concepts&amp;quot; that shaders make use of:&lt;br /&gt;
&lt;br /&gt;
* [[Rendering/PBR|Physically based rendering (PBR)]]&lt;br /&gt;
* [[Rendering/Normal_mapping|Normal mapping]]&lt;br /&gt;
* [[Rendering/Weather|Weather]]&lt;br /&gt;
* [[Rendering/Vertex_colors|Vertex colors]]&lt;br /&gt;
* [[Rendering/Mesh_layers|Mesh layers]]&lt;br /&gt;
* [[Rendering/Deferred_rendering|Deferred rendering]]&lt;br /&gt;
* [[Rendering/|Dithering]]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=916</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=916"/>
		<updated>2025-03-01T22:27:16Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: Undo revision 915 by Angryzor (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor. In essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/ https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&amp;lt;br/&amp;gt;&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=915</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=915"/>
		<updated>2025-03-01T22:18:40Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information for the purpose of internal logging and spam prevention.&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor. In essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/ https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&amp;lt;br/&amp;gt;&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=914</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=914"/>
		<updated>2025-03-01T22:09:15Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are composed of the following things:&lt;br /&gt;
&lt;br /&gt;
* Path segments / nodes, which define the path itself.&lt;br /&gt;
* The path type, which associates automatic behavior to the path.&lt;br /&gt;
* The side paths (for resource-defined paths). These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
* The path length (for resource-defined paths).&lt;br /&gt;
&lt;br /&gt;
== Segments and nodes ==&lt;br /&gt;
The basic shape of the path is defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is a combination of 5 properties:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
=== Segment types ===&lt;br /&gt;
Segments come in multiple types that decide how they are interpolated. The type of each segment can be set individually from any of the following types:&lt;br /&gt;
&lt;br /&gt;
==== Straight ====&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
==== Smooth Nonuniform Spline ====&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the path, so make sure to choose the correct one for your purpose.&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths. You can still manually refer to these paths in objects though. [[Autorun volumes]] for example tend to be more reliable if the SV path is selected as a target manually, as this will prevent Sonic from launching off the path during turns.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=826</id>
		<title>Resources/Master Level</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=826"/>
		<updated>2025-02-18T01:05:34Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
|type=[[Resources#Levels|Levels]]&lt;br /&gt;
|extension=.mlevel&lt;br /&gt;
|games=* [[Sonic Frontiers|Sonic Frontiers]] &lt;br /&gt;
* [[Shadow Generations|Shadow Generations]]&lt;br /&gt;
|tools=* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|status=Done&lt;br /&gt;
|container=BINA&lt;br /&gt;
|name=Master Level&lt;br /&gt;
}}&lt;br /&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&#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>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=825</id>
		<title>Resources/Master Level</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/Master_Level&amp;diff=825"/>
		<updated>2025-02-18T01:03:06Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: 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;hr /&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&#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>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=722</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=722"/>
		<updated>2025-01-21T15:20:35Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├ General technical modding topics&lt;br /&gt;
 ├ Technical topics related to any Hedgehog Engine version&lt;br /&gt;
 ├ /Guides&lt;br /&gt;
 │ ├ General modding guides&lt;br /&gt;
 │ └ Guides related to modding any Hedgehog Engine version&lt;br /&gt;
 ├ /Tools&lt;br /&gt;
 │ └ Information about modding tools&lt;br /&gt;
 ├ /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
 │ ├ Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
 │ └ /Guides&lt;br /&gt;
 │   └ Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
 ├ /&amp;lt;game name&amp;gt;&lt;br /&gt;
 │ └ Technical topics related to a specific game&lt;br /&gt;
 └ /Guides&lt;br /&gt;
   └ Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=721</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=721"/>
		<updated>2025-01-21T15:20:24Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├ General technical modding topics&lt;br /&gt;
 ├ Technical topics related to any Hedgehog Engine version&lt;br /&gt;
 ├ /Guides&lt;br /&gt;
 │ ├ General modding guides&lt;br /&gt;
 │ └ Guides related to modding any Hedgehog Engine version&lt;br /&gt;
 ├ /Tools&lt;br /&gt;
 │ └ Information about modding tools&lt;br /&gt;
 ├ /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
 │ ├ Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
 │ ├ /Guides&lt;br /&gt;
 │   └ Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
 ├ /&amp;lt;game name&amp;gt;&lt;br /&gt;
 │ └ Technical topics related to a specific game&lt;br /&gt;
 └ /Guides&lt;br /&gt;
   └ Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=720</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=720"/>
		<updated>2025-01-21T15:18:12Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: Undo revision 719 by Angryzor (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 |-&amp;gt; General technical modding topics&lt;br /&gt;
 |-&amp;gt; Technical topics related to any Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /Guides&lt;br /&gt;
 |   |-&amp;gt; General modding guides&lt;br /&gt;
 |   |-&amp;gt; Guides related to modding any Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /Tools&lt;br /&gt;
 |   |-&amp;gt; Information about modding tools&lt;br /&gt;
 |-&amp;gt; /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
 |   |-&amp;gt; Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
 |   |-&amp;gt; /Guides&lt;br /&gt;
 |       |-&amp;gt; Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /&amp;lt;game name&amp;gt;&lt;br /&gt;
 |   |-&amp;gt; Technical topics related to a specific game&lt;br /&gt;
 |-&amp;gt; /Guides&lt;br /&gt;
     |-&amp;gt; Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=719</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=719"/>
		<updated>2025-01-21T15:17:51Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
* /&lt;br /&gt;
** General technical modding topics&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version&lt;br /&gt;
** /Guides&lt;br /&gt;
*** General modding guides&lt;br /&gt;
*** Guides related to modding any Hedgehog Engine version&lt;br /&gt;
** /Tools&lt;br /&gt;
*** Information about modding tools&lt;br /&gt;
** /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
*** Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
*** /Guides&lt;br /&gt;
**** Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
** /&amp;lt;game name&amp;gt;&lt;br /&gt;
*** Technical topics related to a specific game&lt;br /&gt;
*** /Guides&lt;br /&gt;
**** Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=718</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=718"/>
		<updated>2025-01-21T15:16:00Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 |-&amp;gt; General technical modding topics&lt;br /&gt;
 |-&amp;gt; Technical topics related to any Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /Guides&lt;br /&gt;
 |   |-&amp;gt; General modding guides&lt;br /&gt;
 |   |-&amp;gt; Guides related to modding any Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /Tools&lt;br /&gt;
 |   |-&amp;gt; Information about modding tools&lt;br /&gt;
 |-&amp;gt; /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
 |   |-&amp;gt; Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
 |   |-&amp;gt; /Guides&lt;br /&gt;
 |       |-&amp;gt; Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /&amp;lt;game name&amp;gt;&lt;br /&gt;
 |   |-&amp;gt; Technical topics related to a specific game&lt;br /&gt;
 |-&amp;gt; /Guides&lt;br /&gt;
     |-&amp;gt; Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=717</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=717"/>
		<updated>2025-01-21T15:15:49Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 |-&amp;gt; General technical modding topics&lt;br /&gt;
 |-&amp;gt; Technical topics related to any Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /Guides&lt;br /&gt;
 |   |-&amp;gt; General modding guides&lt;br /&gt;
 |   |-&amp;gt; Guides related to modding any Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /Tools&lt;br /&gt;
 |   |-&amp;gt; Information about modding tools&lt;br /&gt;
 |-&amp;gt; /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
 |   |-&amp;gt; Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
 |   |-&amp;gt; /Guides&lt;br /&gt;
 |       |-&amp;gt; Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
 |-&amp;gt; /&amp;lt;game name&amp;gt;&lt;br /&gt;
     |-&amp;gt; Technical topics related to a specific game&lt;br /&gt;
 |-&amp;gt; /Guides&lt;br /&gt;
     |-&amp;gt; Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=716</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=716"/>
		<updated>2025-01-21T15:15:05Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
&lt;br /&gt;
/&lt;br /&gt;
|-&amp;gt; General technical modding topics&lt;br /&gt;
|-&amp;gt; Technical topics related to any Hedgehog Engine version&lt;br /&gt;
|-&amp;gt; /Guides&lt;br /&gt;
|   |-&amp;gt; General modding guides&lt;br /&gt;
|   |-&amp;gt; Guides related to modding any Hedgehog Engine version&lt;br /&gt;
|-&amp;gt; /Tools&lt;br /&gt;
|   |-&amp;gt; Information about modding tools&lt;br /&gt;
|-&amp;gt; /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
|   |-&amp;gt; Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
|   |-&amp;gt; /Guides&lt;br /&gt;
|       |-&amp;gt; Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
|-&amp;gt; /&amp;lt;game name&amp;gt;&lt;br /&gt;
    |-&amp;gt; Technical topics related to a specific game&lt;br /&gt;
    |-&amp;gt; /Guides&lt;br /&gt;
        |-&amp;gt; Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=715</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=715"/>
		<updated>2025-01-21T15:14:56Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics: [[Rendering/PBR Rendering]], Sebastien Atmosphere Rendering, Texture compression formats, ...&lt;br /&gt;
** Technical topics related to any Hedgehog Engine version: [[Paths]], Set objects, SurfRide, Cyan, ...&lt;br /&gt;
** Technical topics related to a specific Hedgehog Engine version: [[HE2/ObjectWorld]], [[HE2/Scene Parameters]], ...&lt;br /&gt;
** Technical topics related to a specific game: [[Sonic Frontiers/NeedleFxSceneData]], [[Sonic Forces/Avatar editor]], ...&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides: Compressing textures to DXT, Retopology with Blender, Creating CRIware ACBs, ...&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version: Converting a model to ResModel, Porting stages using HSON, ...&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Guides related to modding a specific game: Creating new cyberspace portals, Adding Werehog abilities, ...&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools: HedgeSet, Blendhog Level Creator, ...&lt;br /&gt;
&lt;br /&gt;
Currently we strive to maintain the following URL structure to place these topics:&lt;br /&gt;
/&lt;br /&gt;
|-&amp;gt; General technical modding topics&lt;br /&gt;
|-&amp;gt; Technical topics related to any Hedgehog Engine version&lt;br /&gt;
|-&amp;gt; /Guides&lt;br /&gt;
|   |-&amp;gt; General modding guides&lt;br /&gt;
|   |-&amp;gt; Guides related to modding any Hedgehog Engine version&lt;br /&gt;
|-&amp;gt; /Tools&lt;br /&gt;
|   |-&amp;gt; Information about modding tools&lt;br /&gt;
|-&amp;gt; /&amp;lt;engine name, HE1 or HE2&amp;gt;&lt;br /&gt;
|   |-&amp;gt; Technical topics related to a specific Hedgehog Engine version&lt;br /&gt;
|   |-&amp;gt; /Guides&lt;br /&gt;
|       |-&amp;gt; Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
|-&amp;gt; /&amp;lt;game name&amp;gt;&lt;br /&gt;
    |-&amp;gt; Technical topics related to a specific game&lt;br /&gt;
    |-&amp;gt; /Guides&lt;br /&gt;
        |-&amp;gt; Guides related to modding a specific game&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=714</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=714"/>
		<updated>2025-01-21T14:52:16Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics&lt;br /&gt;
** Topics related to modding any Hedgehog Engine version.&lt;br /&gt;
** Topics related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Topics related to modding a specific game.&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
** Guides related to modding a specific game.&lt;br /&gt;
&lt;br /&gt;
* General Information&lt;br /&gt;
** Information about modding tools&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=713</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=713"/>
		<updated>2025-01-21T14:50:56Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following general classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
** General technical modding topics&lt;br /&gt;
** Topics related to modding any Hedgehog Engine version.&lt;br /&gt;
** Topics related to modding a specific Hedgehog Engine version.&lt;br /&gt;
** Topics related to modding a specific game.&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
** General modding guides&lt;br /&gt;
** Guides related to modding any Hedgehog Engine version&lt;br /&gt;
** Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
** Guides related to modding a specific game.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=712</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=712"/>
		<updated>2025-01-21T14:50:37Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following general classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
  * General technical modding topics&lt;br /&gt;
  * Topics related to modding any Hedgehog Engine version.&lt;br /&gt;
  * Topics related to modding a specific Hedgehog Engine version.&lt;br /&gt;
  * Topics related to modding a specific game.&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
  * General modding guides&lt;br /&gt;
  * Guides related to modding any Hedgehog Engine version&lt;br /&gt;
  * Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
  * Guides related to modding a specific game.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=711</id>
		<title>HEModdingWiki:Style guide</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Style_guide&amp;diff=711"/>
		<updated>2025-01-21T14:50:21Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: Created page with &amp;quot;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.  == General...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While HEModdingWiki is an open library anyone can contribute to, some direction is generally needed to keep a consistent style and structure on the wiki. This page outlines some general guidelines on how to structure pages and what writing style to maintain when contributing to the wiki. This page has been protected because any changes to it should be collectively discussed. If you would like to amend this page, please open a topic in the discussion section.&lt;br /&gt;
&lt;br /&gt;
== General structure of the wiki ==&lt;br /&gt;
We identify the following general classes of topics:&lt;br /&gt;
&lt;br /&gt;
* Technical topics&lt;br /&gt;
    * General technical modding topics&lt;br /&gt;
    * Topics related to modding any Hedgehog Engine version.&lt;br /&gt;
    * Topics related to modding a specific Hedgehog Engine version.&lt;br /&gt;
    * Topics related to modding a specific game.&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
    * General modding guides&lt;br /&gt;
    * Guides related to modding any Hedgehog Engine version&lt;br /&gt;
    * Guides related to modding a specific Hedgehog Engine version&lt;br /&gt;
    * Guides related to modding a specific game.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=696</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=696"/>
		<updated>2025-01-19T16:36:31Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Node list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
| type = [[Resources#Acceleration Structures|Acceleration Structures]]&lt;br /&gt;
| status = Done&lt;br /&gt;
| name=K-D Tree&lt;br /&gt;
}}&lt;br /&gt;
K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth and 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes a slice in the object list that contains the object ids belonging to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 4.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits is instead and unsigned integer that contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure describing this leaf node in the leaves list. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=695</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=695"/>
		<updated>2025-01-19T16:34:37Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* The node data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
| type = [[Resources#Acceleration Structures|Acceleration Structures]]&lt;br /&gt;
| status = Done&lt;br /&gt;
| name=K-D Tree&lt;br /&gt;
}}&lt;br /&gt;
K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth and 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes a slice in the object list that contains the object ids belonging to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits is instead and unsigned integer that contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure describing this leaf node in the leaves list. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=694</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=694"/>
		<updated>2025-01-19T16:33:22Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Top level data structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
| type = [[Resources#Acceleration Structures|Acceleration Structures]]&lt;br /&gt;
| status = Done&lt;br /&gt;
| name=K-D Tree&lt;br /&gt;
}}&lt;br /&gt;
K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth and 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes a slice in the object list that contains the object ids belonging to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=693</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=693"/>
		<updated>2025-01-19T16:31:28Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Top level data structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
| type = [[Resources#Acceleration Structures|Acceleration Structures]]&lt;br /&gt;
| status = Done&lt;br /&gt;
| name=K-D Tree&lt;br /&gt;
}}&lt;br /&gt;
K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth and 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=692</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=692"/>
		<updated>2025-01-19T16:30:30Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
| type = [[Resources#Acceleration Structures|Acceleration Structures]]&lt;br /&gt;
| status = Done&lt;br /&gt;
| name=K-D Tree&lt;br /&gt;
}}&lt;br /&gt;
K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Template:Infobox_Resource&amp;diff=691</id>
		<title>Template:Infobox Resource</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Template:Infobox_Resource&amp;diff=691"/>
		<updated>2025-01-19T16:29:15Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
 | title   = {{{name}}}&lt;br /&gt;
 | autoheaders = y&lt;br /&gt;
 | headerstyle = background: lightgrey&lt;br /&gt;
 | label1 = Resource Type&lt;br /&gt;
 | data1 = {{{type|}}}&lt;br /&gt;
 | label2 = File Extension &lt;br /&gt;
 | data2 = {{{extension|}}}&lt;br /&gt;
 | label3 = Used In Games &lt;br /&gt;
 | data3 = {{{games|}}}&lt;br /&gt;
 | label4 = Container Format&lt;br /&gt;
 | data4 = {{{container|}}}&lt;br /&gt;
 | label5 = Editing Tools&lt;br /&gt;
 | data5 = {{{tools|}}}&lt;br /&gt;
 | label6 = Reverse Engineering Status&lt;br /&gt;
 | data6 = {{{status|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=690</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=690"/>
		<updated>2025-01-19T16:27:44Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Resource&lt;br /&gt;
| type = [[Resources#Set Objects|Set Objects]]&lt;br /&gt;
| status = Done&lt;br /&gt;
| name=K-D Tree&lt;br /&gt;
}}&lt;br /&gt;
K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=689</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=689"/>
		<updated>2025-01-19T16:21:56Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* The node data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=688</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=688"/>
		<updated>2025-01-19T16:19:37Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Node list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both deadZoneStartCoordOrLeafIndexAndNodeType and deadZoneEndCoord. This is also the only place where the K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=687</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=687"/>
		<updated>2025-01-19T16:19:09Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* The node data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both deadZoneStartCoordOrLeafIndexAndNodeType and deadZoneEndCoord. This is also the only place where K-D Tree node list differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=686</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=686"/>
		<updated>2025-01-19T16:17:49Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Node list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;2 ^ depth + index in layer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both deadZoneStartCoordOrLeafIndexAndNodeType and deadZoneEndCoord. This is also the only place where K-D Tree differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=685</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=685"/>
		<updated>2025-01-19T16:16:47Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Node list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;(2 ^ depth + index in layer)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both deadZoneStartCoordOrLeafIndexAndNodeType and deadZoneEndCoord. This is also the only place where K-D Tree differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=684</id>
		<title>Resources/K-D Tree</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources/K-D_Tree&amp;diff=684"/>
		<updated>2025-01-19T16:14:26Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: Created page with &amp;quot;K-D Tree is a resource encoding a k-d tree acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the Path resource. An extremely similar structure is also found in the SvCol and FxCol resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;K-D Tree is a resource encoding a [[wikipedia:K-d_tree|k-d tree]] acceleration structure. It is used in various locations as a runtime resource in the engine, and also embedded in the [[Resources/Path|Path]] resource. An extremely similar structure is also found in the [[Resources/SvCol|SvCol]] and [[Resources/FxCol|FxCol]] resources. Presumably ResKdTree was built as a reusable generalization of these structures, as at least HE2 does not use the one embedded in SvCol at all, and only minimally uses the one embedded in FxCol, instead building a ResKdTree at runtime.&lt;br /&gt;
&lt;br /&gt;
Since K-D tree is meant to be a reusable k-d tree encoding, it does not directly refer to any objects in the k-d tree&#039;s leaves, instead only referring to them by 32 bit indices. It is meant to be used in conjunction with some other datastructure that maps these indices to actual objects. In runtime-generated K-D trees this is done through the [[HE2/BvWorld|BvWorld]] class.&lt;br /&gt;
&lt;br /&gt;
ResKdTree has never been seen separately in its own resource file, so it does not have a designated container. When embedded it&#039;s usually found in a BinaryFile container.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;enum class ResKdTreeNodeType {&lt;br /&gt;
	SPLIT_X,&lt;br /&gt;
	SPLIT_Y,&lt;br /&gt;
	SPLIT_Z,&lt;br /&gt;
	LEAF,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeLeafNodeData {&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	int objectsOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct ResKdTreeData {&lt;br /&gt;
	int depth;&lt;br /&gt;
	int nodeCount;&lt;br /&gt;
	ResKdTreeNodeData* nodes;&lt;br /&gt;
	int leafCount;&lt;br /&gt;
	ResKdTreeLeafNodeData* leaves;&lt;br /&gt;
	int objectCount;&lt;br /&gt;
	unsigned int* objects;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top level data structure ==&lt;br /&gt;
The top level data structure holds the tree&#039;s maximum depth, and then 3 arrays specified as C style count + array pointer tuples:&lt;br /&gt;
&lt;br /&gt;
* The node list, which describes all nodes of the k-d tree.&lt;br /&gt;
* The leaf list, which for each leaf describes slices in the object list that belong to this leaf.&lt;br /&gt;
* The object list, which is a concatenated list of those slices of object indices&lt;br /&gt;
&lt;br /&gt;
== Node list ==&lt;br /&gt;
[[File:K-d tree diagram.png|thumb|A k-d tree with depth 3.]]&lt;br /&gt;
The node list is the main part of K-D tree, and the most complex to understand, as it&#039;s using an encoding that balances space-efficiency and runtime efficiency. Essentially it&#039;s a array of tuples of 2 32-bit values, named &amp;lt;code&amp;gt;ResKdTreeNodeData&amp;lt;/code&amp;gt; in the code above. Each tuple describes one node in the tree. Given the tree shown on the right, the nodes are laid out as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!15&lt;br /&gt;
!...&lt;br /&gt;
|-&lt;br /&gt;
|/&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|c&lt;br /&gt;
|d&lt;br /&gt;
|e&lt;br /&gt;
|f&lt;br /&gt;
|g&lt;br /&gt;
|h&lt;br /&gt;
|i&lt;br /&gt;
|j&lt;br /&gt;
|k&lt;br /&gt;
|l&lt;br /&gt;
|m&lt;br /&gt;
|n&lt;br /&gt;
|o&lt;br /&gt;
|...&lt;br /&gt;
|}&lt;br /&gt;
The first item is intentionally unused. The advantage of this layout is that every node of the k-d tree can be efficiently indexed in &amp;lt;code&amp;gt;O(1)&amp;lt;/code&amp;gt; with the formula &amp;lt;code&amp;gt;(2 ^ depth + index in layer)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The node data ===&lt;br /&gt;
As mentioned before, every node consists of 2 32 bit values:&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;struct ResKdTreeNodeData {&lt;br /&gt;
	unsigned int deadZoneStartCoordOrLeafIndexAndNodeType;&lt;br /&gt;
	float deadZoneEndCoord;&lt;br /&gt;
};&amp;lt;/syntaxhighlight&amp;gt;The first property of this structure, &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt;, is a bitfield, of which the lower 2 bits define the &amp;quot;type&amp;quot; of the node, and the rest of the bits define another value depending on the node&#039;s type. There are 4 possible node types: &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_X&amp;lt;/code&amp;gt;: This node splits space along the X axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Y&amp;lt;/code&amp;gt;: This node splits space along the Y axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;SPLIT_Z&amp;lt;/code&amp;gt;: This node splits space along the Z axis.&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAF&amp;lt;/code&amp;gt;: This node is a leaf node.&lt;br /&gt;
&lt;br /&gt;
For the splitting node types, the upper 30 bits of &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; are a float value, describing the position along the splitting axis where a part of space starts that does not contain any objects (the &amp;quot;dead zone&amp;quot;), in other words the end of the left child&#039;s area of space. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; describes the position along the splitting axis where the dead zone ends, i.e. where the area of space belonging to the right child begins.&lt;br /&gt;
&lt;br /&gt;
For leaf nodes, the upper 30 bits instead contains the index of the &amp;lt;code&amp;gt;ResKdTreeLeafNodeData&amp;lt;/code&amp;gt; structure in the leaves list describing this leaf node. &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt; is 0.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the node list encoding, some slots in the node list will correspond to non-existing nodes (index 0, and all indices that would belong to children of leaf nodes). These slots contain the value 0 for both deadZoneStartCoordOrLeafIndexAndNodeType and deadZoneEndCoord. This is also the only place where K-D Tree differs from the k-d tree encodings in FxCol and SvCol: in FxCol and SvCol invalid nodes instead have the value -1 for &amp;lt;code&amp;gt;deadZoneStartCoordOrLeafIndexAndNodeType&amp;lt;/code&amp;gt; and 0 for &amp;lt;code&amp;gt;deadZoneEndCoord&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=File:K-d_tree_diagram.png&amp;diff=683</id>
		<title>File:K-d tree diagram.png</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=File:K-d_tree_diagram.png&amp;diff=683"/>
		<updated>2025-01-19T16:02:56Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A diagram of a k-d tree&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources&amp;diff=682</id>
		<title>Resources</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources&amp;diff=682"/>
		<updated>2025-01-19T15:19:45Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Resources are the data files that contain things like 3D models, textures, animations and any other kind of assets. Many of these resources are stored in proprietary formats optimized for fast loading times, and thus require special tools to be edited by modders. Many of them are also built using proprietary SEGA technologies, like the ASM animation system. On this page we provide a list of all known resources supported by the Hedgehog Engine, their support in various games and tools that can be used to edit them.&lt;br /&gt;
&lt;br /&gt;
== Archives ==&lt;br /&gt;
Archives are compressed archives (&amp;quot;zip files&amp;quot;) that contain most of the game&#039;s data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Packfile|Packfile]]&lt;br /&gt;
|Compressed archive containing most other resources.&lt;br /&gt;
|.pac&lt;br /&gt;
|Packfile&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeArcPack|HedgeArcPack]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Packfile Info|Packfile Info]]&lt;br /&gt;
|Contains information about a packfile.&lt;br /&gt;
|&lt;br /&gt;
|PackfileInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Packfile Extended Info|Packfile Extended Info]]&lt;br /&gt;
|Contains extended information about a packfile.&lt;br /&gt;
|&lt;br /&gt;
|PackfileExtendedInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Depend|Depend]]&lt;br /&gt;
|Stores information about packfile dependencies.&lt;br /&gt;
|.pac.d&lt;br /&gt;
|ResDepend&lt;br /&gt;
|N/A&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Pac General|Pac General]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ResPacGeneral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Virtual Archive|Virtual Archive]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|VirtualArchive&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AR File&lt;br /&gt;
|Archive containing resources.&lt;br /&gt;
|.ar&lt;br /&gt;
|&lt;br /&gt;
|N/A&lt;br /&gt;
|-&lt;br /&gt;
|ARL File&lt;br /&gt;
|Link file containing data on what each .ar file stores and its appropriate splits.&lt;br /&gt;
|.arl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeArcPack|HedgeArcPack]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Levels are a new system in [[Games/Sonic Frontier&#039;s|Sonic Frontiers]] and up that allow the game to dynamically load other resources when they are needed. They specify which resources need to be loaded to load a certain &amp;quot;level&amp;quot;. This is a system similar to Unreal Engine&#039;s level system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Level|Level]]&lt;br /&gt;
|A special resource that&#039;s only used to check whether a level has been loaded in the engine. It does not contain any data.&lt;br /&gt;
|.level&lt;br /&gt;
|ResLevel&lt;br /&gt;
|N/A&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Master Level|Master Level]]&lt;br /&gt;
|Information about levels: which levels depend on each other, and also which resources to load in order to load a level.&lt;br /&gt;
|.mlevel&lt;br /&gt;
|ResMasterLevel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Reflection|Reflection]]&lt;br /&gt;
|Reflection-enabled configuration data. Contains parameters that can be edited by developers without changing game code.&lt;br /&gt;
|.rfl&lt;br /&gt;
|ResReflection&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/010 Editor Binary Templates|010 Editor Binary Templates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Set Objects ==&lt;br /&gt;
Set object data is what specifies where game objects are placed and how they are configured. This is what you&#039;ll be editing most when making a stage mod.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/ObjectWorld / GEdit|ObjectWorld / GEdit]]&lt;br /&gt;
|Object placement and parameter data (HE2).&lt;br /&gt;
|.gedit&lt;br /&gt;
|ResObjectWorld&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/HedgeSet|HedgeSet]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Set Object|Orca: Set Object]]&lt;br /&gt;
|Object placement and parameter data (HE1).&lt;br /&gt;
|.orc&lt;br /&gt;
|ResOrcaData&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/GLVL|GLVL]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Gismos ==&lt;br /&gt;
Gismos are small reusable objects (that can potentially have physics applied) intended usually for decoration.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Gismo Config Design|Gismo Config Design]]&lt;br /&gt;
|Defines the properties of gismo objects.&lt;br /&gt;
|.gismod&lt;br /&gt;
|ResGismoConfigDesign&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Gismo Config Plan|Gismo Config Plan]]&lt;br /&gt;
|&lt;br /&gt;
|.gismop&lt;br /&gt;
|ResGismoConfigPlan&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Models ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Model| Model]]&lt;br /&gt;
| Contains 3D model information (also contains an armature).&lt;br /&gt;
|.model&lt;br /&gt;
|ResModel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/ModelConverter|ModelConverter]]&lt;br /&gt;
* [[Tools/modelfbx|modelfbx]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Terrain Model|Terrain Model]]&lt;br /&gt;
|Contains 3D model information specifically for terrain models. Similar to &amp;quot;Model&amp;quot; but does not contain an armature.&lt;br /&gt;
|.terrain-model&lt;br /&gt;
|ResTerrainModel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/ModelConverter|ModelConverter]]&lt;br /&gt;
* [[Tools/modelfbx|modelfbx]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Heightfield|Heightfield]]&lt;br /&gt;
|Height field maps.&lt;br /&gt;
|.heightfield&lt;br /&gt;
|ResHeightField&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HeightFielder|HeightFielder]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Model Pointcloud|Model Pointcloud]]&lt;br /&gt;
| Placement information for model or terrain model instances.&lt;br /&gt;
|.pcmodel&lt;br /&gt;
|ResPointcloudModel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Map|Orca: Map]]&lt;br /&gt;
|Placement information for model or terrain model instances.&lt;br /&gt;
|.map.bin&lt;br /&gt;
|ResDivMap&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Model Instance Info|MIRAGE Model Instance Info]]&lt;br /&gt;
|Contains information about model instances.&lt;br /&gt;
|.model-instanceinfo&lt;br /&gt;
|ResMirageModelInstanceInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Terrain Instance Info|MIRAGE Terrain Instance Info]]&lt;br /&gt;
|Contains information about terrain model instances.&lt;br /&gt;
|.terrain-instanceinfo&lt;br /&gt;
|ResMirageTerrainInstanceInfo&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vertex Link Info|Vertex Link Info]]&lt;br /&gt;
|&lt;br /&gt;
|.vli&lt;br /&gt;
|ResVertexLinkInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MetaTerrainInstance&lt;br /&gt;
|A file containing model and lightfield data capable of animating, commonly used for grass and clouds.&lt;br /&gt;
|.mti&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Textures ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Texture|Texture]]&lt;br /&gt;
|2D textures for model skinning.&lt;br /&gt;
|.dds&lt;br /&gt;
|ResTexture&lt;br /&gt;
|&lt;br /&gt;
* [https://developer.nvidia.com/texture-tools-exporter nVidia Texture Tools Exporter]&lt;br /&gt;
* DirectX texconv&lt;br /&gt;
* [https://www.gimp.org/ GIMP (cannot read BC7)]&lt;br /&gt;
* [https://www.getpaint.net/ Paint.NET]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Streaming Texture|Streaming Texture]]&lt;br /&gt;
|Streamed 2D textures.&lt;br /&gt;
|&lt;br /&gt;
|ResStreamingTexture&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Material|Material]]&lt;br /&gt;
|Material information. Contains shader parameters and texture names.&lt;br /&gt;
|.material&lt;br /&gt;
|ResMaterial&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Terrain Material|Terrain Material]]&lt;br /&gt;
|Terrain material information.&lt;br /&gt;
|.terrain-material&lt;br /&gt;
|ResTerrainMaterial&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Material (Unleashed)|Material]]&lt;br /&gt;
|Contains shader information and texset resource information.&lt;br /&gt;
|.material&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|Contains parameter information for texture files linked to a material.&lt;br /&gt;
|.texture&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
|-&lt;br /&gt;
|Texset&lt;br /&gt;
|Contains groupings of textures linked to a material.&lt;br /&gt;
|.texset&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
All kinds of animation data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/PXD Skeleton|PXD Skeleton]]&lt;br /&gt;
|Skeleton for PXD animations.&lt;br /&gt;
|.skl.pxd&lt;br /&gt;
|ResSkeletonPxd&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Sonic Frontiers Animation Tools|Sonic Frontiers Animation Tools]] &lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/PXD Animation|PXD Animation]]&lt;br /&gt;
|Animation data.&lt;br /&gt;
|.anm.pxd&lt;br /&gt;
|ResAnimationPxd&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Sonic Frontiers Animation Tools|Sonic Frontiers Animation Tools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/PBA Skeleton|PBA Skeleton]]&lt;br /&gt;
|Skeleton for physics based animations.&lt;br /&gt;
|.pba&lt;br /&gt;
|ResPhysicalSkeleton&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Animation State Machine|Animation State Machine]]&lt;br /&gt;
|Animation State Machine data. Handles animation blending, animation states, animation triggers, etc.&lt;br /&gt;
|.asm&lt;br /&gt;
|ResAnimator&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/HelperBone|HelperBone]]&lt;br /&gt;
|Currently unknown.&lt;br /&gt;
|.helperbone.bin&lt;br /&gt;
|ResHelperBone&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Material Animation|Material Animation]]&lt;br /&gt;
|Material animations.&lt;br /&gt;
|.mat-anim&lt;br /&gt;
|ResAnimMaterial&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/UV Animation|UV Animation]]&lt;br /&gt;
|Texture UV animations (presumably Wii SRT0).&lt;br /&gt;
|.uv-anim&lt;br /&gt;
|ResAnimTexSrt&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KwasTools|KwasTools]] (he_anim_tool)&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Texture Pattern Animation|Texture Pattern Animation]]&lt;br /&gt;
|Texture pattern animations (presumably Wii PAT0).&lt;br /&gt;
|.pt-anim&lt;br /&gt;
|ResAnimTexPat&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Visibility Animation|Visibility Animation]]&lt;br /&gt;
|Bone visibility animations (presumably Wii VIS0).&lt;br /&gt;
|.vis-anim&lt;br /&gt;
|ResAnimVis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Camera Animation|Camera Animation]]&lt;br /&gt;
|Camera animations.&lt;br /&gt;
|.cam-anim&lt;br /&gt;
|ResAnimCameraContainer&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KwasTools|KwasTools]] (he_anim_tool)&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Light Animation|Light Animation]]&lt;br /&gt;
|Light animations.&lt;br /&gt;
|.lit-anim&lt;br /&gt;
|ResAnimLightContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vertex Animation Texture|Vertex Animation Texture]]&lt;br /&gt;
|Vertex animation textures (textures that efficiently encode large scale animations on vertices).&lt;br /&gt;
|.vat&lt;br /&gt;
|ResVertexAnimationTexture&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Havok Skeleton|Havok Skeleton]]&lt;br /&gt;
|Skeleton for Havok Animations&lt;br /&gt;
|.skl.hkx&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Havok Animation|Havok Animation]]&lt;br /&gt;
|Animation data.&lt;br /&gt;
|.anm.hkx&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Light|MIRAGE Light]]&lt;br /&gt;
|MIRAGE point lights.&lt;br /&gt;
|.light&lt;br /&gt;
|ResMirageLight&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Lightfield|MIRAGE Lightfield]]&lt;br /&gt;
|MIRAGE light field data.&lt;br /&gt;
|.lft&lt;br /&gt;
|ResMirageLightField&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/SH Lightfield|SH Lightfield]]&lt;br /&gt;
|Spherical harmonics based light field data.&lt;br /&gt;
|.lf&lt;br /&gt;
|ResSHLightField&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Probe|Probe]]&lt;br /&gt;
|IBL probe data.&lt;br /&gt;
|.probe&lt;br /&gt;
|ResProbe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Light Pointcloud|Light Pointcloud]]&lt;br /&gt;
|Instance placement information for point lights.&lt;br /&gt;
|.pcrt&lt;br /&gt;
|ResPointcloudLight&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
* [[Tools/AshDumpTool|AshDumpTool]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FxCol ==&lt;br /&gt;
FxCol defines collision shapes in the game world that can apply post processing effects when the player walks through them.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/FxColFile2|FxColFile2]]&lt;br /&gt;
|FxCol configuration.&lt;br /&gt;
|.fxcol&lt;br /&gt;
|ResFxColFile2&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SvCol ==&lt;br /&gt;
SvCol defines collision shapes in the game world that control sector visibility (a form of culling).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/SvCol2|SvCol2]]&lt;br /&gt;
|SvCol configuration.&lt;br /&gt;
|.svcol&lt;br /&gt;
|ResSvCol2&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Cyan Effect|Cyan Effect]]&lt;br /&gt;
|Particle effect systems.&lt;br /&gt;
|.cemt&lt;br /&gt;
|ResEffect&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/CEMT Color Editing Tool|CEMT Color Editing Tool]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Particle Location|Particle Location]]&lt;br /&gt;
|Database of particle effects with transform values and sounds&lt;br /&gt;
|.effdb&lt;br /&gt;
|ResParticleLocation&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/AshDumpTool|AshDumpTool]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bullet Mesh|Bullet Mesh]]&lt;br /&gt;
|Bullet physics engine mesh. Used for collision detection.&lt;br /&gt;
|.btmesh&lt;br /&gt;
|ResPhysicsMesh&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/btmesh|btmesh]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bullet Soft Body|Bullet Soft Body]]&lt;br /&gt;
|Bullet physics engine soft body.&lt;br /&gt;
|.btsb&lt;br /&gt;
|ResSoftBody&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bullet Skinned Mesh Collider|Bullet Skinned Mesh Collider]]&lt;br /&gt;
|Bullet physics engine skinned mesh collider. Not exactly known what this is currently.&lt;br /&gt;
|.btsmc&lt;br /&gt;
|ResSkinnedMeshCollider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Collision Pointcloud|Collision Pointcloud]]&lt;br /&gt;
|Instance placement info for collision meshes.&lt;br /&gt;
|.pccol&lt;br /&gt;
|ResPointCloudCollision&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]] &lt;br /&gt;
* [[Tools/AshDumpTool|AshDumpTool]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Paths ==&lt;br /&gt;
Paths are 3D splines that the game engine uses for various tasks, e.g. to generate grind rails, calculate projectile movements, generate replicated objects and keep the player on a 2D rail.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Spline Path|Orca: Spline Path]]&lt;br /&gt;
|Contains path information.&lt;br /&gt;
|.path.bin&lt;br /&gt;
|ResSplinePath&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Spline Path 2|Orca: Spline Path 2]]&lt;br /&gt;
|Contains path information.&lt;br /&gt;
|.path2.bin&lt;br /&gt;
|ResSplinePath2&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Path|Path]]&lt;br /&gt;
|Contains path information.&lt;br /&gt;
|.path&lt;br /&gt;
|ResSplinePath&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Occlusion Capsule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Occlusion Capsule|Occlusion Capsule]]&lt;br /&gt;
|Occlusion capsules&lt;br /&gt;
|.occ&lt;br /&gt;
|ResOcclusionCapsule&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Atmosphere ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Atmospheric Fog|Atmospheric Fog]]&lt;br /&gt;
|Atmospheric fog data.&lt;br /&gt;
|?&lt;br /&gt;
|ResAtmosphericFog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Density (vegetation) ==&lt;br /&gt;
Density is HE&#039;s GPU based vegetation system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Density Setting|Density Setting]]&lt;br /&gt;
|Configures the Hedgehog Engine density system. Configures all the density system&#039;s parameters and references density models.&lt;br /&gt;
|.densitysetting&lt;br /&gt;
|ResDensitySetting&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Density Point Cloud|Density Point Cloud]]&lt;br /&gt;
|Placement of pre-baked density models.&lt;br /&gt;
|.densitypointcloud&lt;br /&gt;
|ResDensityPointCloud&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Density Instance|Density Instance]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ResDensityInstance&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Terrain Grass Info|Terrain Grass Info]]&lt;br /&gt;
|&lt;br /&gt;
|.grass.bin&lt;br /&gt;
|ResTerrainGrassInfo&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NavMesh ==&lt;br /&gt;
Navmeshes are meshes that the game&#039;s AI actors can use to navigate the map.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/NavMesh Config|NavMesh Config]]&lt;br /&gt;
|Navmesh configuration&lt;br /&gt;
|.nmc&lt;br /&gt;
|ResNavMeshConfig&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/NavMesh Tile|NavMesh Tile]]&lt;br /&gt;
|Navmesh tile&lt;br /&gt;
|.nmt&lt;br /&gt;
|ResNavMeshTile&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Navigation Mesh&lt;br /&gt;
|Navigation mesh map&lt;br /&gt;
|.navi.xml / .navi.xmlbin&lt;br /&gt;
|NavigationMesh&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AI State Machine ==&lt;br /&gt;
The AI state machine controls AI behavior of enemies in game.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/AI State Machine|AI State Machine]]&lt;br /&gt;
|Configuration for the AI State Machine&lt;br /&gt;
|.aism&lt;br /&gt;
|ResAIStateMachine&lt;br /&gt;
|[[Tools/010 Editor Binary Templates|AshDump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cinematics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Scene|Scene]]&lt;br /&gt;
|Legacy cinematics system.&lt;br /&gt;
|.scene&lt;br /&gt;
|ResScene&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/DvScene|DvScene]]&lt;br /&gt;
|Cinematics.&lt;br /&gt;
|.dvscene&lt;br /&gt;
|ResDvScene&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/010 Editor Binary Templates|010 Editor Binary Templates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Decal|Decal]]&lt;br /&gt;
|Decals. Referenced in FxColManager.&lt;br /&gt;
|?&lt;br /&gt;
|ResDecal&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Decal Pointcloud|Decal Pointcloud]]&lt;br /&gt;
|Placement information for decal instances. Referenced in FxColManager.&lt;br /&gt;
|?&lt;br /&gt;
|ResDecalPointcloud&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Shaders ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vertex Shader|Vertex Shader]]&lt;br /&gt;
|Vertex shaders.&lt;br /&gt;
|.vso&lt;br /&gt;
|ResVertexShader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Pixel Shader|Pixel Shader]]&lt;br /&gt;
|Pixel shaders.&lt;br /&gt;
|.pso&lt;br /&gt;
|ResFragmentShader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Compute Shader|Compute Shader]]&lt;br /&gt;
|Compute shaders&lt;br /&gt;
|.cso&lt;br /&gt;
|ResComputeShader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Shader List|Shader List]]&lt;br /&gt;
|List of shaders.&lt;br /&gt;
|.shader-list&lt;br /&gt;
|ResShaderList&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Audio ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name&lt;br /&gt;
!Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Atom Config|Atom Config]]&lt;br /&gt;
|CRIware Atom configuration data.&lt;br /&gt;
|.acf&lt;br /&gt;
|ResAtomConfig&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Atom Cue Sheet|Atom Cue Sheet]]&lt;br /&gt;
|CRIware Atom cue sheet. Contains the game&#039;s audio and cue/AISAC information.&lt;br /&gt;
|.acb&lt;br /&gt;
|ResAtomCueSheet&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KwasTools|KwasTools]] (cri_utf_tool)&lt;br /&gt;
* [[Tools/SonicAudioTools|SonicAudioTools]] (Deprecated)&lt;br /&gt;
* [[Tools/Eternity Audio Tool|Eternity Audio Tool]] (Outdated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name&lt;br /&gt;
!Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/SurfRide SWIF|SurfRide SWIF]]&lt;br /&gt;
|Describes UI layout and animations. Similar to a primitive version of Adobe Flash.&lt;br /&gt;
|.swif&lt;br /&gt;
|ResSurfRideProject&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/010 Editor Binary Templates|010 Editor Binary Templates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name&lt;br /&gt;
!Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Lua|Lua]]&lt;br /&gt;
|A Lua script.&lt;br /&gt;
|.lua&lt;br /&gt;
|ResLuaData&lt;br /&gt;
|&lt;br /&gt;
* Any text editor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haptics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vibration|Vibration]]&lt;br /&gt;
|Haptics vibration information.&lt;br /&gt;
|.vib&lt;br /&gt;
|ResVibration&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Clipmap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Clipmap Ocean|Clipmap Ocean]]&lt;br /&gt;
|&lt;br /&gt;
|.cob&lt;br /&gt;
|ResClipmapOcean&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Localization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Converse Project|Converse Project]]&lt;br /&gt;
|Localization project data.&lt;br /&gt;
|.cnvrs-proj&lt;br /&gt;
|ResTextProject&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Converse Editor|Converse Editor]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Converse Text|Converse Text]]&lt;br /&gt;
|Localization text data.&lt;br /&gt;
|.cnvrs-text&lt;br /&gt;
|ResText&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Puyo Text Editor|Puyo Text Editor]]&lt;br /&gt;
* [[Tools/Converse Editor|Converse Editor]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Converse Meta|Converse Meta]]&lt;br /&gt;
|Localization metadata.&lt;br /&gt;
|.cnvrs-meta&lt;br /&gt;
|ResTextMeta&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Converse Editor|Converse Editor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bitmap Font|Bitmap Font]]&lt;br /&gt;
|Bitmap fonts.&lt;br /&gt;
|.bfnt&lt;br /&gt;
|ResBitmapFont&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Scalable Font Set|Scalable Font Set]]&lt;br /&gt;
|Vector fonts.&lt;br /&gt;
|.scfnt&lt;br /&gt;
|ResScalableFontSet&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Optical Kerning|Optical Kerning]]&lt;br /&gt;
|Information about optical text kerning.&lt;br /&gt;
|.okern&lt;br /&gt;
|ResOpticalKerning&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unicode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/ICU data|ICU data]]&lt;br /&gt;
|Data for libicu (unicode library)&lt;br /&gt;
|.icu&lt;br /&gt;
|ResIcuData&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acceleration Structures ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/K-D Tree|K-D Tree]]&lt;br /&gt;
|A serialized [[wikipedia:K-d_tree|k-d tree]]. This resource has only been seen as a runtime resource in the engine or embedded in [[Resources/Path|Path]] resources.&lt;br /&gt;
|N/A&lt;br /&gt;
|ResKdTree&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unknown ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Name Extra|Name Extra]]&lt;br /&gt;
|&lt;br /&gt;
|.nextra&lt;br /&gt;
|ResNameExtra&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Pointcloud|Pointcloud]]&lt;br /&gt;
|&lt;br /&gt;
|.pointcloud&lt;br /&gt;
|ResPointcloud&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=681</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=681"/>
		<updated>2025-01-19T15:12:09Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are composed of the following things:&lt;br /&gt;
&lt;br /&gt;
* Path segments / nodes, which define the path itself.&lt;br /&gt;
* The path type, which associates automatic behavior to the path.&lt;br /&gt;
* The side paths (for resource-defined paths). These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
* The path length (for resource-defined paths).&lt;br /&gt;
&lt;br /&gt;
== Segments and nodes ==&lt;br /&gt;
The basic shape of the path is defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is a combination of 5 properties:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
=== Segment types ===&lt;br /&gt;
Segments come in multiple types that decide how they are interpolated. The type of each segment can be set individually from any of the following types:&lt;br /&gt;
&lt;br /&gt;
==== Straight ====&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
==== Smooth Nonuniform Spline ====&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the path, so make sure to choose the correct one for your purpose.&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths. You can still manually refer to these paths in objects though. [[Autorun volumes]] for example tend to be more reliable if the SV path is selected as a target manually, as this will prevent Sonic from launching off the path during turns.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=680</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=680"/>
		<updated>2025-01-19T14:37:05Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Side View (SV) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the path, so make sure to choose the correct one for your purpose.&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths. You can still manually refer to these paths in objects though. [[Autorun volumes]] for example tend to be more reliable if the SV path is selected as a target manually, as this will prevent Sonic from launching off the path during turns.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=679</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=679"/>
		<updated>2025-01-19T14:36:32Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the path, so make sure to choose the correct one for your purpose.&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths. You can still manually refer to these paths in objects though. [[Autorun volumes]] for example tend to be more reliable if the SV path is selected as a target manually, as this will prevent Sonic from launching off the path.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=678</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=678"/>
		<updated>2025-01-19T14:36:13Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Side View (SV) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the path, so make sure to choose the correct one for your purpose.&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths. You can still manually refer to these paths in objects though. Autorun volumes for example tend to be more reliable if the SV path is selected as a target manually, as this will prevent Sonic from launching off the path.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=677</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=677"/>
		<updated>2025-01-19T14:34:35Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Path types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the path, so make sure to choose the correct one for your purpose.&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=676</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=676"/>
		<updated>2025-01-19T14:34:03Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the spline, so make sure to choose the correct one:&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=675</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=675"/>
		<updated>2025-01-19T14:33:45Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the spline, so make sure to choose the correct one:&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Paths&amp;diff=674</id>
		<title>Paths</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Paths&amp;diff=674"/>
		<updated>2025-01-19T14:33:25Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paths are common to all versions of the Hedgehog Engine, and play an important role in many of its features. In essence, paths are 3D splines or curves, which the engine uses for many things, e.g.:&lt;br /&gt;
&lt;br /&gt;
* Player automation (like autorun volumes and grinding).&lt;br /&gt;
* Camera movement (for cameras like the Rail family of cameras).&lt;br /&gt;
* Confinement of the player to a 2D side view.&lt;br /&gt;
* Movement of ballistic projectiles.&lt;br /&gt;
* Calculation of the player&#039;s movement when using gimmicks like springs.&lt;br /&gt;
* Placement of replicated game objects on a curve.&lt;br /&gt;
* Automatic generation of grind rails.&lt;br /&gt;
&lt;br /&gt;
Paths can be contained in either [[Resources|path resources]], generated at runtime when objects need them (e.g. for springs or ballistic projectiles), or they can be generated by special set objects in the &amp;quot;Set Path&amp;quot; family.&lt;br /&gt;
&lt;br /&gt;
== Structure of a path ==&lt;br /&gt;
Paths in HE are defined as a series of &amp;quot;path segments&amp;quot; connecting &amp;quot;path nodes&amp;quot;. Each of these path nodes is composed of 5 components:&lt;br /&gt;
&lt;br /&gt;
* The position, a world space vector which defines where the path node is located.&lt;br /&gt;
* The normal, a normalized vector which defines which direction is &amp;quot;up&amp;quot;. Changing this vector will make the path roll.&lt;br /&gt;
* The tangent, a normalized vector which defines the tangent to the path at the location of the node, i.e. which way is &amp;quot;forward&amp;quot;.&lt;br /&gt;
* The distance along the path where the node is located.&lt;br /&gt;
* A boolean flag that decides whether the segment it starts is a straight segment or an SNS (Smooth Nonuniform Spline) segment.&lt;br /&gt;
&lt;br /&gt;
Resource-defined paths also have a length. Resource-defined paths may additionally describe 2 additional side paths. These can be used to generate triple rails (someone please confirm if this is correct).&lt;br /&gt;
&lt;br /&gt;
== Segment types ==&lt;br /&gt;
&lt;br /&gt;
=== Straight ===&lt;br /&gt;
Straight path segments are very straightforward: they are straight.&lt;br /&gt;
&lt;br /&gt;
=== Smooth Nonuniform Spline ===&lt;br /&gt;
Smooth Nonuniform Splines are a specific type of nonuniform cubic spline. Splines are curved paths in 3D space, usually described using a series of points in space called nodes. Nonuniform splines have the specific property that their velocity is not affected by the distance between those nodes (in contrast to more common splines like Catmull-Rom splines). While it is difficult to find much information about &amp;quot;smooth&amp;quot; nonuniform splines, the nomenclature seems to originate from the [https://archive.org/details/gameprogrammingg0000unse 4th volume of Game Programming Gems].&lt;br /&gt;
&lt;br /&gt;
As the book describes them, smooth nonuniform splines are C&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; continuous. This means that they are continuous in their 2nd derivative, i.e. they have continuous acceleration. This makes them useful for the calculation of movements that shouldn&#039;t have any kind of jerky motion, e.g. the movement of a camera.&lt;br /&gt;
&lt;br /&gt;
[TODO: add SNS equations]&lt;br /&gt;
&lt;br /&gt;
== Path types ==&lt;br /&gt;
There are 3 major types of path in use in the engine. These types associate some form of automatic behavior with the spline, so make sure to choose the correct one:&lt;br /&gt;
&lt;br /&gt;
=== Grind (GR) ===&lt;br /&gt;
Grind paths are used to define paths for the player to grind on. If you land on a GR spline with the player character you will automatically start grinding. In Sonic Frontiers+ this type of path also generates a grind rail model.&lt;br /&gt;
&lt;br /&gt;
=== Side View (SV) ===&lt;br /&gt;
Side View paths are used to keep sonic on a 2D plane in 2D segments of a stage. If Sonic is in 2D mode, e.g. by being inside a [[DimensionVolume]] or because the stage is marked as 2D, he will automatically constrain himself to any nearby SV paths.&lt;br /&gt;
&lt;br /&gt;
=== Object (OBJ) ===&lt;br /&gt;
Object paths do not have any automatic behavior, and are instead referred to by [[set objects]] for various artist defined behaviors. They can for example be used to guide the movement of a [[camera]] or other object, or they can be used to spawn a series of rings on a path.&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=Resources&amp;diff=668</id>
		<title>Resources</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=Resources&amp;diff=668"/>
		<updated>2025-01-14T13:08:42Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: /* Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Resources are the data files that contain things like 3D models, textures, animations and any other kind of assets. Many of these resources are stored in proprietary formats optimized for fast loading times, and thus require special tools to be edited by modders. Many of them are also built using proprietary SEGA technologies, like the ASM animation system. On this page we provide a list of all known resources supported by the Hedgehog Engine, their support in various games and tools that can be used to edit them.&lt;br /&gt;
&lt;br /&gt;
== Archives ==&lt;br /&gt;
Archives are compressed archives (&amp;quot;zip files&amp;quot;) that contain most of the game&#039;s data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Packfile|Packfile]]&lt;br /&gt;
|Compressed archive containing most other resources.&lt;br /&gt;
|.pac&lt;br /&gt;
|Packfile&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeArcPack|HedgeArcPack]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Packfile Info|Packfile Info]]&lt;br /&gt;
|Contains information about a packfile.&lt;br /&gt;
|&lt;br /&gt;
|PackfileInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Packfile Extended Info|Packfile Extended Info]]&lt;br /&gt;
|Contains extended information about a packfile.&lt;br /&gt;
|&lt;br /&gt;
|PackfileExtendedInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Depend|Depend]]&lt;br /&gt;
|Stores information about packfile dependencies.&lt;br /&gt;
|.pac.d&lt;br /&gt;
|ResDepend&lt;br /&gt;
|N/A&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Pac General|Pac General]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ResPacGeneral&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Virtual Archive|Virtual Archive]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|VirtualArchive&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AR File&lt;br /&gt;
|Archive containing resources.&lt;br /&gt;
|.ar&lt;br /&gt;
|&lt;br /&gt;
|N/A&lt;br /&gt;
|-&lt;br /&gt;
|ARL File&lt;br /&gt;
|Link file containing data on what each .ar file stores and its appropriate splits.&lt;br /&gt;
|.arl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeArcPack|HedgeArcPack]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Levels ==&lt;br /&gt;
Levels are a new system in [[Games/Sonic Frontier&#039;s|Sonic Frontiers]] and up that allow the game to dynamically load other resources when they are needed. They specify which resources need to be loaded to load a certain &amp;quot;level&amp;quot;. This is a system similar to Unreal Engine&#039;s level system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Level|Level]]&lt;br /&gt;
|A special resource that&#039;s only used to check whether a level has been loaded in the engine. It does not contain any data.&lt;br /&gt;
|.level&lt;br /&gt;
|ResLevel&lt;br /&gt;
|N/A&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Master Level|Master Level]]&lt;br /&gt;
|Information about levels: which levels depend on each other, and also which resources to load in order to load a level.&lt;br /&gt;
|.mlevel&lt;br /&gt;
|ResMasterLevel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Reflection|Reflection]]&lt;br /&gt;
|Reflection-enabled configuration data. Contains parameters that can be edited by developers without changing game code.&lt;br /&gt;
|.rfl&lt;br /&gt;
|ResReflection&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/010 Editor Binary Templates|010 Editor Binary Templates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Set Objects ==&lt;br /&gt;
Set object data is what specifies where game objects are placed and how they are configured. This is what you&#039;ll be editing most when making a stage mod.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/ObjectWorld / GEdit|ObjectWorld / GEdit]]&lt;br /&gt;
|Object placement and parameter data (HE2).&lt;br /&gt;
|.gedit&lt;br /&gt;
|ResObjectWorld&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/HedgeSet|HedgeSet]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Set Object|Orca: Set Object]]&lt;br /&gt;
|Object placement and parameter data (HE1).&lt;br /&gt;
|.orc&lt;br /&gt;
|ResOrcaData&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/GLVL|GLVL]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Gismos ==&lt;br /&gt;
Gismos are small reusable objects (that can potentially have physics applied) intended usually for decoration.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Gismo Config Design|Gismo Config Design]]&lt;br /&gt;
|Defines the properties of gismo objects.&lt;br /&gt;
|.gismod&lt;br /&gt;
|ResGismoConfigDesign&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Gismo Config Plan|Gismo Config Plan]]&lt;br /&gt;
|&lt;br /&gt;
|.gismop&lt;br /&gt;
|ResGismoConfigPlan&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Models ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Model| Model]]&lt;br /&gt;
| Contains 3D model information (also contains an armature).&lt;br /&gt;
|.model&lt;br /&gt;
|ResModel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/ModelConverter|ModelConverter]]&lt;br /&gt;
* [[Tools/modelfbx|modelfbx]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Terrain Model|Terrain Model]]&lt;br /&gt;
|Contains 3D model information specifically for terrain models. Similar to &amp;quot;Model&amp;quot; but does not contain an armature.&lt;br /&gt;
|.terrain-model&lt;br /&gt;
|ResTerrainModel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/ModelConverter|ModelConverter]]&lt;br /&gt;
* [[Tools/modelfbx|modelfbx]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Heightfield|Heightfield]]&lt;br /&gt;
|Height field maps.&lt;br /&gt;
|.heightfield&lt;br /&gt;
|ResHeightField&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HeightFielder|HeightFielder]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Model Pointcloud|Model Pointcloud]]&lt;br /&gt;
| Placement information for model or terrain model instances.&lt;br /&gt;
|.pcmodel&lt;br /&gt;
|ResPointcloudModel&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Map|Orca: Map]]&lt;br /&gt;
|Placement information for model or terrain model instances.&lt;br /&gt;
|.map.bin&lt;br /&gt;
|ResDivMap&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Model Instance Info|MIRAGE Model Instance Info]]&lt;br /&gt;
|Contains information about model instances.&lt;br /&gt;
|.model-instanceinfo&lt;br /&gt;
|ResMirageModelInstanceInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Terrain Instance Info|MIRAGE Terrain Instance Info]]&lt;br /&gt;
|Contains information about terrain model instances.&lt;br /&gt;
|.terrain-instanceinfo&lt;br /&gt;
|ResMirageTerrainInstanceInfo&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vertex Link Info|Vertex Link Info]]&lt;br /&gt;
|&lt;br /&gt;
|.vli&lt;br /&gt;
|ResVertexLinkInfo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MetaTerrainInstance&lt;br /&gt;
|A file containing model and lightfield data capable of animating, commonly used for grass and clouds.&lt;br /&gt;
|.mti&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Textures ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Texture|Texture]]&lt;br /&gt;
|2D textures for model skinning.&lt;br /&gt;
|.dds&lt;br /&gt;
|ResTexture&lt;br /&gt;
|&lt;br /&gt;
* [https://developer.nvidia.com/texture-tools-exporter nVidia Texture Tools Exporter]&lt;br /&gt;
* DirectX texconv&lt;br /&gt;
* [https://www.gimp.org/ GIMP (cannot read BC7)]&lt;br /&gt;
* [https://www.getpaint.net/ Paint.NET]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Streaming Texture|Streaming Texture]]&lt;br /&gt;
|Streamed 2D textures.&lt;br /&gt;
|&lt;br /&gt;
|ResStreamingTexture&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Material|Material]]&lt;br /&gt;
|Material information. Contains shader parameters and texture names.&lt;br /&gt;
|.material&lt;br /&gt;
|ResMaterial&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Terrain Material|Terrain Material]]&lt;br /&gt;
|Terrain material information.&lt;br /&gt;
|.terrain-material&lt;br /&gt;
|ResTerrainMaterial&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Material (Unleashed)|Material]]&lt;br /&gt;
|Contains shader information and texset resource information.&lt;br /&gt;
|.material&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|Contains parameter information for texture files linked to a material.&lt;br /&gt;
|.texture&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
|-&lt;br /&gt;
|Texset&lt;br /&gt;
|Contains groupings of textures linked to a material.&lt;br /&gt;
|.texset&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/HedgeEdit|HedgeEdit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
All kinds of animation data.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/PXD Skeleton|PXD Skeleton]]&lt;br /&gt;
|Skeleton for PXD animations.&lt;br /&gt;
|.skl.pxd&lt;br /&gt;
|ResSkeletonPxd&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Sonic Frontiers Animation Tools|Sonic Frontiers Animation Tools]] &lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/PXD Animation|PXD Animation]]&lt;br /&gt;
|Animation data.&lt;br /&gt;
|.anm.pxd&lt;br /&gt;
|ResAnimationPxd&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Sonic Frontiers Animation Tools|Sonic Frontiers Animation Tools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/PBA Skeleton|PBA Skeleton]]&lt;br /&gt;
|Skeleton for physics based animations.&lt;br /&gt;
|.pba&lt;br /&gt;
|ResPhysicalSkeleton&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Animation State Machine|Animation State Machine]]&lt;br /&gt;
|Animation State Machine data. Handles animation blending, animation states, animation triggers, etc.&lt;br /&gt;
|.asm&lt;br /&gt;
|ResAnimator&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/HelperBone|HelperBone]]&lt;br /&gt;
|Currently unknown.&lt;br /&gt;
|.helperbone.bin&lt;br /&gt;
|ResHelperBone&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Material Animation|Material Animation]]&lt;br /&gt;
|Material animations.&lt;br /&gt;
|.mat-anim&lt;br /&gt;
|ResAnimMaterial&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/UV Animation|UV Animation]]&lt;br /&gt;
|Texture UV animations (presumably Wii SRT0).&lt;br /&gt;
|.uv-anim&lt;br /&gt;
|ResAnimTexSrt&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KwasTools|KwasTools]] (he_anim_tool)&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Texture Pattern Animation|Texture Pattern Animation]]&lt;br /&gt;
|Texture pattern animations (presumably Wii PAT0).&lt;br /&gt;
|.pt-anim&lt;br /&gt;
|ResAnimTexPat&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Visibility Animation|Visibility Animation]]&lt;br /&gt;
|Bone visibility animations (presumably Wii VIS0).&lt;br /&gt;
|.vis-anim&lt;br /&gt;
|ResAnimVis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Camera Animation|Camera Animation]]&lt;br /&gt;
|Camera animations.&lt;br /&gt;
|.cam-anim&lt;br /&gt;
|ResAnimCameraContainer&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KwasTools|KwasTools]] (he_anim_tool)&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Light Animation|Light Animation]]&lt;br /&gt;
|Light animations.&lt;br /&gt;
|.lit-anim&lt;br /&gt;
|ResAnimLightContainer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vertex Animation Texture|Vertex Animation Texture]]&lt;br /&gt;
|Vertex animation textures (textures that efficiently encode large scale animations on vertices).&lt;br /&gt;
|.vat&lt;br /&gt;
|ResVertexAnimationTexture&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Havok Skeleton|Havok Skeleton]]&lt;br /&gt;
|Skeleton for Havok Animations&lt;br /&gt;
|.skl.hkx&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Havok Animation|Havok Animation]]&lt;br /&gt;
|Animation data.&lt;br /&gt;
|.anm.hkx&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Light|MIRAGE Light]]&lt;br /&gt;
|MIRAGE point lights.&lt;br /&gt;
|.light&lt;br /&gt;
|ResMirageLight&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/MIRAGE Lightfield|MIRAGE Lightfield]]&lt;br /&gt;
|MIRAGE light field data.&lt;br /&gt;
|.lft&lt;br /&gt;
|ResMirageLightField&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/SH Lightfield|SH Lightfield]]&lt;br /&gt;
|Spherical harmonics based light field data.&lt;br /&gt;
|.lf&lt;br /&gt;
|ResSHLightField&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Probe|Probe]]&lt;br /&gt;
|IBL probe data.&lt;br /&gt;
|.probe&lt;br /&gt;
|ResProbe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Light Pointcloud|Light Pointcloud]]&lt;br /&gt;
|Instance placement information for point lights.&lt;br /&gt;
|.pcrt&lt;br /&gt;
|ResPointcloudLight&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
* [[Tools/AshDumpTool|AshDumpTool]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FxCol ==&lt;br /&gt;
FxCol defines collision shapes in the game world that can apply post processing effects when the player walks through them.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/FxColFile2|FxColFile2]]&lt;br /&gt;
|FxCol configuration.&lt;br /&gt;
|.fxcol&lt;br /&gt;
|ResFxColFile2&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SvCol ==&lt;br /&gt;
SvCol defines collision shapes in the game world that control sector visibility (a form of culling).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/SvCol2|SvCol2]]&lt;br /&gt;
|SvCol configuration.&lt;br /&gt;
|.svcol&lt;br /&gt;
|ResSvCol2&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Effects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Cyan Effect|Cyan Effect]]&lt;br /&gt;
|Particle effect systems.&lt;br /&gt;
|.cemt&lt;br /&gt;
|ResEffect&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/CEMT Color Editing Tool|CEMT Color Editing Tool]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Particle Location|Particle Location]]&lt;br /&gt;
|Database of particle effects with transform values and sounds&lt;br /&gt;
|.effdb&lt;br /&gt;
|ResParticleLocation&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/AshDumpTool|AshDumpTool]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Physics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bullet Mesh|Bullet Mesh]]&lt;br /&gt;
|Bullet physics engine mesh. Used for collision detection.&lt;br /&gt;
|.btmesh&lt;br /&gt;
|ResPhysicsMesh&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/btmesh|btmesh]]&lt;br /&gt;
* [[Tools/HEIO|HEIO]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bullet Soft Body|Bullet Soft Body]]&lt;br /&gt;
|Bullet physics engine soft body.&lt;br /&gt;
|.btsb&lt;br /&gt;
|ResSoftBody&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bullet Skinned Mesh Collider|Bullet Skinned Mesh Collider]]&lt;br /&gt;
|Bullet physics engine skinned mesh collider. Not exactly known what this is currently.&lt;br /&gt;
|.btsmc&lt;br /&gt;
|ResSkinnedMeshCollider&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Collision Pointcloud|Collision Pointcloud]]&lt;br /&gt;
|Instance placement info for collision meshes.&lt;br /&gt;
|.pccol&lt;br /&gt;
|ResPointCloudCollision&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]] &lt;br /&gt;
* [[Tools/AshDumpTool|AshDumpTool]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Paths ==&lt;br /&gt;
Paths are 3D splines that the game engine uses for various tasks, e.g. to generate grind rails, calculate projectile movements, generate replicated objects and keep the player on a 2D rail.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Spline Path|Orca: Spline Path]]&lt;br /&gt;
|Contains path information.&lt;br /&gt;
|.path.bin&lt;br /&gt;
|ResSplinePath&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Orca: Spline Path 2|Orca: Spline Path 2]]&lt;br /&gt;
|Contains path information.&lt;br /&gt;
|.path2.bin&lt;br /&gt;
|ResSplinePath2&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Path|Path]]&lt;br /&gt;
|Contains path information.&lt;br /&gt;
|.path&lt;br /&gt;
|ResSplinePath&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
* [[Tools/Restoration Issue Pocketknife|Restoration Issue Pocketknife]]&lt;br /&gt;
* [[Tools/KnuxTools|KnuxTools]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Occlusion Capsule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Occlusion Capsule|Occlusion Capsule]]&lt;br /&gt;
|Occlusion capsules&lt;br /&gt;
|.occ&lt;br /&gt;
|ResOcclusionCapsule&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Atmosphere ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Atmospheric Fog|Atmospheric Fog]]&lt;br /&gt;
|Atmospheric fog data.&lt;br /&gt;
|?&lt;br /&gt;
|ResAtmosphericFog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Density (vegetation) ==&lt;br /&gt;
Density is HE&#039;s GPU based vegetation system.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Density Setting|Density Setting]]&lt;br /&gt;
|Configures the Hedgehog Engine density system. Configures all the density system&#039;s parameters and references density models.&lt;br /&gt;
|.densitysetting&lt;br /&gt;
|ResDensitySetting&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Density Point Cloud|Density Point Cloud]]&lt;br /&gt;
|Placement of pre-baked density models.&lt;br /&gt;
|.densitypointcloud&lt;br /&gt;
|ResDensityPointCloud&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Blendhog Level Creator|Blendhog Level Creator]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Density Instance|Density Instance]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|ResDensityInstance&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Terrain Grass Info|Terrain Grass Info]]&lt;br /&gt;
|&lt;br /&gt;
|.grass.bin&lt;br /&gt;
|ResTerrainGrassInfo&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NavMesh ==&lt;br /&gt;
Navmeshes are meshes that the game&#039;s AI actors can use to navigate the map.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/NavMesh Config|NavMesh Config]]&lt;br /&gt;
|Navmesh configuration&lt;br /&gt;
|.nmc&lt;br /&gt;
|ResNavMeshConfig&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/NavMesh Tile|NavMesh Tile]]&lt;br /&gt;
|Navmesh tile&lt;br /&gt;
|.nmt&lt;br /&gt;
|ResNavMeshTile&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Navigation Mesh&lt;br /&gt;
|Navigation mesh map&lt;br /&gt;
|.navi.xml / .navi.xmlbin&lt;br /&gt;
|NavigationMesh&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AI State Machine ==&lt;br /&gt;
The AI state machine controls AI behavior of enemies in game.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/AI State Machine|AI State Machine]]&lt;br /&gt;
|Configuration for the AI State Machine&lt;br /&gt;
|.aism&lt;br /&gt;
|ResAIStateMachine&lt;br /&gt;
|[[Tools/010 Editor Binary Templates|AshDump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cinematics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Scene|Scene]]&lt;br /&gt;
|Legacy cinematics system.&lt;br /&gt;
|.scene&lt;br /&gt;
|ResScene&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/DvScene|DvScene]]&lt;br /&gt;
|Cinematics.&lt;br /&gt;
|.dvscene&lt;br /&gt;
|ResDvScene&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/010 Editor Binary Templates|010 Editor Binary Templates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Decal|Decal]]&lt;br /&gt;
|Decals. Referenced in FxColManager.&lt;br /&gt;
|?&lt;br /&gt;
|ResDecal&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Decal Pointcloud|Decal Pointcloud]]&lt;br /&gt;
|Placement information for decal instances. Referenced in FxColManager.&lt;br /&gt;
|?&lt;br /&gt;
|ResDecalPointcloud&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Shaders ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vertex Shader|Vertex Shader]]&lt;br /&gt;
|Vertex shaders.&lt;br /&gt;
|.vso&lt;br /&gt;
|ResVertexShader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Pixel Shader|Pixel Shader]]&lt;br /&gt;
|Pixel shaders.&lt;br /&gt;
|.pso&lt;br /&gt;
|ResFragmentShader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Compute Shader|Compute Shader]]&lt;br /&gt;
|Compute shaders&lt;br /&gt;
|.cso&lt;br /&gt;
|ResComputeShader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Shader List|Shader List]]&lt;br /&gt;
|List of shaders.&lt;br /&gt;
|.shader-list&lt;br /&gt;
|ResShaderList&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Audio ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name&lt;br /&gt;
!Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Atom Config|Atom Config]]&lt;br /&gt;
|CRIware Atom configuration data.&lt;br /&gt;
|.acf&lt;br /&gt;
|ResAtomConfig&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Atom Cue Sheet|Atom Cue Sheet]]&lt;br /&gt;
|CRIware Atom cue sheet. Contains the game&#039;s audio and cue/AISAC information.&lt;br /&gt;
|.acb&lt;br /&gt;
|ResAtomCueSheet&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/KwasTools|KwasTools]] (cri_utf_tool)&lt;br /&gt;
* [[Tools/SonicAudioTools|SonicAudioTools]] (Deprecated)&lt;br /&gt;
* [[Tools/Eternity Audio Tool|Eternity Audio Tool]] (Outdated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name&lt;br /&gt;
!Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/SurfRide SWIF|SurfRide SWIF]]&lt;br /&gt;
|Describes UI layout and animations. Similar to a primitive version of Adobe Flash.&lt;br /&gt;
|.swif&lt;br /&gt;
|ResSurfRideProject&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/DevTools|DevTools]]&lt;br /&gt;
* [[Tools/010 Editor Binary Templates|010 Editor Binary Templates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name&lt;br /&gt;
!Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Lua|Lua]]&lt;br /&gt;
|A Lua script.&lt;br /&gt;
|.lua&lt;br /&gt;
|ResLuaData&lt;br /&gt;
|&lt;br /&gt;
* Any text editor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Haptics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Vibration|Vibration]]&lt;br /&gt;
|Haptics vibration information.&lt;br /&gt;
|.vib&lt;br /&gt;
|ResVibration&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Clipmap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Clipmap Ocean|Clipmap Ocean]]&lt;br /&gt;
|&lt;br /&gt;
|.cob&lt;br /&gt;
|ResClipmapOcean&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Localization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Converse Project|Converse Project]]&lt;br /&gt;
|Localization project data.&lt;br /&gt;
|.cnvrs-proj&lt;br /&gt;
|ResTextProject&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Converse Editor|Converse Editor]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Converse Text|Converse Text]]&lt;br /&gt;
|Localization text data.&lt;br /&gt;
|.cnvrs-text&lt;br /&gt;
|ResText&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Puyo Text Editor|Puyo Text Editor]]&lt;br /&gt;
* [[Tools/Converse Editor|Converse Editor]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Converse Meta|Converse Meta]]&lt;br /&gt;
|Localization metadata.&lt;br /&gt;
|.cnvrs-meta&lt;br /&gt;
|ResTextMeta&lt;br /&gt;
|&lt;br /&gt;
* [[Tools/Converse Editor|Converse Editor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Bitmap Font|Bitmap Font]]&lt;br /&gt;
|Bitmap fonts.&lt;br /&gt;
|.bfnt&lt;br /&gt;
|ResBitmapFont&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Scalable Font Set|Scalable Font Set]]&lt;br /&gt;
|Vector fonts.&lt;br /&gt;
|.scfnt&lt;br /&gt;
|ResScalableFontSet&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Optical Kerning|Optical Kerning]]&lt;br /&gt;
|Information about optical text kerning.&lt;br /&gt;
|.okern&lt;br /&gt;
|ResOpticalKerning&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unicode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/ICU data|ICU data]]&lt;br /&gt;
|Data for libicu (unicode library)&lt;br /&gt;
|.icu&lt;br /&gt;
|ResIcuData&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unknown ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Description&lt;br /&gt;
!Extension&lt;br /&gt;
!Engine name!! Editing tools&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Name Extra|Name Extra]]&lt;br /&gt;
|&lt;br /&gt;
|.nextra&lt;br /&gt;
|ResNameExtra&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Resources/Pointcloud|Pointcloud]]&lt;br /&gt;
|&lt;br /&gt;
|.pointcloud&lt;br /&gt;
|ResPointcloud&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=661</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=661"/>
		<updated>2025-01-12T21:36:56Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor. In essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/ https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&amp;lt;br/&amp;gt;&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=658</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=658"/>
		<updated>2025-01-12T20:54:49Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor. In essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/ https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&amp;lt;br/&amp;gt;&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=657</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=657"/>
		<updated>2025-01-12T20:50:42Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor, in essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/ https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&amp;lt;br/&amp;gt;&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=656</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=656"/>
		<updated>2025-01-12T20:49:04Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor, in essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&amp;lt;br/&amp;gt;&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=655</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=655"/>
		<updated>2025-01-12T20:48:49Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor, in essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&amp;lt;br/&amp;gt;&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&amp;lt;br/&amp;gt;&lt;br /&gt;
1000 Bruxelles - Brussel&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel. +32 2 274 48 00&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax +32 2 274 48 35&lt;br /&gt;
&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&lt;br /&gt;
&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=654</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=654"/>
		<updated>2025-01-12T20:48:19Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy Wikimedia Foundation Privacy Policy], and are subject to the [https://creativecommons.org/licenses/by-sa/4.0/deed.en Creative Commons Attribution-ShareAlike 4.0 International License].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor, in essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&lt;br /&gt;
1000 Bruxelles - Brussel&lt;br /&gt;
Tel. +32 2 274 48 00&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&lt;br /&gt;
&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=653</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=653"/>
		<updated>2025-01-12T20:47:45Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy|Wikimedia Foundation Privacy Policy]], and are subject to the [[https://creativecommons.org/licenses/by-sa/4.0/deed.en|Creative Commons Attribution-ShareAlike 4.0 International License]].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor, in essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the HEMS Discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&lt;br /&gt;
1000 Bruxelles - Brussel&lt;br /&gt;
Tel. +32 2 274 48 00&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Email: [mailto:contact@apd-gba.be contact@apd-gba.be]&lt;br /&gt;
&lt;br /&gt;
Website:&lt;br /&gt;
* [https://www.autoriteprotectiondonnees.be]&lt;br /&gt;
* [https://www.gegevensbeschermingsautoriteit.be]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
	<entry>
		<id>https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=652</id>
		<title>HEModdingWiki:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://hemodding.wiki/index.php?title=HEModdingWiki:Privacy_policy&amp;diff=652"/>
		<updated>2025-01-12T20:47:04Z</updated>

		<summary type="html">&lt;p&gt;Angryzor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEModdingWiki recognizes the importance of protecting your privacy and your Personal Data. As such, we take great care to ensure the safety of your data, and store the minimal amount of information needed to run Our Website.&lt;br /&gt;
&lt;br /&gt;
This privacy policy will explain how HEModdingWiki uses the personal data we collect from you when you use Our Website. By using Our Website, you agree to the collection and use of your information according to this policy. Some parts of this policy have been adapted from the [[https://foundation.wikimedia.org/wiki/Policy:Privacy_policy|Wikimedia Foundation Privacy Policy]], and are subject to the [[https://creativecommons.org/licenses/by-sa/4.0/deed.en|Creative Commons Attribution-ShareAlike 4.0 International License]].&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Our Website&#039;&#039;&#039;: The HEModdingWiki website.&lt;br /&gt;
* &#039;&#039;&#039;Personal Data&#039;&#039;&#039;: Personal data is any information that relates to an individual who can be directly or indirectly identified.&lt;br /&gt;
* &#039;&#039;&#039;Data Subject&#039;&#039;&#039;: The person whose data is processed. In the context of this privacy policy, this is you, the user.&lt;br /&gt;
* &#039;&#039;&#039;Data Controller&#039;&#039;&#039;: The person who decides why and how personal data will be processed. In the context of this privacy policy, this is HEModdingWiki.&lt;br /&gt;
* &#039;&#039;&#039;Data Processor&#039;&#039;&#039;: Any third party that processes personal data on behalf of a Data Controller. In the context of this privacy policy, any service we use to run our operations that processes your data is a data processor.&lt;br /&gt;
&lt;br /&gt;
== What data do we collect, how do we collect it, and how do we use it? ==&lt;br /&gt;
&lt;br /&gt;
=== Your Contributions ===&lt;br /&gt;
When you make a contribution to our wiki, including on user or discussion pages, you are creating a permanent, public record of every piece of content added, removed, or altered by you. The page history will show when your contribution or deletion was made, as well as your username (if you are signed in) or your IP address (if you are not signed in). We may use your public contributions, either aggregated with the public contributions of others or individually, to create new features or data-related products for you or to learn more about how Our Website are used, as further explained below in the &amp;quot;How We Use Information We Receive From You&amp;quot; section of this Privacy Policy.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to provide our core service: an open knowledge base documenting Hedgehog Engine modding. Older contributions and changes are preserved to retain a history of the information contained in the service and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Unless this Policy says otherwise, you should assume that information that you actively contribute to Our Website, including Personal Data, is publicly visible and can be found by search engines. Like most things on the Internet, anything you share may be copied and redistributed throughout the Internet by other people. Please do not contribute any information that you are uncomfortable making permanently public, like revealing your real name or location in your contributions.&lt;br /&gt;
&lt;br /&gt;
You should be aware that specific data made public by you or aggregated data that is made public by us can be used by anyone for analysis and to infer further information, such as which country a user is from, political affiliation and gender.&lt;br /&gt;
&lt;br /&gt;
=== Account Information ===&lt;br /&gt;
You are not required to create an account to read or contribute to Our Website, except under rare circumstances. However, if you contribute without signing in, your contribution will be publicly attributed to the IP address associated with your device.&lt;br /&gt;
&lt;br /&gt;
If you choose to create an account, we may collect the following information from you:&lt;br /&gt;
&lt;br /&gt;
* A username.&lt;br /&gt;
* A password.&lt;br /&gt;
* Optionally, your real name.&lt;br /&gt;
* Optionally, your email address.&lt;br /&gt;
&lt;br /&gt;
This information is used by us to track user additions to Our Website, to retain a history of changes and to prevent vandalism.&lt;br /&gt;
&lt;br /&gt;
Note that, if you choose not to provide an email address, we cannot help you recover your password.&lt;br /&gt;
&lt;br /&gt;
=== Log information ===&lt;br /&gt;
When you visit Our Website, we automatically receive the IP address of the device (or your proxy server) you are using to access the Internet, which could be used to infer your geographical location. We use this information primarily for the purpose of internal logging, unless you have chosen not to create a user account (see above).&lt;br /&gt;
&lt;br /&gt;
Because of how browsers work, we receive some information automatically when you visit Our Website. This includes when you use an online tool on a third-party site that loads information coming from Our Website. This information includes the type of device you are using (possibly including unique device identification numbers, for some beta versions of our mobile applications), the type and version of your browser, your browser&#039;s language preference, the type and version of your device&#039;s operating system, in some cases the name of your internet service provider or mobile carrier, the website that referred you to Our Website, which pages you request and visit, and the date and time of each request you make to Our Website.&lt;br /&gt;
&lt;br /&gt;
Put simply, we use this information to enhance your experience with Our Website. For example, we use this information to administer Our Website, provide greater security, and fight vandalism.&lt;br /&gt;
&lt;br /&gt;
=== User preferences ===&lt;br /&gt;
When you have created an account on Our Website, we store some information about your preferences. This information may include things like your preferred wiki skin or editor, in essence, any options you have selected in the preferences panel.&lt;br /&gt;
&lt;br /&gt;
We use this information to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
== When May We Share Your Information? ==&lt;br /&gt;
=== For Legal Reasons ===&lt;br /&gt;
We will disclose your Personal Data to public authorities or other persons in response to an official legal process only if we believe it to be legally valid. We will notify you of such requests when possible. We do so to further our legitimate interest and/or to comply with our legal obligations.&lt;br /&gt;
&lt;br /&gt;
We will access, use, preserve, and/or disclose your Personal Data if we reasonably believe it necessary to satisfy a valid and legally enforceable warrant, subpoena, court order, law or regulation, or other judicial or administrative order.&lt;br /&gt;
&lt;br /&gt;
=== Because You Made It Public ===&lt;br /&gt;
Any information you post publicly on Our Website is just that – public. For example, if you put your mailing address on your talk page, that is public, and not specifically protected by this Policy. And if you edit without registering or logging into your account, your IP address will be seen publicly. Please think carefully about your desired level of privacy before you disclose Personal Data on your user page or elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How do we store your data? ==&lt;br /&gt;
HEModdingWiki securely stores your data on a VPS hosted at Hetzner Online GmbH&#039;s &amp;lt;code&amp;gt;nbg1-dc3&amp;lt;/code&amp;gt; datacenter, located in Nuremberg, Germany. In accordance with Article 28 of the General Data Protection Regulation, we have entered a Data Processing Agreement with Hetzner Online GmbH. Hetzner&#039;s Technical and Organizational Measures in Accordance with Article 32 of the GDPR and Amendments can be consulted [https://www.hetzner.com/AV/TOM_en.pdf here].&lt;br /&gt;
&lt;br /&gt;
In addition to Hetzner&#039;s measures, your data is protected by a hardened firewall, configured to only allow the minimal amount of traffic required to run Our Website. Your data is never transferred outside the Hetzner datacenter, unless it is being consulted by our administrators for the purpose of moderation. All traffic is encrypted through industry standard TLS encryption. Your Personal Data can only be accessed by our administrators, who have been instructed in proper handling of Personal Data and the General Data Protection Regulation.&lt;br /&gt;
&lt;br /&gt;
HEModdingWiki will keep your Account Information, your User Preferences and Your Contributions indefinitely, or until you request their deletion. Should you request their deletion, this information will be fully removed from our database. Log information will be kept for a period of 3 months, after which it will be deleted from our database. Cookies are stored on your own machine and are by default stored indefinitely, but can be removed by you at any time, through the built in cookie removal function of your web browser.&lt;br /&gt;
&lt;br /&gt;
== What are your data protection rights? ==&lt;br /&gt;
HEModdingWiki would like to make sure you are fully aware of all your data protection rights. Every user is entitled to the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The right to access&#039;&#039;&#039;: You have the right to request HEModdingWiki for copies of your personal data. We may charge you a small fee for this service.&lt;br /&gt;
* &#039;&#039;&#039;The right to rectification&#039;&#039;&#039;: You have the right to request that HEModdingWiki correct any information you believe is inaccurate. You also have the right to request HEModdingWiki to complete information you believe is incomplete.&lt;br /&gt;
* &#039;&#039;&#039;The right to erasure&#039;&#039;&#039;: You have the right to request that HEModdingWiki erase your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to restrict processing&#039;&#039;&#039;: You have the right to request that HEModdingWiki restrict the processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to object to processing&#039;&#039;&#039;: You have the right to object to HEModdingWiki&#039;s processing of your personal data, under certain conditions.&lt;br /&gt;
* &#039;&#039;&#039;The right to data portability&#039;&#039;&#039;: You have the right to request that HEModdingWiki transfer the data that we have collected to another organization, or directly to you, under certain conditions.&lt;br /&gt;
&lt;br /&gt;
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
We use a variety of commonly-used technologies, like cookies, to make our services safer and easier to use, and to help create a better and more customizable experience for you.&lt;br /&gt;
&lt;br /&gt;
We actively collect some types of information with a variety of commonly-used technologies. These generally include tracking pixels, JavaScript, and a variety of &amp;quot;locally stored data&amp;quot; technologies, such as cookies and local storage. These types of technologies may also be used in online tools on a third-party site that loads information from Our Website. We realize that some of these technologies do not have the best reputation in town and can be used for less-than-noble purposes. So we want to be as clear as we can about why we use these methods and the type of information we collect with them.&lt;br /&gt;
&lt;br /&gt;
=== What are cookies? ===&lt;br /&gt;
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology.&lt;br /&gt;
&lt;br /&gt;
For further information, visit [[https://allaboutcookies.org/].&lt;br /&gt;
&lt;br /&gt;
=== How do we use cookies? ===&lt;br /&gt;
Depending on which technology we use, locally stored data may include text, Personal Data (like your IP address), and information about your use of Our Website (like your username or the time of your visit).&lt;br /&gt;
&lt;br /&gt;
We only use this information to&lt;br /&gt;
&lt;br /&gt;
* Keep you signed in.&lt;br /&gt;
* Store your user preferences and make the website easier to use.&lt;br /&gt;
&lt;br /&gt;
=== What types of cookies do we use? ===&lt;br /&gt;
On Our Website we only use functional cookies. We use these cookies so that we can recognize you on our website and remember your previously selected User Preferences.&lt;br /&gt;
&lt;br /&gt;
We will never use third-party cookies, unless we get your permission to do so. If you ever come across a third-party data collection tool that has not been authorized by you (such as one that may have been mistakenly placed by another user or administrator), please report it to us on the [[HEMS Discord]], by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
=== How to manage cookies ===&lt;br /&gt;
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.&lt;br /&gt;
&lt;br /&gt;
== Privacy policies of other websites ==&lt;br /&gt;
Our Website contains links to other websites. Our privacy policy applies only to Our Website, so if you click on a link to another website, you should read their privacy policy.&lt;br /&gt;
&lt;br /&gt;
== Changes to our privacy policy ==&lt;br /&gt;
HEModdingWiki keeps its privacy policy under regular review and places any updates on this web page. This privacy policy was last updated on January 12, 2025.&lt;br /&gt;
&lt;br /&gt;
== How to contact us ==&lt;br /&gt;
If you have any questions about HEModdingWiki&#039;s privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.&lt;br /&gt;
&lt;br /&gt;
Contact us through the HEMS discord server, by notifying `@Wiki Admin`.&lt;br /&gt;
&lt;br /&gt;
== How to contact the appropriate authority ==&lt;br /&gt;
Should you wish to report a complaint or if you feel that HEModdingWiki has not addressed your concern in a satisfactory manner, you may contact the Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Autorité de la protection des données - Gegevensbeschermingsautoriteit (APD-GBA)&lt;br /&gt;
Rue de la Presse 35 – Drukpersstraat 35&lt;br /&gt;
1000 Bruxelles - Brussel&lt;br /&gt;
Tel. +32 2 274 48 00&lt;br /&gt;
Fax +32 2 274 48 35&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Email: [[mailto:contact@apd-gba.be contact@apd-gba.be]]&lt;br /&gt;
&lt;br /&gt;
Website:&lt;br /&gt;
* [[https://www.autoriteprotectiondonnees.be https://www.autoriteprotectiondonnees.be]]&lt;br /&gt;
* [[https://www.gegevensbeschermingsautoriteit.be https://www.gegevensbeschermingsautoriteit.be]]&lt;/div&gt;</summary>
		<author><name>Angryzor</name></author>
	</entry>
</feed>