<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://heroes.thelazy.net//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Deus</id>
	<title>Heroes 3 wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://heroes.thelazy.net//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Deus"/>
	<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php/Special:Contributions/Deus"/>
	<updated>2026-04-16T06:05:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Proposals&amp;diff=144350</id>
		<title>Proposals</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Proposals&amp;diff=144350"/>
		<updated>2024-11-28T05:03:34Z</updated>

		<summary type="html">&lt;p&gt;Deus: /* Discussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General/Ongoing==&lt;br /&gt;
# Help clear the [[Special:SpecialPages|Maintenance Reports]] for unused/broken/wanted items!&lt;br /&gt;
# Check out and verify [[Trivia#Unverified Claims]]&lt;br /&gt;
# Look for pages that need help and report them here (e.g. unreadable color scheme in &amp;quot;Aesthetics&amp;quot;, missing info in &amp;quot;Missing Info&amp;quot;)&lt;br /&gt;
#* Also report if data for an expansion is shown improperly (e.g. HotA functional data is seen when HotA is disabled via the switch on the top or left (Lore should always be visible)). Report these issues here in &amp;quot;Content Switches&amp;quot;.&lt;br /&gt;
# Use {{tl|unk}} to mark text we need to fill in. That way all the unknown text will link to that template!&lt;br /&gt;
#* Also, help clear the pages linking to the template by filling in the missing info.&lt;br /&gt;
# Record any in-game bugs found here: [[List of bugs (HotA)]]&lt;br /&gt;
&lt;br /&gt;
== Specific ==&lt;br /&gt;
=== Research/Explain game concepts (HIGH priority) ===&lt;br /&gt;
# [[Breath Attack]] could use a diagram of how it works (specifically when attacking straight up or down)&lt;br /&gt;
#* See [[Talk: Breath attack]] for discussion.&lt;br /&gt;
# [[Join]]: Add details abut when the wandering monster flees. Currently this covers everything else (fighting/joining for free/joining for gold).&lt;br /&gt;
# &amp;quot;RMG Value&amp;quot; is referenced on [[List of adventure map objects]] and [[AI value]], but never explained. Maybe add explanation to [[Random Map]]? Add links from these pages when done.&lt;br /&gt;
&lt;br /&gt;
=== Content: Page Creation/Updating ===&lt;br /&gt;
==== Discussion ====&lt;br /&gt;
* Is it possible for the mods to delete this [[Spell Ref. ID|page]]? I was adding reference IDs for spells and skills and decided to consolidate all in the same page, hence the page is now redundant.&lt;br /&gt;
* [[The Story]]: Should we keep this? This seems to be a small summary of {{mm7}} and doesn&#039;t really add much to the [[Lost Lore]]. Thoughts? --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 19:46, 21 October 2024 (UTC)&lt;br /&gt;
** Maybe paraphrase/reference this on [[List of games set in Enroth (world)]]?&lt;br /&gt;
&lt;br /&gt;
==== Main Page ====&lt;br /&gt;
* (none)&lt;br /&gt;
&lt;br /&gt;
==== Missing Info ====&lt;br /&gt;
# &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;(IMPEDIMENT: Talk to HotA team)&amp;lt;/span&amp;gt; I can&#039;t find any info about the following items: --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 00:46, 22 September 2024 (UTC)&lt;br /&gt;
#* &amp;quot;Kreegan&#039;s Horns&amp;quot; - [[Frontier]]&lt;br /&gt;
#* &amp;quot;Tuunbaq&amp;quot; - [[Frontier]]&lt;br /&gt;
# [[List of adventure map objects]]: Abandoned Mine missing RMG value.&lt;br /&gt;
# Flesh out pages for all [[Jadame]] regions and all [[Enroth (continent)]] regions.&lt;br /&gt;
#* Include some basic info and a map where possible.&lt;br /&gt;
&lt;br /&gt;
==== Standardization ====&lt;br /&gt;
# Add story info to hero pages.&lt;br /&gt;
#* Standard heroes. Complete with exceptions:&lt;br /&gt;
#** Factory: {{Hn|Henrietta|0=}}, &amp;lt;s&amp;gt;{{Hn|Sam|0=}},&amp;lt;/s&amp;gt; {{Hn|Wynona|0=}}&amp;lt;s&amp;gt;, Any updates from [[Homecoming (HotA)]]&amp;lt;/s&amp;gt;&lt;br /&gt;
#* Campaign heroes with profiles: See [[Template:Campaign hero (profile) table]]&lt;br /&gt;
#** Status: &amp;lt;s&amp;gt;roe,&amp;lt;/s&amp;gt; ab, &amp;lt;s&amp;gt;sod, hc,&amp;lt;/s&amp;gt; hota&lt;br /&gt;
#* &amp;lt;s&amp;gt;Campaign heroes with portraits: See [[Template:Campaign hero (pic) table]].&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Reskins: See list in [[Template:Campaign hero table (reskins)]].&amp;lt;/s&amp;gt;&lt;br /&gt;
# Go through all artifact pages and remove information duplicated by the body text and templates on the right.&lt;br /&gt;
# Merge [[Join]] page into [[Wandering creature]] page.&lt;br /&gt;
&lt;br /&gt;
==== Fix (HIGH priority) ====&lt;br /&gt;
# [[The Shores of Hell]]: Update map screenshots&lt;br /&gt;
# [[Timeline]]: [[Terror of the Seas]] level 1 ([[Prisoner of Doom]]) mentions on Day 1 that the [[Festival of Life]] is over.&lt;br /&gt;
# [[Template:Spell probability table]] uses a rough calculation for spell chance. Use the more detailed equation detailed on the page and update the numbers (see talk page for details).&lt;br /&gt;
&lt;br /&gt;
==== Double-check ====&lt;br /&gt;
# [[Map Editor - Objects]] page mentions SoD bugs when specifying artifact / resource guards. Did these bugs actually occur in SoD? Have they been fixed completely in Hota? - [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
# [[The Courtier]] mentions &amp;quot;Zoological Accounts&amp;quot; as supposedly another tale by [[Xanthor]]. Is this 1) Another [[Lost Lore]] story we don&#039;t have yet, 2) a story that was never published, or 3) A reference to the faction descriptions currently attributed to [[Marcus Finch]]?&lt;br /&gt;
# [[List of adventure map objects]]: I assume that some of these objects got added with ab/sod? If so, mark the source accordingly.&lt;br /&gt;
# [[List of adventure map objects]]: Keymaster&#039;s tent has various RMG values for HotA. What are these referring to? Do different colors spawn at different rates? Is this even accurate?&lt;br /&gt;
#* NOTE: ShushMaster added these values on Sept. 20, 2018 (in case that helps)&lt;br /&gt;
&lt;br /&gt;
==== Content Switches ====&lt;br /&gt;
{{-}}{{-}}&#039;&#039;&#039; Hide all HotA / DoR game content (not lore content) when not enabled:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• For table rows, just add this to the row: &amp;lt;nowiki&amp;gt;|- class=&#039;onlyhota&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• For most other content just use: &amp;lt;nowiki&amp;gt;{{showwithhota|content}}&amp;lt;/nowiki&amp;gt;. Can also use &amp;lt;nowiki&amp;gt;{{swh|HotaOnlyContent|SodOnlyContent}}&amp;lt;/nowiki&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• In some circumstances, you might need to use: &amp;lt;nowiki&amp;gt;&amp;lt;span class=&#039;onlyhota&#039;&amp;gt;content&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• For lists, use: &amp;lt;nowiki&amp;gt;&amp;lt;ul class=&#039;onlyhota&#039;&amp;gt;&amp;lt;li&amp;gt;item&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;other item&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/nowiki&amp;gt;. For numbered lists, swap &amp;quot;ul&amp;quot; to &amp;quot;ol&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• See [[User:Imahero/hide]] for more examples.&amp;lt;br&amp;gt;&lt;br /&gt;
# Issues:&lt;br /&gt;
#* ERROR: The table &amp;lt;nowiki&amp;gt;|- class=&#039;onlyhota&#039;&amp;lt;/nowiki&amp;gt; seems to erroneously negate style settings for the row (style settings for the cell still work fine). --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 17:13, 24 September 2024 (UTC)&lt;br /&gt;
#** Which file holds the logic for the class content switches? I can&#039;t find it. I think it is one of the backend wiki files? --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 18:54, 3 October 2024 (UTC)&lt;br /&gt;
#** Pages to fix once this error is solved:&lt;br /&gt;
#*** Remove duplicates from all class tables (e.g. [[Template:Knight hero table]]) using &amp;lt;nowiki&amp;gt;{{Campaign hero table (profile)|Knight}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#*** [[Template: Spell probability table]]&lt;br /&gt;
#*** [[Template:CrComprow]]&lt;br /&gt;
# Combine all templates/pages with (HotA) into single unified templates/pages.&lt;br /&gt;
#* Combine: [[Adventure map object effects (HotA)]]&lt;br /&gt;
#* Add in hota/sod change icons: [[Template:Conflux hero table]], [[Adventure map creature sprites]]&lt;br /&gt;
&lt;br /&gt;
==== New Features (in progress) ====&lt;br /&gt;
# Maps (Lead: Legate)&lt;br /&gt;
#* Questions:&lt;br /&gt;
#*# Does [[Land of the Giants]] belong to [[AvLee]], [[Eeofol]] or [[Nighon]]?&lt;br /&gt;
#*#* Nighon: The [[Antagarich]] physical map colors it like [[Nighon]].&lt;br /&gt;
#*#** This agrees with [[Antagarich#Geography]] that Turnam just added. This states: &amp;quot;The Dungeon Overlords rule the eastern shores of the Erathian continent, as well as the Nighon islands off the coast.&amp;quot;&lt;br /&gt;
#*#* Eeofol: [[World on Fire]] intro makes it seem like part of the halfling homeland.&lt;br /&gt;
#*#** Aren&#039;t &amp;quot;Eeofol&amp;quot; and &amp;quot;Land of the Giants&amp;quot; synonyms anyway? In MM7, the &amp;quot;tunnels to Eeofol&amp;quot; lead you to the Land of the Giants region. --[[User:Turnam|Turnam]] ([[User talk:Turnam|talk]]) 08:43, 30 June 2024 (UTC)&lt;br /&gt;
#*#* AvLee: What we currently have on the maps.&lt;br /&gt;
#*#* RESOLUTION: [[Land of the Giants]] was part of the halfling homeland of [[Eeofol]] before the [[Night of Shooting Stars]]. It seems as though when the [[Kreegan]]s conquered [[Eeofol]], [[Nighon]] opportunistically grabbed it to create a foothold on the main continent. Since our maps are based ~1167 AS, lets change it to Nighon and add some explanation about this. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 13:24, 18 September 2024 (UTC)&lt;br /&gt;
#*# I think the [[Contested Lands]] section is not entirely accurate. I think some of the regions listed may actually be part of Erathia.&lt;br /&gt;
#*#* [[Forestdale (region)]] should be part of [[Erathia]] (See [[Talk:Contested Lands]]). Pages/maps need to be updated.&lt;br /&gt;
#*#* Possibly move regions to [[Contested Lands]]. Consider: [[Marble Garden]], [[Forestdon]], [[Forestbury]], [[Forestlow]], [[Strongwillow]], [[Woodgrove]].&lt;br /&gt;
#*#** If we move these areas, they should be double-listed in [[Erathia]] and [[Contested Lands]] as both are true over the course of the game.&lt;br /&gt;
#*#* RESOLUTION: It seems like most of the [[AvLee]]-[[Erathia]] border was considered &amp;quot;Contested Lands&amp;quot; at some point. Only a portion of this region broke off from [[Erathia]] to form the nation of the &amp;quot;Contested Lands&amp;quot;. Change maps/listings appropriately.&lt;br /&gt;
#* Still need:&lt;br /&gt;
#*# Countries: [[Regna]], [[Terra Nova]]&lt;br /&gt;
#*# Make a modified version of each country map that shows the country in question with the regions written in? --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 04:50, 26 June 2024 (UTC)&lt;br /&gt;
# [[List of games set in Enroth (world)]] (Lead: None)&lt;br /&gt;
# Update Town building trees. (Lead: Phasma)&lt;br /&gt;
#* Base: [[Tower]], [[Inferno]], [[Conflux]]&lt;br /&gt;
#* HotA-specific: [[Factory]]&lt;br /&gt;
# [[Hex Editing - Guide‎‎]] (Lead: Csaros)&lt;br /&gt;
#* This is all phenomenal info! Good job condensing it all to one page. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 13:16, 19 September 2024 (UTC)&lt;br /&gt;
#* Are there any pictures that would add to the readability of this page? Maybe screenshots of the hex editor at specific locations?&lt;br /&gt;
#* Maybe it would be helpful to color the text to show how it line up better? Example:&lt;br /&gt;
#**&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt;000000&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt; - item 1&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt; - item 2&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; - item 3&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt; - item 4&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt; - item 5&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:purple&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; - item 6&lt;br /&gt;
#***&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt; - item 7&lt;br /&gt;
#****That&#039;s actually a great idea. I think color-coding it would make it much easier to find appropriate explanations. At the same time, I don&#039;t know if there&#039;s a point in screenshoting the hex editor. I can screenshot the editor or the results of modding the game, but idk how that helps understand the coding. &lt;br /&gt;
#*****At the same time, I wish someone else who knows more than I do could help me with what I&#039;m missing - f.e. Resource Silos, Mana Generator, etc. - [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
#* Prepare a detailed table for heroes, creatures, spells etc. with reference IDS and all relevant offsets.&lt;br /&gt;
#** Is there an easy way to create tables for the wiki, other than rewriting values row by row one by one? [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]]) 15:35, 18 October 2024 (UTC)&lt;br /&gt;
# H3CSS Graphical overhaul for the wiki. (Lead: None)&lt;br /&gt;
#* Phasma added a bunch of pics for the desired look to the discord channel, just need someone with CSS knowledge (or desire to learn) to run with it! --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 15:18, 30 September 2024 (UTC)&lt;br /&gt;
# Create a [[Campaign Editor]] page. (Lead: Csaros)&lt;br /&gt;
#* Include the no-campaign map watercolor paintings (e.g. [[:File:Cmap hota 4.png]]).&lt;br /&gt;
#** Status: Started adding maps. Need to check what is available in the campaign editor and correct this page/add captions. I am not sure if we have all of the actual maps uploaded or not. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 14:05, 31 October 2024 (UTC)&lt;br /&gt;
#*** Just went into the campaign editor, here are the maps we are missing:&lt;br /&gt;
#**** Song for the Father&lt;br /&gt;
#**** Long Live the Queen (although it&#039;s a 3-map copy of Dungeons and Devils)&lt;br /&gt;
#**** Long Live the King (near-identical to Song for the Father)&lt;br /&gt;
#**** Islands (it contains 3 islands, first two are star with 4-points shaped the last one is squarish; I think it may be Foolhardy Waywardness map, but I may misremember it)&lt;br /&gt;
#**** Unholy Alliance&lt;br /&gt;
#**** Terror of the Seas (4 islands + what appears to be Erathia)&lt;br /&gt;
#**** Horn of the Abyss&lt;br /&gt;
&lt;br /&gt;
==== Desired Additions ====&lt;br /&gt;
# &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;(IMPEDIMENT: Finish &amp;quot;Wanted&amp;quot; pages)&amp;lt;/span&amp;gt; Make a supporting characters page. (See [[:Category: Supporting character]]). Have sortable columns for name/affiliation/species.&lt;br /&gt;
# Create Lore page that will fit all main information and links to all detailed pages on the lore (we can include chronology, politics, [[Lost Lore]], etc. into this). - [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
#* Are you envisioning something different than the Lore tab on the main menu? --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 13:46, 31 October 2024 (UTC)&lt;br /&gt;
#** Yes, something more akin to f.e. [https://www.gildia.acidcave.net/chronologia_ashanu.html acidcave&#039;s Ashan lore page], which explains in details the entire timeline, plot of each campaign, notes on all important backstory events mention; it also covers what happened to most of relevant campaign characters at every point (here the Queen was born, here Sandro&#039;s parents was killed, here Markal became his student etc.) all in one nice to read text. I wish something like this existed for H3; I, sadly, don&#039;t know enough about heroes 3 lore to write it (and then I wouldn&#039;t wish for it). - [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
&lt;br /&gt;
=== File upload/editing ===&lt;br /&gt;
{{-}}{{-}}&#039;&#039;&#039;NOTES&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• In a command terminal run: &amp;quot;oxipng -o 6 -s -r .&amp;quot; to losslessly compress all png images: [https://github.com/shssoichiro/oxipng github.com/shssoichiro/oxipng]&amp;lt;br&amp;gt;&lt;br /&gt;
{{-}}{{-}}{{-}}{{-}}• Animated png files will play on pages if they are full size. Animated gif files will play regardless.&amp;lt;br&amp;gt;&lt;br /&gt;
# Add pics of the toolstrip buttons for the [[Map Editor]] and [[Campaign Editor]].&lt;br /&gt;
# &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;(IMPEDIMENT: NEEDS H4)&amp;lt;/span&amp;gt; I think we should add the intro video of Heroes 4 to [[The Reckoning]] with a note. Although this isn&#039;t part of Heroes 3, that video is really the final event in the Heroes 3 timeline/story. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 14:55, 6 March 2024 (UTC)&lt;br /&gt;
# &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;(IMPEDIMENT: Talk to HotA team?)&amp;lt;/span&amp;gt; (HIGH priority) Add missing pics for Factory puzzle map to [[Obelisk#Factory]]&lt;br /&gt;
# (HIGH priority) Some visiting schemes from [[List of adventure map objects]] (See [[Special:WantedFiles]])&lt;br /&gt;
# Some of the creature dwelling pics are virtually identical to their upgraded version (e.g. [[Chapel of Stilled Voices]], [[Altar of Thought]]). Can we update these pics to show more of a difference?&lt;br /&gt;
# Change all [[Adventure map creature sprites]] shadows to be semi-transparent black&lt;br /&gt;
# [[Template: H2]] looks a little strange with the hero pictures being slightly different than the class pictures (they have a border). Update the class pictures to match.&lt;br /&gt;
# Add pictures of the Letters to Catherine from the mm6 manual. These can be found with a quick Google search. Add to the [[Roland]] page once uploaded.&lt;br /&gt;
# Add pictures of the Diaries of Archibald from the mm7 manual. These can be found with a quick Google search. Add to the [[Archibald]] page once uploaded.&lt;br /&gt;
# Add pictures of the Day of the Destroyer tale from the mm8 manual. This can be found with a quick Google search. Add to the [[Escaton]] page once uploaded.&lt;br /&gt;
&lt;br /&gt;
=== Aesthetics ===&lt;br /&gt;
* (none)&lt;br /&gt;
&lt;br /&gt;
=== Template (advanced) ===&lt;br /&gt;
* [[Template:Artifact sidebar]]: Odd behavior when disabling, then enabling content switches. Hota rows are shown when when should be suppressed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;mw-customtoggle-LowPri&amp;quot; style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;Low Priority/Backburner&amp;lt;/big&amp;gt;&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-LowPri&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Low Priority/Backburner ==&lt;br /&gt;
=== Research/Explain game concepts ===&lt;br /&gt;
# I think it would be worth adding a page or two about AI behaviour in detail, such as how it affects kiting, etc. -- [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
#* In case I forget: AI is coded to always pick the most bottom right part of the screen if two hexes are equidistant to their target.&lt;br /&gt;
#* Another note for it: We could add a description and explanation of some unusual AI behaviour that gets used by experienced players: Fake Breath is already there, but things like Kiting, Fake Forgetfulness, Areas of Danger, etc. are missing. - [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
&lt;br /&gt;
===Content: Page Creation/Updating===&lt;br /&gt;
====Missing Info====&lt;br /&gt;
# Single scenarios: Add all the timed/object events like seen on the campaign scenarios. (See [[All for One]])&lt;br /&gt;
#* I know this is a huge task. Figured I would just put it here for if we run out of other stuff to do in the future :) --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 15:42, 22 December 2023 (UTC)&lt;br /&gt;
#* Probably want to figure out a way to automatically export/convert text into the form we want.&lt;br /&gt;
#* Maybe focus on the story/lore-based scenarios first? (e.g. [[Trial of Flame]], [[The Mandate of Heaven]], [[Dead Man&#039;s Tales]], [[Ville&#039;de&#039;Porte]])&lt;br /&gt;
#** There seem to be a bunch that mention named characters or places, but may not be connected to canon. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 14:41, 6 August 2024 (UTC)&lt;br /&gt;
# Figure out who the narrator in the {{hc}} campaigns is.&lt;br /&gt;
#* [[Old Wounds]] intro implies he is a descendant of [[Mensor]]. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 17:28, 24 June 2024 (UTC)&lt;br /&gt;
#* I doubt he&#039;s ever been given an actual name. If you want an identifier for him, how about calling him &amp;quot;The Chronicler&amp;quot;? Since he narrates the Chronicles... --[[User:Turnam|Turnam]] ([[User talk:Turnam|talk]]) 07:32, 25 June 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
====Standardization====&lt;br /&gt;
# Find all the random colors (e.g. &amp;quot;color:#d8d8eb&amp;quot;, rgb(253, 253, 253)) then do one of the following 1) switch them to our template colors ([[Template:Color templates]]) (if they match an existing category), 2) switch them to [[https://en.wikipedia.org/wiki/File:SVG_Recognized_color_keyword_names.svg | standard wiki colors]] (if they are one-off colors (e.g. when highlighting the best/worst values)), or 3) add colors to [[Template:Color templates]] and switch to using the standard template (e.g. {{tl|Blue 1}}) (if they are for a new category of pages)&lt;br /&gt;
#* This is proving much harder than I thought...can anyone come up with a good string to search to find these? something like &amp;quot;color:#&amp;quot; should be fine, but search doesn&#039;t seem to like that. I can&#039;t get regex search to work either... --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 14:03, 29 March 2024 (UTC)&lt;br /&gt;
# Consider standardizing buildings to use templates seen on [[Skeleton Transformer]].&lt;br /&gt;
# Go through the campaign videos and copy them into an &amp;quot;Appearance&amp;quot; section of the pages of the heroes/creatures/etc. that they depict. (See [[Behemoth]]).&lt;br /&gt;
#* Also go through manuals and copy Dev Concept Art to proper pages.&lt;br /&gt;
#** e.g. [[Devil]] - [[Restoration of Erathia Manual Page 56]], [[Angel]] - p87&lt;br /&gt;
#** Look at pics at bottom of categories (e.g. [[:Category:Restoration of Erathia Manual]]) to easily find pages with concept art.&lt;br /&gt;
# Go through all user commentary to standardize all language and make it grammatically sound.&lt;br /&gt;
&lt;br /&gt;
==== Desired Updates ====&lt;br /&gt;
# Write tips on [[:category:campaign scenarios|campaign scenario]] pages ([[Special:Contributions/212.112.111.20|212.112.111.20]])&lt;br /&gt;
#* Sometimes there are tips on the main campaign pages under User Commentary. (e.g. [[Dragon&#039;s Blood]])&lt;br /&gt;
#* I&#039;ve noticed there are a bunch of strategy/tips on https://mightandmagic.fandom.com/wiki/Tunnels_of_Ice. Should/Can we cite/copy that info here or leave a link to them?&lt;br /&gt;
#** The &amp;lt;i&amp;gt;CC BY-SA&amp;lt;/i&amp;gt; seems like a very open license. I would just add attribution using the appropriate link (to the edit summary)&lt;br /&gt;
# Add banned spells/artifacts/heroes/secondary skills (except banned for default) to campaign/single scenario pages.&lt;br /&gt;
&lt;br /&gt;
==== Desired Additions ====&lt;br /&gt;
# Concept art, pre-release screenshots, and other such promotional material.&lt;br /&gt;
#* Here are some websites/galleries we can use to add material from: [[File:Hero Cosmos small.gif|link=user:phasma|→ Phasma]] 17:59, 25 April 2024 (UTC)&lt;br /&gt;
#** https://tcrf.net/Prerelease:Heroes_of_Might_and_Magic_III:_The_Restoration_of_Erathia&lt;br /&gt;
#** https://h3.heroes.net.pl/galeria/modele-3d&lt;br /&gt;
#** https://www.h3.acidcave.net/galeria_i_filmy_oryginalne_hd.html&lt;br /&gt;
#** George Almond&#039;s portfolio: [https://www.artstation.com/universalexport/albums/838900 Heroes sketchbook] &amp;amp; [https://www.artstation.com/universalexport/albums/841166 Hero portraits]&lt;br /&gt;
#** Phelan Sykes&#039; portfolio is dead, some content may be salvageable through the Internet Archive: [https://web.archive.org/web/20050507155014/http://phelansykes.com/Heroes3.htm Heroes 3] and [https://web.archive.org/web/20050507155046/http://phelansykes.com/Heroes3x.htm Heroes 3 expansions]&lt;br /&gt;
#** Came across this...we are missing some of it from [[Unused content]]. [https://tcrf.net/Heroes_of_Might_and_Magic_III:_The_Restoration_of_Erathia] --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 13:29, 20 August 2024 (UTC)&lt;br /&gt;
#** Acidcave has an entire subdivision to cut content, which includes a lot of stuff we&#039;re missing such as Nobleman Elves: [https://www.acidcave.net/ciekawostki.php?trivia=2]] - [[User:Csaros|Csaros]] ([[User talk:Csaros|talk]])&lt;br /&gt;
# Developer interviews and other articles with important information about the game and its universe.&lt;br /&gt;
#* (For this and previous bullet) A lot of this material is now lost or hard to find, and this will only get worse as time passes. Some other wikis for other franchises have been pretty good at safekeeping such documents (I&#039;m thinking for example of the UESP for Elder Scrolls games). --[[User:Turnam|Turnam]] ([[User talk:Turnam|talk]]) 16:51, 25 April 2024 (UTC)&lt;br /&gt;
# Make maps to show attacks during the wars/campaigns. Use campaign maps + colored arrows to show aggression.&lt;br /&gt;
&lt;br /&gt;
===File upload/editing===&lt;br /&gt;
(none)&lt;br /&gt;
&lt;br /&gt;
===Template (advanced)===&lt;br /&gt;
# I wonder if it would be possible to change the hover-over text for {{tl|An}}/{{tl|Cn}}/{{tl|Hn}} to be what the effect/stats/specialty is? --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 13:55, 30 January 2024 (UTC)&lt;br /&gt;
#* Off the top of my head, I thought of a massive switch statement in the template, but that would be a pain to build/maintain and may slow down the page loads.&lt;br /&gt;
#* I suppose it would probably be easier to build/maintain as a [[module:an|lua script]]. –[[user_talk:imahero|imahero]] 22:23, 30 January 2024 (UTC)&lt;br /&gt;
#* [[File:Armor of the Damned_am-artif.gif|{{#invoke:an|hover|Armor of the Damned}}]] [[File:Horn of the Abyss_am-artif.gif|{{#invoke:an|hover|Horn of the Abyss}}]] [[File:Armageddon&#039;s Blade_am-artif.gif|{{#invoke:an|hover|Armageddon&#039;s Blade}}]] –[[user_talk:imahero|imahero]] 22:23, 30 January 2024 (UTC)&lt;br /&gt;
# Ok, here with another pie-in-the sky/probably a ton of work idea. For campaign scenarios, the coordinates located on the pages are generally helpful only if you have the scenario editor open (and have the campaign broken into scenarios). I think it would be possible to make a map that has things like the seer&#039;s huts labelled with numerical overlays. ([[https://en.wikipedia.org/wiki/Template:Overlay]] - Brisbane example). We may even be able to do this somewhat programmatically - make a template that takes in the map file and coordinates for what we want to label. Since the size of the map is known (e.g. Medium is 72x72), then a hut at (50, 15, 0) would be 50/72 of the way across the image in the x-direction and 15/72 of the way down in the y-direction, in the upper-world. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 02:46, 17 March 2024 (UTC)&lt;br /&gt;
#* So as not to clutter things up or increase loading time, we could only show this map on some kind of button press.&lt;br /&gt;
#* We should already have the tools for this. We already have the map files and coordinates, and we already used overlays in [[Template:BonusCr]].&lt;br /&gt;
# Consider making extra templates to clean up the scenario pages (e.g. Some kind of location/message template) (See [[Template:TErow]] for example)&lt;br /&gt;
#* Also switch templates to the correct color palette (See [[Template:Color templates]])&lt;br /&gt;
# [[Template:SmCost]] does not work when placed in the &amp;quot;effect=&amp;quot; parameter of [[Template:TErow]].&lt;br /&gt;
#* NOTE: Also happens in the &amp;quot;rew=&amp;quot; param or [[Template:SorQrow]].&lt;br /&gt;
#* Doesn&#039;t seem to work properly when it is the first thing in a parameter. WORKAROUND: add &amp;lt;nowiki&amp;gt;&amp;quot;{{-}}&amp;quot;&amp;lt;/nowiki&amp;gt; before using the template --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 19:47, 15 April 2024 (UTC)&lt;br /&gt;
# Make a template to standardize the maps on the country pages.&lt;br /&gt;
&lt;br /&gt;
=== Wiki settings (advanced) ===&lt;br /&gt;
# Looking at the campaign videos again, I don&#039;t think we fully solved the problem. Some videos look good, but at least [[Warlords of the Wasteland]] still looks bad.&lt;br /&gt;
#* Maybe was an issue of the cc or something? I deleted it to check. Maybe undelete if it doesn&#039;t actually fix the problem. –[[user_talk:imahero|imahero]] 23:10, 20 March 2024 (UTC)&lt;br /&gt;
#* [[Dead or Alive]] epilogue video is currently the one voiced in Russian.&lt;br /&gt;
#** Are there actual english versions? Link to youtube video of them maybe? –[[user_talk:imahero|imahero]] 23:10, 20 March 2024 (UTC)&lt;br /&gt;
#** I don&#039;t think there are, but maybe use the version with no narration? --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 13:09, 21 March 2024 (UTC)&lt;br /&gt;
# The idea of &amp;quot;clickable regions&amp;quot; of pictures has gotten mentioned a few times. Research if/how this is possible. --[[User:Legate|Legate]] ([[User talk:Legate|talk]]) 20:01, 13 May 2024 (UTC)&lt;br /&gt;
#* Vision: Certain regions of an image could be configured to light up &amp;amp; link to another page like the main menu.&lt;br /&gt;
#* Pages to modify if implemented:&lt;br /&gt;
#** [[Timeline]]: Link to all the referenced pages.&lt;br /&gt;
#** [[Antagarich]]: Add clickable maps to move between the location pages.&lt;br /&gt;
#* The usual way to add clickable maps for a MediaWiki is to install the [https://www.mediawiki.org/wiki/Extension:ImageMap ImageMap] extension. I don&#039;t see it already [[Special:Version|here]], so that&#039;s a topic for the wiki owner.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
* Use &amp;quot;#*&amp;quot; to add a comment to an item without breaking the numbering.&lt;br /&gt;
* Use &amp;lt;nowiki&amp;gt;&amp;lt;li value=&amp;quot;your_number_here&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/nowiki&amp;gt; to restart a numeric list if there are breaks in between the numbers (e.g. comments).&lt;br /&gt;
* For discussion surrounding current changes, use [[Changelog Chat]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributor resources]]&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144349</id>
		<title>Hex Editing - Guide</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144349"/>
		<updated>2024-11-28T04:49:53Z</updated>

		<summary type="html">&lt;p&gt;Deus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{wip}}&lt;br /&gt;
&lt;br /&gt;
The following article describes some basics of hex edition. Offsets (and code itself in some locations) may vary based on game version. &lt;br /&gt;
&lt;br /&gt;
Heroes of Might and Magic III is coded in Assembly x86. Each byte (a set of 2 hexadecimal characters) corresponds to either a function, or a value for an already determined function. The only exception is byte 0x90, which is non-coding and may be used to f.e. fill empty space. &lt;br /&gt;
&lt;br /&gt;
Upper majority of creature stats, abilities, etc. is coded within the *.exe. While it may not be readable or understandable to a layman, in short time one can comprehend a lot of the code and find reason and rhyme in it (or at least, parts of it). &lt;br /&gt;
&lt;br /&gt;
To open (and edit) the *.exe files, one needs a hex editor, f.e. [https://sourceforge.net/projects/frhed/ frhed] or another similar software. I recommend [https://github.com/WerWolv/ImHex ImHex], as it comes with a handy disassembler function built in, as well as a base converter, and similar useful tools.  &lt;br /&gt;
&lt;br /&gt;
Some data is located with the *.lod files. To open them, you need to use [[Tools#MMArchive|MMArchive]]. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Majority of HotA {{wh}} additions are not directly in the h3hota.exe (or h3hota HD.exe), but instead in Hota.dat (and partly in HotA.dll). &lt;br /&gt;
&lt;br /&gt;
=== Numbers ===&lt;br /&gt;
All (or almost all) numbers are written in Little Endian - the bytes are placed in reverse order. As an example, 0xA624C (0x before a number signifies it&#039;s hexadecimal) in Little Endian is written as 4C 62 0A 00. Note, that the system recognizes that a number is negative based on the fact that it&#039;s greater than half the number range: greater than 0x80 for a single byte, and greater than 0x80000000 for a 4-byte value. &lt;br /&gt;
&lt;br /&gt;
Some numbers use a IEE-754 coding. It is recommended to use a calculator for such values, such as the one available on [https://www.save-editor.com/tools/converter_ieee_754.html save-editor.com]. &lt;br /&gt;
&lt;br /&gt;
Keep in mind that most (but, surprisingly, not all) lists start at 0, not at 1, so the first element is element 0 and not element 1.&lt;br /&gt;
&lt;br /&gt;
QWORD and DWORD pointers are Little Endian representations of an address within the *.exe file, with 0x400000 added to them because of the way the game reads the code. Therefore if you want the DWORD pointer to find 0x27e484, you write it as 84 e4 67 00. DWORDs use IEE-754, while QWORDs use an 8-byte double-precision IEE-754 value. &lt;br /&gt;
&lt;br /&gt;
Values followed by zeroes in the same block are 4-byte numbers - this essentially increases their available number range from (in decimal) 0-127 to 0-2147483647. &lt;br /&gt;
&lt;br /&gt;
== Heroes ==&lt;br /&gt;
Heroes are very easy to edit. Hero data is stored in two sets, one containing general hero data and the other containing only hero specialties. Heroes are generally ordered by their faction (Castle, Rampart, Tower, etc.) and then their class (might or magic). Following standard heroes, are all campaign heroes. &lt;br /&gt;
&lt;br /&gt;
=== Hero Data ===&lt;br /&gt;
Hero data is written as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00,&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt; = Gender: 00 is male, 01 is female.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt; = [[Hero race|Race]]. These are listed alphabetically, from Demon to Vampire. This has no in-game effect or visibility and the extensions preferred to default everyone to human, except [[Gelu]] who gets to be an elf.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt; = [[Hero class|Class]]. Classes go in order of factions, and within a faction the might class is listed first. Therefore 00 = Knight, 01 = Cleric, 02 = Ranger, 03 = Druid, etc. Note, that HotA classes essentially &amp;quot;follow&amp;quot; this encoding. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt; = First skill ([[Reference IDs#Secondary Skill Reference IDs|ref. ID]]).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt; = First skill&#039;s proficiency level (00 = Basic, * 01 = Advanced, 02 = Expert).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt; = Second skill ([[Reference IDs#Secondary Skill Reference IDs|ref. ID]]). If there is no second skill, instead, FFFFFFFF is used, replacing ST and the zeroes following it. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt; = Second skill level. If there is no second skill, 00 is used (Basic). &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt; = Spell Book. 00 = absent, 01 = present. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt; = Spell ([[Reference IDs#Spell Reference IDs|ref. ID]]). If no spell is present, FFFFFFFF is used instead. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt; = Starting army unit reference IDs. &lt;br /&gt;
* PS = Small Portrait DWORD pointer, which leads to plain text name of the portrait in the H3bitmap.lod.  &lt;br /&gt;
* PL = Large Portrait, same as above. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0&amp;lt;/span&amp;gt; = allowed in RoE maps by default. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS&amp;lt;/span&amp;gt; = Present by default in all non-RoE maps. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; = Campaign-only. 00 = false, 01 = true.&lt;br /&gt;
&lt;br /&gt;
=== Hero Specialties ===&lt;br /&gt;
Hero specialties are written one by one in the same order as heroes appear in, starting from 0x00278420. &lt;br /&gt;
&lt;br /&gt;
The specialties look as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt; - Specialty type. The following specialty types exist: &lt;br /&gt;
* 00 = Skill specialty (+5% skill effect per level)&lt;br /&gt;
* 01 = Basic Unit specialty (+1 speed, +1 Attack and Defense every &amp;lt;unit level&amp;gt; levels)&lt;br /&gt;
* 02 = Resource (+1 gems per day, etc.)&lt;br /&gt;
* 03 = Spell (+3% efficiency per level for most spells, sometimes special bonuses instead)&lt;br /&gt;
* 04 = Static Unit specialty (static bonus to attack, defense, damage, speed, or any combination of them), f.e. Xeron, Kalt, Haart Lich, etc. &lt;br /&gt;
* 05 = Speed (Sir Mullich only)&lt;br /&gt;
* 06 = Unit Upgrade specialty (Gelu, Dracon, Bidley, etc.)&lt;br /&gt;
* 07 = Dragon Specialty (Mutare, Mutare Drake)&lt;br /&gt;
* 08 = Frederick&#039;s Automaton Explosion specialty. &lt;br /&gt;
&lt;br /&gt;
Note, that setting the first byte (TT000000) to FFFFFFFF will ensure the hero has no specialty. This is only used for Adrienne (yes, she &#039;&#039;technically&#039;&#039; has no hero specialty). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt; = Reference ID of the specialized in Skill,  Unit, Resource or Spell. (Not needed for Dragon and Speed specialties, where it is 00 and an unnecessary, unused 02, respectively). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; = Attack bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt; = Defense bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt; = Damage bonus for Static Unit specialists (and probably Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; = Second unit (ref. ID) that can be upgraded (only used by Unit Upgrade specialists; otherwise left as 00. Note, that using the same unit twice for Unit Upgrade specialty essentially removes second unit from being upgradable; meanwhile using 00 sets the ID to Pikemen.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt; = Resulting unit ref. ID from the upgrade (only for Unit Upgrade specialists). &lt;br /&gt;
&lt;br /&gt;
Note, that using a Unit Upgrade specialist, reference ID of unupgraded creatures ought to be used. F.e., Gelu references Archers and Wood Elves, but code naturally allows also for their upgrades to be improved with his specialty. This does not occur the other way around; specifying ID or U2 as an upgraded creature, will make the upgrade impossible for unupgraded creatures. &lt;br /&gt;
&lt;br /&gt;
Note, that many &amp;quot;possible&amp;quot; specialties don&#039;t exist and simply won&#039;t do anything; examples include Tactics specialty, Teleport specialty, etc.&lt;br /&gt;
&lt;br /&gt;
=== Editing HotA Heroes ===&lt;br /&gt;
Hota heroes are coded in the HotA.dat, in the following order: (names written in quotes are coded in plain text)&lt;br /&gt;
&lt;br /&gt;
07 000000 &amp;quot;hero&amp;lt;ref_id&amp;gt;&amp;quot; 12 000000 &amp;quot;Heroes\hero_&amp;lt;ref_id&amp;gt;.str&amp;quot; FACTION &amp;quot;#large_portrait_file_name.pcx&amp;quot; 0c000000 &amp;quot;#small_portrait_file_name.pcx&amp;quot; XX 000000 &amp;quot;Specialty_Name&amp;quot; YY 000000 &amp;quot;Specialty Bonus: Object&amp;quot; ZZ000000 &amp;quot;{Full Object}&amp;quot; 0d 0a 0d 0a (number of 0a 0d repetitions may differ) &amp;quot;specialty_description&amp;quot; PP000000 &amp;quot;HeroName&amp;quot; QQQQQQQQ &amp;quot;Biography&amp;quot; 00000000 01 5c 0000 (number of zeroes may vary) GG000000 RR000000 HH000000 SO000000 OL000000 ST000000 TL000000 SB000000 SP000000 U1000000 U2000000 U3000000 PS000000 PL000000 R0 AS C0 00 00000000 00000000 1m000000 1M000000 2m000000 2M000000 3m000000 3M000000 08000000 I8000000 TT000000 ID000000 AA000000 DD000000 DM000000 U4000000 U5000000, where:&lt;br /&gt;
&lt;br /&gt;
* FACTION = 09 000000 00000000 0b 000000 for Cove heroes and 09 000000 00000000 00000000 07 000000 for Factory heroes,&lt;br /&gt;
* #large_portrait_file_name.pcx, #small_portrait_file_name.pcx: # and the appropriate file name, f.e. #HPLP06.pcx  &lt;br /&gt;
* XX = {{unk}}&lt;br /&gt;
* Specialty_Name is f.e. &amp;quot;Sea Dogs&amp;quot; or &amp;quot;Nix&amp;quot;. &lt;br /&gt;
* YY = {{unk}}&lt;br /&gt;
* Specialty Bonus: Object refers to the following types of text: &amp;quot;Spell Bonus: Air Shield&amp;quot;, &amp;quot;Creature Bonus: Sea Dogs&amp;quot;, etc. &lt;br /&gt;
* ZZ = {{unk}}&lt;br /&gt;
* {Full Object} is a text in curly parentheses {} stating again the specialty, f.e. &amp;quot;{Estates}&amp;quot;, or &amp;quot;{Pirates, Corsairs and Sea Dogs}&amp;quot;. &lt;br /&gt;
* specialty_description: Plain text description. &lt;br /&gt;
* PP = Hero&#039;s name&#039;s length. &lt;br /&gt;
* QQQQQQQQ = {{unk}}, seems to be some sort of an ID as it seems to be unique for each hero; it is not, however, the reference ID. All QQ values are around 300 (dec). &lt;br /&gt;
* 1m = minimum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 1M = maximum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 2m = minimum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 2M = maximum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 3m = minimum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* 3M = maximum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* I8 = reference ID + 8 for heroes before ref ID 178 and reference ID + 7 for heroes after ref ID 178 (essentially, 0xb9 is skipped)&lt;br /&gt;
&lt;br /&gt;
Heroes in HotA.dat start at 0x23dd and end at 0x9886. Note, that for editing text itself it&#039;s best to use programs such as [https://github.com/sake12/HotA-editor/releases HotA Editor], instead of a direct hex-editing. &lt;br /&gt;
&lt;br /&gt;
=== Altering Hero specialties ===&lt;br /&gt;
&lt;br /&gt;
==== 00 - Skill Specialty ====&lt;br /&gt;
The code for skill specialties works as follows: &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; D805 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; D8 4D FC&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; is a DWORD pointer to a 5% value (in IEEE-754), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; is a DWORD pointer to a value of 1 (again, in IEEE-754)&lt;br /&gt;
&lt;br /&gt;
===== How it works ======&lt;br /&gt;
The number of levels is multiplied by the XXXXXXXX DWORD pointer, added to the YYYYYYYY DWORD pointer and then the skill bonus is multiplied by it (D8 4D FC). &lt;br /&gt;
&lt;br /&gt;
If we want to change the % gain per level, we only need to change the XX value. If we want to instead make the bonus additive (say x% per level, regardless of how much skill itself adds), we can replace the D805YYYYYYYY with 909090909090 (NOP) and replace the D8 4D FC with D8 45 FC. &lt;br /&gt;
&lt;br /&gt;
Therefore it is possible to have a different bonus for one skill than another. &lt;br /&gt;
&lt;br /&gt;
===== Offsets =====&lt;br /&gt;
The offsets for each skill specialty bonus are as follows: &lt;br /&gt;
: Archery - 0x0E4420&lt;br /&gt;
: Armorer - 0x0E45C9&lt;br /&gt;
: Diplomacy - 0x0E483C&lt;br /&gt;
: Eagle Eye - 0x0E46E0&lt;br /&gt;
: Estates - 0x0E464F&lt;br /&gt;
: First Aid - 0x0E4BD9&lt;br /&gt;
: Intelligence - 0x0E4B69&lt;br /&gt;
: Leadership - 0x0E3C81&lt;br /&gt;
: Learning - 0x0E4AF9&lt;br /&gt;
: Logistics - 0x0E4F1E&lt;br /&gt;
: Luck - 0x0E3A2B&lt;br /&gt;
: Mysticism - 0x0E41FE&lt;br /&gt;
: Necromancy - 0x0E3F92&lt;br /&gt;
: Offense - 0x0E4569&lt;br /&gt;
: Resistance - 0x0E499C&lt;br /&gt;
: Scouting - 0x0E432E&lt;br /&gt;
: Sorcery - 0x0E5B61&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
Specialties for integer-bonuses (Luck, Logistics, Scouting) only have their effect when a full integer is gained from their % bonus. &lt;br /&gt;
&lt;br /&gt;
Diplomacy specialty only affects surrender costs. &lt;br /&gt;
&lt;br /&gt;
Learning specialty is fully over-writen by the Hota.dll. &lt;br /&gt;
&lt;br /&gt;
==== 01 - Unit Specialty ====&lt;br /&gt;
The scaling factor for a unit specialty is a DWORD pointing to a 5% value (in IEEE-754), located at 0x0e6548. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
Ballista and Cannon specialty are Unit specialties. &lt;br /&gt;
&lt;br /&gt;
==== 02 - Resource Specialty ====&lt;br /&gt;
The amount of resources obtained from a gold specialty is saved at 0x0E4681 (as 350). &lt;br /&gt;
&lt;br /&gt;
The code for other resource specialties is possible to edit, but it checks for each resource together and then adds 1 to their growth (therefore its only possible to make all resource specialists increase resource gain by 2, unless a complete re-write of the function is performed). &lt;br /&gt;
&lt;br /&gt;
==== 03 - Spell Specialists ====&lt;br /&gt;
===== Spell specialty types =====&lt;br /&gt;
Spell specialty type table starts at 0x0e6358 (with Fire Wall specialty). Each consecutive byte is then the next spell by spell ID (Firewall, Earthquake, Magic Arrow, etc.) up to Slayer. Each spell specialty can take 6 types: &lt;br /&gt;
: 00 - +100% damage (Luna). Note that Hota.dll overwrites this +100% damage with a much more sensible 25%. &lt;br /&gt;
: 01 - +50% damage (Ciele). &lt;br /&gt;
: 02 - Tier bonus A (+3/+3/+2/+2/+1/+1/+0), such as Weakness specialty or Haste specialty. &lt;br /&gt;
: 03 - Static bonus +2 (Aenain)&lt;br /&gt;
: 04 - This one is only used by Fortune (Daremyth, Melodia). In contrary to what BTB claims, it sets the value of the spells effect to 3, regardless of spell&#039;s level. &lt;br /&gt;
: 05 - Tier bonus B (+4/+3/+2/+1/+0/+0/+0), only used by Coronius as far as I know. &lt;br /&gt;
: 06 - Scaling bonus. &lt;br /&gt;
&lt;br /&gt;
If a spell does not belong to the spell table, the scaling bonus is applied (for example this applies to the Hypnotize specialist, Astral). &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;But what if we want to change the specialty type for a spell like Hypnotize? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We can extend the table by changing 0x0e6296 (equal to 0x2a by default) to a different value, which corresponds to the number of spells in the table -1. If we extend the table, the next specialties will be those for the next spells by spell ID. We have a total of 13 bytes of nop (90), so the last spell specialty we can code this way is Summon Air Elemental. Remember to update all specialties created this way! You shouldn&#039;t just leave the nops (90) in the middle of the table!&lt;br /&gt;
&lt;br /&gt;
&amp;quot;But what about Victoria, the Land Mine specialist?&amp;quot;, you may ask. Well, I&#039;m here to give answers: &lt;br /&gt;
&lt;br /&gt;
The command &#039;&#039;&#039;lea eax, [esi-0Dh]&#039;&#039;&#039; located at 0x0e6291 finds the spell ID of firewall (0d) and chooses it as the first spell on the list of specialties &#039;&#039;(remember? The one that starts at 0x0e6358?)&#039;&#039;. By changing it to &#039;&#039;&#039;lea eax, [esi-0Bh]&#039;&#039;&#039;, we can change the first spell ID to 0x0B, or Land Mine. &#039;&#039;Notice, that this reduces the last spell specialty to Summon Earth Elemental, but I doubt anyone will miss the Summon Water Elemental and Summon Air Elemental specialties.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Next, we have to increase the number of spells in the list by 2 (located at 0x0e6296), and then move the entire spell specialty table, 2 bytes each, because now it starts at 0x0e6358 with Land Mine (and still follows by spell ID). &lt;br /&gt;
&lt;br /&gt;
&amp;quot;And what about Eovacius? And Zilare?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Haven&#039;t looked at them yet but I believe they may be hard-coded.&lt;br /&gt;
&lt;br /&gt;
The specialty types can be changed by altering their commands. Each specialty type (00, 01, and so on) have a DWORD pointer to their appropriate code located in a 28-byte long table starting at 0x0e633c.&lt;br /&gt;
&lt;br /&gt;
===== Changing Tier bonuses =====&lt;br /&gt;
Let&#039;s say we want to make Olema&#039;s Weakness specialty remotely usable, but we still want it to be a tier-based specialty. We can change the bonuses the spell provides for each unit tier in a 28-byte long table that starts at 0x23eaa8. Each 4 bytes corresponds to the next unit level. &lt;br /&gt;
&lt;br /&gt;
A similar table for Coronius&#039; specialty type starts at 0x23eac4 (immediately afterwards) and works the same way. &lt;br /&gt;
&lt;br /&gt;
===== Changing the static bonus =====&lt;br /&gt;
At 0x0e62e6 the value 0x02 determines the static bonus (such as the one Disrupting Ray specialists get). &lt;br /&gt;
&lt;br /&gt;
===== Changing the scaling bonus =====&lt;br /&gt;
At 0x0e631f the DWORD pointer finds an IEEE-754 double precision value for 3% (base game). Replacing this pointer with another one finds a different % bonus. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want the scaling specialties to divide their bonus by unit level, replace f7 f9 at 0xe630b with 90 90 (nop-ing out the division). &lt;br /&gt;
&lt;br /&gt;
===== Specialties that don&#039;t work ===== &lt;br /&gt;
Several specialties don&#039;t work because no specialty type can increase their bonus: &lt;br /&gt;
* Curse&lt;br /&gt;
* Anti-Magic&lt;br /&gt;
* Dispel&lt;br /&gt;
* Slow {{unk}}, but it would probably be way too strong anyway;&lt;br /&gt;
* Berserk&lt;br /&gt;
* Blind&lt;br /&gt;
* Teleport&lt;br /&gt;
* Remove Obstacle.&lt;br /&gt;
&lt;br /&gt;
==== 04 - Unit (static) ====&lt;br /&gt;
Only Xeron is specified to add speed thanks to his static unit specialty. This is (most likely) saved at the following address: 0x4b1b3 {{unk}}. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
==== 05 - Speed specialty ====&lt;br /&gt;
Sir Mullich&#039;s unit specialty amount (0x02) is located at 0x0E6669. &lt;br /&gt;
&lt;br /&gt;
==== 06 - Unit Upgrade specialty ====&lt;br /&gt;
These specialties calculate the upgrade cost automatically, with the same function that calculates upgrade costs in all other cases. If &amp;quot;unupgraded&amp;quot; unit is more expensive than the upgraded one, the message about necessary costs wil appear, but no cost will be stated and the conversion will be free. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty. &lt;br /&gt;
&lt;br /&gt;
==== 07 - Dragon specialty ====&lt;br /&gt;
I believe Mutare&#039;s bonus is specified within her specialty block.&lt;br /&gt;
&lt;br /&gt;
== Editing HotA Creatures ==&lt;br /&gt;
While most statistics of base game creatures can be edited rather effortlessly (using MMArchive to unpack H3bitmap.lod or HotA_lng.lod), HotA creatures cannot be edited this way. Their data is stored at the beginning of HotA.dat, as follows:&lt;br /&gt;
&lt;br /&gt;
08 000000 &amp;quot;most&amp;lt;ref_id&amp;gt;&amp;quot; 17 000000 &amp;quot;Monsters\monster&amp;lt;ref_id&amp;gt;.str&amp;quot; 09 000000 00000000 04 000000 &amp;quot;name_abbreviation&amp;quot; KK000000 &amp;quot;&amp;lt;animation_filename&amp;gt;.def&amp;quot; L1000000 &amp;quot;Monster_name (singular)&amp;quot; L2000000  &amp;quot;Monster name (plural)&amp;quot; 00000000 00000000 00000000 00000000 01 74 0000 TT 000000 UL 000000 0c556700  00556700 F1 F2 F3 F4 80da9e03 60da9e03 30da9e03 WC000000 MC000000 OC000000 SC000000 CC000000 GeC000000 GC000000 FV000000 AV000000 GV000000 HG000000 HP000000 SP000000 AT000000 DF000000 DmgL000000 DmgH000000 SH000000 SN000000 OO000000 mm000000 MM000000 RR000000 VV000000 WW000000 XX000000 YY000000 ZZ000000 &lt;br /&gt;
&lt;br /&gt;
* monst&amp;lt;ref_id&amp;gt; is monster&#039;s reference id in decimal, f.e. monst154&lt;br /&gt;
* name_abbreviation is a 4 letter abbreviation of the monster name. Never appears anywhere ever again. Note that not all abbreviations are just beginning or consonants, f.e. Haspids are written as &amp;quot;aspi&amp;quot; and nix as &amp;quot;nixx&amp;quot;. This abbreviation doesn&#039;t seem to have to be unique, as Sea Serpent and Haspids have the same 4 letters here.  It is worth pointing out, that base game creatures also use 4-letter abbreviations in a similar table located in h3hota HD.exe around 0x275500&lt;br /&gt;
* KK is the length of the animation_filename + 4 (and therefore the length of the entire &amp;quot;animation_filename.def&amp;quot;&lt;br /&gt;
* &amp;lt;animation_filename&amp;gt;.def  is the file name of the set of animations, saved as .def in HotA.lod or HotA.lod. &lt;br /&gt;
* L1 is the length of the monster name (singular)&lt;br /&gt;
* L2 is the length of the monster name (plural)&lt;br /&gt;
* 0x74 codes as &amp;quot;t&amp;quot; in ASCII&lt;br /&gt;
* TT is the reference id of the town the monster belongs to. 0x09 for Cove, 0x0a for Factory, FFFFFFFF for Neutrals and I bet if HotA ever releases a new town, it will have 0x0b as its faction code. &lt;br /&gt;
* UL is the unit level -1 (sidenote: this is an example of numbers being used in a list with a zero-based numbering). FFFFFFFF for monsters with no level (f.e. Citadel / Castle Towers)&lt;br /&gt;
* 0c556700 (and 00556700) point to a similar table with creature sprite, text and other references in h3hota HD.exe and is probably used to insert the HotA.dat&#039;s creature table into this part of the exe. &lt;br /&gt;
* F1 is the first creature ability flag&lt;br /&gt;
** 01 - 2-hex unit&lt;br /&gt;
** 02 - Flying&lt;br /&gt;
** 04 - Ranged Attack&lt;br /&gt;
** 08 - Fire breath&lt;br /&gt;
** 10 - Living&lt;br /&gt;
** 20 - Can attack city walls (cyclops, cannon)&lt;br /&gt;
** 40 - War machine&lt;br /&gt;
** 80 - Slayer (Basic)&lt;br /&gt;
* F2 is the second creature ability flag&lt;br /&gt;
** 01 - Slayer (advanced)&lt;br /&gt;
** 02 - Slayer (expert)&lt;br /&gt;
** 04 - Mind immunity&lt;br /&gt;
** 08 - shoots beam (?)&lt;br /&gt;
** 10 - No melee penalty&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - Fire immunity&lt;br /&gt;
** 80 - Attacks twice&lt;br /&gt;
* F3 is the third creature ability flag&lt;br /&gt;
** 01 - No enemy retaliation&lt;br /&gt;
** 02 - Morale has no effect&lt;br /&gt;
** 04 - Undead&lt;br /&gt;
** 08 - AOE melee attack (Hydra)&lt;br /&gt;
** 10 - AOE ranged attack (Magog), AI flag only. &lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - {{unk}}&lt;br /&gt;
* F4 is the fourth creature ability flag&lt;br /&gt;
** 01 - {{unk}}&lt;br /&gt;
** 02 - {{unk}}&lt;br /&gt;
** 04 - {{unk}}&lt;br /&gt;
** 08 - {{unk}}&lt;br /&gt;
** 10 - {{unk}}&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - Dragon (for the sake of Mutare&#039;s specialty and vial of dragon blood)&lt;br /&gt;
* 80da9e03, 60da9e03, 30da9e03 - {{unk}}&lt;br /&gt;
* WC is the cost of wood necessary to recruit the creature&lt;br /&gt;
* MC is the cost of mercury necessary to recruit the creature&lt;br /&gt;
* OC is the cost of ore necessary to recruit the creature&lt;br /&gt;
* SC is the cost of sulfur necessary to recruit the creature&lt;br /&gt;
* CC is the cost of crystals necessary to recruit the creature&lt;br /&gt;
* GeC is the cost of gems necessary to recruit the creature&lt;br /&gt;
* GC is the cost of gold necessary to recruit the creature. Note that all aforementioned cost values have 4 bytes to play with, so the maximum unit cost is 2147483647 gold (or of any resource). &lt;br /&gt;
* FV is the Fight Value&lt;br /&gt;
* AV is the AI Value&lt;br /&gt;
* GV is the Growth&lt;br /&gt;
* HG is the Horde Growth &lt;br /&gt;
* HP is, surprisingly, hit points&lt;br /&gt;
* SP is speed&lt;br /&gt;
* AT is attack&lt;br /&gt;
* DF is defense&lt;br /&gt;
* DmgL is low end of the damage range&lt;br /&gt;
* DmgH is the high end of the damage range&lt;br /&gt;
* SH is the number of shots per battle&lt;br /&gt;
* SN is the number of spell casts per battle&lt;br /&gt;
* mm - minimum number of units when randomly spawned by the map generator &lt;br /&gt;
* MM - maximum number of units when randomly spawned by the map generator. &lt;br /&gt;
QQ, RR, VV, WW, XX, YY, ZZ - {{unk}}. Sometimes they take up 28 (!) bytes (such as for Ayssids), and sometimes don&#039;t appear at all. I suspect they reference some sort of abilities the creatures have, or their descriptions. &lt;br /&gt;
&lt;br /&gt;
When using custom functions or editing original code, note that all HotA (as well as some SoD monsters) have reference ID above 80, and therefore cannot be checked for using a simple check command, such as 83 FA ID. Instead, you have to use a longer command that accepts a 4-byte value (for EDX that would be 81 FA ID000000).&lt;br /&gt;
&lt;br /&gt;
== Editing Creature Abilities ==&lt;br /&gt;
=== Magic Channel ([[Familiars]]) === &lt;br /&gt;
Magic channel&#039;s applicable unit ID is defined at 0x1a24f6. The game uses a frankly ridiculous method of dividing by 5 (let&#039;s just say that it purposefully calls and uses a value 1717986919 to calculate 20%). Btb2 analyzed it and found a way to alter the percentage to 50% or 100% (by ignoring the horrible function before it and simply taking the mana value or moving it by 1 byte). Replace: &lt;br /&gt;
&lt;br /&gt;
* 0x1A24B4  -&amp;gt;  8b 55 98 d1 ea    (for 50%, since d1 ea is a single bitwise shift to the right&lt;br /&gt;
* 0x1A24b4  -&amp;gt;  8b 55 98 90 90    (no division).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the function. The following offset reads: &lt;br /&gt;
* 0x1A249F:  b8 *67666666* c7 45 1c 02000000 f7 e9 8b 4d 9c *d1 fa* 8b c2 c1 e8 1f 03 d0&lt;br /&gt;
&lt;br /&gt;
The b8 XXXXXXXX (bolded above) function calls a hexadecimal value (note that it&#039;s in Little Endian) and saves it. The code then uses &amp;quot;d1 fa&amp;quot; (emboldened above) to divide edx by 2 before it is further used. C1 E8 1F is simply a division by 2^31 of the value. Yes, that is why the rounding may be a bit off for Magic Channel. Now let&#039;s consider replacing: &lt;br /&gt;
* 67666666 with our custom value (for now let&#039;s imagine it&#039;s 56555555)&lt;br /&gt;
* d1 fa with 90 90 (two nop or non-coding functions, so we basically removed this part of the code)&lt;br /&gt;
&lt;br /&gt;
The result is... Division by 3. Now the Magic Channel grants 33% mana return. &lt;br /&gt;
&lt;br /&gt;
To obtain a different value, we need to replace XXXXXXXX with another number. This has to be (2^33 / D) +1, where D is our divisor (3 for 1/3, 5 for 1/5, etc.). The 2^33 is multiplied with the variable (mana cost), but is then divided by 2^31 and moves by two bits elsewhere to account for the differences. The number is greater than the quotient by 1, to avoid the rounding downwards removing 1 mana point incorrectly. Note, that XXXXXXXX cannot be equal to or greater than 00000080 (0x80000000), as then the value will be negative. &lt;br /&gt;
&lt;br /&gt;
The function also calls 0x1A2498 for the minimum mana value for which Magic Channel may apply. This is equal to the value of D (0x05 in base game, 0x03 in the example above). &lt;br /&gt;
&lt;br /&gt;
== Editing Buildings ==&lt;br /&gt;
Building names and descriptions (excluding HotA) are saved in BldgSpec.txt and BldgNeut.txt. Building requirements can be altered by changing their dependency tables. Address of each dependency table is located at: &lt;br /&gt;
* 0x0EB816 - Castle&lt;br /&gt;
* 0x0EB8B3 - Rampart&lt;br /&gt;
* 0x0EB971 - Tower&lt;br /&gt;
* 0x0EBA39 - Inferno&lt;br /&gt;
* 0x0EBA48 - Necropolis&lt;br /&gt;
* 0x0EBA5C - Dungeon&lt;br /&gt;
* 0x0EBA70 - Stronghold&lt;br /&gt;
* 0x0EBA84 - Fortress&lt;br /&gt;
* 0x0EBA98 - Conflux&lt;br /&gt;
&lt;br /&gt;
Note, that some building requirements are changed in HotA.dll. While it shouldn&#039;t be too difficult to determine their location in that file, (look for appropriate DWORDs in HotA.dll) for now these offsets are unknown. The requirement table for Cove and Factory may be coded differently and as far as I know, haven&#039;t been found yet. &lt;br /&gt;
&lt;br /&gt;
Building costs can be changed in Building.txt. &lt;br /&gt;
&lt;br /&gt;
=== HotA buildings ===&lt;br /&gt;
Building names and descriptions for HotA are saved in HotA.dat and can be edited as a text edit using f.e. the aforementioned HotA Editor. &lt;br /&gt;
&lt;br /&gt;
Building costs for HotA are saved in HotA.dat. The building names appear before the building costs. Each building cost contains of 28 bytes, each 4 bytes representing a 4-byte little endian number of cost for each resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Note, that some buildings have text and description, but no written cost (either replaced with 0s or simply not having any space devoted to them). An example is Mana Generator. For now it is not known how to edit the cost of these buildings (and therefore the cost of the Mana Generator remains a mystery).  &lt;br /&gt;
&lt;br /&gt;
=== Resource Silos ===&lt;br /&gt;
Resource Silo yield tables are located at 0x288F04. Each resource value is mentioned for each town, one by one, in 4-byte values (order of resources is Wood, Mercury, Ore, Sulphur, Crystal, Gems, Gold) with towns going in order. &lt;br /&gt;
&lt;br /&gt;
Cove&#039;s Resource Silo simply copies the one from the Dungeon, while Factory copies Rampart. &lt;br /&gt;
&lt;br /&gt;
The Resource Silo table is called for in exe a few times, but HotA.dll overwrites all (or most) of these calls at 0xd37ae and 0xd37ce.  As of 12:19, 19 September 2024 (UTC), it is not known how to alter the Resource Silo values for Cove and Factory. No specific offset or function have been identified.  {{unk}}. &lt;br /&gt;
&lt;br /&gt;
== Artifacts ==&lt;br /&gt;
All stats given by artifacts are written into a table at 0x23e758, 4 bytes for each artifact (Attack, Defense, Power, Knowledge). &lt;br /&gt;
&lt;br /&gt;
The artifact traits are specified in artraits.txt, while artifact pick-up events are defined in artevent.txt (both in Hota_lng.lod). &lt;br /&gt;
&lt;br /&gt;
Interference amount of the Plate of the Dying Light is specified as a IEE-754 floating point value at 0x1d40c8 in Hota.dll &lt;br /&gt;
&lt;br /&gt;
=== Combination Artifacts ===&lt;br /&gt;
Combination artifact&#039;s components are specified at a few functions, starting at 0x04c63d. For further reading see BTB2&#039;s guide (linked below, as External Link #3). Be aware! BTB2&#039;s guide is either wrong or outdated! His method of removing components seems to work correctly, however, most likely due to HotA putting their combination artifacts in HotA.dll to push them in between base game combination artifacts, or for another reason, &#039;&#039;his method of increasing the number of items does NOT work&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
However, not all is lost. There&#039;s 8 bytes of nop (90) commands starting at 0x4c8c8, and we can use them to add an extra item (to showcase it, I&#039;ll present a code for adding an extra item to the Ring of the Magi&#039;s requirements. This seems a safe method, since only a short push is used, and therefore I advise changes to 3-piece combination artifacts to simply copy this method and swap Ring of the Magi with their edited artifact). &lt;br /&gt;
:0x4c85b 6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID)  -&amp;gt; eb 6d (jump 109 bytes forward)&lt;br /&gt;
:0x4c8c8 90909090 90909090   -&amp;gt; eb 06..(skip following code)...6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID) 6a &#039;&#039;&#039;YY&#039;&#039;&#039; (2nd ref item ID).....eb 8d (jump backwards 115 bytes)&lt;br /&gt;
&lt;br /&gt;
Replace emboldened text with your appropriate artifact IDs. Remember to also update the number of components (in this example at 0x04C861). &lt;br /&gt;
&lt;br /&gt;
Note, that the method described above only works for a jump of 125 bytes or less. Gladly, there&#039;s a few other empty spaces that can be used for adding extra components: &lt;br /&gt;
* 0x4c25c (11 bytes of nop)&lt;br /&gt;
* 0x4c2d6 (10 bytes)&lt;br /&gt;
* 0x4c347 (9 bytes)&lt;br /&gt;
* 0x4c3c7 (9 bytes)&lt;br /&gt;
* 0x4c622 (14 bytes)&lt;br /&gt;
* 0x4c8c8 (8 bytes)&lt;br /&gt;
* 0x4ca15 (11 bytes)&lt;br /&gt;
* 0x4d008 (8 bytes)&lt;br /&gt;
&lt;br /&gt;
Simply use the available space within 125 bytes of the definition of any of the original components. If this can&#039;t be done, swap your artifact with another, which can be edited. &lt;br /&gt;
&lt;br /&gt;
Note, that if you&#039;re using HotA, it&#039;s much safer to just edit appropriate artifact reference IDs and add other appropriate components (or replace the resulting artifact) by editing Hota.dat (see: [https://heroes.thelazy.net/index.php?title=Hex_Editing_-_Guide/artsinfo0|HotA Artifacts - artsinfo0]&lt;br /&gt;
&lt;br /&gt;
=== Making new Combination Artifacts ===&lt;br /&gt;
&lt;br /&gt;
For now it is wholly unknown how to do it. HotA devs seem to now their way around it.{{unk}} See below. &lt;br /&gt;
&lt;br /&gt;
What might work is repeating a function identical to that of another artifact with different properties using some empty space. Requires further testing. &lt;br /&gt;
&lt;br /&gt;
=== HotA Artifacts ===&lt;br /&gt;
Hota&#039;s new artifacts are coded in the Hota.dat. To edit their properties, you need to edit their text (or use hexadecimal values for ASCII to match their text in hex editing). Artifacts are coded as follows: &lt;br /&gt;
&lt;br /&gt;
==== artsinfo0 ==== &lt;br /&gt;
This part of the file includes partial data on all HotA artifacts, written as follows: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;Artifact Name&lt;br /&gt;
:&amp;lt;ref_ID&amp;gt;&lt;br /&gt;
:X Y Z # Description:&lt;br /&gt;
:P Q R # Dif abl, S points&lt;br /&gt;
:-1&lt;br /&gt;
&lt;br /&gt;
Note, that the ref_ID above is written in decimal system. &lt;br /&gt;
&lt;br /&gt;
The X Y Z applies a buff to the artifact, seemingly by coding first the bonus type with X, amount with Y and optional specification with Z. &lt;br /&gt;
* 0 - Increase Attack / Defense&lt;br /&gt;
* 1 - Add Spell Power&lt;br /&gt;
* 2 - Add Knowledge&lt;br /&gt;
* 7 - Different Ability, Y = AI value {{unk}} (it&#039;s described as &amp;quot;points&amp;quot;)&lt;br /&gt;
* 8 - Movement artifact?&lt;br /&gt;
* 13 - Restrict spells; Y = 1 for Cloak of Silence, 4 for Ring of Oblivion&lt;br /&gt;
* 16 - Add daily resource growth, Y = amount, Z = resource type (0 = wood, 6 = gold)&lt;br /&gt;
* 24 - Enemy morale bonus&lt;br /&gt;
* 25 - Enemy luck bonus&lt;br /&gt;
&lt;br /&gt;
The P Q R are coded in the same way as above and refer to a second ability. &lt;br /&gt;
&lt;br /&gt;
However, the method above seems to suggest some artifacts have different bonuses than they actually possess: Ironfist of the Ogre doesn&#039;t increase either attack or defense; Trident of Dominion increases attack by 6, etc. &lt;br /&gt;
&lt;br /&gt;
This part of the file also includes definitions of all combo artifacts and their components. F.e. Diplomat&#039;s Cloak: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Diplomat&#039;s Cloak&lt;br /&gt;
:12 141 3 66 67 68&lt;br /&gt;
&lt;br /&gt;
* 12 is the number of the combination artifact (including SoD ones)&lt;br /&gt;
* 141 is the decimal reference ID of the Diplomat&#039;s Cloak&lt;br /&gt;
* 3 is the number of components&lt;br /&gt;
* 66 67 68 are the reference IDs of components (decimal)&lt;br /&gt;
&lt;br /&gt;
Note, that this can be used to effectively alter any base-game combination artifact! Simply add a line before these artifact definitions&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Sample Text&lt;br /&gt;
:N RIF C R+ R++ R+++ R++++,&lt;br /&gt;
&lt;br /&gt;
where N is the number of combination artifact (counting the way they&#039;re placed in the .exe code), RIF is the reference ID of the final artifact, R+, R++ and so on are the additional components. To showcase adding an extra requirement to the Ring of the Magi (since a similar concept was used above) and replacing the Ring of the Magi with the AB blade and requiring a Sword of Hellfire:&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Armageddon&#039;s Blade&lt;br /&gt;
:10 128 1 11&lt;br /&gt;
&lt;br /&gt;
(11 is the reference ID of the new item - Sword of Hellfire). &lt;br /&gt;
&lt;br /&gt;
Sadly, new combination artifacts can&#039;t simply be added this way.&lt;br /&gt;
&lt;br /&gt;
=== art&amp;lt;ref_ID&amp;gt; ===&lt;br /&gt;
art&amp;lt;ref_ID&amp;gt; entries in HotA.dat (as visible in the Hota.editor.exe) can be used to alter an artifact&#039;s name, adventure map event text, description, slot type and rarity class (treasure, minor, major, relic). Here is also the true artifact bonus data coded. Note that the Reference ID is in decimal. &lt;br /&gt;
&lt;br /&gt;
:gold_price &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; cost - (cost of 0 is used if an artifact cannot normally appear, f.e. if it&#039;s a Combination Artifact. &lt;br /&gt;
:slot &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; slot type (0 - none, 1 - head, 2 - shoulders, 3 - neck, 4 - right hand, 5 - left hand, 6 - torso, 7 - ring, 8 - feet, 9 - misc, 10 - ballista, 11 - ammo cart, 12 - first aid tent, 13 - catapult, 14 - spell book)&lt;br /&gt;
:class &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; type (1 - none, 2 - treasure, 4 - minor, 8 - major, 16 - relic)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; disabled as defaults (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; add new spells (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; attack bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; defense bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; spell power bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; knowledge bonus (_int8_)&lt;br /&gt;
&lt;br /&gt;
== Creature Banks ==&lt;br /&gt;
Creature bank definitions in h3hota HD.exe start at 0x2702A0. They are coded as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 FFFFFFFF 00000000 00000000 00000000, &lt;br /&gt;
&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;  and  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; are Unit IDs for guards ( &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2 U3 U4&amp;lt;/span&amp;gt; etc are optional). Note, that the 12 bytes of 00 do not appear after the last defined creature bank (Dragon Utopia). &lt;br /&gt;
&lt;br /&gt;
Afterwards, the reward creatures (and creatures only!) are defined as follows: &lt;br /&gt;
&lt;br /&gt;
FFFFFFFF &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R3&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt; is the reward creature for the first bank, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt; for the second, and so on.&lt;br /&gt;
&lt;br /&gt;
The order the banks appear in is as follows: &lt;br /&gt;
&lt;br /&gt;
#Cyclops Stockpile&lt;br /&gt;
#Dwarven Treasury&lt;br /&gt;
#Griffin Conservatory&lt;br /&gt;
#Imp Cache&lt;br /&gt;
#Medusa Stores&lt;br /&gt;
#Naga Bank&lt;br /&gt;
#Dragon Fly Hive&lt;br /&gt;
#Shipwreck&lt;br /&gt;
#Derelict Ship&lt;br /&gt;
#Crypt&lt;br /&gt;
#Dragon Utopia. &lt;br /&gt;
&lt;br /&gt;
Note, that after changing these values, you still have to edit the remaining bank data in CrBanks.txt. &lt;br /&gt;
&lt;br /&gt;
HotA banks, except for the Ancient Altar, are all defined within the Hota.dat file, as crbank21, 22, and so on. &lt;br /&gt;
&lt;br /&gt;
=== The Pyramid ===&lt;br /&gt;
The pyramid is defined separately:&lt;br /&gt;
&lt;br /&gt;
: 0xa3fa2:6a &#039;&#039;&#039;02&#039;&#039;&#039; 6a &#039;&#039;&#039;14&#039;&#039;&#039; 6a &#039;&#039;&#039;7d&#039;&#039;&#039; (52 8d4508 53 50) 6a &#039;&#039;&#039;74&#039;&#039;&#039;; &lt;br /&gt;
: 0xa3fb6: &#039;&#039;&#039;28&#039;&#039;&#039; 00 00 00&lt;br /&gt;
&lt;br /&gt;
Where: &lt;br /&gt;
* 02 is the number of stacks of Diamond Golems&lt;br /&gt;
* 14 is the number of Diamond Golems (in total)&lt;br /&gt;
* 7d is the unit ID of Diamond Golems, &lt;br /&gt;
* 74 is the unit ID of Gold Golems and&lt;br /&gt;
* 28 is the number of Gold Golems. &lt;br /&gt;
&lt;br /&gt;
BTB2 suggested replacing Diamond Golems with Mummies - this however, requires using a creature ID above 80, and therefore a long push (6B 8D000000 for mummies). However, to do that we would need to use some empty space. He suggested removing the -2 Luck on empty Pyramid subroutine. I decided to instead use some empty space I got from a different change, keeping the -2 Luck penalty. The result is as follows: &lt;br /&gt;
&lt;br /&gt;
: 0x0A3FA6 → ebdf (jumps to overwrite -2 luck on empty Pyramid), &lt;br /&gt;
: 0x0A3F82 → e9 89c10100 (jump to free space 0xc0110) &lt;br /&gt;
::::: 68 8d000000 (Mummies) &lt;br /&gt;
:::::EB 1A 90 90 (jump back to A3FA8), &lt;br /&gt;
: 0xc0110 (Free) → 8a 87 1b 01 00 00 04 fe 88 87 1b 01 00 00 (displaced code: -2 Luck on empty Pyramid), &lt;br /&gt;
: 0xc011d (Free) → E9 6b3efeff(jump to 0x0A3F8F (end of F8E))&lt;br /&gt;
&lt;br /&gt;
Note, that this method assumes you have empty space at 0xc0110 (by forcing rumors to always show rumors defined by the mapmaker). If you have empty space elsewhere, simply move the function, altering the jumps appropriately. &lt;br /&gt;
&lt;br /&gt;
= Editing h3hota_maped =&lt;br /&gt;
&lt;br /&gt;
All heroes are defined one by one in the h3hota_maped starting from 0x186800. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &#039;&#039;SB&#039;&#039; 000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00&lt;br /&gt;
&lt;br /&gt;
Note, that some HotA heroes use some data from HotA.dat&lt;br /&gt;
&lt;br /&gt;
= Game Mechanics =&lt;br /&gt;
== Starting Resources ==&lt;br /&gt;
Table with the starting resources starts at 0x278170. Each 4 bytes are the next resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Each 28 bytes is the next difficulty - Easy, Normal, Expert, etc. At 0x2781FC the AI resources start and follow the same order of resources and difficulties. The whole table thus takes 280 bytes. &lt;br /&gt;
&lt;br /&gt;
== Starting Bonuses ==&lt;br /&gt;
=== Gold Bonus ===&lt;br /&gt;
The starting gold bonus chooses a random value between the value written at 0x0C0002 and the value at 0x0BFFFD, and then multiplies it by 100. To change the multiplication, simply edit 0x0C000B (multiplying by 25) and 0x0C0016 (moving the value by 2 bits, so multiplying it by 4). &lt;br /&gt;
&lt;br /&gt;
=== Resource Bonuses ===&lt;br /&gt;
The starting resource bonuses use DWORD pointers to find their appropriate code to run:&lt;br /&gt;
* Wood and Ore - AF FF 4B 00 &lt;br /&gt;
* Crystals - D6 FF 4B 00 &lt;br /&gt;
* Gems - E1 FF 4B 00 &lt;br /&gt;
* Mercury - EC FF 4B 00 &lt;br /&gt;
* Sulfur - F4 FF 4B 00 &lt;br /&gt;
&lt;br /&gt;
These DWORD pointers are located at the following addresses: &lt;br /&gt;
* Castle - 0x0C01B4 &lt;br /&gt;
* Rampart - 0x0C01B8 &lt;br /&gt;
* Tower - 0x0C01BC &lt;br /&gt;
* Inferno - 0x0C01C0 &lt;br /&gt;
* Necropolis - 0x0C01C4 &lt;br /&gt;
* Dungeon - 0x0C01C8 &lt;br /&gt;
* Stronghold - 0x0C01CC &lt;br /&gt;
* Fortress - 0x0C01D0 &lt;br /&gt;
* Conflux - 0x0C01D4 &lt;br /&gt;
&lt;br /&gt;
Note, that you need to edit ScnrStar.def to reflect any altered resources. &lt;br /&gt;
&lt;br /&gt;
The amount for each rare resource is most likely determined by the function at 0xc009e: {{unk}}&lt;br /&gt;
: minimum: c745f0 33333333 &#039;&#039;(mov [ebp-0x10], 0x33333333)&#039;&#039; c745f0 3333EB3F  &#039;&#039;(mov [ebp-0x1c], 0x3feb3333)&#039;&#039; &lt;br /&gt;
: break between the two: eb 0e &#039;&#039;(jmp 0x0e)&#039;&#039; &lt;br /&gt;
: maximum: c745f0 66666666 &#039;&#039;(mov [ebp-0x10], 0x66666666)&#039;&#039; c745f0 6666E63F  &#039;&#039;(mov [ebp-0x10], 0x3FE66666)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The amount of wood and ore are most likely specified at 0xbffaf: BA 0a000000 &#039;&#039;(mov edx, 0x0a)&#039;&#039; B9 05000000 &#039;&#039;(mov ecx, 0x05)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
== Movement point reminder ==&lt;br /&gt;
The movement point reminder is located at 0x9c91. It checks if movement points are 0 (using a 2-byte &#039;&#039;test eax, eax&#039;&#039;) and then proceeds to different code if movement points are (or not) zero. If one wants to change it to a higher number (to avoid reminding of movement for heroes that can&#039;t actually move anymore), the following code can be used:&lt;br /&gt;
&lt;br /&gt;
:0x9c91: {{---}}{{---}}a1 c8876900 &#039;&#039;mov eax, [0x6987c8]&#039;&#039; e9 849d0d00 (jump to some arbitrary free space) 90909090&lt;br /&gt;
: free space: {{-}}3d XY000000 &#039;&#039;cmp eax, XY&#039;&#039; - compare movement points with value XY. &lt;br /&gt;
:::: {{---}}7F 0A &#039;&#039;jg 0x0a&#039;&#039; - jump 10 bytes if the value is greater. &lt;br /&gt;
:::: {{---}}A1 C4 5d 6A 00 - displaced code&lt;br /&gt;
:::: {{---}}e9 6f62f2ff - jump to 0x9c9f (or 49C9F)&lt;br /&gt;
:::: {{---}}e9 a462f2ff - jump to 0x9cd9 (or 49CD9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=18817 heroescommunity.com - Editing heroes in memory] - Includes a large number of various Reference IDs&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=42152&amp;amp;pagenumber=1 heroescommunity.com - How to edit Hota?] - Thread with majority of useful information, scrambled across 112 forum pages. &lt;br /&gt;
#  [http://btb2.free.fr/mods/h3/hacking.txt BTB2&#039;s hacking guide] - primarily detailing creation of his own mod, but including tips, explanations and some of the Reference IDs&lt;br /&gt;
# [https://handbookhmm.ru/forum/viewtopic.php?f=56&amp;amp;t=968 void_17&#039;s database] - this database describes most or all of the functions in the base game of heroes 3. &lt;br /&gt;
#* [https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view void_17&#039;s database] (link 2). &lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144348</id>
		<title>Reference IDs</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144348"/>
		<updated>2024-11-28T04:48:02Z</updated>

		<summary type="html">&lt;p&gt;Deus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Secondary Skill Reference IDs ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Secondary Skill Reference IDs&lt;br /&gt;
|-&lt;br /&gt;
! HEX Values (Little Endian) !! Secondary Skill&lt;br /&gt;
|-&lt;br /&gt;
| 00000000 || Pathfinding&lt;br /&gt;
|-&lt;br /&gt;
| 01000000 || Archery&lt;br /&gt;
|-&lt;br /&gt;
| 02000000 || Logistics&lt;br /&gt;
|-&lt;br /&gt;
| 03000000 || Scouting&lt;br /&gt;
|-&lt;br /&gt;
| 04000000 || Diplomacy&lt;br /&gt;
|-&lt;br /&gt;
| 05000000 || Navigation&lt;br /&gt;
|-&lt;br /&gt;
| 06000000 || Leadership&lt;br /&gt;
|-&lt;br /&gt;
| 07000000 || Wisdom&lt;br /&gt;
|-&lt;br /&gt;
| 08000000 || Mysticism&lt;br /&gt;
|-&lt;br /&gt;
| 09000000 || Luck&lt;br /&gt;
|-&lt;br /&gt;
| 0A000000 || Ballistics&lt;br /&gt;
|-&lt;br /&gt;
| 0B000000 || Eagle Eye&lt;br /&gt;
|-&lt;br /&gt;
| 0C000000 || Necromancy&lt;br /&gt;
|-&lt;br /&gt;
| 0D000000 || Estates&lt;br /&gt;
|-&lt;br /&gt;
| 0E000000 || Fire Magic&lt;br /&gt;
|-&lt;br /&gt;
| 0F000000 || Air Magic&lt;br /&gt;
|-&lt;br /&gt;
| 10000000 || Water Magic&lt;br /&gt;
|-&lt;br /&gt;
| 11000000 || Earth Magic&lt;br /&gt;
|-&lt;br /&gt;
| 12000000 || Scholar&lt;br /&gt;
|-&lt;br /&gt;
| 13000000 || Tactics&lt;br /&gt;
|-&lt;br /&gt;
| 14000000 || Artillery&lt;br /&gt;
|-&lt;br /&gt;
| 15000000 || Learning&lt;br /&gt;
|-&lt;br /&gt;
| 16000000 || Offense&lt;br /&gt;
|-&lt;br /&gt;
| 17000000 || Armorer&lt;br /&gt;
|-&lt;br /&gt;
| 18000000 || Intelligence&lt;br /&gt;
|-&lt;br /&gt;
| 19000000 || Sorcery&lt;br /&gt;
|-&lt;br /&gt;
| 1A000000 || Resistance&lt;br /&gt;
|-&lt;br /&gt;
| 1B000000 || First Aid&lt;br /&gt;
|-&lt;br /&gt;
| 1C000000 || Interference&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Spell Reference IDs ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Spell Reference IDs&lt;br /&gt;
|-&lt;br /&gt;
! HEX Values (Little Endian) !! Spell Level !! Spell&lt;br /&gt;
|-&lt;br /&gt;
| 29000000 || 1 || Bless&lt;br /&gt;
|-&lt;br /&gt;
| 2B000000 || 1 || Bloodlust&lt;br /&gt;
|-&lt;br /&gt;
| 25000000 || 1 || Cure&lt;br /&gt;
|-&lt;br /&gt;
| 2A000000 || 1 || Curse&lt;br /&gt;
|-&lt;br /&gt;
| 23000000 || 1 || Dispel&lt;br /&gt;
|-&lt;br /&gt;
| 35000000 || 1 || Haste&lt;br /&gt;
|-&lt;br /&gt;
| 0F000000 || 1 || Magic Arrow&lt;br /&gt;
|-&lt;br /&gt;
| 1F000000 || 1 || Protection from Fire&lt;br /&gt;
|-&lt;br /&gt;
| 20000000 || 1 || Protection from Water&lt;br /&gt;
|-&lt;br /&gt;
| 1B000000 || 1 || Shield&lt;br /&gt;
|-&lt;br /&gt;
| 36000000 || 1 || Slow&lt;br /&gt;
|-&lt;br /&gt;
| 2E000000 || 1 || Stone Skin&lt;br /&gt;
|-&lt;br /&gt;
| 00000000 || 1 || Summon Boat&lt;br /&gt;
|-&lt;br /&gt;
| 05000000 || 1 || View Air&lt;br /&gt;
|-&lt;br /&gt;
| 03000000 || 1 || View Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3E000000 || 2 || Blind&lt;br /&gt;
|-&lt;br /&gt;
| 18000000 || 2 || Death Ripple&lt;br /&gt;
|-&lt;br /&gt;
| 04000000 || 2 || Disguise&lt;br /&gt;
|-&lt;br /&gt;
| 2F000000 || 2 || Disrupting Ray&lt;br /&gt;
|-&lt;br /&gt;
| 0D000000 || 2 || Fire Wall&lt;br /&gt;
|-&lt;br /&gt;
| 33000000 || 2 || Fortune&lt;br /&gt;
|-&lt;br /&gt;
| 10000000 || 2 || Ice Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 11000000 || 2 || Lightning Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 2C000000 || 2 || Precision&lt;br /&gt;
|-&lt;br /&gt;
| 1E000000 || 2 || Protection from Air&lt;br /&gt;
|-&lt;br /&gt;
| 0A000000 || 2 || Quicksand&lt;br /&gt;
|-&lt;br /&gt;
| 40000000 || 2 || Remove Obstacle&lt;br /&gt;
|-&lt;br /&gt;
| 01000000 || 2 || Scuttle Boat&lt;br /&gt;
|-&lt;br /&gt;
| 02000000 || 2 || Visions&lt;br /&gt;
|-&lt;br /&gt;
| 2D000000 || 2 || Weakness&lt;br /&gt;
|-&lt;br /&gt;
| 1C000000 || 3 || Air Shield&lt;br /&gt;
|-&lt;br /&gt;
| 27000000 || 3 || Animate Dead&lt;br /&gt;
|-&lt;br /&gt;
| 22000000 || 3 || Anti-Magic&lt;br /&gt;
|-&lt;br /&gt;
| 19000000 || 3 || Destroy Undead&lt;br /&gt;
|-&lt;br /&gt;
| 0E000000 || 3 || Earthquake&lt;br /&gt;
|-&lt;br /&gt;
| 15000000 || 3 || Fireball&lt;br /&gt;
|-&lt;br /&gt;
| 0C000000 || 3 || Force Field&lt;br /&gt;
|-&lt;br /&gt;
| 3D000000 || 3 || Forgetfulness&lt;br /&gt;
|-&lt;br /&gt;
| 14000000 || 3 || Frost Ring&lt;br /&gt;
|-&lt;br /&gt;
| 3C000000 || 3 || Hypnotize&lt;br /&gt;
|-&lt;br /&gt;
| 0B000000 || 3 || Land Mine&lt;br /&gt;
|-&lt;br /&gt;
| 31000000 || 3 || Mirth&lt;br /&gt;
|-&lt;br /&gt;
| 34000000 || 3 || Misfortune&lt;br /&gt;
|-&lt;br /&gt;
| 21000000 || 3 || Protection from Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3F000000 || 3 || Teleport&lt;br /&gt;
|-&lt;br /&gt;
| 1A000000 || 4 || Armageddon&lt;br /&gt;
|-&lt;br /&gt;
| 3B000000 || 4 || Berserk&lt;br /&gt;
|-&lt;br /&gt;
| 13000000 || 4 || Chain Lightning&lt;br /&gt;
|-&lt;br /&gt;
| 41000000 || 4 || Clone&lt;br /&gt;
|-&lt;br /&gt;
| 3A000000 || 4 || Counterstrike&lt;br /&gt;
|-&lt;br /&gt;
| 1D000000 || 4 || Fire Shield&lt;br /&gt;
|-&lt;br /&gt;
| 38000000 || 4 || Frenzy&lt;br /&gt;
|-&lt;br /&gt;
| 16000000 || 4 || Inferno&lt;br /&gt;
|-&lt;br /&gt;
| 17000000 || 4 || Meteor Shower&lt;br /&gt;
|-&lt;br /&gt;
| 30000000 || 4 || Prayer&lt;br /&gt;
|-&lt;br /&gt;
| 26000000 || 4 || Resurrection&lt;br /&gt;
|-&lt;br /&gt;
| 37000000 || 4 || Slayer&lt;br /&gt;
|-&lt;br /&gt;
| 32000000 || 4 || Sorrow&lt;br /&gt;
|-&lt;br /&gt;
| 09000000 || 4 || Town Portal&lt;br /&gt;
|-&lt;br /&gt;
| 07000000 || 4 || Water Walk&lt;br /&gt;
|-&lt;br /&gt;
| 08000000 || 5 || Dimension Door&lt;br /&gt;
|-&lt;br /&gt;
| 06000000 || 5 || Fly&lt;br /&gt;
|-&lt;br /&gt;
| 12000000 || 5 || Implosion&lt;br /&gt;
|-&lt;br /&gt;
| 24000000 || 5 || Magic Mirror&lt;br /&gt;
|-&lt;br /&gt;
| 28000000 || 5 || Sacrifice&lt;br /&gt;
|-&lt;br /&gt;
| 45000000 || 5 || Summon Air Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 43000000 || 5 || Summon Earth Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 42000000 || 5 || Summon Fire Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 44000000 || 5 || Summon Water Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 39000000 || 5 || Titan&#039;s Lightning Bolt&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144347</id>
		<title>Reference IDs</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144347"/>
		<updated>2024-11-28T04:37:55Z</updated>

		<summary type="html">&lt;p&gt;Deus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Secondary Skill Reference IDs ==&lt;br /&gt;
&lt;br /&gt;
== Spell Reference IDs ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Spell Reference IDs&lt;br /&gt;
|-&lt;br /&gt;
! HEX Values (Little Endian) !! Spell Level !! Spell Name&lt;br /&gt;
|-&lt;br /&gt;
| 29000000 || 1 || Bless&lt;br /&gt;
|-&lt;br /&gt;
| 2B000000 || 1 || Bloodlust&lt;br /&gt;
|-&lt;br /&gt;
| 25000000 || 1 || Cure&lt;br /&gt;
|-&lt;br /&gt;
| 2A000000 || 1 || Curse&lt;br /&gt;
|-&lt;br /&gt;
| 23000000 || 1 || Dispel&lt;br /&gt;
|-&lt;br /&gt;
| 35000000 || 1 || Haste&lt;br /&gt;
|-&lt;br /&gt;
| 0F000000 || 1 || Magic Arrow&lt;br /&gt;
|-&lt;br /&gt;
| 1F000000 || 1 || Protection from Fire&lt;br /&gt;
|-&lt;br /&gt;
| 20000000 || 1 || Protection from Water&lt;br /&gt;
|-&lt;br /&gt;
| 1B000000 || 1 || Shield&lt;br /&gt;
|-&lt;br /&gt;
| 36000000 || 1 || Slow&lt;br /&gt;
|-&lt;br /&gt;
| 2E000000 || 1 || Stone Skin&lt;br /&gt;
|-&lt;br /&gt;
| 00000000 || 1 || Summon Boat&lt;br /&gt;
|-&lt;br /&gt;
| 05000000 || 1 || View Air&lt;br /&gt;
|-&lt;br /&gt;
| 03000000 || 1 || View Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3E000000 || 2 || Blind&lt;br /&gt;
|-&lt;br /&gt;
| 18000000 || 2 || Death Ripple&lt;br /&gt;
|-&lt;br /&gt;
| 04000000 || 2 || Disguise&lt;br /&gt;
|-&lt;br /&gt;
| 2F000000 || 2 || Disrupting Ray&lt;br /&gt;
|-&lt;br /&gt;
| 0D000000 || 2 || Fire Wall&lt;br /&gt;
|-&lt;br /&gt;
| 33000000 || 2 || Fortune&lt;br /&gt;
|-&lt;br /&gt;
| 10000000 || 2 || Ice Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 11000000 || 2 || Lightning Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 2C000000 || 2 || Precision&lt;br /&gt;
|-&lt;br /&gt;
| 1E000000 || 2 || Protection from Air&lt;br /&gt;
|-&lt;br /&gt;
| 0A000000 || 2 || Quicksand&lt;br /&gt;
|-&lt;br /&gt;
| 40000000 || 2 || Remove Obstacle&lt;br /&gt;
|-&lt;br /&gt;
| 01000000 || 2 || Scuttle Boat&lt;br /&gt;
|-&lt;br /&gt;
| 02000000 || 2 || Visions&lt;br /&gt;
|-&lt;br /&gt;
| 2D000000 || 2 || Weakness&lt;br /&gt;
|-&lt;br /&gt;
| 1C000000 || 3 || Air Shield&lt;br /&gt;
|-&lt;br /&gt;
| 27000000 || 3 || Animate Dead&lt;br /&gt;
|-&lt;br /&gt;
| 22000000 || 3 || Anti-Magic&lt;br /&gt;
|-&lt;br /&gt;
| 19000000 || 3 || Destroy Undead&lt;br /&gt;
|-&lt;br /&gt;
| 0E000000 || 3 || Earthquake&lt;br /&gt;
|-&lt;br /&gt;
| 15000000 || 3 || Fireball&lt;br /&gt;
|-&lt;br /&gt;
| 0C000000 || 3 || Force Field&lt;br /&gt;
|-&lt;br /&gt;
| 3D000000 || 3 || Forgetfulness&lt;br /&gt;
|-&lt;br /&gt;
| 14000000 || 3 || Frost Ring&lt;br /&gt;
|-&lt;br /&gt;
| 3C000000 || 3 || Hypnotize&lt;br /&gt;
|-&lt;br /&gt;
| 0B000000 || 3 || Land Mine&lt;br /&gt;
|-&lt;br /&gt;
| 31000000 || 3 || Mirth&lt;br /&gt;
|-&lt;br /&gt;
| 34000000 || 3 || Misfortune&lt;br /&gt;
|-&lt;br /&gt;
| 21000000 || 3 || Protection from Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3F000000 || 3 || Teleport&lt;br /&gt;
|-&lt;br /&gt;
| 1A000000 || 4 || Armageddon&lt;br /&gt;
|-&lt;br /&gt;
| 3B000000 || 4 || Berserk&lt;br /&gt;
|-&lt;br /&gt;
| 13000000 || 4 || Chain Lightning&lt;br /&gt;
|-&lt;br /&gt;
| 41000000 || 4 || Clone&lt;br /&gt;
|-&lt;br /&gt;
| 3A000000 || 4 || Counterstrike&lt;br /&gt;
|-&lt;br /&gt;
| 1D000000 || 4 || Fire Shield&lt;br /&gt;
|-&lt;br /&gt;
| 38000000 || 4 || Frenzy&lt;br /&gt;
|-&lt;br /&gt;
| 16000000 || 4 || Inferno&lt;br /&gt;
|-&lt;br /&gt;
| 17000000 || 4 || Meteor Shower&lt;br /&gt;
|-&lt;br /&gt;
| 30000000 || 4 || Prayer&lt;br /&gt;
|-&lt;br /&gt;
| 26000000 || 4 || Resurrection&lt;br /&gt;
|-&lt;br /&gt;
| 37000000 || 4 || Slayer&lt;br /&gt;
|-&lt;br /&gt;
| 32000000 || 4 || Sorrow&lt;br /&gt;
|-&lt;br /&gt;
| 09000000 || 4 || Town Portal&lt;br /&gt;
|-&lt;br /&gt;
| 07000000 || 4 || Water Walk&lt;br /&gt;
|-&lt;br /&gt;
| 08000000 || 5 || Dimension Door&lt;br /&gt;
|-&lt;br /&gt;
| 06000000 || 5 || Fly&lt;br /&gt;
|-&lt;br /&gt;
| 12000000 || 5 || Implosion&lt;br /&gt;
|-&lt;br /&gt;
| 24000000 || 5 || Magic Mirror&lt;br /&gt;
|-&lt;br /&gt;
| 28000000 || 5 || Sacrifice&lt;br /&gt;
|-&lt;br /&gt;
| 45000000 || 5 || Summon Air Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 43000000 || 5 || Summon Earth Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 42000000 || 5 || Summon Fire Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 44000000 || 5 || Summon Water Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 39000000 || 5 || Titan&#039;s Lightning Bolt&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144346</id>
		<title>Hex Editing - Guide</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144346"/>
		<updated>2024-11-28T04:34:46Z</updated>

		<summary type="html">&lt;p&gt;Deus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{wip}}&lt;br /&gt;
&lt;br /&gt;
The following article describes some basics of hex edition. Offsets (and code itself in some locations) may vary based on game version. &lt;br /&gt;
&lt;br /&gt;
Heroes of Might and Magic III is coded in Assembly x86. Each byte (a set of 2 hexadecimal characters) corresponds to either a function, or a value for an already determined function. The only exception is byte 0x90, which is non-coding and may be used to f.e. fill empty space. &lt;br /&gt;
&lt;br /&gt;
Upper majority of creature stats, abilities, etc. is coded within the *.exe. While it may not be readable or understandable to a layman, in short time one can comprehend a lot of the code and find reason and rhyme in it (or at least, parts of it). &lt;br /&gt;
&lt;br /&gt;
To open (and edit) the *.exe files, one needs a hex editor, f.e. [https://sourceforge.net/projects/frhed/ frhed] or another similar software. I recommend [https://github.com/WerWolv/ImHex ImHex], as it comes with a handy disassembler function built in, as well as a base converter, and similar useful tools.  &lt;br /&gt;
&lt;br /&gt;
Some data is located with the *.lod files. To open them, you need to use [[Tools#MMArchive|MMArchive]]. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Majority of HotA {{wh}} additions are not directly in the h3hota.exe (or h3hota HD.exe), but instead in Hota.dat (and partly in HotA.dll). &lt;br /&gt;
&lt;br /&gt;
=== Numbers ===&lt;br /&gt;
All (or almost all) numbers are written in Little Endian - the bytes are placed in reverse order. As an example, 0xA624C (0x before a number signifies it&#039;s hexadecimal) in Little Endian is written as 4C 62 0A 00. Note, that the system recognizes that a number is negative based on the fact that it&#039;s greater than half the number range: greater than 0x80 for a single byte, and greater than 0x80000000 for a 4-byte value. &lt;br /&gt;
&lt;br /&gt;
Some numbers use a IEE-754 coding. It is recommended to use a calculator for such values, such as the one available on [https://www.save-editor.com/tools/converter_ieee_754.html save-editor.com]. &lt;br /&gt;
&lt;br /&gt;
Keep in mind that most (but, surprisingly, not all) lists start at 0, not at 1, so the first element is element 0 and not element 1.&lt;br /&gt;
&lt;br /&gt;
QWORD and DWORD pointers are Little Endian representations of an address within the *.exe file, with 0x400000 added to them because of the way the game reads the code. Therefore if you want the DWORD pointer to find 0x27e484, you write it as 84 e4 67 00. DWORDs use IEE-754, while QWORDs use an 8-byte double-precision IEE-754 value. &lt;br /&gt;
&lt;br /&gt;
Values followed by zeroes in the same block are 4-byte numbers - this essentially increases their available number range from (in decimal) 0-127 to 0-2147483647. &lt;br /&gt;
&lt;br /&gt;
== Heroes ==&lt;br /&gt;
Heroes are very easy to edit. Hero data is stored in two sets, one containing general hero data and the other containing only hero specialties. Heroes are generally ordered by their faction (Castle, Rampart, Tower, etc.) and then their class (might or magic). Following standard heroes, are all campaign heroes. &lt;br /&gt;
&lt;br /&gt;
=== Hero Data ===&lt;br /&gt;
Hero data is written as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00,&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt; = Gender: 00 is male, 01 is female.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt; = [[Hero race|Race]]. These are listed alphabetically, from Demon to Vampire. This has no in-game effect or visibility and the extensions preferred to default everyone to human, except [[Gelu]] who gets to be an elf.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt; = [[Hero class|Class]]. Classes go in order of factions, and within a faction the might class is listed first. Therefore 00 = Knight, 01 = Cleric, 02 = Ranger, 03 = Druid, etc. Note, that HotA classes essentially &amp;quot;follow&amp;quot; this encoding. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt; = First skill ([[Reference IDs|ref. ID]]).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt; = First skill&#039;s proficiency level (00 = Basic, * 01 = Advanced, 02 = Expert).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt; = Second skill (ref. ID). If there is no second skill, instead, FFFFFFFF is used, replacing ST and the zeroes following it. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt; = Second skill level. If there is no second skill, 00 is used (Basic). &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt; = Spell Book. 00 = absent, 01 = present. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt; = Spell ([[Reference IDs#Spell Ref. ID|ref. ID]]). If no spell is present, FFFFFFFF is used instead. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt; = Starting army unit reference IDs. &lt;br /&gt;
* PS = Small Portrait DWORD pointer, which leads to plain text name of the portrait in the H3bitmap.lod.  &lt;br /&gt;
* PL = Large Portrait, same as above. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0&amp;lt;/span&amp;gt; = allowed in RoE maps by default. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS&amp;lt;/span&amp;gt; = Present by default in all non-RoE maps. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; = Campaign-only. 00 = false, 01 = true.&lt;br /&gt;
&lt;br /&gt;
=== Hero Specialties ===&lt;br /&gt;
Hero specialties are written one by one in the same order as heroes appear in, starting from 0x00278420. &lt;br /&gt;
&lt;br /&gt;
The specialties look as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt; - Specialty type. The following specialty types exist: &lt;br /&gt;
* 00 = Skill specialty (+5% skill effect per level)&lt;br /&gt;
* 01 = Basic Unit specialty (+1 speed, +1 Attack and Defense every &amp;lt;unit level&amp;gt; levels)&lt;br /&gt;
* 02 = Resource (+1 gems per day, etc.)&lt;br /&gt;
* 03 = Spell (+3% efficiency per level for most spells, sometimes special bonuses instead)&lt;br /&gt;
* 04 = Static Unit specialty (static bonus to attack, defense, damage, speed, or any combination of them), f.e. Xeron, Kalt, Haart Lich, etc. &lt;br /&gt;
* 05 = Speed (Sir Mullich only)&lt;br /&gt;
* 06 = Unit Upgrade specialty (Gelu, Dracon, Bidley, etc.)&lt;br /&gt;
* 07 = Dragon Specialty (Mutare, Mutare Drake)&lt;br /&gt;
* 08 = Frederick&#039;s Automaton Explosion specialty. &lt;br /&gt;
&lt;br /&gt;
Note, that setting the first byte (TT000000) to FFFFFFFF will ensure the hero has no specialty. This is only used for Adrienne (yes, she &#039;&#039;technically&#039;&#039; has no hero specialty). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt; = Reference ID of the specialized in Skill,  Unit, Resource or Spell. (Not needed for Dragon and Speed specialties, where it is 00 and an unnecessary, unused 02, respectively). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; = Attack bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt; = Defense bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt; = Damage bonus for Static Unit specialists (and probably Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; = Second unit (ref. ID) that can be upgraded (only used by Unit Upgrade specialists; otherwise left as 00. Note, that using the same unit twice for Unit Upgrade specialty essentially removes second unit from being upgradable; meanwhile using 00 sets the ID to Pikemen.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt; = Resulting unit ref. ID from the upgrade (only for Unit Upgrade specialists). &lt;br /&gt;
&lt;br /&gt;
Note, that using a Unit Upgrade specialist, reference ID of unupgraded creatures ought to be used. F.e., Gelu references Archers and Wood Elves, but code naturally allows also for their upgrades to be improved with his specialty. This does not occur the other way around; specifying ID or U2 as an upgraded creature, will make the upgrade impossible for unupgraded creatures. &lt;br /&gt;
&lt;br /&gt;
Note, that many &amp;quot;possible&amp;quot; specialties don&#039;t exist and simply won&#039;t do anything; examples include Tactics specialty, Teleport specialty, etc.&lt;br /&gt;
&lt;br /&gt;
=== Editing HotA Heroes ===&lt;br /&gt;
Hota heroes are coded in the HotA.dat, in the following order: (names written in quotes are coded in plain text)&lt;br /&gt;
&lt;br /&gt;
07 000000 &amp;quot;hero&amp;lt;ref_id&amp;gt;&amp;quot; 12 000000 &amp;quot;Heroes\hero_&amp;lt;ref_id&amp;gt;.str&amp;quot; FACTION &amp;quot;#large_portrait_file_name.pcx&amp;quot; 0c000000 &amp;quot;#small_portrait_file_name.pcx&amp;quot; XX 000000 &amp;quot;Specialty_Name&amp;quot; YY 000000 &amp;quot;Specialty Bonus: Object&amp;quot; ZZ000000 &amp;quot;{Full Object}&amp;quot; 0d 0a 0d 0a (number of 0a 0d repetitions may differ) &amp;quot;specialty_description&amp;quot; PP000000 &amp;quot;HeroName&amp;quot; QQQQQQQQ &amp;quot;Biography&amp;quot; 00000000 01 5c 0000 (number of zeroes may vary) GG000000 RR000000 HH000000 SO000000 OL000000 ST000000 TL000000 SB000000 SP000000 U1000000 U2000000 U3000000 PS000000 PL000000 R0 AS C0 00 00000000 00000000 1m000000 1M000000 2m000000 2M000000 3m000000 3M000000 08000000 I8000000 TT000000 ID000000 AA000000 DD000000 DM000000 U4000000 U5000000, where:&lt;br /&gt;
&lt;br /&gt;
* FACTION = 09 000000 00000000 0b 000000 for Cove heroes and 09 000000 00000000 00000000 07 000000 for Factory heroes,&lt;br /&gt;
* #large_portrait_file_name.pcx, #small_portrait_file_name.pcx: # and the appropriate file name, f.e. #HPLP06.pcx  &lt;br /&gt;
* XX = {{unk}}&lt;br /&gt;
* Specialty_Name is f.e. &amp;quot;Sea Dogs&amp;quot; or &amp;quot;Nix&amp;quot;. &lt;br /&gt;
* YY = {{unk}}&lt;br /&gt;
* Specialty Bonus: Object refers to the following types of text: &amp;quot;Spell Bonus: Air Shield&amp;quot;, &amp;quot;Creature Bonus: Sea Dogs&amp;quot;, etc. &lt;br /&gt;
* ZZ = {{unk}}&lt;br /&gt;
* {Full Object} is a text in curly parentheses {} stating again the specialty, f.e. &amp;quot;{Estates}&amp;quot;, or &amp;quot;{Pirates, Corsairs and Sea Dogs}&amp;quot;. &lt;br /&gt;
* specialty_description: Plain text description. &lt;br /&gt;
* PP = Hero&#039;s name&#039;s length. &lt;br /&gt;
* QQQQQQQQ = {{unk}}, seems to be some sort of an ID as it seems to be unique for each hero; it is not, however, the reference ID. All QQ values are around 300 (dec). &lt;br /&gt;
* 1m = minimum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 1M = maximum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 2m = minimum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 2M = maximum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 3m = minimum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* 3M = maximum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* I8 = reference ID + 8 for heroes before ref ID 178 and reference ID + 7 for heroes after ref ID 178 (essentially, 0xb9 is skipped)&lt;br /&gt;
&lt;br /&gt;
Heroes in HotA.dat start at 0x23dd and end at 0x9886. Note, that for editing text itself it&#039;s best to use programs such as [https://github.com/sake12/HotA-editor/releases HotA Editor], instead of a direct hex-editing. &lt;br /&gt;
&lt;br /&gt;
=== Altering Hero specialties ===&lt;br /&gt;
&lt;br /&gt;
==== 00 - Skill Specialty ====&lt;br /&gt;
The code for skill specialties works as follows: &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; D805 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; D8 4D FC&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; is a DWORD pointer to a 5% value (in IEEE-754), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; is a DWORD pointer to a value of 1 (again, in IEEE-754)&lt;br /&gt;
&lt;br /&gt;
===== How it works ======&lt;br /&gt;
The number of levels is multiplied by the XXXXXXXX DWORD pointer, added to the YYYYYYYY DWORD pointer and then the skill bonus is multiplied by it (D8 4D FC). &lt;br /&gt;
&lt;br /&gt;
If we want to change the % gain per level, we only need to change the XX value. If we want to instead make the bonus additive (say x% per level, regardless of how much skill itself adds), we can replace the D805YYYYYYYY with 909090909090 (NOP) and replace the D8 4D FC with D8 45 FC. &lt;br /&gt;
&lt;br /&gt;
Therefore it is possible to have a different bonus for one skill than another. &lt;br /&gt;
&lt;br /&gt;
===== Offsets =====&lt;br /&gt;
The offsets for each skill specialty bonus are as follows: &lt;br /&gt;
: Archery - 0x0E4420&lt;br /&gt;
: Armorer - 0x0E45C9&lt;br /&gt;
: Diplomacy - 0x0E483C&lt;br /&gt;
: Eagle Eye - 0x0E46E0&lt;br /&gt;
: Estates - 0x0E464F&lt;br /&gt;
: First Aid - 0x0E4BD9&lt;br /&gt;
: Intelligence - 0x0E4B69&lt;br /&gt;
: Leadership - 0x0E3C81&lt;br /&gt;
: Learning - 0x0E4AF9&lt;br /&gt;
: Logistics - 0x0E4F1E&lt;br /&gt;
: Luck - 0x0E3A2B&lt;br /&gt;
: Mysticism - 0x0E41FE&lt;br /&gt;
: Necromancy - 0x0E3F92&lt;br /&gt;
: Offense - 0x0E4569&lt;br /&gt;
: Resistance - 0x0E499C&lt;br /&gt;
: Scouting - 0x0E432E&lt;br /&gt;
: Sorcery - 0x0E5B61&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
Specialties for integer-bonuses (Luck, Logistics, Scouting) only have their effect when a full integer is gained from their % bonus. &lt;br /&gt;
&lt;br /&gt;
Diplomacy specialty only affects surrender costs. &lt;br /&gt;
&lt;br /&gt;
Learning specialty is fully over-writen by the Hota.dll. &lt;br /&gt;
&lt;br /&gt;
==== 01 - Unit Specialty ====&lt;br /&gt;
The scaling factor for a unit specialty is a DWORD pointing to a 5% value (in IEEE-754), located at 0x0e6548. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
Ballista and Cannon specialty are Unit specialties. &lt;br /&gt;
&lt;br /&gt;
==== 02 - Resource Specialty ====&lt;br /&gt;
The amount of resources obtained from a gold specialty is saved at 0x0E4681 (as 350). &lt;br /&gt;
&lt;br /&gt;
The code for other resource specialties is possible to edit, but it checks for each resource together and then adds 1 to their growth (therefore its only possible to make all resource specialists increase resource gain by 2, unless a complete re-write of the function is performed). &lt;br /&gt;
&lt;br /&gt;
==== 03 - Spell Specialists ====&lt;br /&gt;
===== Spell specialty types =====&lt;br /&gt;
Spell specialty type table starts at 0x0e6358 (with Fire Wall specialty). Each consecutive byte is then the next spell by spell ID (Firewall, Earthquake, Magic Arrow, etc.) up to Slayer. Each spell specialty can take 6 types: &lt;br /&gt;
: 00 - +100% damage (Luna). Note that Hota.dll overwrites this +100% damage with a much more sensible 25%. &lt;br /&gt;
: 01 - +50% damage (Ciele). &lt;br /&gt;
: 02 - Tier bonus A (+3/+3/+2/+2/+1/+1/+0), such as Weakness specialty or Haste specialty. &lt;br /&gt;
: 03 - Static bonus +2 (Aenain)&lt;br /&gt;
: 04 - This one is only used by Fortune (Daremyth, Melodia). In contrary to what BTB claims, it sets the value of the spells effect to 3, regardless of spell&#039;s level. &lt;br /&gt;
: 05 - Tier bonus B (+4/+3/+2/+1/+0/+0/+0), only used by Coronius as far as I know. &lt;br /&gt;
: 06 - Scaling bonus. &lt;br /&gt;
&lt;br /&gt;
If a spell does not belong to the spell table, the scaling bonus is applied (for example this applies to the Hypnotize specialist, Astral). &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;But what if we want to change the specialty type for a spell like Hypnotize? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We can extend the table by changing 0x0e6296 (equal to 0x2a by default) to a different value, which corresponds to the number of spells in the table -1. If we extend the table, the next specialties will be those for the next spells by spell ID. We have a total of 13 bytes of nop (90), so the last spell specialty we can code this way is Summon Air Elemental. Remember to update all specialties created this way! You shouldn&#039;t just leave the nops (90) in the middle of the table!&lt;br /&gt;
&lt;br /&gt;
&amp;quot;But what about Victoria, the Land Mine specialist?&amp;quot;, you may ask. Well, I&#039;m here to give answers: &lt;br /&gt;
&lt;br /&gt;
The command &#039;&#039;&#039;lea eax, [esi-0Dh]&#039;&#039;&#039; located at 0x0e6291 finds the spell ID of firewall (0d) and chooses it as the first spell on the list of specialties &#039;&#039;(remember? The one that starts at 0x0e6358?)&#039;&#039;. By changing it to &#039;&#039;&#039;lea eax, [esi-0Bh]&#039;&#039;&#039;, we can change the first spell ID to 0x0B, or Land Mine. &#039;&#039;Notice, that this reduces the last spell specialty to Summon Earth Elemental, but I doubt anyone will miss the Summon Water Elemental and Summon Air Elemental specialties.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Next, we have to increase the number of spells in the list by 2 (located at 0x0e6296), and then move the entire spell specialty table, 2 bytes each, because now it starts at 0x0e6358 with Land Mine (and still follows by spell ID). &lt;br /&gt;
&lt;br /&gt;
&amp;quot;And what about Eovacius? And Zilare?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Haven&#039;t looked at them yet but I believe they may be hard-coded.&lt;br /&gt;
&lt;br /&gt;
The specialty types can be changed by altering their commands. Each specialty type (00, 01, and so on) have a DWORD pointer to their appropriate code located in a 28-byte long table starting at 0x0e633c.&lt;br /&gt;
&lt;br /&gt;
===== Changing Tier bonuses =====&lt;br /&gt;
Let&#039;s say we want to make Olema&#039;s Weakness specialty remotely usable, but we still want it to be a tier-based specialty. We can change the bonuses the spell provides for each unit tier in a 28-byte long table that starts at 0x23eaa8. Each 4 bytes corresponds to the next unit level. &lt;br /&gt;
&lt;br /&gt;
A similar table for Coronius&#039; specialty type starts at 0x23eac4 (immediately afterwards) and works the same way. &lt;br /&gt;
&lt;br /&gt;
===== Changing the static bonus =====&lt;br /&gt;
At 0x0e62e6 the value 0x02 determines the static bonus (such as the one Disrupting Ray specialists get). &lt;br /&gt;
&lt;br /&gt;
===== Changing the scaling bonus =====&lt;br /&gt;
At 0x0e631f the DWORD pointer finds an IEEE-754 double precision value for 3% (base game). Replacing this pointer with another one finds a different % bonus. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want the scaling specialties to divide their bonus by unit level, replace f7 f9 at 0xe630b with 90 90 (nop-ing out the division). &lt;br /&gt;
&lt;br /&gt;
===== Specialties that don&#039;t work ===== &lt;br /&gt;
Several specialties don&#039;t work because no specialty type can increase their bonus: &lt;br /&gt;
* Curse&lt;br /&gt;
* Anti-Magic&lt;br /&gt;
* Dispel&lt;br /&gt;
* Slow {{unk}}, but it would probably be way too strong anyway;&lt;br /&gt;
* Berserk&lt;br /&gt;
* Blind&lt;br /&gt;
* Teleport&lt;br /&gt;
* Remove Obstacle.&lt;br /&gt;
&lt;br /&gt;
==== 04 - Unit (static) ====&lt;br /&gt;
Only Xeron is specified to add speed thanks to his static unit specialty. This is (most likely) saved at the following address: 0x4b1b3 {{unk}}. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
==== 05 - Speed specialty ====&lt;br /&gt;
Sir Mullich&#039;s unit specialty amount (0x02) is located at 0x0E6669. &lt;br /&gt;
&lt;br /&gt;
==== 06 - Unit Upgrade specialty ====&lt;br /&gt;
These specialties calculate the upgrade cost automatically, with the same function that calculates upgrade costs in all other cases. If &amp;quot;unupgraded&amp;quot; unit is more expensive than the upgraded one, the message about necessary costs wil appear, but no cost will be stated and the conversion will be free. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty. &lt;br /&gt;
&lt;br /&gt;
==== 07 - Dragon specialty ====&lt;br /&gt;
I believe Mutare&#039;s bonus is specified within her specialty block.&lt;br /&gt;
&lt;br /&gt;
== Editing HotA Creatures ==&lt;br /&gt;
While most statistics of base game creatures can be edited rather effortlessly (using MMArchive to unpack H3bitmap.lod or HotA_lng.lod), HotA creatures cannot be edited this way. Their data is stored at the beginning of HotA.dat, as follows:&lt;br /&gt;
&lt;br /&gt;
08 000000 &amp;quot;most&amp;lt;ref_id&amp;gt;&amp;quot; 17 000000 &amp;quot;Monsters\monster&amp;lt;ref_id&amp;gt;.str&amp;quot; 09 000000 00000000 04 000000 &amp;quot;name_abbreviation&amp;quot; KK000000 &amp;quot;&amp;lt;animation_filename&amp;gt;.def&amp;quot; L1000000 &amp;quot;Monster_name (singular)&amp;quot; L2000000  &amp;quot;Monster name (plural)&amp;quot; 00000000 00000000 00000000 00000000 01 74 0000 TT 000000 UL 000000 0c556700  00556700 F1 F2 F3 F4 80da9e03 60da9e03 30da9e03 WC000000 MC000000 OC000000 SC000000 CC000000 GeC000000 GC000000 FV000000 AV000000 GV000000 HG000000 HP000000 SP000000 AT000000 DF000000 DmgL000000 DmgH000000 SH000000 SN000000 OO000000 mm000000 MM000000 RR000000 VV000000 WW000000 XX000000 YY000000 ZZ000000 &lt;br /&gt;
&lt;br /&gt;
* monst&amp;lt;ref_id&amp;gt; is monster&#039;s reference id in decimal, f.e. monst154&lt;br /&gt;
* name_abbreviation is a 4 letter abbreviation of the monster name. Never appears anywhere ever again. Note that not all abbreviations are just beginning or consonants, f.e. Haspids are written as &amp;quot;aspi&amp;quot; and nix as &amp;quot;nixx&amp;quot;. This abbreviation doesn&#039;t seem to have to be unique, as Sea Serpent and Haspids have the same 4 letters here.  It is worth pointing out, that base game creatures also use 4-letter abbreviations in a similar table located in h3hota HD.exe around 0x275500&lt;br /&gt;
* KK is the length of the animation_filename + 4 (and therefore the length of the entire &amp;quot;animation_filename.def&amp;quot;&lt;br /&gt;
* &amp;lt;animation_filename&amp;gt;.def  is the file name of the set of animations, saved as .def in HotA.lod or HotA.lod. &lt;br /&gt;
* L1 is the length of the monster name (singular)&lt;br /&gt;
* L2 is the length of the monster name (plural)&lt;br /&gt;
* 0x74 codes as &amp;quot;t&amp;quot; in ASCII&lt;br /&gt;
* TT is the reference id of the town the monster belongs to. 0x09 for Cove, 0x0a for Factory, FFFFFFFF for Neutrals and I bet if HotA ever releases a new town, it will have 0x0b as its faction code. &lt;br /&gt;
* UL is the unit level -1 (sidenote: this is an example of numbers being used in a list with a zero-based numbering). FFFFFFFF for monsters with no level (f.e. Citadel / Castle Towers)&lt;br /&gt;
* 0c556700 (and 00556700) point to a similar table with creature sprite, text and other references in h3hota HD.exe and is probably used to insert the HotA.dat&#039;s creature table into this part of the exe. &lt;br /&gt;
* F1 is the first creature ability flag&lt;br /&gt;
** 01 - 2-hex unit&lt;br /&gt;
** 02 - Flying&lt;br /&gt;
** 04 - Ranged Attack&lt;br /&gt;
** 08 - Fire breath&lt;br /&gt;
** 10 - Living&lt;br /&gt;
** 20 - Can attack city walls (cyclops, cannon)&lt;br /&gt;
** 40 - War machine&lt;br /&gt;
** 80 - Slayer (Basic)&lt;br /&gt;
* F2 is the second creature ability flag&lt;br /&gt;
** 01 - Slayer (advanced)&lt;br /&gt;
** 02 - Slayer (expert)&lt;br /&gt;
** 04 - Mind immunity&lt;br /&gt;
** 08 - shoots beam (?)&lt;br /&gt;
** 10 - No melee penalty&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - Fire immunity&lt;br /&gt;
** 80 - Attacks twice&lt;br /&gt;
* F3 is the third creature ability flag&lt;br /&gt;
** 01 - No enemy retaliation&lt;br /&gt;
** 02 - Morale has no effect&lt;br /&gt;
** 04 - Undead&lt;br /&gt;
** 08 - AOE melee attack (Hydra)&lt;br /&gt;
** 10 - AOE ranged attack (Magog), AI flag only. &lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - {{unk}}&lt;br /&gt;
* F4 is the fourth creature ability flag&lt;br /&gt;
** 01 - {{unk}}&lt;br /&gt;
** 02 - {{unk}}&lt;br /&gt;
** 04 - {{unk}}&lt;br /&gt;
** 08 - {{unk}}&lt;br /&gt;
** 10 - {{unk}}&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - Dragon (for the sake of Mutare&#039;s specialty and vial of dragon blood)&lt;br /&gt;
* 80da9e03, 60da9e03, 30da9e03 - {{unk}}&lt;br /&gt;
* WC is the cost of wood necessary to recruit the creature&lt;br /&gt;
* MC is the cost of mercury necessary to recruit the creature&lt;br /&gt;
* OC is the cost of ore necessary to recruit the creature&lt;br /&gt;
* SC is the cost of sulfur necessary to recruit the creature&lt;br /&gt;
* CC is the cost of crystals necessary to recruit the creature&lt;br /&gt;
* GeC is the cost of gems necessary to recruit the creature&lt;br /&gt;
* GC is the cost of gold necessary to recruit the creature. Note that all aforementioned cost values have 4 bytes to play with, so the maximum unit cost is 2147483647 gold (or of any resource). &lt;br /&gt;
* FV is the Fight Value&lt;br /&gt;
* AV is the AI Value&lt;br /&gt;
* GV is the Growth&lt;br /&gt;
* HG is the Horde Growth &lt;br /&gt;
* HP is, surprisingly, hit points&lt;br /&gt;
* SP is speed&lt;br /&gt;
* AT is attack&lt;br /&gt;
* DF is defense&lt;br /&gt;
* DmgL is low end of the damage range&lt;br /&gt;
* DmgH is the high end of the damage range&lt;br /&gt;
* SH is the number of shots per battle&lt;br /&gt;
* SN is the number of spell casts per battle&lt;br /&gt;
* mm - minimum number of units when randomly spawned by the map generator &lt;br /&gt;
* MM - maximum number of units when randomly spawned by the map generator. &lt;br /&gt;
QQ, RR, VV, WW, XX, YY, ZZ - {{unk}}. Sometimes they take up 28 (!) bytes (such as for Ayssids), and sometimes don&#039;t appear at all. I suspect they reference some sort of abilities the creatures have, or their descriptions. &lt;br /&gt;
&lt;br /&gt;
When using custom functions or editing original code, note that all HotA (as well as some SoD monsters) have reference ID above 80, and therefore cannot be checked for using a simple check command, such as 83 FA ID. Instead, you have to use a longer command that accepts a 4-byte value (for EDX that would be 81 FA ID000000).&lt;br /&gt;
&lt;br /&gt;
== Editing Creature Abilities ==&lt;br /&gt;
=== Magic Channel ([[Familiars]]) === &lt;br /&gt;
Magic channel&#039;s applicable unit ID is defined at 0x1a24f6. The game uses a frankly ridiculous method of dividing by 5 (let&#039;s just say that it purposefully calls and uses a value 1717986919 to calculate 20%). Btb2 analyzed it and found a way to alter the percentage to 50% or 100% (by ignoring the horrible function before it and simply taking the mana value or moving it by 1 byte). Replace: &lt;br /&gt;
&lt;br /&gt;
* 0x1A24B4  -&amp;gt;  8b 55 98 d1 ea    (for 50%, since d1 ea is a single bitwise shift to the right&lt;br /&gt;
* 0x1A24b4  -&amp;gt;  8b 55 98 90 90    (no division).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the function. The following offset reads: &lt;br /&gt;
* 0x1A249F:  b8 *67666666* c7 45 1c 02000000 f7 e9 8b 4d 9c *d1 fa* 8b c2 c1 e8 1f 03 d0&lt;br /&gt;
&lt;br /&gt;
The b8 XXXXXXXX (bolded above) function calls a hexadecimal value (note that it&#039;s in Little Endian) and saves it. The code then uses &amp;quot;d1 fa&amp;quot; (emboldened above) to divide edx by 2 before it is further used. C1 E8 1F is simply a division by 2^31 of the value. Yes, that is why the rounding may be a bit off for Magic Channel. Now let&#039;s consider replacing: &lt;br /&gt;
* 67666666 with our custom value (for now let&#039;s imagine it&#039;s 56555555)&lt;br /&gt;
* d1 fa with 90 90 (two nop or non-coding functions, so we basically removed this part of the code)&lt;br /&gt;
&lt;br /&gt;
The result is... Division by 3. Now the Magic Channel grants 33% mana return. &lt;br /&gt;
&lt;br /&gt;
To obtain a different value, we need to replace XXXXXXXX with another number. This has to be (2^33 / D) +1, where D is our divisor (3 for 1/3, 5 for 1/5, etc.). The 2^33 is multiplied with the variable (mana cost), but is then divided by 2^31 and moves by two bits elsewhere to account for the differences. The number is greater than the quotient by 1, to avoid the rounding downwards removing 1 mana point incorrectly. Note, that XXXXXXXX cannot be equal to or greater than 00000080 (0x80000000), as then the value will be negative. &lt;br /&gt;
&lt;br /&gt;
The function also calls 0x1A2498 for the minimum mana value for which Magic Channel may apply. This is equal to the value of D (0x05 in base game, 0x03 in the example above). &lt;br /&gt;
&lt;br /&gt;
== Editing Buildings ==&lt;br /&gt;
Building names and descriptions (excluding HotA) are saved in BldgSpec.txt and BldgNeut.txt. Building requirements can be altered by changing their dependency tables. Address of each dependency table is located at: &lt;br /&gt;
* 0x0EB816 - Castle&lt;br /&gt;
* 0x0EB8B3 - Rampart&lt;br /&gt;
* 0x0EB971 - Tower&lt;br /&gt;
* 0x0EBA39 - Inferno&lt;br /&gt;
* 0x0EBA48 - Necropolis&lt;br /&gt;
* 0x0EBA5C - Dungeon&lt;br /&gt;
* 0x0EBA70 - Stronghold&lt;br /&gt;
* 0x0EBA84 - Fortress&lt;br /&gt;
* 0x0EBA98 - Conflux&lt;br /&gt;
&lt;br /&gt;
Note, that some building requirements are changed in HotA.dll. While it shouldn&#039;t be too difficult to determine their location in that file, (look for appropriate DWORDs in HotA.dll) for now these offsets are unknown. The requirement table for Cove and Factory may be coded differently and as far as I know, haven&#039;t been found yet. &lt;br /&gt;
&lt;br /&gt;
Building costs can be changed in Building.txt. &lt;br /&gt;
&lt;br /&gt;
=== HotA buildings ===&lt;br /&gt;
Building names and descriptions for HotA are saved in HotA.dat and can be edited as a text edit using f.e. the aforementioned HotA Editor. &lt;br /&gt;
&lt;br /&gt;
Building costs for HotA are saved in HotA.dat. The building names appear before the building costs. Each building cost contains of 28 bytes, each 4 bytes representing a 4-byte little endian number of cost for each resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Note, that some buildings have text and description, but no written cost (either replaced with 0s or simply not having any space devoted to them). An example is Mana Generator. For now it is not known how to edit the cost of these buildings (and therefore the cost of the Mana Generator remains a mystery).  &lt;br /&gt;
&lt;br /&gt;
=== Resource Silos ===&lt;br /&gt;
Resource Silo yield tables are located at 0x288F04. Each resource value is mentioned for each town, one by one, in 4-byte values (order of resources is Wood, Mercury, Ore, Sulphur, Crystal, Gems, Gold) with towns going in order. &lt;br /&gt;
&lt;br /&gt;
Cove&#039;s Resource Silo simply copies the one from the Dungeon, while Factory copies Rampart. &lt;br /&gt;
&lt;br /&gt;
The Resource Silo table is called for in exe a few times, but HotA.dll overwrites all (or most) of these calls at 0xd37ae and 0xd37ce.  As of 12:19, 19 September 2024 (UTC), it is not known how to alter the Resource Silo values for Cove and Factory. No specific offset or function have been identified.  {{unk}}. &lt;br /&gt;
&lt;br /&gt;
== Artifacts ==&lt;br /&gt;
All stats given by artifacts are written into a table at 0x23e758, 4 bytes for each artifact (Attack, Defense, Power, Knowledge). &lt;br /&gt;
&lt;br /&gt;
The artifact traits are specified in artraits.txt, while artifact pick-up events are defined in artevent.txt (both in Hota_lng.lod). &lt;br /&gt;
&lt;br /&gt;
Interference amount of the Plate of the Dying Light is specified as a IEE-754 floating point value at 0x1d40c8 in Hota.dll &lt;br /&gt;
&lt;br /&gt;
=== Combination Artifacts ===&lt;br /&gt;
Combination artifact&#039;s components are specified at a few functions, starting at 0x04c63d. For further reading see BTB2&#039;s guide (linked below, as External Link #3). Be aware! BTB2&#039;s guide is either wrong or outdated! His method of removing components seems to work correctly, however, most likely due to HotA putting their combination artifacts in HotA.dll to push them in between base game combination artifacts, or for another reason, &#039;&#039;his method of increasing the number of items does NOT work&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
However, not all is lost. There&#039;s 8 bytes of nop (90) commands starting at 0x4c8c8, and we can use them to add an extra item (to showcase it, I&#039;ll present a code for adding an extra item to the Ring of the Magi&#039;s requirements. This seems a safe method, since only a short push is used, and therefore I advise changes to 3-piece combination artifacts to simply copy this method and swap Ring of the Magi with their edited artifact). &lt;br /&gt;
:0x4c85b 6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID)  -&amp;gt; eb 6d (jump 109 bytes forward)&lt;br /&gt;
:0x4c8c8 90909090 90909090   -&amp;gt; eb 06..(skip following code)...6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID) 6a &#039;&#039;&#039;YY&#039;&#039;&#039; (2nd ref item ID).....eb 8d (jump backwards 115 bytes)&lt;br /&gt;
&lt;br /&gt;
Replace emboldened text with your appropriate artifact IDs. Remember to also update the number of components (in this example at 0x04C861). &lt;br /&gt;
&lt;br /&gt;
Note, that the method described above only works for a jump of 125 bytes or less. Gladly, there&#039;s a few other empty spaces that can be used for adding extra components: &lt;br /&gt;
* 0x4c25c (11 bytes of nop)&lt;br /&gt;
* 0x4c2d6 (10 bytes)&lt;br /&gt;
* 0x4c347 (9 bytes)&lt;br /&gt;
* 0x4c3c7 (9 bytes)&lt;br /&gt;
* 0x4c622 (14 bytes)&lt;br /&gt;
* 0x4c8c8 (8 bytes)&lt;br /&gt;
* 0x4ca15 (11 bytes)&lt;br /&gt;
* 0x4d008 (8 bytes)&lt;br /&gt;
&lt;br /&gt;
Simply use the available space within 125 bytes of the definition of any of the original components. If this can&#039;t be done, swap your artifact with another, which can be edited. &lt;br /&gt;
&lt;br /&gt;
Note, that if you&#039;re using HotA, it&#039;s much safer to just edit appropriate artifact reference IDs and add other appropriate components (or replace the resulting artifact) by editing Hota.dat (see: [https://heroes.thelazy.net/index.php?title=Hex_Editing_-_Guide/artsinfo0|HotA Artifacts - artsinfo0]&lt;br /&gt;
&lt;br /&gt;
=== Making new Combination Artifacts ===&lt;br /&gt;
&lt;br /&gt;
For now it is wholly unknown how to do it. HotA devs seem to now their way around it.{{unk}} See below. &lt;br /&gt;
&lt;br /&gt;
What might work is repeating a function identical to that of another artifact with different properties using some empty space. Requires further testing. &lt;br /&gt;
&lt;br /&gt;
=== HotA Artifacts ===&lt;br /&gt;
Hota&#039;s new artifacts are coded in the Hota.dat. To edit their properties, you need to edit their text (or use hexadecimal values for ASCII to match their text in hex editing). Artifacts are coded as follows: &lt;br /&gt;
&lt;br /&gt;
==== artsinfo0 ==== &lt;br /&gt;
This part of the file includes partial data on all HotA artifacts, written as follows: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;Artifact Name&lt;br /&gt;
:&amp;lt;ref_ID&amp;gt;&lt;br /&gt;
:X Y Z # Description:&lt;br /&gt;
:P Q R # Dif abl, S points&lt;br /&gt;
:-1&lt;br /&gt;
&lt;br /&gt;
Note, that the ref_ID above is written in decimal system. &lt;br /&gt;
&lt;br /&gt;
The X Y Z applies a buff to the artifact, seemingly by coding first the bonus type with X, amount with Y and optional specification with Z. &lt;br /&gt;
* 0 - Increase Attack / Defense&lt;br /&gt;
* 1 - Add Spell Power&lt;br /&gt;
* 2 - Add Knowledge&lt;br /&gt;
* 7 - Different Ability, Y = AI value {{unk}} (it&#039;s described as &amp;quot;points&amp;quot;)&lt;br /&gt;
* 8 - Movement artifact?&lt;br /&gt;
* 13 - Restrict spells; Y = 1 for Cloak of Silence, 4 for Ring of Oblivion&lt;br /&gt;
* 16 - Add daily resource growth, Y = amount, Z = resource type (0 = wood, 6 = gold)&lt;br /&gt;
* 24 - Enemy morale bonus&lt;br /&gt;
* 25 - Enemy luck bonus&lt;br /&gt;
&lt;br /&gt;
The P Q R are coded in the same way as above and refer to a second ability. &lt;br /&gt;
&lt;br /&gt;
However, the method above seems to suggest some artifacts have different bonuses than they actually possess: Ironfist of the Ogre doesn&#039;t increase either attack or defense; Trident of Dominion increases attack by 6, etc. &lt;br /&gt;
&lt;br /&gt;
This part of the file also includes definitions of all combo artifacts and their components. F.e. Diplomat&#039;s Cloak: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Diplomat&#039;s Cloak&lt;br /&gt;
:12 141 3 66 67 68&lt;br /&gt;
&lt;br /&gt;
* 12 is the number of the combination artifact (including SoD ones)&lt;br /&gt;
* 141 is the decimal reference ID of the Diplomat&#039;s Cloak&lt;br /&gt;
* 3 is the number of components&lt;br /&gt;
* 66 67 68 are the reference IDs of components (decimal)&lt;br /&gt;
&lt;br /&gt;
Note, that this can be used to effectively alter any base-game combination artifact! Simply add a line before these artifact definitions&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Sample Text&lt;br /&gt;
:N RIF C R+ R++ R+++ R++++,&lt;br /&gt;
&lt;br /&gt;
where N is the number of combination artifact (counting the way they&#039;re placed in the .exe code), RIF is the reference ID of the final artifact, R+, R++ and so on are the additional components. To showcase adding an extra requirement to the Ring of the Magi (since a similar concept was used above) and replacing the Ring of the Magi with the AB blade and requiring a Sword of Hellfire:&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Armageddon&#039;s Blade&lt;br /&gt;
:10 128 1 11&lt;br /&gt;
&lt;br /&gt;
(11 is the reference ID of the new item - Sword of Hellfire). &lt;br /&gt;
&lt;br /&gt;
Sadly, new combination artifacts can&#039;t simply be added this way.&lt;br /&gt;
&lt;br /&gt;
=== art&amp;lt;ref_ID&amp;gt; ===&lt;br /&gt;
art&amp;lt;ref_ID&amp;gt; entries in HotA.dat (as visible in the Hota.editor.exe) can be used to alter an artifact&#039;s name, adventure map event text, description, slot type and rarity class (treasure, minor, major, relic). Here is also the true artifact bonus data coded. Note that the Reference ID is in decimal. &lt;br /&gt;
&lt;br /&gt;
:gold_price &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; cost - (cost of 0 is used if an artifact cannot normally appear, f.e. if it&#039;s a Combination Artifact. &lt;br /&gt;
:slot &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; slot type (0 - none, 1 - head, 2 - shoulders, 3 - neck, 4 - right hand, 5 - left hand, 6 - torso, 7 - ring, 8 - feet, 9 - misc, 10 - ballista, 11 - ammo cart, 12 - first aid tent, 13 - catapult, 14 - spell book)&lt;br /&gt;
:class &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; type (1 - none, 2 - treasure, 4 - minor, 8 - major, 16 - relic)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; disabled as defaults (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; add new spells (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; attack bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; defense bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; spell power bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; knowledge bonus (_int8_)&lt;br /&gt;
&lt;br /&gt;
== Creature Banks ==&lt;br /&gt;
Creature bank definitions in h3hota HD.exe start at 0x2702A0. They are coded as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 FFFFFFFF 00000000 00000000 00000000, &lt;br /&gt;
&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;  and  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; are Unit IDs for guards ( &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2 U3 U4&amp;lt;/span&amp;gt; etc are optional). Note, that the 12 bytes of 00 do not appear after the last defined creature bank (Dragon Utopia). &lt;br /&gt;
&lt;br /&gt;
Afterwards, the reward creatures (and creatures only!) are defined as follows: &lt;br /&gt;
&lt;br /&gt;
FFFFFFFF &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R3&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt; is the reward creature for the first bank, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt; for the second, and so on.&lt;br /&gt;
&lt;br /&gt;
The order the banks appear in is as follows: &lt;br /&gt;
&lt;br /&gt;
#Cyclops Stockpile&lt;br /&gt;
#Dwarven Treasury&lt;br /&gt;
#Griffin Conservatory&lt;br /&gt;
#Imp Cache&lt;br /&gt;
#Medusa Stores&lt;br /&gt;
#Naga Bank&lt;br /&gt;
#Dragon Fly Hive&lt;br /&gt;
#Shipwreck&lt;br /&gt;
#Derelict Ship&lt;br /&gt;
#Crypt&lt;br /&gt;
#Dragon Utopia. &lt;br /&gt;
&lt;br /&gt;
Note, that after changing these values, you still have to edit the remaining bank data in CrBanks.txt. &lt;br /&gt;
&lt;br /&gt;
HotA banks, except for the Ancient Altar, are all defined within the Hota.dat file, as crbank21, 22, and so on. &lt;br /&gt;
&lt;br /&gt;
=== The Pyramid ===&lt;br /&gt;
The pyramid is defined separately:&lt;br /&gt;
&lt;br /&gt;
: 0xa3fa2:6a &#039;&#039;&#039;02&#039;&#039;&#039; 6a &#039;&#039;&#039;14&#039;&#039;&#039; 6a &#039;&#039;&#039;7d&#039;&#039;&#039; (52 8d4508 53 50) 6a &#039;&#039;&#039;74&#039;&#039;&#039;; &lt;br /&gt;
: 0xa3fb6: &#039;&#039;&#039;28&#039;&#039;&#039; 00 00 00&lt;br /&gt;
&lt;br /&gt;
Where: &lt;br /&gt;
* 02 is the number of stacks of Diamond Golems&lt;br /&gt;
* 14 is the number of Diamond Golems (in total)&lt;br /&gt;
* 7d is the unit ID of Diamond Golems, &lt;br /&gt;
* 74 is the unit ID of Gold Golems and&lt;br /&gt;
* 28 is the number of Gold Golems. &lt;br /&gt;
&lt;br /&gt;
BTB2 suggested replacing Diamond Golems with Mummies - this however, requires using a creature ID above 80, and therefore a long push (6B 8D000000 for mummies). However, to do that we would need to use some empty space. He suggested removing the -2 Luck on empty Pyramid subroutine. I decided to instead use some empty space I got from a different change, keeping the -2 Luck penalty. The result is as follows: &lt;br /&gt;
&lt;br /&gt;
: 0x0A3FA6 → ebdf (jumps to overwrite -2 luck on empty Pyramid), &lt;br /&gt;
: 0x0A3F82 → e9 89c10100 (jump to free space 0xc0110) &lt;br /&gt;
::::: 68 8d000000 (Mummies) &lt;br /&gt;
:::::EB 1A 90 90 (jump back to A3FA8), &lt;br /&gt;
: 0xc0110 (Free) → 8a 87 1b 01 00 00 04 fe 88 87 1b 01 00 00 (displaced code: -2 Luck on empty Pyramid), &lt;br /&gt;
: 0xc011d (Free) → E9 6b3efeff(jump to 0x0A3F8F (end of F8E))&lt;br /&gt;
&lt;br /&gt;
Note, that this method assumes you have empty space at 0xc0110 (by forcing rumors to always show rumors defined by the mapmaker). If you have empty space elsewhere, simply move the function, altering the jumps appropriately. &lt;br /&gt;
&lt;br /&gt;
= Editing h3hota_maped =&lt;br /&gt;
&lt;br /&gt;
All heroes are defined one by one in the h3hota_maped starting from 0x186800. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &#039;&#039;SB&#039;&#039; 000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00&lt;br /&gt;
&lt;br /&gt;
Note, that some HotA heroes use some data from HotA.dat&lt;br /&gt;
&lt;br /&gt;
= Game Mechanics =&lt;br /&gt;
== Starting Resources ==&lt;br /&gt;
Table with the starting resources starts at 0x278170. Each 4 bytes are the next resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Each 28 bytes is the next difficulty - Easy, Normal, Expert, etc. At 0x2781FC the AI resources start and follow the same order of resources and difficulties. The whole table thus takes 280 bytes. &lt;br /&gt;
&lt;br /&gt;
== Starting Bonuses ==&lt;br /&gt;
=== Gold Bonus ===&lt;br /&gt;
The starting gold bonus chooses a random value between the value written at 0x0C0002 and the value at 0x0BFFFD, and then multiplies it by 100. To change the multiplication, simply edit 0x0C000B (multiplying by 25) and 0x0C0016 (moving the value by 2 bits, so multiplying it by 4). &lt;br /&gt;
&lt;br /&gt;
=== Resource Bonuses ===&lt;br /&gt;
The starting resource bonuses use DWORD pointers to find their appropriate code to run:&lt;br /&gt;
* Wood and Ore - AF FF 4B 00 &lt;br /&gt;
* Crystals - D6 FF 4B 00 &lt;br /&gt;
* Gems - E1 FF 4B 00 &lt;br /&gt;
* Mercury - EC FF 4B 00 &lt;br /&gt;
* Sulfur - F4 FF 4B 00 &lt;br /&gt;
&lt;br /&gt;
These DWORD pointers are located at the following addresses: &lt;br /&gt;
* Castle - 0x0C01B4 &lt;br /&gt;
* Rampart - 0x0C01B8 &lt;br /&gt;
* Tower - 0x0C01BC &lt;br /&gt;
* Inferno - 0x0C01C0 &lt;br /&gt;
* Necropolis - 0x0C01C4 &lt;br /&gt;
* Dungeon - 0x0C01C8 &lt;br /&gt;
* Stronghold - 0x0C01CC &lt;br /&gt;
* Fortress - 0x0C01D0 &lt;br /&gt;
* Conflux - 0x0C01D4 &lt;br /&gt;
&lt;br /&gt;
Note, that you need to edit ScnrStar.def to reflect any altered resources. &lt;br /&gt;
&lt;br /&gt;
The amount for each rare resource is most likely determined by the function at 0xc009e: {{unk}}&lt;br /&gt;
: minimum: c745f0 33333333 &#039;&#039;(mov [ebp-0x10], 0x33333333)&#039;&#039; c745f0 3333EB3F  &#039;&#039;(mov [ebp-0x1c], 0x3feb3333)&#039;&#039; &lt;br /&gt;
: break between the two: eb 0e &#039;&#039;(jmp 0x0e)&#039;&#039; &lt;br /&gt;
: maximum: c745f0 66666666 &#039;&#039;(mov [ebp-0x10], 0x66666666)&#039;&#039; c745f0 6666E63F  &#039;&#039;(mov [ebp-0x10], 0x3FE66666)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The amount of wood and ore are most likely specified at 0xbffaf: BA 0a000000 &#039;&#039;(mov edx, 0x0a)&#039;&#039; B9 05000000 &#039;&#039;(mov ecx, 0x05)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
== Movement point reminder ==&lt;br /&gt;
The movement point reminder is located at 0x9c91. It checks if movement points are 0 (using a 2-byte &#039;&#039;test eax, eax&#039;&#039;) and then proceeds to different code if movement points are (or not) zero. If one wants to change it to a higher number (to avoid reminding of movement for heroes that can&#039;t actually move anymore), the following code can be used:&lt;br /&gt;
&lt;br /&gt;
:0x9c91: {{---}}{{---}}a1 c8876900 &#039;&#039;mov eax, [0x6987c8]&#039;&#039; e9 849d0d00 (jump to some arbitrary free space) 90909090&lt;br /&gt;
: free space: {{-}}3d XY000000 &#039;&#039;cmp eax, XY&#039;&#039; - compare movement points with value XY. &lt;br /&gt;
:::: {{---}}7F 0A &#039;&#039;jg 0x0a&#039;&#039; - jump 10 bytes if the value is greater. &lt;br /&gt;
:::: {{---}}A1 C4 5d 6A 00 - displaced code&lt;br /&gt;
:::: {{---}}e9 6f62f2ff - jump to 0x9c9f (or 49C9F)&lt;br /&gt;
:::: {{---}}e9 a462f2ff - jump to 0x9cd9 (or 49CD9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=18817 heroescommunity.com - Editing heroes in memory] - Includes a large number of various Reference IDs&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=42152&amp;amp;pagenumber=1 heroescommunity.com - How to edit Hota?] - Thread with majority of useful information, scrambled across 112 forum pages. &lt;br /&gt;
#  [http://btb2.free.fr/mods/h3/hacking.txt BTB2&#039;s hacking guide] - primarily detailing creation of his own mod, but including tips, explanations and some of the Reference IDs&lt;br /&gt;
# [https://handbookhmm.ru/forum/viewtopic.php?f=56&amp;amp;t=968 void_17&#039;s database] - this database describes most or all of the functions in the base game of heroes 3. &lt;br /&gt;
#* [https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view void_17&#039;s database] (link 2). &lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144344</id>
		<title>Reference IDs</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144344"/>
		<updated>2024-11-28T04:31:31Z</updated>

		<summary type="html">&lt;p&gt;Deus: Deus moved page Spell Ref. ID to Reference IDs: Consolidating Reference IDs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Spell Reference IDs&lt;br /&gt;
|-&lt;br /&gt;
! HEX Values (Little Endian) !! Spell Level !! Spell Name&lt;br /&gt;
|-&lt;br /&gt;
| 29000000 || 1 || Bless&lt;br /&gt;
|-&lt;br /&gt;
| 2B000000 || 1 || Bloodlust&lt;br /&gt;
|-&lt;br /&gt;
| 25000000 || 1 || Cure&lt;br /&gt;
|-&lt;br /&gt;
| 2A000000 || 1 || Curse&lt;br /&gt;
|-&lt;br /&gt;
| 23000000 || 1 || Dispel&lt;br /&gt;
|-&lt;br /&gt;
| 35000000 || 1 || Haste&lt;br /&gt;
|-&lt;br /&gt;
| 0F000000 || 1 || Magic Arrow&lt;br /&gt;
|-&lt;br /&gt;
| 1F000000 || 1 || Protection from Fire&lt;br /&gt;
|-&lt;br /&gt;
| 20000000 || 1 || Protection from Water&lt;br /&gt;
|-&lt;br /&gt;
| 1B000000 || 1 || Shield&lt;br /&gt;
|-&lt;br /&gt;
| 36000000 || 1 || Slow&lt;br /&gt;
|-&lt;br /&gt;
| 2E000000 || 1 || Stone Skin&lt;br /&gt;
|-&lt;br /&gt;
| 00000000 || 1 || Summon Boat&lt;br /&gt;
|-&lt;br /&gt;
| 05000000 || 1 || View Air&lt;br /&gt;
|-&lt;br /&gt;
| 03000000 || 1 || View Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3E000000 || 2 || Blind&lt;br /&gt;
|-&lt;br /&gt;
| 18000000 || 2 || Death Ripple&lt;br /&gt;
|-&lt;br /&gt;
| 04000000 || 2 || Disguise&lt;br /&gt;
|-&lt;br /&gt;
| 2F000000 || 2 || Disrupting Ray&lt;br /&gt;
|-&lt;br /&gt;
| 0D000000 || 2 || Fire Wall&lt;br /&gt;
|-&lt;br /&gt;
| 33000000 || 2 || Fortune&lt;br /&gt;
|-&lt;br /&gt;
| 10000000 || 2 || Ice Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 11000000 || 2 || Lightning Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 2C000000 || 2 || Precision&lt;br /&gt;
|-&lt;br /&gt;
| 1E000000 || 2 || Protection from Air&lt;br /&gt;
|-&lt;br /&gt;
| 0A000000 || 2 || Quicksand&lt;br /&gt;
|-&lt;br /&gt;
| 40000000 || 2 || Remove Obstacle&lt;br /&gt;
|-&lt;br /&gt;
| 01000000 || 2 || Scuttle Boat&lt;br /&gt;
|-&lt;br /&gt;
| 02000000 || 2 || Visions&lt;br /&gt;
|-&lt;br /&gt;
| 2D000000 || 2 || Weakness&lt;br /&gt;
|-&lt;br /&gt;
| 1C000000 || 3 || Air Shield&lt;br /&gt;
|-&lt;br /&gt;
| 27000000 || 3 || Animate Dead&lt;br /&gt;
|-&lt;br /&gt;
| 22000000 || 3 || Anti-Magic&lt;br /&gt;
|-&lt;br /&gt;
| 19000000 || 3 || Destroy Undead&lt;br /&gt;
|-&lt;br /&gt;
| 0E000000 || 3 || Earthquake&lt;br /&gt;
|-&lt;br /&gt;
| 15000000 || 3 || Fireball&lt;br /&gt;
|-&lt;br /&gt;
| 0C000000 || 3 || Force Field&lt;br /&gt;
|-&lt;br /&gt;
| 3D000000 || 3 || Forgetfulness&lt;br /&gt;
|-&lt;br /&gt;
| 14000000 || 3 || Frost Ring&lt;br /&gt;
|-&lt;br /&gt;
| 3C000000 || 3 || Hypnotize&lt;br /&gt;
|-&lt;br /&gt;
| 0B000000 || 3 || Land Mine&lt;br /&gt;
|-&lt;br /&gt;
| 31000000 || 3 || Mirth&lt;br /&gt;
|-&lt;br /&gt;
| 34000000 || 3 || Misfortune&lt;br /&gt;
|-&lt;br /&gt;
| 21000000 || 3 || Protection from Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3F000000 || 3 || Teleport&lt;br /&gt;
|-&lt;br /&gt;
| 1A000000 || 4 || Armageddon&lt;br /&gt;
|-&lt;br /&gt;
| 3B000000 || 4 || Berserk&lt;br /&gt;
|-&lt;br /&gt;
| 13000000 || 4 || Chain Lightning&lt;br /&gt;
|-&lt;br /&gt;
| 41000000 || 4 || Clone&lt;br /&gt;
|-&lt;br /&gt;
| 3A000000 || 4 || Counterstrike&lt;br /&gt;
|-&lt;br /&gt;
| 1D000000 || 4 || Fire Shield&lt;br /&gt;
|-&lt;br /&gt;
| 38000000 || 4 || Frenzy&lt;br /&gt;
|-&lt;br /&gt;
| 16000000 || 4 || Inferno&lt;br /&gt;
|-&lt;br /&gt;
| 17000000 || 4 || Meteor Shower&lt;br /&gt;
|-&lt;br /&gt;
| 30000000 || 4 || Prayer&lt;br /&gt;
|-&lt;br /&gt;
| 26000000 || 4 || Resurrection&lt;br /&gt;
|-&lt;br /&gt;
| 37000000 || 4 || Slayer&lt;br /&gt;
|-&lt;br /&gt;
| 32000000 || 4 || Sorrow&lt;br /&gt;
|-&lt;br /&gt;
| 09000000 || 4 || Town Portal&lt;br /&gt;
|-&lt;br /&gt;
| 07000000 || 4 || Water Walk&lt;br /&gt;
|-&lt;br /&gt;
| 08000000 || 5 || Dimension Door&lt;br /&gt;
|-&lt;br /&gt;
| 06000000 || 5 || Fly&lt;br /&gt;
|-&lt;br /&gt;
| 12000000 || 5 || Implosion&lt;br /&gt;
|-&lt;br /&gt;
| 24000000 || 5 || Magic Mirror&lt;br /&gt;
|-&lt;br /&gt;
| 28000000 || 5 || Sacrifice&lt;br /&gt;
|-&lt;br /&gt;
| 45000000 || 5 || Summon Air Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 43000000 || 5 || Summon Earth Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 42000000 || 5 || Summon Fire Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 44000000 || 5 || Summon Water Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 39000000 || 5 || Titan&#039;s Lightning Bolt&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144343</id>
		<title>Hex Editing - Guide</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144343"/>
		<updated>2024-11-28T04:29:52Z</updated>

		<summary type="html">&lt;p&gt;Deus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{wip}}&lt;br /&gt;
&lt;br /&gt;
The following article describes some basics of hex edition. Offsets (and code itself in some locations) may vary based on game version. &lt;br /&gt;
&lt;br /&gt;
Heroes of Might and Magic III is coded in Assembly x86. Each byte (a set of 2 hexadecimal characters) corresponds to either a function, or a value for an already determined function. The only exception is byte 0x90, which is non-coding and may be used to f.e. fill empty space. &lt;br /&gt;
&lt;br /&gt;
Upper majority of creature stats, abilities, etc. is coded within the *.exe. While it may not be readable or understandable to a layman, in short time one can comprehend a lot of the code and find reason and rhyme in it (or at least, parts of it). &lt;br /&gt;
&lt;br /&gt;
To open (and edit) the *.exe files, one needs a hex editor, f.e. [https://sourceforge.net/projects/frhed/ frhed] or another similar software. I recommend [https://github.com/WerWolv/ImHex ImHex], as it comes with a handy disassembler function built in, as well as a base converter, and similar useful tools.  &lt;br /&gt;
&lt;br /&gt;
Some data is located with the *.lod files. To open them, you need to use [[Tools#MMArchive|MMArchive]]. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Majority of HotA {{wh}} additions are not directly in the h3hota.exe (or h3hota HD.exe), but instead in Hota.dat (and partly in HotA.dll). &lt;br /&gt;
&lt;br /&gt;
=== Numbers ===&lt;br /&gt;
All (or almost all) numbers are written in Little Endian - the bytes are placed in reverse order. As an example, 0xA624C (0x before a number signifies it&#039;s hexadecimal) in Little Endian is written as 4C 62 0A 00. Note, that the system recognizes that a number is negative based on the fact that it&#039;s greater than half the number range: greater than 0x80 for a single byte, and greater than 0x80000000 for a 4-byte value. &lt;br /&gt;
&lt;br /&gt;
Some numbers use a IEE-754 coding. It is recommended to use a calculator for such values, such as the one available on [https://www.save-editor.com/tools/converter_ieee_754.html save-editor.com]. &lt;br /&gt;
&lt;br /&gt;
Keep in mind that most (but, surprisingly, not all) lists start at 0, not at 1, so the first element is element 0 and not element 1.&lt;br /&gt;
&lt;br /&gt;
QWORD and DWORD pointers are Little Endian representations of an address within the *.exe file, with 0x400000 added to them because of the way the game reads the code. Therefore if you want the DWORD pointer to find 0x27e484, you write it as 84 e4 67 00. DWORDs use IEE-754, while QWORDs use an 8-byte double-precision IEE-754 value. &lt;br /&gt;
&lt;br /&gt;
Values followed by zeroes in the same block are 4-byte numbers - this essentially increases their available number range from (in decimal) 0-127 to 0-2147483647. &lt;br /&gt;
&lt;br /&gt;
== Heroes ==&lt;br /&gt;
Heroes are very easy to edit. Hero data is stored in two sets, one containing general hero data and the other containing only hero specialties. Heroes are generally ordered by their faction (Castle, Rampart, Tower, etc.) and then their class (might or magic). Following standard heroes, are all campaign heroes. &lt;br /&gt;
&lt;br /&gt;
=== Hero Data ===&lt;br /&gt;
Hero data is written as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00,&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt; = Gender: 00 is male, 01 is female.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt; = [[Hero race|Race]]. These are listed alphabetically, from Demon to Vampire. This has no in-game effect or visibility and the extensions preferred to default everyone to human, except [[Gelu]] who gets to be an elf.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt; = [[Hero class|Class]]. Classes go in order of factions, and within a faction the might class is listed first. Therefore 00 = Knight, 01 = Cleric, 02 = Ranger, 03 = Druid, etc. Note, that HotA classes essentially &amp;quot;follow&amp;quot; this encoding. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt; = First skill ([[Reference IDs|ref. ID]]).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt; = First skill&#039;s proficiency level (00 = Basic, * 01 = Advanced, 02 = Expert).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt; = Second skill (ref. ID). If there is no second skill, instead, FFFFFFFF is used, replacing ST and the zeroes following it. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt; = Second skill level. If there is no second skill, 00 is used (Basic). &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt; = Spell Book. 00 = absent, 01 = present. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt; = Spell ([[Spell Ref. ID|ref. ID]]). If no spell is present, FFFFFFFF is used instead. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt; = Starting army unit reference IDs. &lt;br /&gt;
* PS = Small Portrait DWORD pointer, which leads to plain text name of the portrait in the H3bitmap.lod.  &lt;br /&gt;
* PL = Large Portrait, same as above. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0&amp;lt;/span&amp;gt; = allowed in RoE maps by default. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS&amp;lt;/span&amp;gt; = Present by default in all non-RoE maps. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; = Campaign-only. 00 = false, 01 = true.&lt;br /&gt;
&lt;br /&gt;
=== Hero Specialties ===&lt;br /&gt;
Hero specialties are written one by one in the same order as heroes appear in, starting from 0x00278420. &lt;br /&gt;
&lt;br /&gt;
The specialties look as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt; - Specialty type. The following specialty types exist: &lt;br /&gt;
* 00 = Skill specialty (+5% skill effect per level)&lt;br /&gt;
* 01 = Basic Unit specialty (+1 speed, +1 Attack and Defense every &amp;lt;unit level&amp;gt; levels)&lt;br /&gt;
* 02 = Resource (+1 gems per day, etc.)&lt;br /&gt;
* 03 = Spell (+3% efficiency per level for most spells, sometimes special bonuses instead)&lt;br /&gt;
* 04 = Static Unit specialty (static bonus to attack, defense, damage, speed, or any combination of them), f.e. Xeron, Kalt, Haart Lich, etc. &lt;br /&gt;
* 05 = Speed (Sir Mullich only)&lt;br /&gt;
* 06 = Unit Upgrade specialty (Gelu, Dracon, Bidley, etc.)&lt;br /&gt;
* 07 = Dragon Specialty (Mutare, Mutare Drake)&lt;br /&gt;
* 08 = Frederick&#039;s Automaton Explosion specialty. &lt;br /&gt;
&lt;br /&gt;
Note, that setting the first byte (TT000000) to FFFFFFFF will ensure the hero has no specialty. This is only used for Adrienne (yes, she &#039;&#039;technically&#039;&#039; has no hero specialty). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt; = Reference ID of the specialized in Skill,  Unit, Resource or Spell. (Not needed for Dragon and Speed specialties, where it is 00 and an unnecessary, unused 02, respectively). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; = Attack bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt; = Defense bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt; = Damage bonus for Static Unit specialists (and probably Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; = Second unit (ref. ID) that can be upgraded (only used by Unit Upgrade specialists; otherwise left as 00. Note, that using the same unit twice for Unit Upgrade specialty essentially removes second unit from being upgradable; meanwhile using 00 sets the ID to Pikemen.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt; = Resulting unit ref. ID from the upgrade (only for Unit Upgrade specialists). &lt;br /&gt;
&lt;br /&gt;
Note, that using a Unit Upgrade specialist, reference ID of unupgraded creatures ought to be used. F.e., Gelu references Archers and Wood Elves, but code naturally allows also for their upgrades to be improved with his specialty. This does not occur the other way around; specifying ID or U2 as an upgraded creature, will make the upgrade impossible for unupgraded creatures. &lt;br /&gt;
&lt;br /&gt;
Note, that many &amp;quot;possible&amp;quot; specialties don&#039;t exist and simply won&#039;t do anything; examples include Tactics specialty, Teleport specialty, etc.&lt;br /&gt;
&lt;br /&gt;
=== Editing HotA Heroes ===&lt;br /&gt;
Hota heroes are coded in the HotA.dat, in the following order: (names written in quotes are coded in plain text)&lt;br /&gt;
&lt;br /&gt;
07 000000 &amp;quot;hero&amp;lt;ref_id&amp;gt;&amp;quot; 12 000000 &amp;quot;Heroes\hero_&amp;lt;ref_id&amp;gt;.str&amp;quot; FACTION &amp;quot;#large_portrait_file_name.pcx&amp;quot; 0c000000 &amp;quot;#small_portrait_file_name.pcx&amp;quot; XX 000000 &amp;quot;Specialty_Name&amp;quot; YY 000000 &amp;quot;Specialty Bonus: Object&amp;quot; ZZ000000 &amp;quot;{Full Object}&amp;quot; 0d 0a 0d 0a (number of 0a 0d repetitions may differ) &amp;quot;specialty_description&amp;quot; PP000000 &amp;quot;HeroName&amp;quot; QQQQQQQQ &amp;quot;Biography&amp;quot; 00000000 01 5c 0000 (number of zeroes may vary) GG000000 RR000000 HH000000 SO000000 OL000000 ST000000 TL000000 SB000000 SP000000 U1000000 U2000000 U3000000 PS000000 PL000000 R0 AS C0 00 00000000 00000000 1m000000 1M000000 2m000000 2M000000 3m000000 3M000000 08000000 I8000000 TT000000 ID000000 AA000000 DD000000 DM000000 U4000000 U5000000, where:&lt;br /&gt;
&lt;br /&gt;
* FACTION = 09 000000 00000000 0b 000000 for Cove heroes and 09 000000 00000000 00000000 07 000000 for Factory heroes,&lt;br /&gt;
* #large_portrait_file_name.pcx, #small_portrait_file_name.pcx: # and the appropriate file name, f.e. #HPLP06.pcx  &lt;br /&gt;
* XX = {{unk}}&lt;br /&gt;
* Specialty_Name is f.e. &amp;quot;Sea Dogs&amp;quot; or &amp;quot;Nix&amp;quot;. &lt;br /&gt;
* YY = {{unk}}&lt;br /&gt;
* Specialty Bonus: Object refers to the following types of text: &amp;quot;Spell Bonus: Air Shield&amp;quot;, &amp;quot;Creature Bonus: Sea Dogs&amp;quot;, etc. &lt;br /&gt;
* ZZ = {{unk}}&lt;br /&gt;
* {Full Object} is a text in curly parentheses {} stating again the specialty, f.e. &amp;quot;{Estates}&amp;quot;, or &amp;quot;{Pirates, Corsairs and Sea Dogs}&amp;quot;. &lt;br /&gt;
* specialty_description: Plain text description. &lt;br /&gt;
* PP = Hero&#039;s name&#039;s length. &lt;br /&gt;
* QQQQQQQQ = {{unk}}, seems to be some sort of an ID as it seems to be unique for each hero; it is not, however, the reference ID. All QQ values are around 300 (dec). &lt;br /&gt;
* 1m = minimum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 1M = maximum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 2m = minimum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 2M = maximum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 3m = minimum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* 3M = maximum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* I8 = reference ID + 8 for heroes before ref ID 178 and reference ID + 7 for heroes after ref ID 178 (essentially, 0xb9 is skipped)&lt;br /&gt;
&lt;br /&gt;
Heroes in HotA.dat start at 0x23dd and end at 0x9886. Note, that for editing text itself it&#039;s best to use programs such as [https://github.com/sake12/HotA-editor/releases HotA Editor], instead of a direct hex-editing. &lt;br /&gt;
&lt;br /&gt;
=== Altering Hero specialties ===&lt;br /&gt;
&lt;br /&gt;
==== 00 - Skill Specialty ====&lt;br /&gt;
The code for skill specialties works as follows: &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; D805 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; D8 4D FC&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; is a DWORD pointer to a 5% value (in IEEE-754), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; is a DWORD pointer to a value of 1 (again, in IEEE-754)&lt;br /&gt;
&lt;br /&gt;
===== How it works ======&lt;br /&gt;
The number of levels is multiplied by the XXXXXXXX DWORD pointer, added to the YYYYYYYY DWORD pointer and then the skill bonus is multiplied by it (D8 4D FC). &lt;br /&gt;
&lt;br /&gt;
If we want to change the % gain per level, we only need to change the XX value. If we want to instead make the bonus additive (say x% per level, regardless of how much skill itself adds), we can replace the D805YYYYYYYY with 909090909090 (NOP) and replace the D8 4D FC with D8 45 FC. &lt;br /&gt;
&lt;br /&gt;
Therefore it is possible to have a different bonus for one skill than another. &lt;br /&gt;
&lt;br /&gt;
===== Offsets =====&lt;br /&gt;
The offsets for each skill specialty bonus are as follows: &lt;br /&gt;
: Archery - 0x0E4420&lt;br /&gt;
: Armorer - 0x0E45C9&lt;br /&gt;
: Diplomacy - 0x0E483C&lt;br /&gt;
: Eagle Eye - 0x0E46E0&lt;br /&gt;
: Estates - 0x0E464F&lt;br /&gt;
: First Aid - 0x0E4BD9&lt;br /&gt;
: Intelligence - 0x0E4B69&lt;br /&gt;
: Leadership - 0x0E3C81&lt;br /&gt;
: Learning - 0x0E4AF9&lt;br /&gt;
: Logistics - 0x0E4F1E&lt;br /&gt;
: Luck - 0x0E3A2B&lt;br /&gt;
: Mysticism - 0x0E41FE&lt;br /&gt;
: Necromancy - 0x0E3F92&lt;br /&gt;
: Offense - 0x0E4569&lt;br /&gt;
: Resistance - 0x0E499C&lt;br /&gt;
: Scouting - 0x0E432E&lt;br /&gt;
: Sorcery - 0x0E5B61&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
Specialties for integer-bonuses (Luck, Logistics, Scouting) only have their effect when a full integer is gained from their % bonus. &lt;br /&gt;
&lt;br /&gt;
Diplomacy specialty only affects surrender costs. &lt;br /&gt;
&lt;br /&gt;
Learning specialty is fully over-writen by the Hota.dll. &lt;br /&gt;
&lt;br /&gt;
==== 01 - Unit Specialty ====&lt;br /&gt;
The scaling factor for a unit specialty is a DWORD pointing to a 5% value (in IEEE-754), located at 0x0e6548. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
Ballista and Cannon specialty are Unit specialties. &lt;br /&gt;
&lt;br /&gt;
==== 02 - Resource Specialty ====&lt;br /&gt;
The amount of resources obtained from a gold specialty is saved at 0x0E4681 (as 350). &lt;br /&gt;
&lt;br /&gt;
The code for other resource specialties is possible to edit, but it checks for each resource together and then adds 1 to their growth (therefore its only possible to make all resource specialists increase resource gain by 2, unless a complete re-write of the function is performed). &lt;br /&gt;
&lt;br /&gt;
==== 03 - Spell Specialists ====&lt;br /&gt;
===== Spell specialty types =====&lt;br /&gt;
Spell specialty type table starts at 0x0e6358 (with Fire Wall specialty). Each consecutive byte is then the next spell by spell ID (Firewall, Earthquake, Magic Arrow, etc.) up to Slayer. Each spell specialty can take 6 types: &lt;br /&gt;
: 00 - +100% damage (Luna). Note that Hota.dll overwrites this +100% damage with a much more sensible 25%. &lt;br /&gt;
: 01 - +50% damage (Ciele). &lt;br /&gt;
: 02 - Tier bonus A (+3/+3/+2/+2/+1/+1/+0), such as Weakness specialty or Haste specialty. &lt;br /&gt;
: 03 - Static bonus +2 (Aenain)&lt;br /&gt;
: 04 - This one is only used by Fortune (Daremyth, Melodia). In contrary to what BTB claims, it sets the value of the spells effect to 3, regardless of spell&#039;s level. &lt;br /&gt;
: 05 - Tier bonus B (+4/+3/+2/+1/+0/+0/+0), only used by Coronius as far as I know. &lt;br /&gt;
: 06 - Scaling bonus. &lt;br /&gt;
&lt;br /&gt;
If a spell does not belong to the spell table, the scaling bonus is applied (for example this applies to the Hypnotize specialist, Astral). &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;But what if we want to change the specialty type for a spell like Hypnotize? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We can extend the table by changing 0x0e6296 (equal to 0x2a by default) to a different value, which corresponds to the number of spells in the table -1. If we extend the table, the next specialties will be those for the next spells by spell ID. We have a total of 13 bytes of nop (90), so the last spell specialty we can code this way is Summon Air Elemental. Remember to update all specialties created this way! You shouldn&#039;t just leave the nops (90) in the middle of the table!&lt;br /&gt;
&lt;br /&gt;
&amp;quot;But what about Victoria, the Land Mine specialist?&amp;quot;, you may ask. Well, I&#039;m here to give answers: &lt;br /&gt;
&lt;br /&gt;
The command &#039;&#039;&#039;lea eax, [esi-0Dh]&#039;&#039;&#039; located at 0x0e6291 finds the spell ID of firewall (0d) and chooses it as the first spell on the list of specialties &#039;&#039;(remember? The one that starts at 0x0e6358?)&#039;&#039;. By changing it to &#039;&#039;&#039;lea eax, [esi-0Bh]&#039;&#039;&#039;, we can change the first spell ID to 0x0B, or Land Mine. &#039;&#039;Notice, that this reduces the last spell specialty to Summon Earth Elemental, but I doubt anyone will miss the Summon Water Elemental and Summon Air Elemental specialties.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Next, we have to increase the number of spells in the list by 2 (located at 0x0e6296), and then move the entire spell specialty table, 2 bytes each, because now it starts at 0x0e6358 with Land Mine (and still follows by spell ID). &lt;br /&gt;
&lt;br /&gt;
&amp;quot;And what about Eovacius? And Zilare?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Haven&#039;t looked at them yet but I believe they may be hard-coded.&lt;br /&gt;
&lt;br /&gt;
The specialty types can be changed by altering their commands. Each specialty type (00, 01, and so on) have a DWORD pointer to their appropriate code located in a 28-byte long table starting at 0x0e633c.&lt;br /&gt;
&lt;br /&gt;
===== Changing Tier bonuses =====&lt;br /&gt;
Let&#039;s say we want to make Olema&#039;s Weakness specialty remotely usable, but we still want it to be a tier-based specialty. We can change the bonuses the spell provides for each unit tier in a 28-byte long table that starts at 0x23eaa8. Each 4 bytes corresponds to the next unit level. &lt;br /&gt;
&lt;br /&gt;
A similar table for Coronius&#039; specialty type starts at 0x23eac4 (immediately afterwards) and works the same way. &lt;br /&gt;
&lt;br /&gt;
===== Changing the static bonus =====&lt;br /&gt;
At 0x0e62e6 the value 0x02 determines the static bonus (such as the one Disrupting Ray specialists get). &lt;br /&gt;
&lt;br /&gt;
===== Changing the scaling bonus =====&lt;br /&gt;
At 0x0e631f the DWORD pointer finds an IEEE-754 double precision value for 3% (base game). Replacing this pointer with another one finds a different % bonus. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want the scaling specialties to divide their bonus by unit level, replace f7 f9 at 0xe630b with 90 90 (nop-ing out the division). &lt;br /&gt;
&lt;br /&gt;
===== Specialties that don&#039;t work ===== &lt;br /&gt;
Several specialties don&#039;t work because no specialty type can increase their bonus: &lt;br /&gt;
* Curse&lt;br /&gt;
* Anti-Magic&lt;br /&gt;
* Dispel&lt;br /&gt;
* Slow {{unk}}, but it would probably be way too strong anyway;&lt;br /&gt;
* Berserk&lt;br /&gt;
* Blind&lt;br /&gt;
* Teleport&lt;br /&gt;
* Remove Obstacle.&lt;br /&gt;
&lt;br /&gt;
==== 04 - Unit (static) ====&lt;br /&gt;
Only Xeron is specified to add speed thanks to his static unit specialty. This is (most likely) saved at the following address: 0x4b1b3 {{unk}}. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
==== 05 - Speed specialty ====&lt;br /&gt;
Sir Mullich&#039;s unit specialty amount (0x02) is located at 0x0E6669. &lt;br /&gt;
&lt;br /&gt;
==== 06 - Unit Upgrade specialty ====&lt;br /&gt;
These specialties calculate the upgrade cost automatically, with the same function that calculates upgrade costs in all other cases. If &amp;quot;unupgraded&amp;quot; unit is more expensive than the upgraded one, the message about necessary costs wil appear, but no cost will be stated and the conversion will be free. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty. &lt;br /&gt;
&lt;br /&gt;
==== 07 - Dragon specialty ====&lt;br /&gt;
I believe Mutare&#039;s bonus is specified within her specialty block.&lt;br /&gt;
&lt;br /&gt;
== Editing HotA Creatures ==&lt;br /&gt;
While most statistics of base game creatures can be edited rather effortlessly (using MMArchive to unpack H3bitmap.lod or HotA_lng.lod), HotA creatures cannot be edited this way. Their data is stored at the beginning of HotA.dat, as follows:&lt;br /&gt;
&lt;br /&gt;
08 000000 &amp;quot;most&amp;lt;ref_id&amp;gt;&amp;quot; 17 000000 &amp;quot;Monsters\monster&amp;lt;ref_id&amp;gt;.str&amp;quot; 09 000000 00000000 04 000000 &amp;quot;name_abbreviation&amp;quot; KK000000 &amp;quot;&amp;lt;animation_filename&amp;gt;.def&amp;quot; L1000000 &amp;quot;Monster_name (singular)&amp;quot; L2000000  &amp;quot;Monster name (plural)&amp;quot; 00000000 00000000 00000000 00000000 01 74 0000 TT 000000 UL 000000 0c556700  00556700 F1 F2 F3 F4 80da9e03 60da9e03 30da9e03 WC000000 MC000000 OC000000 SC000000 CC000000 GeC000000 GC000000 FV000000 AV000000 GV000000 HG000000 HP000000 SP000000 AT000000 DF000000 DmgL000000 DmgH000000 SH000000 SN000000 OO000000 mm000000 MM000000 RR000000 VV000000 WW000000 XX000000 YY000000 ZZ000000 &lt;br /&gt;
&lt;br /&gt;
* monst&amp;lt;ref_id&amp;gt; is monster&#039;s reference id in decimal, f.e. monst154&lt;br /&gt;
* name_abbreviation is a 4 letter abbreviation of the monster name. Never appears anywhere ever again. Note that not all abbreviations are just beginning or consonants, f.e. Haspids are written as &amp;quot;aspi&amp;quot; and nix as &amp;quot;nixx&amp;quot;. This abbreviation doesn&#039;t seem to have to be unique, as Sea Serpent and Haspids have the same 4 letters here.  It is worth pointing out, that base game creatures also use 4-letter abbreviations in a similar table located in h3hota HD.exe around 0x275500&lt;br /&gt;
* KK is the length of the animation_filename + 4 (and therefore the length of the entire &amp;quot;animation_filename.def&amp;quot;&lt;br /&gt;
* &amp;lt;animation_filename&amp;gt;.def  is the file name of the set of animations, saved as .def in HotA.lod or HotA.lod. &lt;br /&gt;
* L1 is the length of the monster name (singular)&lt;br /&gt;
* L2 is the length of the monster name (plural)&lt;br /&gt;
* 0x74 codes as &amp;quot;t&amp;quot; in ASCII&lt;br /&gt;
* TT is the reference id of the town the monster belongs to. 0x09 for Cove, 0x0a for Factory, FFFFFFFF for Neutrals and I bet if HotA ever releases a new town, it will have 0x0b as its faction code. &lt;br /&gt;
* UL is the unit level -1 (sidenote: this is an example of numbers being used in a list with a zero-based numbering). FFFFFFFF for monsters with no level (f.e. Citadel / Castle Towers)&lt;br /&gt;
* 0c556700 (and 00556700) point to a similar table with creature sprite, text and other references in h3hota HD.exe and is probably used to insert the HotA.dat&#039;s creature table into this part of the exe. &lt;br /&gt;
* F1 is the first creature ability flag&lt;br /&gt;
** 01 - 2-hex unit&lt;br /&gt;
** 02 - Flying&lt;br /&gt;
** 04 - Ranged Attack&lt;br /&gt;
** 08 - Fire breath&lt;br /&gt;
** 10 - Living&lt;br /&gt;
** 20 - Can attack city walls (cyclops, cannon)&lt;br /&gt;
** 40 - War machine&lt;br /&gt;
** 80 - Slayer (Basic)&lt;br /&gt;
* F2 is the second creature ability flag&lt;br /&gt;
** 01 - Slayer (advanced)&lt;br /&gt;
** 02 - Slayer (expert)&lt;br /&gt;
** 04 - Mind immunity&lt;br /&gt;
** 08 - shoots beam (?)&lt;br /&gt;
** 10 - No melee penalty&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - Fire immunity&lt;br /&gt;
** 80 - Attacks twice&lt;br /&gt;
* F3 is the third creature ability flag&lt;br /&gt;
** 01 - No enemy retaliation&lt;br /&gt;
** 02 - Morale has no effect&lt;br /&gt;
** 04 - Undead&lt;br /&gt;
** 08 - AOE melee attack (Hydra)&lt;br /&gt;
** 10 - AOE ranged attack (Magog), AI flag only. &lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - {{unk}}&lt;br /&gt;
* F4 is the fourth creature ability flag&lt;br /&gt;
** 01 - {{unk}}&lt;br /&gt;
** 02 - {{unk}}&lt;br /&gt;
** 04 - {{unk}}&lt;br /&gt;
** 08 - {{unk}}&lt;br /&gt;
** 10 - {{unk}}&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - Dragon (for the sake of Mutare&#039;s specialty and vial of dragon blood)&lt;br /&gt;
* 80da9e03, 60da9e03, 30da9e03 - {{unk}}&lt;br /&gt;
* WC is the cost of wood necessary to recruit the creature&lt;br /&gt;
* MC is the cost of mercury necessary to recruit the creature&lt;br /&gt;
* OC is the cost of ore necessary to recruit the creature&lt;br /&gt;
* SC is the cost of sulfur necessary to recruit the creature&lt;br /&gt;
* CC is the cost of crystals necessary to recruit the creature&lt;br /&gt;
* GeC is the cost of gems necessary to recruit the creature&lt;br /&gt;
* GC is the cost of gold necessary to recruit the creature. Note that all aforementioned cost values have 4 bytes to play with, so the maximum unit cost is 2147483647 gold (or of any resource). &lt;br /&gt;
* FV is the Fight Value&lt;br /&gt;
* AV is the AI Value&lt;br /&gt;
* GV is the Growth&lt;br /&gt;
* HG is the Horde Growth &lt;br /&gt;
* HP is, surprisingly, hit points&lt;br /&gt;
* SP is speed&lt;br /&gt;
* AT is attack&lt;br /&gt;
* DF is defense&lt;br /&gt;
* DmgL is low end of the damage range&lt;br /&gt;
* DmgH is the high end of the damage range&lt;br /&gt;
* SH is the number of shots per battle&lt;br /&gt;
* SN is the number of spell casts per battle&lt;br /&gt;
* mm - minimum number of units when randomly spawned by the map generator &lt;br /&gt;
* MM - maximum number of units when randomly spawned by the map generator. &lt;br /&gt;
QQ, RR, VV, WW, XX, YY, ZZ - {{unk}}. Sometimes they take up 28 (!) bytes (such as for Ayssids), and sometimes don&#039;t appear at all. I suspect they reference some sort of abilities the creatures have, or their descriptions. &lt;br /&gt;
&lt;br /&gt;
When using custom functions or editing original code, note that all HotA (as well as some SoD monsters) have reference ID above 80, and therefore cannot be checked for using a simple check command, such as 83 FA ID. Instead, you have to use a longer command that accepts a 4-byte value (for EDX that would be 81 FA ID000000).&lt;br /&gt;
&lt;br /&gt;
== Editing Creature Abilities ==&lt;br /&gt;
=== Magic Channel ([[Familiars]]) === &lt;br /&gt;
Magic channel&#039;s applicable unit ID is defined at 0x1a24f6. The game uses a frankly ridiculous method of dividing by 5 (let&#039;s just say that it purposefully calls and uses a value 1717986919 to calculate 20%). Btb2 analyzed it and found a way to alter the percentage to 50% or 100% (by ignoring the horrible function before it and simply taking the mana value or moving it by 1 byte). Replace: &lt;br /&gt;
&lt;br /&gt;
* 0x1A24B4  -&amp;gt;  8b 55 98 d1 ea    (for 50%, since d1 ea is a single bitwise shift to the right&lt;br /&gt;
* 0x1A24b4  -&amp;gt;  8b 55 98 90 90    (no division).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the function. The following offset reads: &lt;br /&gt;
* 0x1A249F:  b8 *67666666* c7 45 1c 02000000 f7 e9 8b 4d 9c *d1 fa* 8b c2 c1 e8 1f 03 d0&lt;br /&gt;
&lt;br /&gt;
The b8 XXXXXXXX (bolded above) function calls a hexadecimal value (note that it&#039;s in Little Endian) and saves it. The code then uses &amp;quot;d1 fa&amp;quot; (emboldened above) to divide edx by 2 before it is further used. C1 E8 1F is simply a division by 2^31 of the value. Yes, that is why the rounding may be a bit off for Magic Channel. Now let&#039;s consider replacing: &lt;br /&gt;
* 67666666 with our custom value (for now let&#039;s imagine it&#039;s 56555555)&lt;br /&gt;
* d1 fa with 90 90 (two nop or non-coding functions, so we basically removed this part of the code)&lt;br /&gt;
&lt;br /&gt;
The result is... Division by 3. Now the Magic Channel grants 33% mana return. &lt;br /&gt;
&lt;br /&gt;
To obtain a different value, we need to replace XXXXXXXX with another number. This has to be (2^33 / D) +1, where D is our divisor (3 for 1/3, 5 for 1/5, etc.). The 2^33 is multiplied with the variable (mana cost), but is then divided by 2^31 and moves by two bits elsewhere to account for the differences. The number is greater than the quotient by 1, to avoid the rounding downwards removing 1 mana point incorrectly. Note, that XXXXXXXX cannot be equal to or greater than 00000080 (0x80000000), as then the value will be negative. &lt;br /&gt;
&lt;br /&gt;
The function also calls 0x1A2498 for the minimum mana value for which Magic Channel may apply. This is equal to the value of D (0x05 in base game, 0x03 in the example above). &lt;br /&gt;
&lt;br /&gt;
== Editing Buildings ==&lt;br /&gt;
Building names and descriptions (excluding HotA) are saved in BldgSpec.txt and BldgNeut.txt. Building requirements can be altered by changing their dependency tables. Address of each dependency table is located at: &lt;br /&gt;
* 0x0EB816 - Castle&lt;br /&gt;
* 0x0EB8B3 - Rampart&lt;br /&gt;
* 0x0EB971 - Tower&lt;br /&gt;
* 0x0EBA39 - Inferno&lt;br /&gt;
* 0x0EBA48 - Necropolis&lt;br /&gt;
* 0x0EBA5C - Dungeon&lt;br /&gt;
* 0x0EBA70 - Stronghold&lt;br /&gt;
* 0x0EBA84 - Fortress&lt;br /&gt;
* 0x0EBA98 - Conflux&lt;br /&gt;
&lt;br /&gt;
Note, that some building requirements are changed in HotA.dll. While it shouldn&#039;t be too difficult to determine their location in that file, (look for appropriate DWORDs in HotA.dll) for now these offsets are unknown. The requirement table for Cove and Factory may be coded differently and as far as I know, haven&#039;t been found yet. &lt;br /&gt;
&lt;br /&gt;
Building costs can be changed in Building.txt. &lt;br /&gt;
&lt;br /&gt;
=== HotA buildings ===&lt;br /&gt;
Building names and descriptions for HotA are saved in HotA.dat and can be edited as a text edit using f.e. the aforementioned HotA Editor. &lt;br /&gt;
&lt;br /&gt;
Building costs for HotA are saved in HotA.dat. The building names appear before the building costs. Each building cost contains of 28 bytes, each 4 bytes representing a 4-byte little endian number of cost for each resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Note, that some buildings have text and description, but no written cost (either replaced with 0s or simply not having any space devoted to them). An example is Mana Generator. For now it is not known how to edit the cost of these buildings (and therefore the cost of the Mana Generator remains a mystery).  &lt;br /&gt;
&lt;br /&gt;
=== Resource Silos ===&lt;br /&gt;
Resource Silo yield tables are located at 0x288F04. Each resource value is mentioned for each town, one by one, in 4-byte values (order of resources is Wood, Mercury, Ore, Sulphur, Crystal, Gems, Gold) with towns going in order. &lt;br /&gt;
&lt;br /&gt;
Cove&#039;s Resource Silo simply copies the one from the Dungeon, while Factory copies Rampart. &lt;br /&gt;
&lt;br /&gt;
The Resource Silo table is called for in exe a few times, but HotA.dll overwrites all (or most) of these calls at 0xd37ae and 0xd37ce.  As of 12:19, 19 September 2024 (UTC), it is not known how to alter the Resource Silo values for Cove and Factory. No specific offset or function have been identified.  {{unk}}. &lt;br /&gt;
&lt;br /&gt;
== Artifacts ==&lt;br /&gt;
All stats given by artifacts are written into a table at 0x23e758, 4 bytes for each artifact (Attack, Defense, Power, Knowledge). &lt;br /&gt;
&lt;br /&gt;
The artifact traits are specified in artraits.txt, while artifact pick-up events are defined in artevent.txt (both in Hota_lng.lod). &lt;br /&gt;
&lt;br /&gt;
Interference amount of the Plate of the Dying Light is specified as a IEE-754 floating point value at 0x1d40c8 in Hota.dll &lt;br /&gt;
&lt;br /&gt;
=== Combination Artifacts ===&lt;br /&gt;
Combination artifact&#039;s components are specified at a few functions, starting at 0x04c63d. For further reading see BTB2&#039;s guide (linked below, as External Link #3). Be aware! BTB2&#039;s guide is either wrong or outdated! His method of removing components seems to work correctly, however, most likely due to HotA putting their combination artifacts in HotA.dll to push them in between base game combination artifacts, or for another reason, &#039;&#039;his method of increasing the number of items does NOT work&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
However, not all is lost. There&#039;s 8 bytes of nop (90) commands starting at 0x4c8c8, and we can use them to add an extra item (to showcase it, I&#039;ll present a code for adding an extra item to the Ring of the Magi&#039;s requirements. This seems a safe method, since only a short push is used, and therefore I advise changes to 3-piece combination artifacts to simply copy this method and swap Ring of the Magi with their edited artifact). &lt;br /&gt;
:0x4c85b 6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID)  -&amp;gt; eb 6d (jump 109 bytes forward)&lt;br /&gt;
:0x4c8c8 90909090 90909090   -&amp;gt; eb 06..(skip following code)...6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID) 6a &#039;&#039;&#039;YY&#039;&#039;&#039; (2nd ref item ID).....eb 8d (jump backwards 115 bytes)&lt;br /&gt;
&lt;br /&gt;
Replace emboldened text with your appropriate artifact IDs. Remember to also update the number of components (in this example at 0x04C861). &lt;br /&gt;
&lt;br /&gt;
Note, that the method described above only works for a jump of 125 bytes or less. Gladly, there&#039;s a few other empty spaces that can be used for adding extra components: &lt;br /&gt;
* 0x4c25c (11 bytes of nop)&lt;br /&gt;
* 0x4c2d6 (10 bytes)&lt;br /&gt;
* 0x4c347 (9 bytes)&lt;br /&gt;
* 0x4c3c7 (9 bytes)&lt;br /&gt;
* 0x4c622 (14 bytes)&lt;br /&gt;
* 0x4c8c8 (8 bytes)&lt;br /&gt;
* 0x4ca15 (11 bytes)&lt;br /&gt;
* 0x4d008 (8 bytes)&lt;br /&gt;
&lt;br /&gt;
Simply use the available space within 125 bytes of the definition of any of the original components. If this can&#039;t be done, swap your artifact with another, which can be edited. &lt;br /&gt;
&lt;br /&gt;
Note, that if you&#039;re using HotA, it&#039;s much safer to just edit appropriate artifact reference IDs and add other appropriate components (or replace the resulting artifact) by editing Hota.dat (see: [https://heroes.thelazy.net/index.php?title=Hex_Editing_-_Guide/artsinfo0|HotA Artifacts - artsinfo0]&lt;br /&gt;
&lt;br /&gt;
=== Making new Combination Artifacts ===&lt;br /&gt;
&lt;br /&gt;
For now it is wholly unknown how to do it. HotA devs seem to now their way around it.{{unk}} See below. &lt;br /&gt;
&lt;br /&gt;
What might work is repeating a function identical to that of another artifact with different properties using some empty space. Requires further testing. &lt;br /&gt;
&lt;br /&gt;
=== HotA Artifacts ===&lt;br /&gt;
Hota&#039;s new artifacts are coded in the Hota.dat. To edit their properties, you need to edit their text (or use hexadecimal values for ASCII to match their text in hex editing). Artifacts are coded as follows: &lt;br /&gt;
&lt;br /&gt;
==== artsinfo0 ==== &lt;br /&gt;
This part of the file includes partial data on all HotA artifacts, written as follows: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;Artifact Name&lt;br /&gt;
:&amp;lt;ref_ID&amp;gt;&lt;br /&gt;
:X Y Z # Description:&lt;br /&gt;
:P Q R # Dif abl, S points&lt;br /&gt;
:-1&lt;br /&gt;
&lt;br /&gt;
Note, that the ref_ID above is written in decimal system. &lt;br /&gt;
&lt;br /&gt;
The X Y Z applies a buff to the artifact, seemingly by coding first the bonus type with X, amount with Y and optional specification with Z. &lt;br /&gt;
* 0 - Increase Attack / Defense&lt;br /&gt;
* 1 - Add Spell Power&lt;br /&gt;
* 2 - Add Knowledge&lt;br /&gt;
* 7 - Different Ability, Y = AI value {{unk}} (it&#039;s described as &amp;quot;points&amp;quot;)&lt;br /&gt;
* 8 - Movement artifact?&lt;br /&gt;
* 13 - Restrict spells; Y = 1 for Cloak of Silence, 4 for Ring of Oblivion&lt;br /&gt;
* 16 - Add daily resource growth, Y = amount, Z = resource type (0 = wood, 6 = gold)&lt;br /&gt;
* 24 - Enemy morale bonus&lt;br /&gt;
* 25 - Enemy luck bonus&lt;br /&gt;
&lt;br /&gt;
The P Q R are coded in the same way as above and refer to a second ability. &lt;br /&gt;
&lt;br /&gt;
However, the method above seems to suggest some artifacts have different bonuses than they actually possess: Ironfist of the Ogre doesn&#039;t increase either attack or defense; Trident of Dominion increases attack by 6, etc. &lt;br /&gt;
&lt;br /&gt;
This part of the file also includes definitions of all combo artifacts and their components. F.e. Diplomat&#039;s Cloak: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Diplomat&#039;s Cloak&lt;br /&gt;
:12 141 3 66 67 68&lt;br /&gt;
&lt;br /&gt;
* 12 is the number of the combination artifact (including SoD ones)&lt;br /&gt;
* 141 is the decimal reference ID of the Diplomat&#039;s Cloak&lt;br /&gt;
* 3 is the number of components&lt;br /&gt;
* 66 67 68 are the reference IDs of components (decimal)&lt;br /&gt;
&lt;br /&gt;
Note, that this can be used to effectively alter any base-game combination artifact! Simply add a line before these artifact definitions&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Sample Text&lt;br /&gt;
:N RIF C R+ R++ R+++ R++++,&lt;br /&gt;
&lt;br /&gt;
where N is the number of combination artifact (counting the way they&#039;re placed in the .exe code), RIF is the reference ID of the final artifact, R+, R++ and so on are the additional components. To showcase adding an extra requirement to the Ring of the Magi (since a similar concept was used above) and replacing the Ring of the Magi with the AB blade and requiring a Sword of Hellfire:&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Armageddon&#039;s Blade&lt;br /&gt;
:10 128 1 11&lt;br /&gt;
&lt;br /&gt;
(11 is the reference ID of the new item - Sword of Hellfire). &lt;br /&gt;
&lt;br /&gt;
Sadly, new combination artifacts can&#039;t simply be added this way.&lt;br /&gt;
&lt;br /&gt;
=== art&amp;lt;ref_ID&amp;gt; ===&lt;br /&gt;
art&amp;lt;ref_ID&amp;gt; entries in HotA.dat (as visible in the Hota.editor.exe) can be used to alter an artifact&#039;s name, adventure map event text, description, slot type and rarity class (treasure, minor, major, relic). Here is also the true artifact bonus data coded. Note that the Reference ID is in decimal. &lt;br /&gt;
&lt;br /&gt;
:gold_price &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; cost - (cost of 0 is used if an artifact cannot normally appear, f.e. if it&#039;s a Combination Artifact. &lt;br /&gt;
:slot &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; slot type (0 - none, 1 - head, 2 - shoulders, 3 - neck, 4 - right hand, 5 - left hand, 6 - torso, 7 - ring, 8 - feet, 9 - misc, 10 - ballista, 11 - ammo cart, 12 - first aid tent, 13 - catapult, 14 - spell book)&lt;br /&gt;
:class &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; type (1 - none, 2 - treasure, 4 - minor, 8 - major, 16 - relic)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; disabled as defaults (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; add new spells (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; attack bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; defense bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; spell power bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; knowledge bonus (_int8_)&lt;br /&gt;
&lt;br /&gt;
== Creature Banks ==&lt;br /&gt;
Creature bank definitions in h3hota HD.exe start at 0x2702A0. They are coded as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 FFFFFFFF 00000000 00000000 00000000, &lt;br /&gt;
&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;  and  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; are Unit IDs for guards ( &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2 U3 U4&amp;lt;/span&amp;gt; etc are optional). Note, that the 12 bytes of 00 do not appear after the last defined creature bank (Dragon Utopia). &lt;br /&gt;
&lt;br /&gt;
Afterwards, the reward creatures (and creatures only!) are defined as follows: &lt;br /&gt;
&lt;br /&gt;
FFFFFFFF &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R3&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt; is the reward creature for the first bank, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt; for the second, and so on.&lt;br /&gt;
&lt;br /&gt;
The order the banks appear in is as follows: &lt;br /&gt;
&lt;br /&gt;
#Cyclops Stockpile&lt;br /&gt;
#Dwarven Treasury&lt;br /&gt;
#Griffin Conservatory&lt;br /&gt;
#Imp Cache&lt;br /&gt;
#Medusa Stores&lt;br /&gt;
#Naga Bank&lt;br /&gt;
#Dragon Fly Hive&lt;br /&gt;
#Shipwreck&lt;br /&gt;
#Derelict Ship&lt;br /&gt;
#Crypt&lt;br /&gt;
#Dragon Utopia. &lt;br /&gt;
&lt;br /&gt;
Note, that after changing these values, you still have to edit the remaining bank data in CrBanks.txt. &lt;br /&gt;
&lt;br /&gt;
HotA banks, except for the Ancient Altar, are all defined within the Hota.dat file, as crbank21, 22, and so on. &lt;br /&gt;
&lt;br /&gt;
=== The Pyramid ===&lt;br /&gt;
The pyramid is defined separately:&lt;br /&gt;
&lt;br /&gt;
: 0xa3fa2:6a &#039;&#039;&#039;02&#039;&#039;&#039; 6a &#039;&#039;&#039;14&#039;&#039;&#039; 6a &#039;&#039;&#039;7d&#039;&#039;&#039; (52 8d4508 53 50) 6a &#039;&#039;&#039;74&#039;&#039;&#039;; &lt;br /&gt;
: 0xa3fb6: &#039;&#039;&#039;28&#039;&#039;&#039; 00 00 00&lt;br /&gt;
&lt;br /&gt;
Where: &lt;br /&gt;
* 02 is the number of stacks of Diamond Golems&lt;br /&gt;
* 14 is the number of Diamond Golems (in total)&lt;br /&gt;
* 7d is the unit ID of Diamond Golems, &lt;br /&gt;
* 74 is the unit ID of Gold Golems and&lt;br /&gt;
* 28 is the number of Gold Golems. &lt;br /&gt;
&lt;br /&gt;
BTB2 suggested replacing Diamond Golems with Mummies - this however, requires using a creature ID above 80, and therefore a long push (6B 8D000000 for mummies). However, to do that we would need to use some empty space. He suggested removing the -2 Luck on empty Pyramid subroutine. I decided to instead use some empty space I got from a different change, keeping the -2 Luck penalty. The result is as follows: &lt;br /&gt;
&lt;br /&gt;
: 0x0A3FA6 → ebdf (jumps to overwrite -2 luck on empty Pyramid), &lt;br /&gt;
: 0x0A3F82 → e9 89c10100 (jump to free space 0xc0110) &lt;br /&gt;
::::: 68 8d000000 (Mummies) &lt;br /&gt;
:::::EB 1A 90 90 (jump back to A3FA8), &lt;br /&gt;
: 0xc0110 (Free) → 8a 87 1b 01 00 00 04 fe 88 87 1b 01 00 00 (displaced code: -2 Luck on empty Pyramid), &lt;br /&gt;
: 0xc011d (Free) → E9 6b3efeff(jump to 0x0A3F8F (end of F8E))&lt;br /&gt;
&lt;br /&gt;
Note, that this method assumes you have empty space at 0xc0110 (by forcing rumors to always show rumors defined by the mapmaker). If you have empty space elsewhere, simply move the function, altering the jumps appropriately. &lt;br /&gt;
&lt;br /&gt;
= Editing h3hota_maped =&lt;br /&gt;
&lt;br /&gt;
All heroes are defined one by one in the h3hota_maped starting from 0x186800. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &#039;&#039;SB&#039;&#039; 000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00&lt;br /&gt;
&lt;br /&gt;
Note, that some HotA heroes use some data from HotA.dat&lt;br /&gt;
&lt;br /&gt;
= Game Mechanics =&lt;br /&gt;
== Starting Resources ==&lt;br /&gt;
Table with the starting resources starts at 0x278170. Each 4 bytes are the next resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Each 28 bytes is the next difficulty - Easy, Normal, Expert, etc. At 0x2781FC the AI resources start and follow the same order of resources and difficulties. The whole table thus takes 280 bytes. &lt;br /&gt;
&lt;br /&gt;
== Starting Bonuses ==&lt;br /&gt;
=== Gold Bonus ===&lt;br /&gt;
The starting gold bonus chooses a random value between the value written at 0x0C0002 and the value at 0x0BFFFD, and then multiplies it by 100. To change the multiplication, simply edit 0x0C000B (multiplying by 25) and 0x0C0016 (moving the value by 2 bits, so multiplying it by 4). &lt;br /&gt;
&lt;br /&gt;
=== Resource Bonuses ===&lt;br /&gt;
The starting resource bonuses use DWORD pointers to find their appropriate code to run:&lt;br /&gt;
* Wood and Ore - AF FF 4B 00 &lt;br /&gt;
* Crystals - D6 FF 4B 00 &lt;br /&gt;
* Gems - E1 FF 4B 00 &lt;br /&gt;
* Mercury - EC FF 4B 00 &lt;br /&gt;
* Sulfur - F4 FF 4B 00 &lt;br /&gt;
&lt;br /&gt;
These DWORD pointers are located at the following addresses: &lt;br /&gt;
* Castle - 0x0C01B4 &lt;br /&gt;
* Rampart - 0x0C01B8 &lt;br /&gt;
* Tower - 0x0C01BC &lt;br /&gt;
* Inferno - 0x0C01C0 &lt;br /&gt;
* Necropolis - 0x0C01C4 &lt;br /&gt;
* Dungeon - 0x0C01C8 &lt;br /&gt;
* Stronghold - 0x0C01CC &lt;br /&gt;
* Fortress - 0x0C01D0 &lt;br /&gt;
* Conflux - 0x0C01D4 &lt;br /&gt;
&lt;br /&gt;
Note, that you need to edit ScnrStar.def to reflect any altered resources. &lt;br /&gt;
&lt;br /&gt;
The amount for each rare resource is most likely determined by the function at 0xc009e: {{unk}}&lt;br /&gt;
: minimum: c745f0 33333333 &#039;&#039;(mov [ebp-0x10], 0x33333333)&#039;&#039; c745f0 3333EB3F  &#039;&#039;(mov [ebp-0x1c], 0x3feb3333)&#039;&#039; &lt;br /&gt;
: break between the two: eb 0e &#039;&#039;(jmp 0x0e)&#039;&#039; &lt;br /&gt;
: maximum: c745f0 66666666 &#039;&#039;(mov [ebp-0x10], 0x66666666)&#039;&#039; c745f0 6666E63F  &#039;&#039;(mov [ebp-0x10], 0x3FE66666)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The amount of wood and ore are most likely specified at 0xbffaf: BA 0a000000 &#039;&#039;(mov edx, 0x0a)&#039;&#039; B9 05000000 &#039;&#039;(mov ecx, 0x05)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
== Movement point reminder ==&lt;br /&gt;
The movement point reminder is located at 0x9c91. It checks if movement points are 0 (using a 2-byte &#039;&#039;test eax, eax&#039;&#039;) and then proceeds to different code if movement points are (or not) zero. If one wants to change it to a higher number (to avoid reminding of movement for heroes that can&#039;t actually move anymore), the following code can be used:&lt;br /&gt;
&lt;br /&gt;
:0x9c91: {{---}}{{---}}a1 c8876900 &#039;&#039;mov eax, [0x6987c8]&#039;&#039; e9 849d0d00 (jump to some arbitrary free space) 90909090&lt;br /&gt;
: free space: {{-}}3d XY000000 &#039;&#039;cmp eax, XY&#039;&#039; - compare movement points with value XY. &lt;br /&gt;
:::: {{---}}7F 0A &#039;&#039;jg 0x0a&#039;&#039; - jump 10 bytes if the value is greater. &lt;br /&gt;
:::: {{---}}A1 C4 5d 6A 00 - displaced code&lt;br /&gt;
:::: {{---}}e9 6f62f2ff - jump to 0x9c9f (or 49C9F)&lt;br /&gt;
:::: {{---}}e9 a462f2ff - jump to 0x9cd9 (or 49CD9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=18817 heroescommunity.com - Editing heroes in memory] - Includes a large number of various Reference IDs&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=42152&amp;amp;pagenumber=1 heroescommunity.com - How to edit Hota?] - Thread with majority of useful information, scrambled across 112 forum pages. &lt;br /&gt;
#  [http://btb2.free.fr/mods/h3/hacking.txt BTB2&#039;s hacking guide] - primarily detailing creation of his own mod, but including tips, explanations and some of the Reference IDs&lt;br /&gt;
# [https://handbookhmm.ru/forum/viewtopic.php?f=56&amp;amp;t=968 void_17&#039;s database] - this database describes most or all of the functions in the base game of heroes 3. &lt;br /&gt;
#* [https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view void_17&#039;s database] (link 2). &lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144342</id>
		<title>Reference IDs</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144342"/>
		<updated>2024-11-28T03:00:14Z</updated>

		<summary type="html">&lt;p&gt;Deus: Editing Caption Text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Spell Reference IDs&lt;br /&gt;
|-&lt;br /&gt;
! HEX Values (Little Endian) !! Spell Level !! Spell Name&lt;br /&gt;
|-&lt;br /&gt;
| 29000000 || 1 || Bless&lt;br /&gt;
|-&lt;br /&gt;
| 2B000000 || 1 || Bloodlust&lt;br /&gt;
|-&lt;br /&gt;
| 25000000 || 1 || Cure&lt;br /&gt;
|-&lt;br /&gt;
| 2A000000 || 1 || Curse&lt;br /&gt;
|-&lt;br /&gt;
| 23000000 || 1 || Dispel&lt;br /&gt;
|-&lt;br /&gt;
| 35000000 || 1 || Haste&lt;br /&gt;
|-&lt;br /&gt;
| 0F000000 || 1 || Magic Arrow&lt;br /&gt;
|-&lt;br /&gt;
| 1F000000 || 1 || Protection from Fire&lt;br /&gt;
|-&lt;br /&gt;
| 20000000 || 1 || Protection from Water&lt;br /&gt;
|-&lt;br /&gt;
| 1B000000 || 1 || Shield&lt;br /&gt;
|-&lt;br /&gt;
| 36000000 || 1 || Slow&lt;br /&gt;
|-&lt;br /&gt;
| 2E000000 || 1 || Stone Skin&lt;br /&gt;
|-&lt;br /&gt;
| 00000000 || 1 || Summon Boat&lt;br /&gt;
|-&lt;br /&gt;
| 05000000 || 1 || View Air&lt;br /&gt;
|-&lt;br /&gt;
| 03000000 || 1 || View Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3E000000 || 2 || Blind&lt;br /&gt;
|-&lt;br /&gt;
| 18000000 || 2 || Death Ripple&lt;br /&gt;
|-&lt;br /&gt;
| 04000000 || 2 || Disguise&lt;br /&gt;
|-&lt;br /&gt;
| 2F000000 || 2 || Disrupting Ray&lt;br /&gt;
|-&lt;br /&gt;
| 0D000000 || 2 || Fire Wall&lt;br /&gt;
|-&lt;br /&gt;
| 33000000 || 2 || Fortune&lt;br /&gt;
|-&lt;br /&gt;
| 10000000 || 2 || Ice Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 11000000 || 2 || Lightning Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 2C000000 || 2 || Precision&lt;br /&gt;
|-&lt;br /&gt;
| 1E000000 || 2 || Protection from Air&lt;br /&gt;
|-&lt;br /&gt;
| 0A000000 || 2 || Quicksand&lt;br /&gt;
|-&lt;br /&gt;
| 40000000 || 2 || Remove Obstacle&lt;br /&gt;
|-&lt;br /&gt;
| 01000000 || 2 || Scuttle Boat&lt;br /&gt;
|-&lt;br /&gt;
| 02000000 || 2 || Visions&lt;br /&gt;
|-&lt;br /&gt;
| 2D000000 || 2 || Weakness&lt;br /&gt;
|-&lt;br /&gt;
| 1C000000 || 3 || Air Shield&lt;br /&gt;
|-&lt;br /&gt;
| 27000000 || 3 || Animate Dead&lt;br /&gt;
|-&lt;br /&gt;
| 22000000 || 3 || Anti-Magic&lt;br /&gt;
|-&lt;br /&gt;
| 19000000 || 3 || Destroy Undead&lt;br /&gt;
|-&lt;br /&gt;
| 0E000000 || 3 || Earthquake&lt;br /&gt;
|-&lt;br /&gt;
| 15000000 || 3 || Fireball&lt;br /&gt;
|-&lt;br /&gt;
| 0C000000 || 3 || Force Field&lt;br /&gt;
|-&lt;br /&gt;
| 3D000000 || 3 || Forgetfulness&lt;br /&gt;
|-&lt;br /&gt;
| 14000000 || 3 || Frost Ring&lt;br /&gt;
|-&lt;br /&gt;
| 3C000000 || 3 || Hypnotize&lt;br /&gt;
|-&lt;br /&gt;
| 0B000000 || 3 || Land Mine&lt;br /&gt;
|-&lt;br /&gt;
| 31000000 || 3 || Mirth&lt;br /&gt;
|-&lt;br /&gt;
| 34000000 || 3 || Misfortune&lt;br /&gt;
|-&lt;br /&gt;
| 21000000 || 3 || Protection from Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3F000000 || 3 || Teleport&lt;br /&gt;
|-&lt;br /&gt;
| 1A000000 || 4 || Armageddon&lt;br /&gt;
|-&lt;br /&gt;
| 3B000000 || 4 || Berserk&lt;br /&gt;
|-&lt;br /&gt;
| 13000000 || 4 || Chain Lightning&lt;br /&gt;
|-&lt;br /&gt;
| 41000000 || 4 || Clone&lt;br /&gt;
|-&lt;br /&gt;
| 3A000000 || 4 || Counterstrike&lt;br /&gt;
|-&lt;br /&gt;
| 1D000000 || 4 || Fire Shield&lt;br /&gt;
|-&lt;br /&gt;
| 38000000 || 4 || Frenzy&lt;br /&gt;
|-&lt;br /&gt;
| 16000000 || 4 || Inferno&lt;br /&gt;
|-&lt;br /&gt;
| 17000000 || 4 || Meteor Shower&lt;br /&gt;
|-&lt;br /&gt;
| 30000000 || 4 || Prayer&lt;br /&gt;
|-&lt;br /&gt;
| 26000000 || 4 || Resurrection&lt;br /&gt;
|-&lt;br /&gt;
| 37000000 || 4 || Slayer&lt;br /&gt;
|-&lt;br /&gt;
| 32000000 || 4 || Sorrow&lt;br /&gt;
|-&lt;br /&gt;
| 09000000 || 4 || Town Portal&lt;br /&gt;
|-&lt;br /&gt;
| 07000000 || 4 || Water Walk&lt;br /&gt;
|-&lt;br /&gt;
| 08000000 || 5 || Dimension Door&lt;br /&gt;
|-&lt;br /&gt;
| 06000000 || 5 || Fly&lt;br /&gt;
|-&lt;br /&gt;
| 12000000 || 5 || Implosion&lt;br /&gt;
|-&lt;br /&gt;
| 24000000 || 5 || Magic Mirror&lt;br /&gt;
|-&lt;br /&gt;
| 28000000 || 5 || Sacrifice&lt;br /&gt;
|-&lt;br /&gt;
| 45000000 || 5 || Summon Air Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 43000000 || 5 || Summon Earth Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 42000000 || 5 || Summon Fire Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 44000000 || 5 || Summon Water Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 39000000 || 5 || Titan&#039;s Lightning Bolt&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144341</id>
		<title>Reference IDs</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Reference_IDs&amp;diff=144341"/>
		<updated>2024-11-28T02:59:48Z</updated>

		<summary type="html">&lt;p&gt;Deus: Spell Ref. IDs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! HEX Values (Little Endian) !! Spell Level !! Spell Name&lt;br /&gt;
|-&lt;br /&gt;
| 29000000 || 1 || Bless&lt;br /&gt;
|-&lt;br /&gt;
| 2B000000 || 1 || Bloodlust&lt;br /&gt;
|-&lt;br /&gt;
| 25000000 || 1 || Cure&lt;br /&gt;
|-&lt;br /&gt;
| 2A000000 || 1 || Curse&lt;br /&gt;
|-&lt;br /&gt;
| 23000000 || 1 || Dispel&lt;br /&gt;
|-&lt;br /&gt;
| 35000000 || 1 || Haste&lt;br /&gt;
|-&lt;br /&gt;
| 0F000000 || 1 || Magic Arrow&lt;br /&gt;
|-&lt;br /&gt;
| 1F000000 || 1 || Protection from Fire&lt;br /&gt;
|-&lt;br /&gt;
| 20000000 || 1 || Protection from Water&lt;br /&gt;
|-&lt;br /&gt;
| 1B000000 || 1 || Shield&lt;br /&gt;
|-&lt;br /&gt;
| 36000000 || 1 || Slow&lt;br /&gt;
|-&lt;br /&gt;
| 2E000000 || 1 || Stone Skin&lt;br /&gt;
|-&lt;br /&gt;
| 00000000 || 1 || Summon Boat&lt;br /&gt;
|-&lt;br /&gt;
| 05000000 || 1 || View Air&lt;br /&gt;
|-&lt;br /&gt;
| 03000000 || 1 || View Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3E000000 || 2 || Blind&lt;br /&gt;
|-&lt;br /&gt;
| 18000000 || 2 || Death Ripple&lt;br /&gt;
|-&lt;br /&gt;
| 04000000 || 2 || Disguise&lt;br /&gt;
|-&lt;br /&gt;
| 2F000000 || 2 || Disrupting Ray&lt;br /&gt;
|-&lt;br /&gt;
| 0D000000 || 2 || Fire Wall&lt;br /&gt;
|-&lt;br /&gt;
| 33000000 || 2 || Fortune&lt;br /&gt;
|-&lt;br /&gt;
| 10000000 || 2 || Ice Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 11000000 || 2 || Lightning Bolt&lt;br /&gt;
|-&lt;br /&gt;
| 2C000000 || 2 || Precision&lt;br /&gt;
|-&lt;br /&gt;
| 1E000000 || 2 || Protection from Air&lt;br /&gt;
|-&lt;br /&gt;
| 0A000000 || 2 || Quicksand&lt;br /&gt;
|-&lt;br /&gt;
| 40000000 || 2 || Remove Obstacle&lt;br /&gt;
|-&lt;br /&gt;
| 01000000 || 2 || Scuttle Boat&lt;br /&gt;
|-&lt;br /&gt;
| 02000000 || 2 || Visions&lt;br /&gt;
|-&lt;br /&gt;
| 2D000000 || 2 || Weakness&lt;br /&gt;
|-&lt;br /&gt;
| 1C000000 || 3 || Air Shield&lt;br /&gt;
|-&lt;br /&gt;
| 27000000 || 3 || Animate Dead&lt;br /&gt;
|-&lt;br /&gt;
| 22000000 || 3 || Anti-Magic&lt;br /&gt;
|-&lt;br /&gt;
| 19000000 || 3 || Destroy Undead&lt;br /&gt;
|-&lt;br /&gt;
| 0E000000 || 3 || Earthquake&lt;br /&gt;
|-&lt;br /&gt;
| 15000000 || 3 || Fireball&lt;br /&gt;
|-&lt;br /&gt;
| 0C000000 || 3 || Force Field&lt;br /&gt;
|-&lt;br /&gt;
| 3D000000 || 3 || Forgetfulness&lt;br /&gt;
|-&lt;br /&gt;
| 14000000 || 3 || Frost Ring&lt;br /&gt;
|-&lt;br /&gt;
| 3C000000 || 3 || Hypnotize&lt;br /&gt;
|-&lt;br /&gt;
| 0B000000 || 3 || Land Mine&lt;br /&gt;
|-&lt;br /&gt;
| 31000000 || 3 || Mirth&lt;br /&gt;
|-&lt;br /&gt;
| 34000000 || 3 || Misfortune&lt;br /&gt;
|-&lt;br /&gt;
| 21000000 || 3 || Protection from Earth&lt;br /&gt;
|-&lt;br /&gt;
| 3F000000 || 3 || Teleport&lt;br /&gt;
|-&lt;br /&gt;
| 1A000000 || 4 || Armageddon&lt;br /&gt;
|-&lt;br /&gt;
| 3B000000 || 4 || Berserk&lt;br /&gt;
|-&lt;br /&gt;
| 13000000 || 4 || Chain Lightning&lt;br /&gt;
|-&lt;br /&gt;
| 41000000 || 4 || Clone&lt;br /&gt;
|-&lt;br /&gt;
| 3A000000 || 4 || Counterstrike&lt;br /&gt;
|-&lt;br /&gt;
| 1D000000 || 4 || Fire Shield&lt;br /&gt;
|-&lt;br /&gt;
| 38000000 || 4 || Frenzy&lt;br /&gt;
|-&lt;br /&gt;
| 16000000 || 4 || Inferno&lt;br /&gt;
|-&lt;br /&gt;
| 17000000 || 4 || Meteor Shower&lt;br /&gt;
|-&lt;br /&gt;
| 30000000 || 4 || Prayer&lt;br /&gt;
|-&lt;br /&gt;
| 26000000 || 4 || Resurrection&lt;br /&gt;
|-&lt;br /&gt;
| 37000000 || 4 || Slayer&lt;br /&gt;
|-&lt;br /&gt;
| 32000000 || 4 || Sorrow&lt;br /&gt;
|-&lt;br /&gt;
| 09000000 || 4 || Town Portal&lt;br /&gt;
|-&lt;br /&gt;
| 07000000 || 4 || Water Walk&lt;br /&gt;
|-&lt;br /&gt;
| 08000000 || 5 || Dimension Door&lt;br /&gt;
|-&lt;br /&gt;
| 06000000 || 5 || Fly&lt;br /&gt;
|-&lt;br /&gt;
| 12000000 || 5 || Implosion&lt;br /&gt;
|-&lt;br /&gt;
| 24000000 || 5 || Magic Mirror&lt;br /&gt;
|-&lt;br /&gt;
| 28000000 || 5 || Sacrifice&lt;br /&gt;
|-&lt;br /&gt;
| 45000000 || 5 || Summon Air Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 43000000 || 5 || Summon Earth Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 42000000 || 5 || Summon Fire Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 44000000 || 5 || Summon Water Elemental&lt;br /&gt;
|-&lt;br /&gt;
| 39000000 || 5 || Titan&#039;s Lightning Bolt&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
	<entry>
		<id>https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144340</id>
		<title>Hex Editing - Guide</title>
		<link rel="alternate" type="text/html" href="https://heroes.thelazy.net//index.php?title=Hex_Editing_-_Guide&amp;diff=144340"/>
		<updated>2024-11-28T02:46:21Z</updated>

		<summary type="html">&lt;p&gt;Deus: Created a link to a page with spell reference IDs.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{wip}}&lt;br /&gt;
&lt;br /&gt;
The following article describes some basics of hex edition. Offsets (and code itself in some locations) may vary based on game version. &lt;br /&gt;
&lt;br /&gt;
Heroes of Might and Magic III is coded in Assembly x86. Each byte (a set of 2 hexadecimal characters) corresponds to either a function, or a value for an already determined function. The only exception is byte 0x90, which is non-coding and may be used to f.e. fill empty space. &lt;br /&gt;
&lt;br /&gt;
Upper majority of creature stats, abilities, etc. is coded within the *.exe. While it may not be readable or understandable to a layman, in short time one can comprehend a lot of the code and find reason and rhyme in it (or at least, parts of it). &lt;br /&gt;
&lt;br /&gt;
To open (and edit) the *.exe files, one needs a hex editor, f.e. [https://sourceforge.net/projects/frhed/ frhed] or another similar software. I recommend [https://github.com/WerWolv/ImHex ImHex], as it comes with a handy disassembler function built in, as well as a base converter, and similar useful tools.  &lt;br /&gt;
&lt;br /&gt;
Some data is located with the *.lod files. To open them, you need to use [[Tools#MMArchive|MMArchive]]. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Majority of HotA {{wh}} additions are not directly in the h3hota.exe (or h3hota HD.exe), but instead in Hota.dat (and partly in HotA.dll). &lt;br /&gt;
&lt;br /&gt;
=== Numbers ===&lt;br /&gt;
All (or almost all) numbers are written in Little Endian - the bytes are placed in reverse order. As an example, 0xA624C (0x before a number signifies it&#039;s hexadecimal) in Little Endian is written as 4C 62 0A 00. Note, that the system recognizes that a number is negative based on the fact that it&#039;s greater than half the number range: greater than 0x80 for a single byte, and greater than 0x80000000 for a 4-byte value. &lt;br /&gt;
&lt;br /&gt;
Some numbers use a IEE-754 coding. It is recommended to use a calculator for such values, such as the one available on [https://www.save-editor.com/tools/converter_ieee_754.html save-editor.com]. &lt;br /&gt;
&lt;br /&gt;
Keep in mind that most (but, surprisingly, not all) lists start at 0, not at 1, so the first element is element 0 and not element 1.&lt;br /&gt;
&lt;br /&gt;
QWORD and DWORD pointers are Little Endian representations of an address within the *.exe file, with 0x400000 added to them because of the way the game reads the code. Therefore if you want the DWORD pointer to find 0x27e484, you write it as 84 e4 67 00. DWORDs use IEE-754, while QWORDs use an 8-byte double-precision IEE-754 value. &lt;br /&gt;
&lt;br /&gt;
Values followed by zeroes in the same block are 4-byte numbers - this essentially increases their available number range from (in decimal) 0-127 to 0-2147483647. &lt;br /&gt;
&lt;br /&gt;
== Heroes ==&lt;br /&gt;
Heroes are very easy to edit. Hero data is stored in two sets, one containing general hero data and the other containing only hero specialties. Heroes are generally ordered by their faction (Castle, Rampart, Tower, etc.) and then their class (might or magic). Following standard heroes, are all campaign heroes. &lt;br /&gt;
&lt;br /&gt;
=== Hero Data ===&lt;br /&gt;
Hero data is written as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00,&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt; = Gender: 00 is male, 01 is female.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt; = [[Hero race|Race]]. These are listed alphabetically, from Demon to Vampire. This has no in-game effect or visibility and the extensions preferred to default everyone to human, except [[Gelu]] who gets to be an elf.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt; = [[Hero class|Class]]. Classes go in order of factions, and within a faction the might class is listed first. Therefore 00 = Knight, 01 = Cleric, 02 = Ranger, 03 = Druid, etc. Note, that HotA classes essentially &amp;quot;follow&amp;quot; this encoding. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt; = First skill (ref. ID).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt; = First skill&#039;s proficiency level (00 = Basic, * 01 = Advanced, 02 = Expert).&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt; = Second skill (ref. ID). If there is no second skill, instead, FFFFFFFF is used, replacing ST and the zeroes following it. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt; = Second skill level. If there is no second skill, 00 is used (Basic). &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;SB&amp;lt;/span&amp;gt; = Spell Book. 00 = absent, 01 = present. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt; = Spell ([[Spell Ref. ID|ref. ID]]). If no spell is present, FFFFFFFF is used instead. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt; = Starting army unit reference IDs. &lt;br /&gt;
* PS = Small Portrait DWORD pointer, which leads to plain text name of the portrait in the H3bitmap.lod.  &lt;br /&gt;
* PL = Large Portrait, same as above. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0&amp;lt;/span&amp;gt; = allowed in RoE maps by default. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS&amp;lt;/span&amp;gt; = Present by default in all non-RoE maps. 00 = false, 01 = true. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; = Campaign-only. 00 = false, 01 = true.&lt;br /&gt;
&lt;br /&gt;
=== Hero Specialties ===&lt;br /&gt;
Hero specialties are written one by one in the same order as heroes appear in, starting from 0x00278420. &lt;br /&gt;
&lt;br /&gt;
The specialties look as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TT&amp;lt;/span&amp;gt; - Specialty type. The following specialty types exist: &lt;br /&gt;
* 00 = Skill specialty (+5% skill effect per level)&lt;br /&gt;
* 01 = Basic Unit specialty (+1 speed, +1 Attack and Defense every &amp;lt;unit level&amp;gt; levels)&lt;br /&gt;
* 02 = Resource (+1 gems per day, etc.)&lt;br /&gt;
* 03 = Spell (+3% efficiency per level for most spells, sometimes special bonuses instead)&lt;br /&gt;
* 04 = Static Unit specialty (static bonus to attack, defense, damage, speed, or any combination of them), f.e. Xeron, Kalt, Haart Lich, etc. &lt;br /&gt;
* 05 = Speed (Sir Mullich only)&lt;br /&gt;
* 06 = Unit Upgrade specialty (Gelu, Dracon, Bidley, etc.)&lt;br /&gt;
* 07 = Dragon Specialty (Mutare, Mutare Drake)&lt;br /&gt;
* 08 = Frederick&#039;s Automaton Explosion specialty. &lt;br /&gt;
&lt;br /&gt;
Note, that setting the first byte (TT000000) to FFFFFFFF will ensure the hero has no specialty. This is only used for Adrienne (yes, she &#039;&#039;technically&#039;&#039; has no hero specialty). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt; = Reference ID of the specialized in Skill,  Unit, Resource or Spell. (Not needed for Dragon and Speed specialties, where it is 00 and an unnecessary, unused 02, respectively). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;AA&amp;lt;/span&amp;gt; = Attack bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DD&amp;lt;/span&amp;gt; = Defense bonus for Static Unit specialists (and Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;DM&amp;lt;/span&amp;gt; = Damage bonus for Static Unit specialists (and probably Mutare). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; = Second unit (ref. ID) that can be upgraded (only used by Unit Upgrade specialists; otherwise left as 00. Note, that using the same unit twice for Unit Upgrade specialty essentially removes second unit from being upgradable; meanwhile using 00 sets the ID to Pikemen.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U5&amp;lt;/span&amp;gt; = Resulting unit ref. ID from the upgrade (only for Unit Upgrade specialists). &lt;br /&gt;
&lt;br /&gt;
Note, that using a Unit Upgrade specialist, reference ID of unupgraded creatures ought to be used. F.e., Gelu references Archers and Wood Elves, but code naturally allows also for their upgrades to be improved with his specialty. This does not occur the other way around; specifying ID or U2 as an upgraded creature, will make the upgrade impossible for unupgraded creatures. &lt;br /&gt;
&lt;br /&gt;
Note, that many &amp;quot;possible&amp;quot; specialties don&#039;t exist and simply won&#039;t do anything; examples include Tactics specialty, Teleport specialty, etc.&lt;br /&gt;
&lt;br /&gt;
=== Editing HotA Heroes ===&lt;br /&gt;
Hota heroes are coded in the HotA.dat, in the following order: (names written in quotes are coded in plain text)&lt;br /&gt;
&lt;br /&gt;
07 000000 &amp;quot;hero&amp;lt;ref_id&amp;gt;&amp;quot; 12 000000 &amp;quot;Heroes\hero_&amp;lt;ref_id&amp;gt;.str&amp;quot; FACTION &amp;quot;#large_portrait_file_name.pcx&amp;quot; 0c000000 &amp;quot;#small_portrait_file_name.pcx&amp;quot; XX 000000 &amp;quot;Specialty_Name&amp;quot; YY 000000 &amp;quot;Specialty Bonus: Object&amp;quot; ZZ000000 &amp;quot;{Full Object}&amp;quot; 0d 0a 0d 0a (number of 0a 0d repetitions may differ) &amp;quot;specialty_description&amp;quot; PP000000 &amp;quot;HeroName&amp;quot; QQQQQQQQ &amp;quot;Biography&amp;quot; 00000000 01 5c 0000 (number of zeroes may vary) GG000000 RR000000 HH000000 SO000000 OL000000 ST000000 TL000000 SB000000 SP000000 U1000000 U2000000 U3000000 PS000000 PL000000 R0 AS C0 00 00000000 00000000 1m000000 1M000000 2m000000 2M000000 3m000000 3M000000 08000000 I8000000 TT000000 ID000000 AA000000 DD000000 DM000000 U4000000 U5000000, where:&lt;br /&gt;
&lt;br /&gt;
* FACTION = 09 000000 00000000 0b 000000 for Cove heroes and 09 000000 00000000 00000000 07 000000 for Factory heroes,&lt;br /&gt;
* #large_portrait_file_name.pcx, #small_portrait_file_name.pcx: # and the appropriate file name, f.e. #HPLP06.pcx  &lt;br /&gt;
* XX = {{unk}}&lt;br /&gt;
* Specialty_Name is f.e. &amp;quot;Sea Dogs&amp;quot; or &amp;quot;Nix&amp;quot;. &lt;br /&gt;
* YY = {{unk}}&lt;br /&gt;
* Specialty Bonus: Object refers to the following types of text: &amp;quot;Spell Bonus: Air Shield&amp;quot;, &amp;quot;Creature Bonus: Sea Dogs&amp;quot;, etc. &lt;br /&gt;
* ZZ = {{unk}}&lt;br /&gt;
* {Full Object} is a text in curly parentheses {} stating again the specialty, f.e. &amp;quot;{Estates}&amp;quot;, or &amp;quot;{Pirates, Corsairs and Sea Dogs}&amp;quot;. &lt;br /&gt;
* specialty_description: Plain text description. &lt;br /&gt;
* PP = Hero&#039;s name&#039;s length. &lt;br /&gt;
* QQQQQQQQ = {{unk}}, seems to be some sort of an ID as it seems to be unique for each hero; it is not, however, the reference ID. All QQ values are around 300 (dec). &lt;br /&gt;
* 1m = minimum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 1M = maximum number of the first creature type in hero&#039;s starting army&lt;br /&gt;
* 2m = minimum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 2M = maximum number of the second creature type in hero&#039;s starting army&lt;br /&gt;
* 3m = minimum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* 3M = maximum number of the third creature type in hero&#039;s starting army&lt;br /&gt;
* I8 = reference ID + 8 for heroes before ref ID 178 and reference ID + 7 for heroes after ref ID 178 (essentially, 0xb9 is skipped)&lt;br /&gt;
&lt;br /&gt;
Heroes in HotA.dat start at 0x23dd and end at 0x9886. Note, that for editing text itself it&#039;s best to use programs such as [https://github.com/sake12/HotA-editor/releases HotA Editor], instead of a direct hex-editing. &lt;br /&gt;
&lt;br /&gt;
=== Altering Hero specialties ===&lt;br /&gt;
&lt;br /&gt;
==== 00 - Skill Specialty ====&lt;br /&gt;
The code for skill specialties works as follows: &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; D805 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; D8 4D FC&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;XXXXXXXX&amp;lt;/span&amp;gt; is a DWORD pointer to a 5% value (in IEEE-754), &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;YYYYYYYY&amp;lt;/span&amp;gt; is a DWORD pointer to a value of 1 (again, in IEEE-754)&lt;br /&gt;
&lt;br /&gt;
===== How it works ======&lt;br /&gt;
The number of levels is multiplied by the XXXXXXXX DWORD pointer, added to the YYYYYYYY DWORD pointer and then the skill bonus is multiplied by it (D8 4D FC). &lt;br /&gt;
&lt;br /&gt;
If we want to change the % gain per level, we only need to change the XX value. If we want to instead make the bonus additive (say x% per level, regardless of how much skill itself adds), we can replace the D805YYYYYYYY with 909090909090 (NOP) and replace the D8 4D FC with D8 45 FC. &lt;br /&gt;
&lt;br /&gt;
Therefore it is possible to have a different bonus for one skill than another. &lt;br /&gt;
&lt;br /&gt;
===== Offsets =====&lt;br /&gt;
The offsets for each skill specialty bonus are as follows: &lt;br /&gt;
: Archery - 0x0E4420&lt;br /&gt;
: Armorer - 0x0E45C9&lt;br /&gt;
: Diplomacy - 0x0E483C&lt;br /&gt;
: Eagle Eye - 0x0E46E0&lt;br /&gt;
: Estates - 0x0E464F&lt;br /&gt;
: First Aid - 0x0E4BD9&lt;br /&gt;
: Intelligence - 0x0E4B69&lt;br /&gt;
: Leadership - 0x0E3C81&lt;br /&gt;
: Learning - 0x0E4AF9&lt;br /&gt;
: Logistics - 0x0E4F1E&lt;br /&gt;
: Luck - 0x0E3A2B&lt;br /&gt;
: Mysticism - 0x0E41FE&lt;br /&gt;
: Necromancy - 0x0E3F92&lt;br /&gt;
: Offense - 0x0E4569&lt;br /&gt;
: Resistance - 0x0E499C&lt;br /&gt;
: Scouting - 0x0E432E&lt;br /&gt;
: Sorcery - 0x0E5B61&lt;br /&gt;
&lt;br /&gt;
===== Exceptions =====&lt;br /&gt;
Specialties for integer-bonuses (Luck, Logistics, Scouting) only have their effect when a full integer is gained from their % bonus. &lt;br /&gt;
&lt;br /&gt;
Diplomacy specialty only affects surrender costs. &lt;br /&gt;
&lt;br /&gt;
Learning specialty is fully over-writen by the Hota.dll. &lt;br /&gt;
&lt;br /&gt;
==== 01 - Unit Specialty ====&lt;br /&gt;
The scaling factor for a unit specialty is a DWORD pointing to a 5% value (in IEEE-754), located at 0x0e6548. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
Ballista and Cannon specialty are Unit specialties. &lt;br /&gt;
&lt;br /&gt;
==== 02 - Resource Specialty ====&lt;br /&gt;
The amount of resources obtained from a gold specialty is saved at 0x0E4681 (as 350). &lt;br /&gt;
&lt;br /&gt;
The code for other resource specialties is possible to edit, but it checks for each resource together and then adds 1 to their growth (therefore its only possible to make all resource specialists increase resource gain by 2, unless a complete re-write of the function is performed). &lt;br /&gt;
&lt;br /&gt;
==== 03 - Spell Specialists ====&lt;br /&gt;
===== Spell specialty types =====&lt;br /&gt;
Spell specialty type table starts at 0x0e6358 (with Fire Wall specialty). Each consecutive byte is then the next spell by spell ID (Firewall, Earthquake, Magic Arrow, etc.) up to Slayer. Each spell specialty can take 6 types: &lt;br /&gt;
: 00 - +100% damage (Luna). Note that Hota.dll overwrites this +100% damage with a much more sensible 25%. &lt;br /&gt;
: 01 - +50% damage (Ciele). &lt;br /&gt;
: 02 - Tier bonus A (+3/+3/+2/+2/+1/+1/+0), such as Weakness specialty or Haste specialty. &lt;br /&gt;
: 03 - Static bonus +2 (Aenain)&lt;br /&gt;
: 04 - This one is only used by Fortune (Daremyth, Melodia). In contrary to what BTB claims, it sets the value of the spells effect to 3, regardless of spell&#039;s level. &lt;br /&gt;
: 05 - Tier bonus B (+4/+3/+2/+1/+0/+0/+0), only used by Coronius as far as I know. &lt;br /&gt;
: 06 - Scaling bonus. &lt;br /&gt;
&lt;br /&gt;
If a spell does not belong to the spell table, the scaling bonus is applied (for example this applies to the Hypnotize specialist, Astral). &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;But what if we want to change the specialty type for a spell like Hypnotize? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We can extend the table by changing 0x0e6296 (equal to 0x2a by default) to a different value, which corresponds to the number of spells in the table -1. If we extend the table, the next specialties will be those for the next spells by spell ID. We have a total of 13 bytes of nop (90), so the last spell specialty we can code this way is Summon Air Elemental. Remember to update all specialties created this way! You shouldn&#039;t just leave the nops (90) in the middle of the table!&lt;br /&gt;
&lt;br /&gt;
&amp;quot;But what about Victoria, the Land Mine specialist?&amp;quot;, you may ask. Well, I&#039;m here to give answers: &lt;br /&gt;
&lt;br /&gt;
The command &#039;&#039;&#039;lea eax, [esi-0Dh]&#039;&#039;&#039; located at 0x0e6291 finds the spell ID of firewall (0d) and chooses it as the first spell on the list of specialties &#039;&#039;(remember? The one that starts at 0x0e6358?)&#039;&#039;. By changing it to &#039;&#039;&#039;lea eax, [esi-0Bh]&#039;&#039;&#039;, we can change the first spell ID to 0x0B, or Land Mine. &#039;&#039;Notice, that this reduces the last spell specialty to Summon Earth Elemental, but I doubt anyone will miss the Summon Water Elemental and Summon Air Elemental specialties.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Next, we have to increase the number of spells in the list by 2 (located at 0x0e6296), and then move the entire spell specialty table, 2 bytes each, because now it starts at 0x0e6358 with Land Mine (and still follows by spell ID). &lt;br /&gt;
&lt;br /&gt;
&amp;quot;And what about Eovacius? And Zilare?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Haven&#039;t looked at them yet but I believe they may be hard-coded.&lt;br /&gt;
&lt;br /&gt;
The specialty types can be changed by altering their commands. Each specialty type (00, 01, and so on) have a DWORD pointer to their appropriate code located in a 28-byte long table starting at 0x0e633c.&lt;br /&gt;
&lt;br /&gt;
===== Changing Tier bonuses =====&lt;br /&gt;
Let&#039;s say we want to make Olema&#039;s Weakness specialty remotely usable, but we still want it to be a tier-based specialty. We can change the bonuses the spell provides for each unit tier in a 28-byte long table that starts at 0x23eaa8. Each 4 bytes corresponds to the next unit level. &lt;br /&gt;
&lt;br /&gt;
A similar table for Coronius&#039; specialty type starts at 0x23eac4 (immediately afterwards) and works the same way. &lt;br /&gt;
&lt;br /&gt;
===== Changing the static bonus =====&lt;br /&gt;
At 0x0e62e6 the value 0x02 determines the static bonus (such as the one Disrupting Ray specialists get). &lt;br /&gt;
&lt;br /&gt;
===== Changing the scaling bonus =====&lt;br /&gt;
At 0x0e631f the DWORD pointer finds an IEEE-754 double precision value for 3% (base game). Replacing this pointer with another one finds a different % bonus. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want the scaling specialties to divide their bonus by unit level, replace f7 f9 at 0xe630b with 90 90 (nop-ing out the division). &lt;br /&gt;
&lt;br /&gt;
===== Specialties that don&#039;t work ===== &lt;br /&gt;
Several specialties don&#039;t work because no specialty type can increase their bonus: &lt;br /&gt;
* Curse&lt;br /&gt;
* Anti-Magic&lt;br /&gt;
* Dispel&lt;br /&gt;
* Slow {{unk}}, but it would probably be way too strong anyway;&lt;br /&gt;
* Berserk&lt;br /&gt;
* Blind&lt;br /&gt;
* Teleport&lt;br /&gt;
* Remove Obstacle.&lt;br /&gt;
&lt;br /&gt;
==== 04 - Unit (static) ====&lt;br /&gt;
Only Xeron is specified to add speed thanks to his static unit specialty. This is (most likely) saved at the following address: 0x4b1b3 {{unk}}. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty.&lt;br /&gt;
&lt;br /&gt;
==== 05 - Speed specialty ====&lt;br /&gt;
Sir Mullich&#039;s unit specialty amount (0x02) is located at 0x0E6669. &lt;br /&gt;
&lt;br /&gt;
==== 06 - Unit Upgrade specialty ====&lt;br /&gt;
These specialties calculate the upgrade cost automatically, with the same function that calculates upgrade costs in all other cases. If &amp;quot;unupgraded&amp;quot; unit is more expensive than the upgraded one, the message about necessary costs wil appear, but no cost will be stated and the conversion will be free. &lt;br /&gt;
&lt;br /&gt;
Setting the unit IDs to an upgraded unit will ensure only the upgraded units are affected by the specialty. &lt;br /&gt;
&lt;br /&gt;
==== 07 - Dragon specialty ====&lt;br /&gt;
I believe Mutare&#039;s bonus is specified within her specialty block.&lt;br /&gt;
&lt;br /&gt;
== Editing HotA Creatures ==&lt;br /&gt;
While most statistics of base game creatures can be edited rather effortlessly (using MMArchive to unpack H3bitmap.lod or HotA_lng.lod), HotA creatures cannot be edited this way. Their data is stored at the beginning of HotA.dat, as follows:&lt;br /&gt;
&lt;br /&gt;
08 000000 &amp;quot;most&amp;lt;ref_id&amp;gt;&amp;quot; 17 000000 &amp;quot;Monsters\monster&amp;lt;ref_id&amp;gt;.str&amp;quot; 09 000000 00000000 04 000000 &amp;quot;name_abbreviation&amp;quot; KK000000 &amp;quot;&amp;lt;animation_filename&amp;gt;.def&amp;quot; L1000000 &amp;quot;Monster_name (singular)&amp;quot; L2000000  &amp;quot;Monster name (plural)&amp;quot; 00000000 00000000 00000000 00000000 01 74 0000 TT 000000 UL 000000 0c556700  00556700 F1 F2 F3 F4 80da9e03 60da9e03 30da9e03 WC000000 MC000000 OC000000 SC000000 CC000000 GeC000000 GC000000 FV000000 AV000000 GV000000 HG000000 HP000000 SP000000 AT000000 DF000000 DmgL000000 DmgH000000 SH000000 SN000000 OO000000 mm000000 MM000000 RR000000 VV000000 WW000000 XX000000 YY000000 ZZ000000 &lt;br /&gt;
&lt;br /&gt;
* monst&amp;lt;ref_id&amp;gt; is monster&#039;s reference id in decimal, f.e. monst154&lt;br /&gt;
* name_abbreviation is a 4 letter abbreviation of the monster name. Never appears anywhere ever again. Note that not all abbreviations are just beginning or consonants, f.e. Haspids are written as &amp;quot;aspi&amp;quot; and nix as &amp;quot;nixx&amp;quot;. This abbreviation doesn&#039;t seem to have to be unique, as Sea Serpent and Haspids have the same 4 letters here.  It is worth pointing out, that base game creatures also use 4-letter abbreviations in a similar table located in h3hota HD.exe around 0x275500&lt;br /&gt;
* KK is the length of the animation_filename + 4 (and therefore the length of the entire &amp;quot;animation_filename.def&amp;quot;&lt;br /&gt;
* &amp;lt;animation_filename&amp;gt;.def  is the file name of the set of animations, saved as .def in HotA.lod or HotA.lod. &lt;br /&gt;
* L1 is the length of the monster name (singular)&lt;br /&gt;
* L2 is the length of the monster name (plural)&lt;br /&gt;
* 0x74 codes as &amp;quot;t&amp;quot; in ASCII&lt;br /&gt;
* TT is the reference id of the town the monster belongs to. 0x09 for Cove, 0x0a for Factory, FFFFFFFF for Neutrals and I bet if HotA ever releases a new town, it will have 0x0b as its faction code. &lt;br /&gt;
* UL is the unit level -1 (sidenote: this is an example of numbers being used in a list with a zero-based numbering). FFFFFFFF for monsters with no level (f.e. Citadel / Castle Towers)&lt;br /&gt;
* 0c556700 (and 00556700) point to a similar table with creature sprite, text and other references in h3hota HD.exe and is probably used to insert the HotA.dat&#039;s creature table into this part of the exe. &lt;br /&gt;
* F1 is the first creature ability flag&lt;br /&gt;
** 01 - 2-hex unit&lt;br /&gt;
** 02 - Flying&lt;br /&gt;
** 04 - Ranged Attack&lt;br /&gt;
** 08 - Fire breath&lt;br /&gt;
** 10 - Living&lt;br /&gt;
** 20 - Can attack city walls (cyclops, cannon)&lt;br /&gt;
** 40 - War machine&lt;br /&gt;
** 80 - Slayer (Basic)&lt;br /&gt;
* F2 is the second creature ability flag&lt;br /&gt;
** 01 - Slayer (advanced)&lt;br /&gt;
** 02 - Slayer (expert)&lt;br /&gt;
** 04 - Mind immunity&lt;br /&gt;
** 08 - shoots beam (?)&lt;br /&gt;
** 10 - No melee penalty&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - Fire immunity&lt;br /&gt;
** 80 - Attacks twice&lt;br /&gt;
* F3 is the third creature ability flag&lt;br /&gt;
** 01 - No enemy retaliation&lt;br /&gt;
** 02 - Morale has no effect&lt;br /&gt;
** 04 - Undead&lt;br /&gt;
** 08 - AOE melee attack (Hydra)&lt;br /&gt;
** 10 - AOE ranged attack (Magog), AI flag only. &lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - {{unk}}&lt;br /&gt;
* F4 is the fourth creature ability flag&lt;br /&gt;
** 01 - {{unk}}&lt;br /&gt;
** 02 - {{unk}}&lt;br /&gt;
** 04 - {{unk}}&lt;br /&gt;
** 08 - {{unk}}&lt;br /&gt;
** 10 - {{unk}}&lt;br /&gt;
** 20 - {{unk}}&lt;br /&gt;
** 40 - {{unk}}&lt;br /&gt;
** 80 - Dragon (for the sake of Mutare&#039;s specialty and vial of dragon blood)&lt;br /&gt;
* 80da9e03, 60da9e03, 30da9e03 - {{unk}}&lt;br /&gt;
* WC is the cost of wood necessary to recruit the creature&lt;br /&gt;
* MC is the cost of mercury necessary to recruit the creature&lt;br /&gt;
* OC is the cost of ore necessary to recruit the creature&lt;br /&gt;
* SC is the cost of sulfur necessary to recruit the creature&lt;br /&gt;
* CC is the cost of crystals necessary to recruit the creature&lt;br /&gt;
* GeC is the cost of gems necessary to recruit the creature&lt;br /&gt;
* GC is the cost of gold necessary to recruit the creature. Note that all aforementioned cost values have 4 bytes to play with, so the maximum unit cost is 2147483647 gold (or of any resource). &lt;br /&gt;
* FV is the Fight Value&lt;br /&gt;
* AV is the AI Value&lt;br /&gt;
* GV is the Growth&lt;br /&gt;
* HG is the Horde Growth &lt;br /&gt;
* HP is, surprisingly, hit points&lt;br /&gt;
* SP is speed&lt;br /&gt;
* AT is attack&lt;br /&gt;
* DF is defense&lt;br /&gt;
* DmgL is low end of the damage range&lt;br /&gt;
* DmgH is the high end of the damage range&lt;br /&gt;
* SH is the number of shots per battle&lt;br /&gt;
* SN is the number of spell casts per battle&lt;br /&gt;
* mm - minimum number of units when randomly spawned by the map generator &lt;br /&gt;
* MM - maximum number of units when randomly spawned by the map generator. &lt;br /&gt;
QQ, RR, VV, WW, XX, YY, ZZ - {{unk}}. Sometimes they take up 28 (!) bytes (such as for Ayssids), and sometimes don&#039;t appear at all. I suspect they reference some sort of abilities the creatures have, or their descriptions. &lt;br /&gt;
&lt;br /&gt;
When using custom functions or editing original code, note that all HotA (as well as some SoD monsters) have reference ID above 80, and therefore cannot be checked for using a simple check command, such as 83 FA ID. Instead, you have to use a longer command that accepts a 4-byte value (for EDX that would be 81 FA ID000000).&lt;br /&gt;
&lt;br /&gt;
== Editing Creature Abilities ==&lt;br /&gt;
=== Magic Channel ([[Familiars]]) === &lt;br /&gt;
Magic channel&#039;s applicable unit ID is defined at 0x1a24f6. The game uses a frankly ridiculous method of dividing by 5 (let&#039;s just say that it purposefully calls and uses a value 1717986919 to calculate 20%). Btb2 analyzed it and found a way to alter the percentage to 50% or 100% (by ignoring the horrible function before it and simply taking the mana value or moving it by 1 byte). Replace: &lt;br /&gt;
&lt;br /&gt;
* 0x1A24B4  -&amp;gt;  8b 55 98 d1 ea    (for 50%, since d1 ea is a single bitwise shift to the right&lt;br /&gt;
* 0x1A24b4  -&amp;gt;  8b 55 98 90 90    (no division).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a look at the function. The following offset reads: &lt;br /&gt;
* 0x1A249F:  b8 *67666666* c7 45 1c 02000000 f7 e9 8b 4d 9c *d1 fa* 8b c2 c1 e8 1f 03 d0&lt;br /&gt;
&lt;br /&gt;
The b8 XXXXXXXX (bolded above) function calls a hexadecimal value (note that it&#039;s in Little Endian) and saves it. The code then uses &amp;quot;d1 fa&amp;quot; (emboldened above) to divide edx by 2 before it is further used. C1 E8 1F is simply a division by 2^31 of the value. Yes, that is why the rounding may be a bit off for Magic Channel. Now let&#039;s consider replacing: &lt;br /&gt;
* 67666666 with our custom value (for now let&#039;s imagine it&#039;s 56555555)&lt;br /&gt;
* d1 fa with 90 90 (two nop or non-coding functions, so we basically removed this part of the code)&lt;br /&gt;
&lt;br /&gt;
The result is... Division by 3. Now the Magic Channel grants 33% mana return. &lt;br /&gt;
&lt;br /&gt;
To obtain a different value, we need to replace XXXXXXXX with another number. This has to be (2^33 / D) +1, where D is our divisor (3 for 1/3, 5 for 1/5, etc.). The 2^33 is multiplied with the variable (mana cost), but is then divided by 2^31 and moves by two bits elsewhere to account for the differences. The number is greater than the quotient by 1, to avoid the rounding downwards removing 1 mana point incorrectly. Note, that XXXXXXXX cannot be equal to or greater than 00000080 (0x80000000), as then the value will be negative. &lt;br /&gt;
&lt;br /&gt;
The function also calls 0x1A2498 for the minimum mana value for which Magic Channel may apply. This is equal to the value of D (0x05 in base game, 0x03 in the example above). &lt;br /&gt;
&lt;br /&gt;
== Editing Buildings ==&lt;br /&gt;
Building names and descriptions (excluding HotA) are saved in BldgSpec.txt and BldgNeut.txt. Building requirements can be altered by changing their dependency tables. Address of each dependency table is located at: &lt;br /&gt;
* 0x0EB816 - Castle&lt;br /&gt;
* 0x0EB8B3 - Rampart&lt;br /&gt;
* 0x0EB971 - Tower&lt;br /&gt;
* 0x0EBA39 - Inferno&lt;br /&gt;
* 0x0EBA48 - Necropolis&lt;br /&gt;
* 0x0EBA5C - Dungeon&lt;br /&gt;
* 0x0EBA70 - Stronghold&lt;br /&gt;
* 0x0EBA84 - Fortress&lt;br /&gt;
* 0x0EBA98 - Conflux&lt;br /&gt;
&lt;br /&gt;
Note, that some building requirements are changed in HotA.dll. While it shouldn&#039;t be too difficult to determine their location in that file, (look for appropriate DWORDs in HotA.dll) for now these offsets are unknown. The requirement table for Cove and Factory may be coded differently and as far as I know, haven&#039;t been found yet. &lt;br /&gt;
&lt;br /&gt;
Building costs can be changed in Building.txt. &lt;br /&gt;
&lt;br /&gt;
=== HotA buildings ===&lt;br /&gt;
Building names and descriptions for HotA are saved in HotA.dat and can be edited as a text edit using f.e. the aforementioned HotA Editor. &lt;br /&gt;
&lt;br /&gt;
Building costs for HotA are saved in HotA.dat. The building names appear before the building costs. Each building cost contains of 28 bytes, each 4 bytes representing a 4-byte little endian number of cost for each resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Note, that some buildings have text and description, but no written cost (either replaced with 0s or simply not having any space devoted to them). An example is Mana Generator. For now it is not known how to edit the cost of these buildings (and therefore the cost of the Mana Generator remains a mystery).  &lt;br /&gt;
&lt;br /&gt;
=== Resource Silos ===&lt;br /&gt;
Resource Silo yield tables are located at 0x288F04. Each resource value is mentioned for each town, one by one, in 4-byte values (order of resources is Wood, Mercury, Ore, Sulphur, Crystal, Gems, Gold) with towns going in order. &lt;br /&gt;
&lt;br /&gt;
Cove&#039;s Resource Silo simply copies the one from the Dungeon, while Factory copies Rampart. &lt;br /&gt;
&lt;br /&gt;
The Resource Silo table is called for in exe a few times, but HotA.dll overwrites all (or most) of these calls at 0xd37ae and 0xd37ce.  As of 12:19, 19 September 2024 (UTC), it is not known how to alter the Resource Silo values for Cove and Factory. No specific offset or function have been identified.  {{unk}}. &lt;br /&gt;
&lt;br /&gt;
== Artifacts ==&lt;br /&gt;
All stats given by artifacts are written into a table at 0x23e758, 4 bytes for each artifact (Attack, Defense, Power, Knowledge). &lt;br /&gt;
&lt;br /&gt;
The artifact traits are specified in artraits.txt, while artifact pick-up events are defined in artevent.txt (both in Hota_lng.lod). &lt;br /&gt;
&lt;br /&gt;
Interference amount of the Plate of the Dying Light is specified as a IEE-754 floating point value at 0x1d40c8 in Hota.dll &lt;br /&gt;
&lt;br /&gt;
=== Combination Artifacts ===&lt;br /&gt;
Combination artifact&#039;s components are specified at a few functions, starting at 0x04c63d. For further reading see BTB2&#039;s guide (linked below, as External Link #3). Be aware! BTB2&#039;s guide is either wrong or outdated! His method of removing components seems to work correctly, however, most likely due to HotA putting their combination artifacts in HotA.dll to push them in between base game combination artifacts, or for another reason, &#039;&#039;his method of increasing the number of items does NOT work&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
However, not all is lost. There&#039;s 8 bytes of nop (90) commands starting at 0x4c8c8, and we can use them to add an extra item (to showcase it, I&#039;ll present a code for adding an extra item to the Ring of the Magi&#039;s requirements. This seems a safe method, since only a short push is used, and therefore I advise changes to 3-piece combination artifacts to simply copy this method and swap Ring of the Magi with their edited artifact). &lt;br /&gt;
:0x4c85b 6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID)  -&amp;gt; eb 6d (jump 109 bytes forward)&lt;br /&gt;
:0x4c8c8 90909090 90909090   -&amp;gt; eb 06..(skip following code)...6a &#039;&#039;&#039;XX&#039;&#039;&#039; (ref item ID) 6a &#039;&#039;&#039;YY&#039;&#039;&#039; (2nd ref item ID).....eb 8d (jump backwards 115 bytes)&lt;br /&gt;
&lt;br /&gt;
Replace emboldened text with your appropriate artifact IDs. Remember to also update the number of components (in this example at 0x04C861). &lt;br /&gt;
&lt;br /&gt;
Note, that the method described above only works for a jump of 125 bytes or less. Gladly, there&#039;s a few other empty spaces that can be used for adding extra components: &lt;br /&gt;
* 0x4c25c (11 bytes of nop)&lt;br /&gt;
* 0x4c2d6 (10 bytes)&lt;br /&gt;
* 0x4c347 (9 bytes)&lt;br /&gt;
* 0x4c3c7 (9 bytes)&lt;br /&gt;
* 0x4c622 (14 bytes)&lt;br /&gt;
* 0x4c8c8 (8 bytes)&lt;br /&gt;
* 0x4ca15 (11 bytes)&lt;br /&gt;
* 0x4d008 (8 bytes)&lt;br /&gt;
&lt;br /&gt;
Simply use the available space within 125 bytes of the definition of any of the original components. If this can&#039;t be done, swap your artifact with another, which can be edited. &lt;br /&gt;
&lt;br /&gt;
Note, that if you&#039;re using HotA, it&#039;s much safer to just edit appropriate artifact reference IDs and add other appropriate components (or replace the resulting artifact) by editing Hota.dat (see: [https://heroes.thelazy.net/index.php?title=Hex_Editing_-_Guide/artsinfo0|HotA Artifacts - artsinfo0]&lt;br /&gt;
&lt;br /&gt;
=== Making new Combination Artifacts ===&lt;br /&gt;
&lt;br /&gt;
For now it is wholly unknown how to do it. HotA devs seem to now their way around it.{{unk}} See below. &lt;br /&gt;
&lt;br /&gt;
What might work is repeating a function identical to that of another artifact with different properties using some empty space. Requires further testing. &lt;br /&gt;
&lt;br /&gt;
=== HotA Artifacts ===&lt;br /&gt;
Hota&#039;s new artifacts are coded in the Hota.dat. To edit their properties, you need to edit their text (or use hexadecimal values for ASCII to match their text in hex editing). Artifacts are coded as follows: &lt;br /&gt;
&lt;br /&gt;
==== artsinfo0 ==== &lt;br /&gt;
This part of the file includes partial data on all HotA artifacts, written as follows: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;Artifact Name&lt;br /&gt;
:&amp;lt;ref_ID&amp;gt;&lt;br /&gt;
:X Y Z # Description:&lt;br /&gt;
:P Q R # Dif abl, S points&lt;br /&gt;
:-1&lt;br /&gt;
&lt;br /&gt;
Note, that the ref_ID above is written in decimal system. &lt;br /&gt;
&lt;br /&gt;
The X Y Z applies a buff to the artifact, seemingly by coding first the bonus type with X, amount with Y and optional specification with Z. &lt;br /&gt;
* 0 - Increase Attack / Defense&lt;br /&gt;
* 1 - Add Spell Power&lt;br /&gt;
* 2 - Add Knowledge&lt;br /&gt;
* 7 - Different Ability, Y = AI value {{unk}} (it&#039;s described as &amp;quot;points&amp;quot;)&lt;br /&gt;
* 8 - Movement artifact?&lt;br /&gt;
* 13 - Restrict spells; Y = 1 for Cloak of Silence, 4 for Ring of Oblivion&lt;br /&gt;
* 16 - Add daily resource growth, Y = amount, Z = resource type (0 = wood, 6 = gold)&lt;br /&gt;
* 24 - Enemy morale bonus&lt;br /&gt;
* 25 - Enemy luck bonus&lt;br /&gt;
&lt;br /&gt;
The P Q R are coded in the same way as above and refer to a second ability. &lt;br /&gt;
&lt;br /&gt;
However, the method above seems to suggest some artifacts have different bonuses than they actually possess: Ironfist of the Ogre doesn&#039;t increase either attack or defense; Trident of Dominion increases attack by 6, etc. &lt;br /&gt;
&lt;br /&gt;
This part of the file also includes definitions of all combo artifacts and their components. F.e. Diplomat&#039;s Cloak: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Diplomat&#039;s Cloak&lt;br /&gt;
:12 141 3 66 67 68&lt;br /&gt;
&lt;br /&gt;
* 12 is the number of the combination artifact (including SoD ones)&lt;br /&gt;
* 141 is the decimal reference ID of the Diplomat&#039;s Cloak&lt;br /&gt;
* 3 is the number of components&lt;br /&gt;
* 66 67 68 are the reference IDs of components (decimal)&lt;br /&gt;
&lt;br /&gt;
Note, that this can be used to effectively alter any base-game combination artifact! Simply add a line before these artifact definitions&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;Sample Text&lt;br /&gt;
:N RIF C R+ R++ R+++ R++++,&lt;br /&gt;
&lt;br /&gt;
where N is the number of combination artifact (counting the way they&#039;re placed in the .exe code), RIF is the reference ID of the final artifact, R+, R++ and so on are the additional components. To showcase adding an extra requirement to the Ring of the Magi (since a similar concept was used above) and replacing the Ring of the Magi with the AB blade and requiring a Sword of Hellfire:&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Armageddon&#039;s Blade&lt;br /&gt;
:10 128 1 11&lt;br /&gt;
&lt;br /&gt;
(11 is the reference ID of the new item - Sword of Hellfire). &lt;br /&gt;
&lt;br /&gt;
Sadly, new combination artifacts can&#039;t simply be added this way.&lt;br /&gt;
&lt;br /&gt;
=== art&amp;lt;ref_ID&amp;gt; ===&lt;br /&gt;
art&amp;lt;ref_ID&amp;gt; entries in HotA.dat (as visible in the Hota.editor.exe) can be used to alter an artifact&#039;s name, adventure map event text, description, slot type and rarity class (treasure, minor, major, relic). Here is also the true artifact bonus data coded. Note that the Reference ID is in decimal. &lt;br /&gt;
&lt;br /&gt;
:gold_price &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; cost - (cost of 0 is used if an artifact cannot normally appear, f.e. if it&#039;s a Combination Artifact. &lt;br /&gt;
:slot &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; slot type (0 - none, 1 - head, 2 - shoulders, 3 - neck, 4 - right hand, 5 - left hand, 6 - torso, 7 - ring, 8 - feet, 9 - misc, 10 - ballista, 11 - ammo cart, 12 - first aid tent, 13 - catapult, 14 - spell book)&lt;br /&gt;
:class &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; type (1 - none, 2 - treasure, 4 - minor, 8 - major, 16 - relic)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; disabled as defaults (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; add new spells (0 - no, 1 - yes)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; attack bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; defense bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; spell power bonus (_int8_)&lt;br /&gt;
:0 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; knowledge bonus (_int8_)&lt;br /&gt;
&lt;br /&gt;
== Creature Banks ==&lt;br /&gt;
Creature bank definitions in h3hota HD.exe start at 0x2702A0. They are coded as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt;000000 FFFFFFFF 00000000 00000000 00000000, &lt;br /&gt;
&lt;br /&gt;
where &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;,  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;  and  &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U4&amp;lt;/span&amp;gt; are Unit IDs for guards ( &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;U2 U3 U4&amp;lt;/span&amp;gt; etc are optional). Note, that the 12 bytes of 00 do not appear after the last defined creature bank (Dragon Utopia). &lt;br /&gt;
&lt;br /&gt;
Afterwards, the reward creatures (and creatures only!) are defined as follows: &lt;br /&gt;
&lt;br /&gt;
FFFFFFFF &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R3&amp;lt;/span&amp;gt;000000 &lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R1&amp;lt;/span&amp;gt; is the reward creature for the first bank, &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;R2&amp;lt;/span&amp;gt; for the second, and so on.&lt;br /&gt;
&lt;br /&gt;
The order the banks appear in is as follows: &lt;br /&gt;
&lt;br /&gt;
#Cyclops Stockpile&lt;br /&gt;
#Dwarven Treasury&lt;br /&gt;
#Griffin Conservatory&lt;br /&gt;
#Imp Cache&lt;br /&gt;
#Medusa Stores&lt;br /&gt;
#Naga Bank&lt;br /&gt;
#Dragon Fly Hive&lt;br /&gt;
#Shipwreck&lt;br /&gt;
#Derelict Ship&lt;br /&gt;
#Crypt&lt;br /&gt;
#Dragon Utopia. &lt;br /&gt;
&lt;br /&gt;
Note, that after changing these values, you still have to edit the remaining bank data in CrBanks.txt. &lt;br /&gt;
&lt;br /&gt;
HotA banks, except for the Ancient Altar, are all defined within the Hota.dat file, as crbank21, 22, and so on. &lt;br /&gt;
&lt;br /&gt;
=== The Pyramid ===&lt;br /&gt;
The pyramid is defined separately:&lt;br /&gt;
&lt;br /&gt;
: 0xa3fa2:6a &#039;&#039;&#039;02&#039;&#039;&#039; 6a &#039;&#039;&#039;14&#039;&#039;&#039; 6a &#039;&#039;&#039;7d&#039;&#039;&#039; (52 8d4508 53 50) 6a &#039;&#039;&#039;74&#039;&#039;&#039;; &lt;br /&gt;
: 0xa3fb6: &#039;&#039;&#039;28&#039;&#039;&#039; 00 00 00&lt;br /&gt;
&lt;br /&gt;
Where: &lt;br /&gt;
* 02 is the number of stacks of Diamond Golems&lt;br /&gt;
* 14 is the number of Diamond Golems (in total)&lt;br /&gt;
* 7d is the unit ID of Diamond Golems, &lt;br /&gt;
* 74 is the unit ID of Gold Golems and&lt;br /&gt;
* 28 is the number of Gold Golems. &lt;br /&gt;
&lt;br /&gt;
BTB2 suggested replacing Diamond Golems with Mummies - this however, requires using a creature ID above 80, and therefore a long push (6B 8D000000 for mummies). However, to do that we would need to use some empty space. He suggested removing the -2 Luck on empty Pyramid subroutine. I decided to instead use some empty space I got from a different change, keeping the -2 Luck penalty. The result is as follows: &lt;br /&gt;
&lt;br /&gt;
: 0x0A3FA6 → ebdf (jumps to overwrite -2 luck on empty Pyramid), &lt;br /&gt;
: 0x0A3F82 → e9 89c10100 (jump to free space 0xc0110) &lt;br /&gt;
::::: 68 8d000000 (Mummies) &lt;br /&gt;
:::::EB 1A 90 90 (jump back to A3FA8), &lt;br /&gt;
: 0xc0110 (Free) → 8a 87 1b 01 00 00 04 fe 88 87 1b 01 00 00 (displaced code: -2 Luck on empty Pyramid), &lt;br /&gt;
: 0xc011d (Free) → E9 6b3efeff(jump to 0x0A3F8F (end of F8E))&lt;br /&gt;
&lt;br /&gt;
Note, that this method assumes you have empty space at 0xc0110 (by forcing rumors to always show rumors defined by the mapmaker). If you have empty space elsewhere, simply move the function, altering the jumps appropriately. &lt;br /&gt;
&lt;br /&gt;
= Editing h3hota_maped =&lt;br /&gt;
&lt;br /&gt;
All heroes are defined one by one in the h3hota_maped starting from 0x186800. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;GG&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;RR&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;HH&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;SO&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:turquoise&amp;quot;&amp;gt;OL&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:teal&amp;quot;&amp;gt;ST&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:pink&amp;quot;&amp;gt;TL&amp;lt;/span&amp;gt;000000 &#039;&#039;SB&#039;&#039; 000000 &amp;lt;span style=&amp;quot;color:grey&amp;quot;&amp;gt;SP&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U1&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U2&amp;lt;/span&amp;gt;000000 &amp;lt;span style=&amp;quot;color:gold&amp;quot;&amp;gt;U3&amp;lt;/span&amp;gt;000000 PS000000 PL000000 &amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;R0 &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;AS &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:silver&amp;quot;&amp;gt;CO&amp;lt;/span&amp;gt; 00&lt;br /&gt;
&lt;br /&gt;
Note, that some HotA heroes use some data from HotA.dat&lt;br /&gt;
&lt;br /&gt;
= Game Mechanics =&lt;br /&gt;
== Starting Resources ==&lt;br /&gt;
Table with the starting resources starts at 0x278170. Each 4 bytes are the next resource (Wood, Mercury, Ore, Sulfur, Crystal, Gems, Gold). Each 28 bytes is the next difficulty - Easy, Normal, Expert, etc. At 0x2781FC the AI resources start and follow the same order of resources and difficulties. The whole table thus takes 280 bytes. &lt;br /&gt;
&lt;br /&gt;
== Starting Bonuses ==&lt;br /&gt;
=== Gold Bonus ===&lt;br /&gt;
The starting gold bonus chooses a random value between the value written at 0x0C0002 and the value at 0x0BFFFD, and then multiplies it by 100. To change the multiplication, simply edit 0x0C000B (multiplying by 25) and 0x0C0016 (moving the value by 2 bits, so multiplying it by 4). &lt;br /&gt;
&lt;br /&gt;
=== Resource Bonuses ===&lt;br /&gt;
The starting resource bonuses use DWORD pointers to find their appropriate code to run:&lt;br /&gt;
* Wood and Ore - AF FF 4B 00 &lt;br /&gt;
* Crystals - D6 FF 4B 00 &lt;br /&gt;
* Gems - E1 FF 4B 00 &lt;br /&gt;
* Mercury - EC FF 4B 00 &lt;br /&gt;
* Sulfur - F4 FF 4B 00 &lt;br /&gt;
&lt;br /&gt;
These DWORD pointers are located at the following addresses: &lt;br /&gt;
* Castle - 0x0C01B4 &lt;br /&gt;
* Rampart - 0x0C01B8 &lt;br /&gt;
* Tower - 0x0C01BC &lt;br /&gt;
* Inferno - 0x0C01C0 &lt;br /&gt;
* Necropolis - 0x0C01C4 &lt;br /&gt;
* Dungeon - 0x0C01C8 &lt;br /&gt;
* Stronghold - 0x0C01CC &lt;br /&gt;
* Fortress - 0x0C01D0 &lt;br /&gt;
* Conflux - 0x0C01D4 &lt;br /&gt;
&lt;br /&gt;
Note, that you need to edit ScnrStar.def to reflect any altered resources. &lt;br /&gt;
&lt;br /&gt;
The amount for each rare resource is most likely determined by the function at 0xc009e: {{unk}}&lt;br /&gt;
: minimum: c745f0 33333333 &#039;&#039;(mov [ebp-0x10], 0x33333333)&#039;&#039; c745f0 3333EB3F  &#039;&#039;(mov [ebp-0x1c], 0x3feb3333)&#039;&#039; &lt;br /&gt;
: break between the two: eb 0e &#039;&#039;(jmp 0x0e)&#039;&#039; &lt;br /&gt;
: maximum: c745f0 66666666 &#039;&#039;(mov [ebp-0x10], 0x66666666)&#039;&#039; c745f0 6666E63F  &#039;&#039;(mov [ebp-0x10], 0x3FE66666)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
The amount of wood and ore are most likely specified at 0xbffaf: BA 0a000000 &#039;&#039;(mov edx, 0x0a)&#039;&#039; B9 05000000 &#039;&#039;(mov ecx, 0x05)&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
== Movement point reminder ==&lt;br /&gt;
The movement point reminder is located at 0x9c91. It checks if movement points are 0 (using a 2-byte &#039;&#039;test eax, eax&#039;&#039;) and then proceeds to different code if movement points are (or not) zero. If one wants to change it to a higher number (to avoid reminding of movement for heroes that can&#039;t actually move anymore), the following code can be used:&lt;br /&gt;
&lt;br /&gt;
:0x9c91: {{---}}{{---}}a1 c8876900 &#039;&#039;mov eax, [0x6987c8]&#039;&#039; e9 849d0d00 (jump to some arbitrary free space) 90909090&lt;br /&gt;
: free space: {{-}}3d XY000000 &#039;&#039;cmp eax, XY&#039;&#039; - compare movement points with value XY. &lt;br /&gt;
:::: {{---}}7F 0A &#039;&#039;jg 0x0a&#039;&#039; - jump 10 bytes if the value is greater. &lt;br /&gt;
:::: {{---}}A1 C4 5d 6A 00 - displaced code&lt;br /&gt;
:::: {{---}}e9 6f62f2ff - jump to 0x9c9f (or 49C9F)&lt;br /&gt;
:::: {{---}}e9 a462f2ff - jump to 0x9cd9 (or 49CD9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=18817 heroescommunity.com - Editing heroes in memory] - Includes a large number of various Reference IDs&lt;br /&gt;
#  [http://heroescommunity.com/viewthread.php3?TID=42152&amp;amp;pagenumber=1 heroescommunity.com - How to edit Hota?] - Thread with majority of useful information, scrambled across 112 forum pages. &lt;br /&gt;
#  [http://btb2.free.fr/mods/h3/hacking.txt BTB2&#039;s hacking guide] - primarily detailing creation of his own mod, but including tips, explanations and some of the Reference IDs&lt;br /&gt;
# [https://handbookhmm.ru/forum/viewtopic.php?f=56&amp;amp;t=968 void_17&#039;s database] - this database describes most or all of the functions in the base game of heroes 3. &lt;br /&gt;
#* [https://drive.google.com/file/d/1MY28K8cVbAeBzAbBBBf5ZeK-0aLMfz_d/view void_17&#039;s database] (link 2). &lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Deus</name></author>
	</entry>
</feed>