|
|
RoseKavalier
Admirable
Supreme Hero
|
posted January 06, 2018 04:53 PM |
|
|
|
phoenix4ever
Legendary Hero
Heroes is love, Heroes is life
|
posted January 06, 2018 06:48 PM |
|
|
It should be pretty easy to remove mass effect from spells, but of course finding and changing hex values takes time.
I wen't the other way and gave Slayer and Magic Mirror mass effect. I also nerfed mass Haste and Slow in other ways.
|
|
FfuzzyLogik
Known Hero
|
posted January 06, 2018 10:06 PM |
|
|
Fearun said: [...]You know that my ultimate goal, is to make this game the more balanced possible.
The bigest part is to balance Might and Magic.
Might heroes becomes quickly stronger than Magic Heroes. This is what I want to work on.
First of all by changing Spells. I would like so much to remove all Mass effect of the game. [...]
Hello Fearun,
I have exactly the same opinion and try to do the same for M&M and artifacts. I also try to increase strategy aspects (so try to diminish "luck" in game and make more possibilities of strategy, as you say, zone spells require good position for creature so more strategy aspects because you can also be more easily slowed...)
A bad solution for artifact but is working is the next one : make them "not equippable" so they can be found but do not work. For now I made them minor and trasure artifact "not equippable" (change it with the ARTRAITS.txt) but very expensive, so they are just of use to be sold...
Rose Kavalier give you the way to make them "not be global spells" and I think I understood quite well (because of his nice explanations) how to do that.
But I do not understand for now how to make it working like "berserk" or "fireball" spell as you said : affect one creature then a bonus zone of 9 hex then a bonus zone of 21 hex. I fear alot other consequences. Berserk spell don't affects normally ally creatures so if I try to use the same "hex code" for spells like bless or haste..., I fear some bugs when/if artifacts or IA casts these spells...
I'm trying to understand but I don't got answers for now. If I do, I'll tell you !
To change them to "single spell" as expert, its quite easy : All spells who do that have this kind of finishing : 45 are mass spells at expert (as samples in green slow in blue slayer) :
ff ff ff ff 9c 80 68 00 13 00 00 00 45 10 04 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 01 00 00 00 90 80 68 00
1c 00 00 00 15 08 04 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
The 45 means 40 : mass at expert ; 5 (4+1 as explained better by RoseKavalier) means 1 battlefield spell and 4 (not sure but codes for duration maybe ?).
So every spells in the list with this "45" may be replaced by "15" and there won't be mass spells as expert normally...
The adress for spells table begins at 2854A0h and ends near 287FA0h. After that you got the spell's song name where the underscored adresses refers (RoseKavalier suggest to see here if you made no mistake, nice trick example for slow : 9c 80 68 00 => 00 68 80 9c then substract 40 00 00 => 00 28 80 9c and adress here says "muckmire.wav" ; that's it ^^).
The last spells are creature spells (gorgon's gaze, ill, wyvern's poison...)
To help me, for spell equilibration Alexspl made a patch (because I'm too noob and he nicely ask me if I'd like he makes this for me, that was a verrrrry nice gift) who changes spell duration to make spells a bit stronger/weaker to equilibrate them.
http://handbookhmm.ru/forum/viewtopic.php?f=56&t=518&sid=4784e2e626981609baddb35a2e6cbae9&start=270
Description of it :
https://www.mediafire.com/folder/2h6kjcuqkyoos/For_spell_duration_mod
I hope it helps,
FfuzzyLogik.
____________
FfuzzyLogik.
If I'm crazy ? Sure, because its madness to be normal...
|
|
peter1985
Hired Hero
|
posted January 07, 2018 12:09 AM |
|
|
Thank you very much for the help so we can now upgrade our H3 project! Many people gave us ideas and suggestions that we are trying to accomplish but are not simple.
There are a few things I've read here, but I do not understand. I've read that the special abilities of the units can be changed, but I lose the many numbers. :-)
I would write 1-2 specific questions to see if I could better understand the system:
If I want the Lizard Warrior to shoot when it is 20% poisoned?
If I want the dragons not to give titans 150% attack, but something else?
If I want Genie to make chain lightning?
If I want the Cyclops not to be blinded? (Troglodyte ability)
|
|
RoseKavalier
Admirable
Supreme Hero
|
posted January 07, 2018 05:43 AM |
|
|
Rough reply for now.
peter1985 said:
If I want the Lizard Warrior to shoot when it is 20% poisoned?
Not sure what you're asking...
A) Lizard adds poison?
B) Lizard automatically shoots when 20% poison applied (2nd turn of poison)
C) ??
A) should be possible, maybe even with hex edit by copying Wyvern ability
B) complicated
peter1985 said:
If I want the dragons not to give titans 150% attack, but something else?
Probably... different creature or different % ?
peter1985 said:
If I want Genie to make chain lightning?
Genies only cast defensive spells. It would require a lot of code to make it behave similar to Faerie Dragons.
peter1985 said:
If I want the Cyclops not to be blinded? (Troglodyte ability)
Plugin or replace Troglodyte by Cyclops.
Well, there is a bit of room for hex edit here and there but in general that's not something I would recommend (even though I've used this in the past )
____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2
|
|
peter1985
Hired Hero
|
posted January 07, 2018 10:05 AM |
|
|
Hello RoseKavalier!
I asked a complicated one! :-) I really wanted to understand the system, thank you very much for the answer. I'll guess something and then experiment. Here on the forum there are more people writing about the special abilities of the units. Please describe where the exe starts and where they end up. How many hexes are the special abilities of a unit?
I think the dragon-titan or efret-genie attacking advantages can be replaced by another being. That's possible? Now only the Wyvern Monarch can poison. Is it possible that two different units can poison? If you have the pointer in which row you have it, then I can write 10% instead of 30%.
I just wanted to know a few things so we can finish the project.
Thank you very much!
|
|
planetavril
Famous Hero
|
posted January 07, 2018 10:39 AM |
|
|
how to recompile the hota.asm file and what is the code part of the city?
|
|
planetavril
Famous Hero
|
posted January 07, 2018 10:46 AM |
|
|
|
RoseKavalier
Admirable
Supreme Hero
|
posted January 07, 2018 03:27 PM |
|
|
peter1985 said: Hello RoseKavalier!
I asked a complicated one! :-) I really wanted to understand the system, thank you very much for the answer. I'll guess something and then experiment. Here on the forum there are more people writing about the special abilities of the units. Please describe where the exe starts and where they end up. How many hexes are the special abilities of a unit?
I think the dragon-titan or efret-genie attacking advantages can be replaced by another being. That's possible? Now only the Wyvern Monarch can poison. Is it possible that two different units can poison? If you have the pointer in which row you have it, then I can write 10% instead of 30%.
I just wanted to know a few things so we can finish the project.
Thank you very much!
There is no such area, every ability is treated in a different part of code.
What you seek with Poison I previously covered here.
+50% damage is if () format so you can change creature IDs, and probably damage.
In general, it (usually, unless I already have them jotted down) takes time to search for these ... I will try to provide addresses/code when question is precise and definitive - otherwise only general comment.
____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2
|
|
planetavril
Famous Hero
|
posted January 07, 2018 08:17 PM |
|
|
it's a utopia one day to be able to add new cities or creatures simply by inserting the def files into hota.lod, joining the vcmi code with the hota code maybe you could do?
|
|
Salamandre
Admirable
Omnipresent Hero
Wog refugee
|
posted January 07, 2018 08:20 PM |
|
|
|
pellish
Famous Hero
|
posted January 07, 2018 11:17 PM |
|
|
I have a 18x18 HotA map but it's listed as "XL" in-game. Obviously there is no standard size below S but is there any way I can edit the map to make it say "S" in-game without changing its size? Thank you.
|
|
Fearun
Tavern Dweller
|
posted January 08, 2018 06:59 PM |
|
Edited by Fearun at 20:32, 08 Jan 2018.
|
"I hope it helps"
Yes, Thanks FfuzzyLogik! We are on the same road
My first attempt was to change Slow Code to become like Berserk....
Berserk is the spell reference, it's the only one who have:
Novice = Target Advanced = 1 Square Master = 2 Squares
and This is what i'm looking for!
Following RoseKAvalier
Slow 0x0287150 ---
ff ff ff ff 9c 80 68 00 13 00 00 00 00 45 10 04 00
Berserk 0x02873f8 ---
ff ff ff ff 68 80 68 00 23 00 00 00 00 85 14 04 00
So I try to change 45 10 04 00 by 85 10 04 00
40+4+1 (Mass Version) to 80+4+1 (Target any location)
But it doesn't work(slow gets Mass Versiom for Novice, Advenced and Master)
I think I have to change FRPOSTNOZERENNEG but I don't know how to find it in Code Hex, Maybe it's in another File
struct _Spell_{ // size:88h
int FRposNOzerENneg;// +0 -1=enemy, 0=square/global/area, 1=friend]
char *SoundFileName; // +4
int DefIndex; // +8 used to get DefName
int Flags; // +C
//0x00000001 - BF spell
//0x00000002 - MAP spell
//0x00000004 - Has a time scale (3 rounds or so)
//0x00000008 - Creature Spell
//0x00000010 - target - single stack
//0x00000020 - target - single shooting stack (???)
//0x00000040 - has a mass version at expert level
//0x00000080 - target - any location
//0x00000100 -
//0x00000200 -
//0x00000400 - Mind spell
//0x00000800 - friendly and has mass version
//0x00001000 - cannot be cast on SIEGE_WEAPON
//0x00002000 - Spell from Artifact
//0x00004000 -
//0x00008000 - AI
//0x00010000 - AI area effect
//0x00020000 - AI
//0x00040000 - AI
//0x00080000 - AI number/ownership of stacks may be changed
//0x00100000 - AI
char *Name; // +10h
char *AbbrName; // +14h
int Level; // +18h
int SchoolBits; // +1Ch Air=1,Fire=2,Water=4,Earth=8
int Cost[4]; // +20h cost mana per skill level
int Eff_Power; // +30h
int Effect[4]; // +34h effect per skill level
int Chance2GetVar[9];// +44h chance per class
int AIValue[4]; // +68h
char *Descript[4]; // +78h
Any Idea? ^^
EDIT: Ok i'm stupid FRPOSTNOZERENNEG is written in the first 4 bytes... //+0 So we have 3 possibilities:
00 00 00 00
01 00 00 00
ff ff ff ff (means -1)
BUT I still don't understand how to change Area for School Level...
All others Bytes are:
00000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000
Why??? it should change, following this:
char *Name; // +10h
char *AbbrName; // +14h
int Level; // +18h
int SchoolBits; // +1Ch Air=1,Fire=2,Water=4,Earth=8
int Cost[4]; // +20h cost mana per skill level
int Eff_Power; // +30h
int Effect[4]; // +34h effect per skill level
int Chance2GetVar[9];// +44h chance per class
int AIValue[4]; // +68h
char *Descript[4]; // +78h
LOST
|
|
peter1985
Hired Hero
|
posted January 08, 2018 10:02 PM |
|
|
Hello RoseKavalier!
What you sent was very helpful to me. I would like to understand the operating principle. With the "ollydbg" program, do you see which number is the unit? For example: SOD exe 000415b8 has no magic for 05.
00 05 05 05 05 05 05 05 05 05 05 05 05 05 05 05
05 05 05 05 05 05 05 05 05 05 05 05 05 05 01 05
05 05 05 05 05 05 05 05 02 03 03 05 05 05 05 05
05 05 05 05 05 05 05 05 05 05 05 05 05 05 05 05
05 05 05 05 05 05 05 05 04
Behind the numbers of 05, where are titanium, golem, wywern or phoenix?
I can not see it with the "hex editor" program.
|
|
peter1985
Hired Hero
|
posted January 08, 2018 10:41 PM |
|
|
Hello FfuzzyLogik!
I've read that you want to create a hydrate that is attacking three. It's like the cerberos unit. Did you create it?
|
|
Fearun
Tavern Dweller
|
posted January 08, 2018 11:17 PM |
|
Edited by Fearun at 23:21, 08 Jan 2018.
|
Hello Peter. It's Hex Editable!
You only have to change few Bytes to make an Hydra attack like a Three heads Cerberus
Go Page 13 ! You'll find all you need to do that. (you can do everthing you want with creatures easely, like a Flying Pikeman, or an Bone dragon with Magic resistance and régénération )
|
|
RoseKavalier
Admirable
Supreme Hero
|
posted January 09, 2018 01:14 AM |
bonus applied by Maurice on 09 Jan 2018. |
|
@Fearun
I think 0x80 flag means cast anywhere i.e. cast on empty tile.
To force single target try 0x10 flag.
The only part of spell targeting I investigated was to enable shadow of Forcefield a few months ago, it might be a switch() statement that handles spells targeting individually, I don't know atm.
@pellish
No clue right now.
@peter1985
I'm running on very bad internet right now, so I have limited answering possibility.
This function works on a switch() statement. I don't know how well versed you are in programming in general but basically, it is an alternative compared to using 140 if statements to handle all cases of an instance (in this case, creature ID).
if (A)
a
if (B)
b
...
if (C)
c
In a switch() statement the code is organized something like this:
1) get switch value [creature ID]
1b) modify switch value to simplify cases [creature ID - 40 or some other number, I forget]
2) based on the switch value, you read a particular value from 6) which are essentially information relating to which case this particular value relates to [poison? paralyze? blind ?]
3) based on 2) the program will read a value from 5) which tell the program where the start of the code for each case is [start of poison, start of paralyze, ..., or NO ACTION]
4) a jump which uses what we got in 2) and 3) and leads us to the appropriate case for our value [the procedure for POISON, ..., or function cleanup]
4b) the core code containing the procedures for each case
5) a list of addresses relating to the various cases [where procedure starts for poison, ...]
6) a list of cases relating to each valid value of switch value [which case corresponds to Wyvern Monarch, which case corresponds to Golem, ...]
With hex editing, the easiest thing to do is edit values in 6) to provide current creature with a new ability.
In many cases, not all creatures will have a corresponding value in 6). This is because of 1b) which tries to simplify based on the various possible cases available. For example, in the case you are looking at, the first creature in increasing order to have a special ability there is DENDROID GUARDS. So part 1b) subtracts the value of Dendroid Guard creature ID in 1b). There is an extra check here usually to see if the modified switch value is out of bounds [in this case, Dendroid Guard up to Mummy] and then it skips the entire procedure.
Long story short - the current switch statement - part 6) - only has case values for creatures between Dendroid Guard and Mummy as these are the first and last creatures in order to have a special ability taken care of by the code in this location.
So the first value you'll see in 6) is '00' and that corresponds to Dendroid Guard. The next value is for the next creature ID, Unicorn. etc. up until Mummy.
EDIT: internet improved a bit, but not much
This is part 5) and 6) of the switch() I was talking about
If you place current line like I did on case 0 and press 'Enter' it takes you to the corresponding portion of 4b).
OllyDbg is nice and tells you which switch values correspond to this switch case (16h and 17h).
____________
My Let's Plays: Metataxer's Revenge - The Empire of The World 2
|
|
Fearun
Tavern Dweller
|
posted January 09, 2018 02:47 AM |
|
Edited by Fearun at 15:14, 09 Jan 2018.
|
In response to Gandalf>
Dear Gandalf,
Class
Agression (I don't know what is it)
Initial Skill (Att Def Pow Kno)
Probability to gain a Primary Skill by new Level before Level 10
Probability to gain a Primary Skill by new Level after Level 10
Probability to gain Secondary Skill by new level (in order: Pathfinding Archery Logistics Scouting Diplomacy Navigation Leadership Wisdom Mysticism Luck Siege Ballistics Eagle Eye Necromancy Estates School of Fire Magic School of Air Magic School of Water Magic School of Earth Magic Magic Scholar Battle Tactics Battlefield Ballistics Learning Offense Defense Intelligence Sorcery Magic Resistance First Aid) >>> Zero (0) means Impossible to get.
And 10 is Maximum chance to get (10 out of 112)
Knight 1.00 2 2 1 1 35 45 10 10 30 30 20 20 4 5 5 4 4 8 10 3 2 3 8 2 0 6 1 3 4 2 1 7 5 4 7 5 1 1 5 2 6 6 6 5 5 5 6 6 6
Cleric 0.80 1 0 2 2 20 15 30 35 20 20 30 30 2 3 4 3 7 5 2 7 4 5 4 6 0 3 2 4 4 3 6 2 2 4 4 3 6 5 2 10 6 6 6 5 5 5 6 6 5
Ranger 1.00 1 3 1 1 35 45 10 10 30 30 20 20 7 8 5 7 4 3 6 3 3 6 4 2 0 2 0 1 3 3 1 5 6 4 5 8 2 2 9 3 6 6 6 5 5 5 6 5 5
Druid 0.80 0 2 1 2 10 20 35 35 20 20 30 30 5 5 5 2 4 2 2 8 6 9 4 7 0 3 1 2 4 4 8 1 1 4 1 3 7 6 1 7 6 6 6 5 5 5 5 6 6
Alchemist 1.00 1 1 2 2 30 30 20 20 30 30 20 20 4 5 6 4 3 3 3 6 4 2 6 3 0 4 1 4 2 3 3 4 4 10 6 8 4 3 5 2 6 6 6 5 5 5 6 5 5
Wizard 1.00 0 0 2 3 10 10 40 40 30 20 20 30 2 2 2 2 4 1 4 10 8 4 4 8 0 5 2 6 3 3 9 1 1 4 1 1 10 8 0 7 6 6 6 5 5 5 5 6 6
Demoniac 1.20 2 2 1 1 35 35 15 15 30 30 20 20 4 6 10 5 4 4 3 4 2 2 7 3 0 3 4 2 1 3 2 6 5 4 8 7 2 3 6 2 5 5 5 6 6 6 6 5 5
Heretic 1.10 1 1 2 1 15 15 35 35 20 20 30 30 4 4 3 3 3 2 2 8 10 2 6 4 0 2 5 3 2 4 5 4 4 4 4 4 6 6 3 5 5 5 5 6 6 6 5 6 5
Death Knight 1.20 1 2 2 1 30 25 20 25 25 25 25 25 4 5 5 4 2 8 0 6 4 1 7 4 10 0 1 2 3 4 2 5 5 4 7 5 5 4 5 0 5 5 5 6 6 6 6 5 5
Necromancer 1.00 1 0 2 2 15 15 35 35 25 25 25 25 6 2 4 2 4 5 0 8 6 1 5 7 10 3 2 3 3 8 6 2 3 4 3 2 6 6 1 0 5 5 5 6 6 6 5 6 6
Overlord 1.00 2 2 1 1 35 35 15 15 30 30 20 20 5 6 8 5 3 4 8 3 3 1 7 2 0 4 2 1 0 3 1 10 8 4 8 6 1 2 6 1 5 5 5 6 6 6 6 5 5
Warlock 1.00 0 0 3 2 10 10 50 30 20 20 30 30 2 2 2 2 4 4 3 10 8 2 6 8 0 5 5 2 2 5 8 1 1 4 1 1 8 10 0 6 5 5 5 6 6 6 5 6 6
Barbarian 1.10 4 0 1 1 55 35 5 5 30 30 20 20 8 7 7 8 1 2 5 2 3 3 8 2 0 2 2 3 0 3 1 8 8 4 10 6 1 1 6 1 6 6 6 6 6 6 6 5 6
Battle Mage 1.10 2 1 1 1 30 20 25 25 25 25 25 25 4 4 9 4 3 0 4 6 4 2 6 5 0 1 3 3 3 3 4 5 4 4 8 4 5 6 4 4 6 6 6 6 6 6 6 6 5
Beastmaster 0.90 0 4 1 1 30 50 10 10 30 30 20 20 8 7 8 7 1 8 5 2 2 2 7 1 0 1 0 1 2 3 1 6 8 4 5 10 1 1 5 6 6 6 6 6 6 6 6 6 6
Witch 1.00 0 1 2 2 5 15 40 40 20 20 30 30 2 3 3 2 2 6 1 8 8 4 8 10 0 1 3 3 3 3 7 1 1 4 2 4 7 8 0 8 6 6 6 6 6 6 5 6 6
Planeswalker 0.90 3 1 1 1 45 25 15 15 30 30 20 20 6 8 8 6 2 5 3 2 3 2 8 2 0 3 3 2 2 3 1 8 8 8 9 5 1 1 2 1 5 5 5 5 5 5 5 5 6
Elementalist 1.00 0 0 3 3 15 15 35 35 25 25 25 25 2 2 2 2 4 4 3 8 8 2 4 8 0 3 6 6 6 6 8 1 1 4 1 1 8 8 0 4 5 5 5 5 5 5 5 5 6
As you can see in Heroes 3 each class has already a specific primary and secomdary Skill devellopement...
but you can change it by yourself if you need whith MMArchive and TextEdit.
With these tools you can change what you want.
Open H3Bitmap.lod (in Heroes3 foldier) with MMArchive, and extract HCTRAITS.TXT. Open it with TextEdit and Change all value you want, now you just need to replace HCTRAITS.TXT in H3Bitmap.lod. And BOOM it.s done!
You've got your own Game!
Enjoy.
|
|
Fearun
Tavern Dweller
|
posted January 09, 2018 04:05 AM |
|
Edited by Fearun at 19:02, 10 Jan 2018.
|
RoseKavalier said: @Fearun
I think 0x80 flag means cast anywhere i.e. cast on empty tile.
To force single target try 0x10 flag.
The only part of spell targeting I investigated was to enable shadow of Forcefield a few months ago, it might be a switch() statement that handles spells targeting individually, I don't know atm.
-------
I tried 15 10 04 00 and it becomes a single target spell like Hypnose in Basic, Advanced and Expert.
So you must be right, Each Spell seems to be coded Individualy somewhere else like Artefacts
I hope it's still Hex Editable !
EDIT: I've found a Mod from VCMI to change Spell Range effect and it looks like Range can be changed pretty easely
But Range Spell Hex are still missing ;(
"core: protectAir" : {
"levels" : {
"advanced":{
"range" : "0-1"
},
"expert":{
"range" : "0-3"
}
|
|
peter1985
Hired Hero
|
posted January 10, 2018 09:29 PM |
|
|
Unfortunately i do not know this program (ollydbg) and programming.
Do you know where these special abilities are?
sandy terrain +1 (Nomad)
Can spy (Rogue)
Immune to Blinding.(Troglodyte)
defence by 80% (Ancient Behemoth)
Fire shield. (Efreet sultan)
costs 2 more spell point (pegasus)
If a few things are still to be done, I will be able to show you what we have done.
|
|
|
|