Heroes of Might and Magic Community
visiting hero! Register | Today's Posts | Games | Search! | FAQ/Rules | AvatarList | MemberList | Profile


Age of Heroes Headlines:  
5 Oct 2016: Heroes VII development comes to an end.. - read more
6 Aug 2016: Troubled Heroes VII Expansion Release - read more
26 Apr 2016: Heroes VII XPack - Trial by Fire - Coming out in June! - read more
17 Apr 2016: Global Alternative Creatures MOD for H7 after 1.8 Patch! - read more
7 Mar 2016: Romero launches a Piano Sonata Album Kickstarter! - read more
19 Feb 2016: Heroes 5.5 RC6, Heroes VII patch 1.7 are out! - read more
13 Jan 2016: Horn of the Abyss 1.4 Available for Download! - read more
17 Dec 2015: Heroes 5.5 update, 1.6 out for H7 - read more
23 Nov 2015: H7 1.4 & 1.5 patches Released - read more
31 Oct 2015: First H7 patches are out, End of DoC development - read more
5 Oct 2016: Heroes VII development comes to an end.. - read more
[X] Remove Ads
LOGIN:     Username:     Password:         [ Register ]
New Server | HOMM1: info forum | HOMM2: info forum | HOMM3: info forum | HOMM4: info forum | HOMM5: info forum | MMH6: wiki forum | MMH7: wiki forum
Heroes Community > Heroes 3.5 - WoG and Beyond > Thread: How to edit HotA?
Thread: How to edit HotA? This thread is 32 pages long: 1 2 3 4 5 ... 10 20 ... 28 29 30 31 32 · «PREV / NEXT»
Erdamon
Erdamon


Hired Hero
posted October 26, 2017 09:15 AM

Hey fellas. Any new scripts in the works ?

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
phoenix4ever
phoenix4ever


Supreme Hero
Heroes is love, Heroes is life
posted October 26, 2017 05:18 PM

I would really like it if any of you could make some "un-HotA" plug-ins.

I would like for Inferno:
* To require Mage Guild level 2 for Pit Lords again.
* Arch Devils to give only -1 to enemy luck.

I would like for Tower:
* To get their old build order back, where Mage Tower needs to be build before Altar of Wishes and Golden Pavillion. (Instead I will move some of the special ressource cost from Mage Tower to Upg. Mage Tower, this I can easily do myself.)

I would like for Conflux:
* Sprite building no longer requires Magic University.
* Firebirds immune to Fire Magic again.

It could perhaps be done with 1 plug-in containing all 5 changes or 5 separate plug-ins. I would be very happy if someone could/would do it.

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
RoseKavalier
RoseKavalier


Honorable
Famous Hero
posted October 27, 2017 01:46 AM bonus applied by Maurice on 29 Oct 2017.
Edited by RoseKavalier at 18:38, 28 Oct 2017.

So I spent a bit of time with OllyDbg to figure out the general workings of building requirements.
e.g.


There's a function that's responsible for constructing Castle building depedencies (0x4EB810), however HotA's dll erases all that was done and move it around.

In SoD, building dependencies start around 0x6977E8 and are formed of QWORD (2x DWORD).
In HotA, because of the new town, they reworked the dependencies to a dynamic address that is rewritten every time you start the game. You might be able to fix this using hex editing of the HotA DLL but I think there's an easier way.

Since the game still needs to figure out what the building dependencies are, all of the old references to 0x6977E8 are replaced by references to the dynamic address. You can read this new reference with a plugin and that gives you the new "base" to building dependencies.

What's left to do is getting the offset to your desired building and then writing the value of the new building dependencies there.

References can be obtained from one of many places, I was inspecting this area:
int new_reference1 = *(int*)0x5D6018;
int new_reference2 = *(int*)0x5D601F;
// or simply new_reference1 + 4

The offset to your building of consideration is:
int building_offset = 8 * [building_ID + town_type * 44];

building_ID: see ERM help (List of all building for CA receiver)
town_type: 0 Castle, 1 Ramp, 2 Tower, ...

int dependencies1 = *(int*)(new_reference1 + building_offset);
int dependencies2 = *(int*)(new_reference2 + building_offset);


Ok, what about dependencies?
Again, see ERM help (List of all building for CA receiver).
It's essentially 32 bits format (11111111111111....) like Maurice explained earlier in this thread which can also be done with hex easily enough.
e.g. bit vs hex
1 = 1
10 = 2
100 = 4
111 = 1 + 2 + 4 = 7

Since I've referenced ERM help, we'll follow their format. In this special case there is no need to reverse the hex/bits as ERM help put them from left to right already.

e.g. (all in hex)
If you want a particular building to require Mage Guild Level 1, the first byte should contain '01'.
... require tavern, the first byte should contain '20'
To require both, you would have 20 + 01 = 21

Example in SoD vs HotA



[Note: ERM counts bytes from 0]
Byte ~0~ in SoD is 81h
The 1 is for '01', that means Mage Guild Level 1. There is no Mage Guild Requirement in HotA because the '01' is absent.
Then we have '80', that means Fort.

Byte ~1~ is '00' -> no dependencies
Byte ~2~ is '00' -> no dependencies

Byte ~3~ is 'C0'
That is the sum of '40' + '80'
'40' for the byte #3 is 'Dwelling 1' aka Workshop
'80' for byte #3 is 'Dwelling 2' aka Parapet

Byte ~4~ is '03' '05' for HotA
That is the sum of '01' + '02' '01' + '04'
'01' is dwelling 3 aka Golem Factory
'02' is dwelling 4 aka Mage Tower but not in HotA
'04' is dwelling 5 aka Altar of Wishes in HotA

With this, you should have everything needed to figure out the dependencies and offsets you wish for now and in the future.

~~~

Archdevil -luck back to original value
_PI->WriteHexPatch(0x44AFFF, "83 3E 37 74 1B");
(restores original code, but in reverse order)
EDIT: see bottom of this post.

~~~

Firebirds
I haven't looked yet, I will edit in later. Maybe it's just a creature flag (0x4000) which would be simple enough.
EDIT: yep, intuition was correct...this should bring it back.
o_pCreatureInfo[CID_FIREBIRD].flags = 0x409B;
____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2

 Send Instant Message | Send E-Mail | View Profile | PP | Quote Reply | Link
OxFEA
OxFEA


Promising
Famous Hero
feanor on DF2.ru
posted October 27, 2017 09:35 AM bonus applied by Maurice on 29 Oct 2017.
Edited by OxFEA at 09:39, 27 Oct 2017.

Afaik, this table is dynamic, and filled after game start
Initial data, at least at vanilla and WoG-branch uses strange tree-like structure:



http://forum.df2.ru/index.php?s=&showtopic=6803&view=findpost&p=742544

#define    BLD_ID_MAGE1    0
#define    BLD_ID_MAGE2    1
#define    BLD_ID_MAGE3    2
#define    BLD_ID_MAGE4    3
#define    BLD_ID_MAGE5    4
#define    BLD_ID_TAVERN    5
#define    BLD_ID_WHARF    6
#define    BLD_ID_FORT1    7
#define    BLD_ID_FORT2    8
#define    BLD_ID_FORT3    9
#define    BLD_ID_HALL1    10
#define    BLD_ID_HALL2    11
#define    BLD_ID_HALL3    12
#define    BLD_ID_HALL4    13
#define    BLD_ID_MARKET    14
#define    BLD_ID_SILO    15
#define    BLD_ID_SMITH    16
#define    BLD_ID_SPEC17    17
#define    BLD_ID_HORDE1    18
#define    BLD_ID_HORDE1U    19
#define    BLD_ID_WHARF2    20
#define    BLD_ID_SPEC21    21
#define    BLD_ID_SPEC22    22
#define    BLD_ID_SPEC23    23
#define    BLD_ID_HORDE2    24
#define    BLD_ID_HORDE2U    25
#define    BLD_ID_GRAIL    26
#define    BLD_ID_DECOR27    27
#define    BLD_ID_DECOR28    28
#define    BLD_ID_DECOR29    29
#define    BLD_ID_DWELL1    30
#define    BLD_ID_DWELL2    31
#define    BLD_ID_DWELL3    32
#define    BLD_ID_DWELL4    33
#define    BLD_ID_DWELL5    34
#define    BLD_ID_DWELL6    35
#define    BLD_ID_DWELL7    36
#define    BLD_ID_DWELL1U    37
#define    BLD_ID_DWELL2U    38
#define    BLD_ID_DWELL3U    39
#define    BLD_ID_DWELL4U    40
#define    BLD_ID_DWELL5U    41
#define    BLD_ID_DWELL6U    42
#define    BLD_ID_DWELL7U    43

int Dependencies0[] = {
   BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_WHARF,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SPEC22,    BLD_ID_TAVERN,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_SPEC17,    BLD_ID_WHARF,    -1,
   BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_SMITH,    BLD_ID_MAGE1,    BLD_ID_MARKET,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL1,    BLD_ID_SMITH,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL4,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL3U,    -1,
   BLD_ID_SPEC21,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL6,    BLD_ID_SPEC21,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL4,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies1[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_SPEC17,    -1,
   BLD_ID_SPEC21,    BLD_ID_SPEC17,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_MAGE1,    BLD_ID_SMITH,    BLD_ID_MARKET,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL2,    -1,
   BLD_ID_SPEC22,    BLD_ID_HORDE1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL2U,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL3,    -1,
   BLD_ID_HORDE2,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_HORDE2U,    BLD_ID_DWELL5U,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL6,    BLD_ID_MAGE2,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    BLD_ID_MAGE3,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies2[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_SPEC21,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_SPEC22,    BLD_ID_MAGE1,    -1,
   BLD_ID_SPEC23,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_SPEC17,    BLD_ID_MARKET,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_MARKET,    BLD_ID_SMITH,    BLD_ID_MAGE1,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL2U,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL2,    BLD_ID_DWELL3,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    BLD_ID_SPEC22,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL5,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies3[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_SPEC21,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_SPEC22,    BLD_ID_FORT2,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_SPEC23,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_SMITH,    BLD_ID_MARKET,    BLD_ID_MAGE1,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE2,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_HORDE2U,    BLD_ID_DWELL3U,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    BLD_ID_MAGE2,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL5,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies4[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_SPEC17,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_WHARF,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_SPEC21,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_MARKET,    BLD_ID_SMITH,    BLD_ID_MAGE1,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_SPEC22,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1,    BLD_ID_SPEC22,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_SPEC22,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    BLD_ID_SPEC21,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL2,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies5[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_SPEC22,    -1,
   BLD_ID_SPEC23,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_SPEC17,    BLD_ID_MARKET,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_SPEC21,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_SMITH,    BLD_ID_MARKET,    BLD_ID_MAGE1,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL3,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL5,    BLD_ID_DWELL6,    BLD_ID_MAGE2,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    BLD_ID_MAGE3,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies6[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_SPEC17,    BLD_ID_FORT1,    -1,
   BLD_ID_SPEC23,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_SPEC22,    BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_SPEC21,    BLD_ID_MARKET,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_MAGE1,    BLD_ID_MARKET,    BLD_ID_SMITH,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    BLD_ID_DWELL1U,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    BLD_ID_SMITH,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies7[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_SPEC21,    BLD_ID_FORT1,    -1,
   BLD_ID_SPEC22,    BLD_ID_SPEC21,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_SPEC17,    BLD_ID_HALL2,    BLD_ID_SPEC21,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_MARKET,    BLD_ID_SMITH,    BLD_ID_MAGE1,    -1,
   BLD_ID_WHARF,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    BLD_ID_TAVERN,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL3,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    BLD_ID_SILO,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL6,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};


int Dependencies8[] = {
   BLD_ID_FORT1,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_WHARF,    -1,
   BLD_ID_TAVERN,    -1,
   BLD_ID_SMITH,    -1,
   BLD_ID_MARKET,    -1,
   BLD_ID_SILO,    BLD_ID_MARKET,    -1,
   BLD_ID_SPEC17,    BLD_ID_MARKET,    -1,
   BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_SPEC21,    BLD_ID_MAGE1,    -1,
   BLD_ID_HALL2,    BLD_ID_TAVERN,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    BLD_ID_MARKET,    BLD_ID_SMITH,    BLD_ID_MAGE1,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    BLD_ID_FORT3,    -1,
   BLD_ID_DWELL1,    BLD_ID_FORT1,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    -1,
   BLD_ID_DWELL2,    BLD_ID_DWELL1,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL3,    BLD_ID_DWELL1,    BLD_ID_MAGE1,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    BLD_ID_DWELL2U,    -1,
   BLD_ID_DWELL5,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6,    BLD_ID_DWELL4,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    BLD_ID_MAGE2,    -1,
   BLD_ID_DWELL7,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   BLD_ID_GRAIL,    -1,
   -100
};

//"Upgrade" relationship (replacement of obsolete building with new one)
int ObsolutionsAll[] = {
   BLD_ID_MAGE2,    BLD_ID_MAGE1,    -1,
   BLD_ID_MAGE3,    BLD_ID_MAGE2,    -1,
   BLD_ID_MAGE4,    BLD_ID_MAGE3,    -1,
   BLD_ID_MAGE5,    BLD_ID_MAGE4,    -1,
   BLD_ID_FORT2,    BLD_ID_FORT1,    -1,
   BLD_ID_FORT3,    BLD_ID_FORT2,    -1,
   BLD_ID_HALL2,    BLD_ID_HALL1,    -1,
   BLD_ID_HALL3,    BLD_ID_HALL2,    -1,
   BLD_ID_HALL4,    BLD_ID_HALL3,    -1,
   BLD_ID_HORDE1U,    BLD_ID_HORDE1,    -1,
   BLD_ID_HORDE2U,    BLD_ID_HORDE2,    -1,
   BLD_ID_DWELL1U,    BLD_ID_DWELL1,    -1,
   BLD_ID_DWELL2U,    BLD_ID_DWELL2,    -1,
   BLD_ID_DWELL3U,    BLD_ID_DWELL3,    -1,
   BLD_ID_DWELL4U,    BLD_ID_DWELL4,    -1,
   BLD_ID_DWELL5U,    BLD_ID_DWELL5,    -1,
   BLD_ID_DWELL6U,    BLD_ID_DWELL6,    -1,
   BLD_ID_DWELL7U,    BLD_ID_DWELL7,    -1,
   -100
};


int Obsolutions0[] = {
   BLD_ID_SPEC22,    BLD_ID_TAVERN,    -1,
   BLD_ID_HORDE1,    BLD_ID_DWELL3,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL3U,    BLD_ID_HORDE1,    -1,
   -100
};


int Obsolutions1[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL2,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL2U,    BLD_ID_HORDE1,    -1,
   BLD_ID_HORDE2,    BLD_ID_DWELL5,    -1,
   BLD_ID_HORDE2U,    BLD_ID_DWELL5U,    BLD_ID_HORDE2,    -1,
   BLD_ID_SPEC21,    BLD_ID_SPEC17,    -1,
   -100
};


int Obsolutions2[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL2,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL2U,    BLD_ID_HORDE1,    -1,
   -100
};


int Obsolutions3[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_HORDE1,    -1,
   BLD_ID_HORDE2,    BLD_ID_DWELL3,    -1,
   BLD_ID_HORDE2U,    BLD_ID_DWELL3U,    BLD_ID_HORDE2,    -1,
   -100
};


int Obsolutions4[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_HORDE1,    -1,
   -100
};


int Obsolutions5[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_HORDE1,    -1,
   -100
};


int Obsolutions6[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_HORDE1,    -1,
   -100
};


int Obsolutions7[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_HORDE1,    -1,
   -100
};


int Obsolutions8[] = {
   BLD_ID_HORDE1,    BLD_ID_DWELL1,    -1,
   BLD_ID_HORDE1U,    BLD_ID_DWELL1U,    BLD_ID_HORDE1,    -1,
   -100
};

//for patch in DllMain (later data are gone and we'll have to patch bitfields)
*(int*)0x004EB816 = (int)Dependencies0;

*(int*)0x004EB8B3 = (int)Dependencies1;

*(int*)0x004EB971 = (int)Dependencies2;

*(int*)0x004EBA39 = (int)Dependencies3;

*(int*)0x004EBA48 = (int)Dependencies4;

*(int*)0x004EBA5C = (int)Dependencies5;

*(int*)0x004EBA70 = (int)Dependencies6;

*(int*)0x004EBA84 = (int)Dependencies7;

*(int*)0x004EBA98 = (int)Dependencies8;

*(int*)0x004EBAC9 = (int)ObsolutionsAll;
*(int*)0x004EBB04 = (int)ObsolutionsAll;
*(int*)0x004EBB3F = (int)ObsolutionsAll;
*(int*)0x004EBB7A = (int)ObsolutionsAll;
*(int*)0x004EBC74 = (int)ObsolutionsAll;

*(int*)0x004EBAD8 = (int)Obsolutions0;
*(int*)0x004EBB13 = (int)Obsolutions1;
*(int*)0x004EBB89 = (int)Obsolutions2;
*(int*)0x004EBB4E = (int)Obsolutions3;
*(int*)0x004EBB98 = (int)Obsolutions4;
*(int*)0x004EBBA7 = (int)Obsolutions5;
*(int*)0x004EBBB6 = (int)Obsolutions6;
*(int*)0x004EBBC5 = (int)Obsolutions7;
*(int*)0x004EBBD4 = (int)Obsolutions8;

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
RoseKavalier
RoseKavalier


Honorable
Famous Hero
posted October 27, 2017 03:56 PM

Thanks, OxFEA. I still find it a bit confusing so I decided to implement my suggestion into an easy-to-use header and hook.

Line 9 is an example for Naga Dwelling.
First argument is town id.
Second argument is building id.
Third argument is a list of all buildings you want as requirement to build the current building. Separated by | means logical OR;
in English it means require all of these buildings.


You'll need this:
town_dependencies.h
I included it directly in "homm3.h" with the other includes there.

It's easy enough for my taste and works in SoD and HotA. Did not check WoG.

____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2

 Send Instant Message | Send E-Mail | View Profile | PP | Quote Reply | Link
Ben80
Ben80


Hired Hero
posted October 27, 2017 06:50 PM

@RoseKavalier,

Can you commit bug fix for Air Shield during Siege Combat ?
____________

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
RoseKavalier
RoseKavalier


Honorable
Famous Hero
posted October 27, 2017 07:11 PM

Ben80 said:
@RoseKavalier,

Can you commit bug fix for Air Shield during Siege Combat ?


The Armorer bug fix also works for Air Shield. (same bug, same fix)

e.g. No armorer but expert Air Shield: (50%)


BTW, anyone is free to contribute to that repository.
____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2

 Send Instant Message | Send E-Mail | View Profile | PP | Quote Reply | Link
Baronus
Baronus


Supreme Hero
posted October 27, 2017 07:49 PM

GREAT! YOU KNOW HOW REMOVE DEPENDIENCES! Big discovery!
So how to remove biggest fail dependence capitol from castle in SoD/HotA?

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
RoseKavalier
RoseKavalier


Honorable
Famous Hero
posted October 27, 2017 08:50 PM

Baronus said:
GREAT! YOU KNOW HOW REMOVE DEPENDIENCES! Big discovery!
So how to remove biggest fail dependence capitol from castle in SoD/HotA?


Not really a discovery if it was known before
According to Game Manual, it requires City Hall + Castle.


int HOTA_EXE = (*(int*)0x41C6B5 != 0x21620);
for (int town_id = 0; town_id < 8 + HOTA_EXE; town_id++)
   o_TownDependencies->ChangeDepedency(town_id, BLD_ID_CAPITOL, BLD_REQ_CITY_HALL);


There might be an offset that has the number of towns instead of comparing the hero structures offset but I couldn't be bothered to look.
____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2

 Send Instant Message | Send E-Mail | View Profile | PP | Quote Reply | Link
Ben80
Ben80


Hired Hero
posted October 28, 2017 09:22 AM
Edited by Ben80 at 13:38, 28 Oct 2017.

Spell Mirth at any school level acts on all friendly units. Moral is always increased by 1 and (if final moral is positive) additionally probability of extra attacks is increased - depending on Water school level by 50/50/75/100% from bonus value, related to moral.
For example, if we initially have Moral equal 3, after Expert Mirth we well have probability of extra attacks equal 25%, not 12.5%. Besides, secondary skill Leadership (besides usual increase of Moral) now also increase probability of extra attacks - by 10/20/30% from bonus value, related to moral. For example, if we have Moral equal 3 and we have Expert Leadership, probability of extra attacks will be equal 16.25%, not 12.5%.

Procedure of "weighting" of spell by AI is completely rewritten. AI is using such procedures for spells in battle to select spell which will be applied.
Tested on SoD/Complete.

NewMirthLeadershipStrongAI
____________

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Ben80
Ben80


Hired Hero
posted October 28, 2017 09:23 AM

Erdamon said:
Hey fellas. Any new scripts in the works ?


We need help of people who used such scripts - bug reports, feedback.
____________

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Baronus
Baronus


Supreme Hero
posted October 28, 2017 10:54 AM

Thanks. So if I give ff and ff instead 0 to 8 for all cities dependency will be removed.

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Ben80
Ben80


Hired Hero
posted October 28, 2017 02:46 PM

I have updated NewMirthLeadershipStrongAI
- bonus for Leadership 5/15/30% instead of 10/20/30%


NewMirthLeadershipStrongAI v.2

____________

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Serp
Serp


Known Hero
posted October 28, 2017 03:58 PM

Great work with the depedencies, also thank you for the town_dependencies.h !

@RoseKavallier:
1) Please add town_dependencies also to your HoMM3includes upload
Or is it not meant to be updated with new stuff?
That way it is also easier to see what is new in your homm3.h file.

2) Btw... all those .h and .cpp files work for HoTA and for Complete Heroes?

3) Was the spelling "ChangeDepedency" intended? Or do you plan to change it to "ChangeDependency" ?

4) You wrote you will do something with homm3.h , so the following is not necessary anymore:
"Configuration Properties -> C/C++ -> Code Generation, and set Struct Member Alignment to "1 Byte (/Zp1)""
Did you already do that with your homm3.h in towndependencies?


5) I tried to make a plugin for Conflux SpriteNoDependencies with your includes, but I get this error:
town_dependencies.h(4) : fatal error C1083: Cannot open include file: 'stdint.h': No such file or directory
Where do I get the stdint.h file?

6) And I'm not sure what to put into your ChangeDepedency function if I don't want any dependency, will it work to just leave it blank?
int __stdcall new_town_dependencies(LoHook *h, HookContext *c)
{
// IDs see town_dependencies.h file
o_TownDependencies->ChangeDepedency(TOWN_ID_CONFLUX, BLD_ID_DWELL1U); // town, building, dependencies seperated by |
return EXEC_DEFAULT;
}
Or should I put "false" or "true" as third argument?

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Serp
Serp


Known Hero
posted October 28, 2017 04:29 PM

I solved 5) by downloading an open source stdint.h and putting it into my includes folder. And changing <stdint.h> to "stdint.h" within the town_depencies.h file.
But I hope there is a better solution, to add this stdint.h file to my Visual Studio 2008 Express Version.

I circumvent 6) by using mage guild 1 as only depedency. But still would be interested to know how to change it to "no depedency".

Here is the plugin:
http://handbookhmm.ru/forum/viewtopic.php?p=17059#p17059

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
phoenix4ever
phoenix4ever


Supreme Hero
Heroes is love, Heroes is life
posted October 28, 2017 05:38 PM
Edited by phoenix4ever at 18:09, 28 Oct 2017.

Thanks for those two Conflux plug-ins RoseKavalier and Serp. Very nice.

(If you download the Firebird plug-in, don't forget to change Firebird AI Value, in crtraits.txt, from 4336 -> 4547 like in original game.)

RoseKavalier said:
Archdevil -luck back to original value
_PI->WriteHexPatch(0x44AFFF, "83 3E 37 74 1B");
(restores original code, but in reverse order)

This doesn'nt seem to be working for me though...

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
RoseKavalier
RoseKavalier


Honorable
Famous Hero
posted October 28, 2017 05:41 PM
Edited by RoseKavalier at 18:36, 28 Oct 2017.

Serp said:
Great work with the depedencies, also thank you for the town_dependencies.h !

@RoseKavallier:
1) Please add town_dependencies also to your HoMM3includes upload
Or is it not meant to be updated with new stuff?
That way it is also easier to see what is new in your homm3.h file.

2) Btw... all those .h and .cpp files work for HoTA and for Complete Heroes?

3) Was the spelling "ChangeDepedency" intended? Or do you plan to change it to "ChangeDependency" ?

4) You wrote you will do something with homm3.h , so the following is not necessary anymore:
"Configuration Properties -> C/C++ -> Code Generation, and set Struct Member Alignment to "1 Byte (/Zp1)""
Did you already do that with your homm3.h in towndependencies?


5) I tried to make a plugin for Conflux SpriteNoDependencies with your includes, but I get this error:
town_dependencies.h(4) : fatal error C1083: Cannot open include file: 'stdint.h': No such file or directory
Where do I get the stdint.h file?

6) And I'm not sure what to put into your ChangeDepedency function if I don't want any dependency, will it work to just leave it blank?
int __stdcall new_town_dependencies(LoHook *h, HookContext *c)
{
// IDs see town_dependencies.h file
o_TownDependencies->ChangeDepedency(TOWN_ID_CONFLUX, BLD_ID_DWELL1U); // town, building, dependencies seperated by |
return EXEC_DEFAULT;
}
Or should I put "false" or "true" as third argument?


1) everything will be here from now on

2) yes as far as I can tell from my limited interaction with HotA so far

3) Yea it's a typo, I've updated it.

4) structures and classes are contained within
#pragma pack(push, 1)
{...}
#pragma pack(pop)


5) it should already be there but I guess not for versions of VS pre-2010. I will redefine the variable types instead.

6) Needs 3 arguments, just put '0' for requirement, or the newly added 'NO_REQ'

~~~~

RoseKavalier said:
Archdevil -luck back to original value
_PI->WriteHexPatch(0x44AFFF, "83 3E 37 74 1B");
(restores original code, but in reverse order)

This doesn'nt seem to be working for me though...


I have not tested it. In theory it should work unless the HotA patch there is somehow applied later. Let me check.

EDIT:
indeed, the HotA patch is applied during the modifications just before 0x4EEA79.

Just place the HexPatch within a LoHook at 0x44AFFF, that works 100%.

BTW, this is only HotA. For SoD compatibility do the following instead:
_PI->WriteHexPatch(0x44AFFF, "83 3E 36 74 1B");
_PI->WriteByte(0x44B011, 0x37);

____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2

 Send Instant Message | Send E-Mail | View Profile | PP | Quote Reply | Link
Ben80
Ben80


Hired Hero
posted October 28, 2017 06:45 PM

@RoseKavalier,

Thank you very much for town_dependencies.h !
This is cool !
____________

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Ben80
Ben80


Hired Hero
posted October 28, 2017 07:07 PM

Serp said:

But I hope there is a better solution, to add this stdint.h file to my Visual Studio 2008 Express Version.



Amusingly, I also use Visual C++ 2008 Express Version (not whole Visual Studio).
____________

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Erdamon
Erdamon


Hired Hero
posted October 28, 2017 08:29 PM

Ben80 said:
Erdamon said:
Hey fellas. Any new scripts in the works ?


We need help of people who used such scripts - bug reports, feedback.


You found your man. I've been hitting the Russian website and download the plugin ever since you first mentioned it. Just let me know what aspects are you interested in and where should I submit my feedback.

 Send Instant Message | Send E-Mail | View Profile | Quote Reply | Link
Jump To: « Prev Thread . . . Next Thread » This thread is 32 pages long: 1 2 3 4 5 ... 10 20 ... 28 29 30 31 32 · «PREV / NEXT»
Post New Poll    Post New Topic    Post New Reply

Page compiled in 0.2516 seconds