Welcome to TA: Kingdoms |
|
| Patch, bugs, balance, improvements... | |
|
+6Vhaerun $ MalinOMW Myst alfalfacat DeeKay Paladin 10 posters | |
Author | Message |
---|
Paladin
Posts : 8 Reputation : 5 Join date : 2016-06-23
| Subject: Patch, bugs, balance, improvements... Fri Jun 24, 2016 10:51 am | |
| Hello. I have recently installed TA Kingdoms. Since then I have been trying to improve the game through bug fixing, feature addition, balancing and other kinds of improvements. I have found a lot of instructions on how to make improvements and other useful information on this forum and on tauniverse .com. That is why I have a lot of questions: 1. Is the latest patch 4.1bb? 2. Is new patch being worked on? 3. Does anybody know how to make movies work when chosen renderer is Direct3D? I only see black screen (but I can hear sound) when movies are playing with that rendering. When using software rendering movies are correctly displayed. I think I have read somewhere that that might be fixed by replacing binkw32.dll. I have tried replacing it with other versions, but it didn't work because I think the .bik movies also need to be converted to the same version as is the .dll file. I have the latest radvideo tools and I have successfully converted older .bik movies to new version. Bink player didn't correctly display older movies (they had distorted colors) while converted movies are correctly displayed with the bink player. Unfortunately I can't find the latest binkw32.dll file, so I can't test this. 4. 4.1bb patch disabled command line arguments. Is there a difference between moving kingdoms.key out of the folder vs hex editing kingdoms.icd to reenable command line arguments and adding -disablecavedogverification argument? By looking at the changes I found out that to enable them hex value at offset 202440 needs to be changed from 57 to 41. (string GetCommandLineW would be changed into GetCommandLineA) 5. I have GoG version of Kingdoms which comes with 4.0 patch. After installing 4.1bb I was unable to start adventure mode (it required CD). So I have downloaded the no cd icd(exe) from alltakdownloads.6te.net, but it didn't work. I noticed that it is for version 3.0. So I looked at the differences between these 3 versions of a file. Since the 3.0 and 4.0 versions didn't require cd to play, I have removed the differences between the 3.0 and 4.0 from differences between 3.0-4.1 and 4.0-4.1. After the removal, same hex offset differences remained, but I need confirmation that these are correct changes and that all of them are needed. (I have already changed my .icd and everything is working correctly) These are the changes (left hex value is original, right is new value): - Spoiler:
0009D6F3: 0F 03 0009FEB7: F4 96 0009FEB8: 01 00 000A5146: 74 EB 000A7DDA: 0F E9 000A7DDB: 84 11 000A7DDC: 10 01 000A7DDD: 01 00 000A7DDF: 00 90 000A7E7A: 74 EB 000BB817: 0F E9 000BB818: 84 13 000BB819: 12 01 000BB81A: 01 00 000BB81C: 00 90 000BB8B5: 74 EB 000E756A: 08 06 001330D1: EB 75
6. I have extracted all of my HPI files using the program HPI View. Is there any disadvantage (excluding memory usage) with having everything extracted instead of packed in .hpi files? Especially if I don't plan to download any mods? 7. Is this the correct order of extraction of HPI files (files in same row don't conflict so their order doesn't matter): data english Jersey maps missions sections terrain meta boneyards boneyards2 V2Rocket.hpi V3Rocket.hpi IPData IPEnglish IPMissions IPSections 8. To remove movement acknowledgement sounds ("bong") I have replaced tonetar.wav, tonenpc.wav, toneara.wav, tonezon.wav, tonever.wav tonecre.wav in sounds/ folder with empty files. (I ordered them this way because I noticed they are equivalent to solfeggio syllables Do, Re, Mi, Fa, Sol, La) I have also tried just deleting these files and both of those options worked. I assume that putting .wav file that just contains a header would also work. Is there any advantage to any of these 3 ways to remove the acknowledgement sounds? Is there a different way to not play these sounds? Perhaps with hex editing? 9. How to improve pathfinding? I noticed there is a pathfinding fix in the downloads section, however it doesn't work? 10. Where can I download Iron Plague manual (.pdf)? 11. I recently played Total Annihilation and with the latest unofficial patch it had "megamap". Kingdoms already comes with it, however the dots/icons on it when viewed at my native resolution (1920x1080) are so small I am having trouble clicking on them. Is there a way to enlarge them? Also, TA megamap when holding shift displayed unit orders, while I don't notice them in Kingdoms fullscreen minimap. Is there a way to show unit orders on it? 12. In TA you can see how much each unit generates/uses energy (and metal). Is there a way to show individual unit mana income/usage in Kingdoms? 13. With left click interface mouse cursor changes appropriately to the ordered task, but with right click interface cursor remains the same. Is there a way for a mouse cursor to change in right click interface the same way it changes in left click interface? 14. Does anybody know how to set movement orders for units created by Zhon production units the same way as you are able to order them with units produced from buildings? 15. How does healtime in units .fbi files work? I have read here tauniverse .com/forum/showpost.php?p=40143&postcount=7 that formula is buildtime/healtime = time required to recover full health (in seconds). Is this correct? 16. Which ingame commands do you find useful for single player? I am using +Clock and +ShowRanges. Does +Shootall do anything in Kingdoms? Since I think all units have shootme=1. Is there a way to display shooting range the same way it is displayed in TA? 17. I have read on this forum about some kind of paralyze bug. By looking at the difference between Crusades Balance units and original units I notice that in CB weapons that paralayze have their damage set to 1. Is this what is causing that bug? I am playing single player campaign which is without CB so I haven't noticed that bug. Does higher damage on paralyzing weapon increase the duration of paralysis? 18. I have read about a bug with open Creon gates. Are the units targeting the center of the gates, and since there is nothing in the center they do no damage to it? Can units be made to target gate edges? Is there a way to make gates (and other buildings) take damage on passable spots? I also have some suggestions for the new patch: 1. When I installed Kingdoms + Iron Plague I noticed that IP movies replaced original Kingdoms movies. (credits, intro and victory movie) I wish there was a download that contained just these 3 files. Right now in the downloads section there are 2 big file that contains all Book of Darien movies and all Iron Plague movies. BoD movies file should be separated into 2 files: 1 containing credits, intro and victory movie, the other containing cutscenes. Same should be done for Iron Plague movies file. This would reduce both server and client bandwidth. 2. I suggest putting attack move command in keys.tdf with a new patch. I have put mine to LOWER_F = UnitCommand MoveFight; I think new players might not know about this command. 3. In missions/takmission18_ph.ota 1 Zhon lodestone (unit206) is assigned to wrong player. Fix it by putting player=1; 4. I noticed many differences between CB and original units stats. Some of them are balance changes and some are bugfixes. I suggest using CB fixes to fix original units and also fixing omitted bugs. You should add shootme=1 to Creon gates - it is missing in both unit versions. All units who have guided weapon (type = Guided) should have turnrate=180. Add it to those that are missing (zonhunt, zonhurt, vercen(CB)) Zhon wisps are missing aimtolerance=1024. This was fixed with version 3, but it is missing in CB. I recommend adding aimtolerance to other units that are missing it (tarfire, tarmind, verpult). In CB Zhon Sacred Fire is missing onoffable = 1. Aramon Flying builder has misspelling (cruisalt instead of cruisealt). Deers (CB) (lifdeer and lifdeer2) have misspelling (watermultipliser instead of watermultiplier) Knight in CB has frozen = arapal_frozen but it has no corresponding file in features. Since the original knight has cantbefrozen = 1 I suggest adding it to CB unit as well. Aramon Watch Tower and Veruna Mortar are missing cantbestoned=1. In CB buildings have cantbecaptured = 1 so I suggest adding them to original buildings as well (damage modifications can then be removed from unit attacks that can capture) In CB gates have standard radardistance=500 and sightdistance = 300 so I suggest changing the original gates as well. In BoD campaign mission 15 using Veruna flagship with original builddistance you can't build lodestones on islands while with CB builddistance you can. Builddistance should be increased. Remove unused attributes (like stone in units that have cantbestoned, walls with canmove, ...). Full list of changes (+=added, -=removed, ~=changed): - Spoiler:
- Code:
-
units/ araat + cantbecaptured = 1; + cantbestoned = 1; aracan + edgeeffectiveness = 0.75; aracastl + cantbecaptured = 1; aradrag - stone = aradrag_stone; arafast - stone = arafast_stone; arafly ~ cruisealt = 200; - stone = arafly_stone; arakeep - canattack = 1; + cantbecaptured = 1; aralode + cantbecaptured = 1; ~ experiencepoints = 5; aramana + cantbecaptured = 1; arangate + cantbecaptured = 1; ~ radardistance = 500; arasiege + cantbecaptured = 1; arassh + cantbecaptured = 1; aratre + cantbecaptured = 1; - stone = aratre_stone; crebarn + cantbecaptured = 1; + damagecategory = airship; cregate + cantbecaptured = 1; ~ radardistance = 500; + shootme = 1; ~ sightdistance = 300; lifbird - stone = lifbird_stone; npcayla weapon1 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; npcbotl + cantbecaptured = 1; npcrixx + cantbecaptured = 1; npcwagon - stone = npcwagon_stone; tarcage + cantbecaptured = 1; tarcan - stone = tarcan_stone; tarcastl + cantbecaptured = 1; tardrag - stone = tardrag_stone; tardung + cantbecaptured = 1; tarfire + aimtolerance = 1024; targarg - stone = targarg_stone; tarhell + cantbecaptured = 1; tarknigh - stone = tarknigh_stone; tarlode + cantbecaptured = 1 tarmana + cantbecaptured = 1; tarmind weapon1 + aimtolerance = 1024; - dragon = 0; - factory = 0; - fort = 0; - god = 0; - lodestone = 0; - monarch = 0; - naval = 0; weapon2 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - lodestone = 0; - monarch = 0; - naval = 0; tarngate + cantbecaptured = 1; + radardistance = 500; tarprie2 - stone = tarprie2_stone; tarpries - stone = tarpries_stone; tarsh + cantbecaptured = 1; tarwall - canguard = 1; - canmove = 1; - canpatrol = 1; - canstop = 1; verasy + cantbecaptured = 1; verat + cantbecaptured = 1; verball + cantbecaptured = 1; vercastl + cantbecaptured = 1; verdrag - stone = verdrag_stone; verflag ~ builddistance = 300; verfltwr + cantbecaptured = 1; verkeep + cantbecaptured = 1; verlode + cantbecaptured = 1; vermana + cantbecaptured = 1; vermort + cantbecaptured = 1; + cantbestoned = 1; - stone = vermort_stone; verngate + cantbecaptured = 1; ~ radardistance = 500; ~ sightdistance = 300; verpar - stone = verpar_stone; verpill + cantbecaptured = 1; ~ damagecategory = fort; verpult + aimtolerance = 1024; vertower + cantbecaptured = 1; verwall - canguard = 1; - canmove = 1; - canpatrol = 1; - canstop = 1; zonbat - stone = zonbat_stone; zondrag - stone = zondrag_stone; zondrake - stone = zondrake_stone; zonflies - stone = zonflies_stone; zonglyph + cantbecaptured = 1; zongryp - stone = zongryp_stone; zonharp + damagecategory = monster; - damagetype = monster; - stone = zonharp_stone; weapon1 - airship = 0; - dragon = 0; - factory = 0; - fort = 0; - god = 0; - lodestone = 0; - monarch = 0; - naval = 0; zonhunt weapon2 + turnrate = 180; zonhurt weapon2 + turnrate = 180; zonlode + cantbecaptured = 1; zonmana + cantbecaptured = 1; zonroc - stone = zonroc_stone; unitscb/ aradrag - stone = aradrag_stone; arafast - stone = arafast_stone; arafly - stone = arafly_stone; arakeep - canattack = 1; arapal + cantbefrozen = 1; - frozen = arapal_frozen; arasiege + cantbecaptured = 1; aratre - stone = aratre_stone; crebarn + cantbecaptured = 1; cregate + shootme = 1; lifbird - stone = lifbird_stone; lifdeer ~ frozen = lifdeer_frozen; ~ watermultiplier = 0.81; lifdeer2 ~ watermultiplier = 0.81; npcayla weapon1 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; npcbotl + cantbecaptured = 1; npcrixx + cantbecaptured = 1; npcwagon - stone = npcwagon_stone; tarbeak - stone = tarbeak_stone; tarcan - stone = tarcan_stone; tardrag - stone = tardrag_stone; tarfire + aimtolerance = 1024; targarg - stone = targarg_stone; tarknigh - stone = tarknigh_stone; tarmind weapon1 + aimtolerance = 1024; tarprie2 - stone = tarprie2_stone; tarpries - stone = tarpries_stone; tarwall - canguard = 1; - canmove = 1; - canpatrol = 1; - canstop = 1; verball + cantbecaptured = 1; vercen + turnrate = 180; verdrag - stone = verdrag_stone; vermort - stone = vermort_stone; verpar - stone = verpar_stone; verpill ~ damagecategory = fort; verpult + aimtolerance = 1024; verwall - canguard = 1; - canmove = 1; - canpatrol = 1; - canstop = 1; zonbat - stone = zonbat_stone; zondrag - stone = zondrag_stone; zondrake - stone = zondrake_stone; zonfire + onoffable = 1; zonflies + aimtolerance = 1024; - stone = zonflies_stone; zongryp - stone = zongryp_stone; zonharp - stone = zonharp_stone; zonhunt weapon2 + turnrate = 180; zonhurt weapon2 + turnrate = 180; zonroc - stone = zonroc_stone;
In CB zombie is missing corpse = tarzom_dead; Is this intended? I also notice it is missing from goblins. Maybe to make summoning from corpses more expensive? In v3 they increased range of melee weapons, but in CB they used original range values. How does big range affect melee attacks? Looking at the balance changes in CB I can agree with some of them, but there are several nerfs that I think were unnecessary. But first I would like to discuss about fixing bugs. If somebody is making a new patch what do you think about putting the things I have mentioned above? Should bugfixes be separated from balance changes? What else should be added to a new patch? | |
| | | DeeKay Administrator
Posts : 531 Reputation : 26 Join date : 2011-03-19 Age : 25 Location : Brazil - SP
| Subject: Re: Patch, bugs, balance, improvements... Fri Jun 24, 2016 1:43 pm | |
| WTF ARE YOU A GOD? Loved you. - Paladin wrote:
- 1. Is the latest patch 4.1bb?
Yes, it is. - Paladin wrote:
- 2. Is new patch being worked on?
Eh, no, but I'd love to have a new patch since somethings need to be changed. - Paladin wrote:
- 3. Does anybody know how to make movies work when chosen renderer is Direct3D??
Our only solution was to change to Software MMX render, like you noticed... But your way to try to fix it was interesting, never tested tho. - Paladin wrote:
- 4. 4.1bb patch disabled command line arguments.
I did a patch for Kingdoms.icd to fix it here: http://kingdoms.heavenforum.org/t1396-the-new-tak-executable? -disablecavedogverification doesn't work still though. I listed some of the parameters here: http://kingdoms.heavenforum.org/t1257-tak-target-command-line-parameters? - Paladin wrote:
- 5. I have GoG version of Kingdoms which comes with 4.0 patch.
http://www.mediafire.com/download/j97d7kk1rs9uudg/KingNoCD.rar Use that one instead, that link that uses 3.0 is outdated I think. This one uses pocketgeekversion 1.3, which is the one TA:K Switcher uses. - Paladin wrote:
- 6. I have extracted all of my HPI files using the program HPI View.
I think it makes no difference, actually. - Paladin wrote:
- 7. Is this the correct order of extraction of HPI files (files in same row don't conflict so their order doesn't matter):
Yes, I think so. - Paladin wrote:
- 8. To remove movement acknowledgement sounds ("bong") I have replaced...
The NoAck addon had been made for that: http://www.mediafire.com/download/elzru15c8tj8ds5/NoAck.rar It just put empty .wav sounds. - Paladin wrote:
- 9. How to improve pathfinding?
The Pathfinding that is known is from TA. People thought that it would work for TA:K too but it doesn't, as the offsets aren't the same, so it's still unknown how to change pathfinding. (needs to find the offset and change it) - Paladin wrote:
- 10. Where can I download Iron Plague manual (.pdf)?
There's no Iron Plague manual known yet. Only this guy who scanned his physical manual: http://kingdoms.heavenforum.org/t857-iron-plague-manual - Paladin wrote:
- 11. I recently played Total Annihilation and with the latest unofficial patch it had "megamap".
Is there a way to enlarge them? Also, TA megamap when holding shift displayed unit orders, while I don't notice them in Kingdoms fullscreen minimap. Is there a way to show unit orders on it? Eh, I don't know, maybe not. (nice answer) - Paladin wrote:
- 12. In TA you can see how much each unit generates/uses energy (and metal).
I don't know, but there is this: http://kingdoms.heavenforum.org/t1393-how-to-check-unitinfo-velocity-ingame which in my opinion should show more information, but it doesn't, maybe hacking it to show new variables? (I tried but no success, changed in the data.hpi/guis folder) - Paladin wrote:
- 13. Is there a way for a mouse cursor to change in right click interface the same way it changes in left click interface?
I don't think so... - Paladin wrote:
- 14. Does anybody know how to set movement orders for units created by Zhon production units the same way as you are able to order them with units produced from buildings?
No. There's no way to do that. - Paladin wrote:
- 15. How does healtime in units .fbi files work?
Haven't tested yet, but they might be right. - Paladin wrote:
- 16. Which ingame commands do you find useful for single player? Is there a way to display shooting range the same way it is displayed in TA?
+showframerate +logo +contour +noshake http://kingdoms.heavenforum.org/t1227-console-codes-cheat-codes There is no way to show the range I think, but you can keep in your mind each tileset has 512x512 pixels and range is measured in pixels as far as I know. - Paladin wrote:
- 17. I have read on this forum about some kind of paralyze bug.
Yeah, Mage Archer won't paralyze properly for some reason. There is a .hpi file that fixes this putting: [DAMAGE] { default = 500; airship = 0; dragon = 0; factory = 0; fort = 0; god = 0; monarch = 0; naval = 0; } But I was looking Lighthouse has 1 damage too and it works... so idk. - Paladin wrote:
- 18. I have read about a bug with open Creon gates.
Not only Creon Gates, but all of them. In the paper, they should target the edges of the gates, but they don't for some reason, they all attack the middle. I've already tried to fix this but it's a bit more complicated than I thought. Well, if you want to try, the "SweetSpot(Func_Var_1)" in the gate Script indicates where the enemy units should target to hit them. You can put the piece you want to them target to. (like flag) - Paladin wrote:
- 2. I suggest putting attack move command in keys.tdf with a new patch.
No need for a new patch, just a new setup, I can do it as I am the owner of the most recent TA:K setups. The rest I agree with you, you're awesome, check my TA:K Reloaded mod where I want to rebalance the game and fix bugs, so it could turn into a new patch, just take a look there: http://kingdoms.heavenforum.org/t1192-tak-reloaded-mod-downloads Sorry for my bad english and if I couldn't answer some things, but we can work to all this happen! ^^ I'm also the owner of alltakdownloads.6te.net so I accept all the suggestions. Thanks. | |
| | | alfalfacat
Posts : 1 Reputation : 1 Join date : 2016-06-25
| Subject: Re: Patch, bugs, balance, improvements... Sat Jun 25, 2016 12:38 am | |
| Wow, I just thought to reinstall Kingdoms today and there're still people around! I used to hang around under a different username back in the mtmcwebdesign days.
15. Healtime That... explains a lot... Back in the day (when I was much younger) I could never understand how healtime worked. You can scale it by like say 50% slower and it would work as expected, but f.e. the monarchs have healtime ranging from much less than one to hundreds.
Anyways, there was a guide to the kingdoms fbi format tauniverse .com/forum/showthread.php?t=35294 Looking through it, older and wiser, I guess it is right there and I must have missed it in my youth. (Looking back at that thread there was a v3 that expanded on WEAPONS and EXPLODEAS, but those links are sadly gone.) | |
| | | Paladin
Posts : 8 Reputation : 5 Join date : 2016-06-23
| Subject: Re: Patch, bugs, balance, improvements... Sun Jun 26, 2016 11:39 am | |
| Thank you for the answers. In the meantime I have tested and changed several things. Now I come with the conclusions and a new set of questions. I have tried modifying healtime and the formula appears to be correct. I have also tried modifying damage of paralyzing weapons and I came to conclusion that for each 30 damage the duration of the stun increases by 1 second. (In TA allegedly it is 60dmg/sec) I have also found out how to select units of the same type on screen. In keys.tdf add SelectUnitsOnScreenSelectedType to the chosen key (example: LOWER_Z = SelectUnitsOnScreenSelectedType;) Are there any other useful orders that can be mapped in keys.tdf? (excluding mapping of chat commands) How does unit veterancy affect a unit and by how much does it modify its stats? Is it possible to always display health bars of all enemy units? Instead of removing corpses from units (like zombie) to prevent summoning, I have found out a better solution. In features/corpses/ all you need to do is set the value of animatable to 0. lifsaber has a misspelling (admultiplier instead of roadmultiplier) Several units have attributes badtargetcategory = FLY, nochasecategory = FLY and wpri_badtargetcategory = FLY. These attributes are unnecessary because their weapons have noairweapon = 1. Instead of having multiple damage modifications for paralyzing weapons I suggest adding immunetoparalyzer = 1 to units that can't be paralyzed. Complete list of (additional) changes: - Spoiler:
- Code:
-
features/corpses/ tarzom_dead animatable = 0; units/ araat + immunetoparalyzer = 1; arabow weapon3 - airship = 0; - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; - naval = 0; aracan - notargetcategory = FLY; aracastl + immunetoparalyzer = 1; aradrag + immunetoparalyzer = 1; aragod + immunetoparalyzer = 1; aragren weapon3 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; - naval = 0; arakeep + immunetoparalyzer = 1; araking + immunetoparalyzer = 1; aralode + immunetoparalyzer = 1; aramana + immunetoparalyzer = 1; arangate + immunetoparalyzer = 1; arapult - notargetcategory = FLY; arasiege + immunetoparalyzer = 1; arassh + immunetoparalyzer = 1; aratrans + immunetoparalyzer = 1; aratre - notargetcategory = FLY; arawar + immunetoparalyzer = 1; creacad + immunetoparalyzer = 1; creaeri + immunetoparalyzer = 1; crebarn + immunetoparalyzer = 1; crebomb + immunetoparalyzer = 1; crechie weapon3 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; credrag + immunetoparalyzer = 1; cregate + immunetoparalyzer = 1; cregatl + immunetoparalyzer = 1; cregod + immunetoparalyzer = 1; creiron + immunetoparalyzer = 1; crelode + immunetoparalyzer = 1; cremana + immunetoparalyzer = 1; crenavy + immunetoparalyzer = 1; crepris + immunetoparalyzer = 1; cresage + immunetoparalyzer = 1; cresmit + immunetoparalyzer = 1; crester + immunetoparalyzer = 1; cresubm + immunetoparalyzer = 1; lifsaber - admultiplier = 1; + roadmultiplier = 1; npcbotl + immunetoparalyzer = 1; npcrixx + immunetoparalyzer = 1; tarcage + immunetoparalyzer = 1; tarcastl + immunetoparalyzer = 1; tarcship + immunetoparalyzer = 1; tardrag + immunetoparalyzer = 1; tardung + immunetoparalyzer = 1; targod + immunetoparalyzer = 1; tarhell + immunetoparalyzer = 1; tarlode + immunetoparalyzer = 1; tarmana + immunetoparalyzer = 1; tarnecr2 + immunetoparalyzer = 1; tarnecro + immunetoparalyzer = 1; tarngate + immunetoparalyzer = 1; tarsh + immunetoparalyzer = 1; verasy + immunetoparalyzer = 1; verat + immunetoparalyzer = 1; verball + immunetoparalyzer = 1; vercastl + immunetoparalyzer = 1; verdrag + immunetoparalyzer = 1; verflag + immunetoparalyzer = 1; verfltwr + immunetoparalyzer = 1; vergod + immunetoparalyzer = 1; verharp + immunetoparalyzer = 1; verkeep + immunetoparalyzer = 1; verlight + immunetoparalyzer = 1; weapon1 - airship = 0; - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; verlode + immunetoparalyzer = 1; vermage + immunetoparalyzer = 1; verman + immunetoparalyzer = 1; vermana + immunetoparalyzer = 1; verngate + immunetoparalyzer = 1; verpill + immunetoparalyzer = 1; verpult - notargetcategory = FLY; verscout + immunetoparalyzer = 1; vertower + immunetoparalyzer = 1; vertrans + immunetoparalyzer = 1; vertre + immunetoparalyzer = 1; - wpri_badtargetcategory = FLY; zonbasil - nochasecategory = FLY; - wpri_badtargetcategory = FLY; zondrag + immunetoparalyzer = 1; zonglyph + immunetoparalyzer = 1; zongod + immunetoparalyzer = 1; zonhunt + immunetoparalyzer = 1; zonhurt + immunetoparalyzer = 1; zonlode + immunetoparalyzer = 1; zonmana + immunetoparalyzer = 1; zonspide + immunetoparalyzer = 1; weapon1 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; - naval = 0; unitscb/ araat + immunetoparalyzer = 1; arabow weapon3 ~ default = 500; aracan - notargetcategory = FLY; aracastl + immunetoparalyzer = 1; aradrag + immunetoparalyzer = 1; aragod + immunetoparalyzer = 1; aragren weapon3 - dragon = 0; - factory = 0; - fort = 0; - god = 0; - monarch = 0; - naval = 0; arakeep + immunetoparalyzer = 1; araking + immunetoparalyzer = 1; aralode + immunetoparalyzer = 1; aramana + immunetoparalyzer = 1; arangate + immunetoparalyzer = 1; arapult - notargetcategory = FLY; arasiege + immunetoparalyzer = 1; arassh + immunetoparalyzer = 1; aratrans + immunetoparalyzer = 1; aratre - notargetcategory = FLY; arawar + immunetoparalyzer = 1; creacad + immunetoparalyzer = 1; creaeri + immunetoparalyzer = 1; crebarn + immunetoparalyzer = 1; crebomb + immunetoparalyzer = 1; crechie weapon3 ~ default = 1000; credrag + immunetoparalyzer = 1; cregate + immunetoparalyzer = 1; cregatl + immunetoparalyzer = 1; cregod + immunetoparalyzer = 1; creiron + immunetoparalyzer = 1; crelode + immunetoparalyzer = 1; cremana + immunetoparalyzer = 1; crenavy + immunetoparalyzer = 1; crepris + immunetoparalyzer = 1; cresage + immunetoparalyzer = 1; cresmit + immunetoparalyzer = 1; crester + immunetoparalyzer = 1; cresubm + immunetoparalyzer = 1; lifsaber - admultiplier = 1; + roadmultiplier = 1; npcbotl + immunetoparalyzer = 1; npcrixx + immunetoparalyzer = 1; tarcage + immunetoparalyzer = 1; tarcastl + immunetoparalyzer = 1; tardrag + immunetoparalyzer = 1; tardung + immunetoparalyzer = 1; targod + immunetoparalyzer = 1; tarhell + immunetoparalyzer = 1; tarlode + immunetoparalyzer = 1; tarmana + immunetoparalyzer = 1; tarnecro + immunetoparalyzer = 1; tarngate + immunetoparalyzer = 1; tarsh + immunetoparalyzer = 1; verasy + immunetoparalyzer = 1; verat + immunetoparalyzer = 1; verball + immunetoparalyzer = 1; vercastl + immunetoparalyzer = 1; verdrag + immunetoparalyzer = 1; verflag + immunetoparalyzer = 1; verfltwr + immunetoparalyzer = 1; vergod + immunetoparalyzer = 1; verharp + immunetoparalyzer = 1; verkeep + immunetoparalyzer = 1; verlight + immunetoparalyzer = 1; weapon1 ~ default = 125; verlode + immunetoparalyzer = 1; vermage + immunetoparalyzer = 1; verman + immunetoparalyzer = 1; vermana + immunetoparalyzer = 1; verngate + immunetoparalyzer = 1; verpill + immunetoparalyzer = 1; verpult - notargetcategory = FLY; verscout + immunetoparalyzer = 1; vertower + immunetoparalyzer = 1; vertrans + immunetoparalyzer = 1; vertre + immunetoparalyzer = 1; - wpri_badtargetcategory = FLY; zonbasil - nochasecategory = FLY; - wpri_badtargetcategory = FLY; zondrag + immunetoparalyzer = 1; zonglyph + immunetoparalyzer = 1; zongod + immunetoparalyzer = 1; zonhunt + immunetoparalyzer = 1; zonhurt + immunetoparalyzer = 1; zonlode + immunetoparalyzer = 1; zonmana + immunetoparalyzer = 1;
creaeri, tarbeak and verball have weapons with subtype = Dropped. But only dirigible has noairweapon = 1. Should dirigible also be able to attack air units with that weapon? If so, should badtargetcategory = FLY be added to these weapons so that air units are targeted last? Should badtargetcategory be added to units so that they attack unarmed units last? | |
| | | DeeKay Administrator
Posts : 531 Reputation : 26 Join date : 2011-03-19 Age : 25 Location : Brazil - SP
| Subject: Re: Patch, bugs, balance, improvements... Sun Jun 26, 2016 3:47 pm | |
| Nice founds. - Paladin wrote:
- How does unit veterancy affect a unit and by how much does it modify its stats?
When a unit gets gold all its status are doubled (hp, damage, mana). - Paladin wrote:
- Is it possible to always display health bars of all enemy units?
No. - Paladin wrote:
- Instead of removing corpses from units (like zombie) to prevent summoning, I have found out a better solution. In features/corpses/ all you need to do is set the value of animatable to 0.
Good idea. - Paladin wrote:
- creaeri, tarbeak and verball have weapons with subtype = Dropped. But only dirigible has noairweapon = 1.
Should dirigible also be able to attack air units with that weapon? If so, should badtargetcategory = FLY be added to these weapons so that air units are targeted last? I don't think so, Dirigibles already have a weapon called "Anti-Air Arrow" and it's meant to attack flying units, but it can attack ground units too, so I think adding badtargetcategory = "GROUND" (idk if it is ground) to this would be very good. Their dropped attack would seem very weird attacking other flying units. lol - Paladin wrote:
- Should badtargetcategory be added to units so that they attack unarmed units last?
Hmm, yes, if it work properly.
Last edited by DeeKay on Tue Jun 28, 2016 4:41 pm; edited 1 time in total | |
| | | Myst
Posts : 390 Reputation : 4 Join date : 2009-07-16 Age : 38 Location : Poland
| Subject: Re: Patch, bugs, balance, improvements... Mon Jun 27, 2016 3:44 am | |
| Paladin if you will do this (new patch) I will call you Hero or whatever you like. We all (community) believe in you | |
| | | Paladin
Posts : 8 Reputation : 5 Join date : 2016-06-23
| Subject: Re: Patch, bugs, balance, improvements... Tue Jun 28, 2016 11:28 am | |
| I have tried changing the sweetspot function in Creon gates script, but without success. Scriptor program reported error when trying to compile the script (Error (961): Unexpected Identifier sweetspot). It is probably because both piece and function have same identifier sweetspot. So I have renamed piece to sweetspot2 and then it compiled successfully. However even with this code - Code:
-
sweetspot(piecenum) { piecenum = gear1; } units still targeted the middle of the gates. Another problem with scriptor is that it can't decompile production buildings (aracastl, arakeep, creacad, crenavy, cresmit, tarcastl, tardung, tarhell, verasy, vercastl, verkeep) if you don't use "Include standard libraries instead of defining them". On alltakdownloads.6te .net under source codes there is wrong link (mediafire .com/download/5c2c7qoydqj3cyo/TAKUP.exe) for scriptor source code. I am also having trouble installing gaf builder. I am having the same problem which is written here kingdoms.heavenforum .org/t1028-i-need-help-with-gaf-builder#p9936. I have also tried other programs to open gaf files but without success. I have tried modifying gui/unitinfo.gui. I have added maxdamage gui components but the actual attribute value isn't displaying. Looking at the kingdoms.icd I found out hex location (between 213C48 and 213CB6) where those attributes are outputted. String value: - Spoiler:
UnitInfo.gui....%.0f %s ....deg/s...TurnRate....%.2f %s.m/s/s...Acceleration....N\A.%.1f %s ....m/s.MaxVelocity
So to output values of other attributes kingdoms.icd will probably need to be changed. The cursor look is drawn in anims/cursors.gaf. However I think that changing which cursor type will be displayed can only be changed in kingdoms.icd. I don't know if you know about it, but there is a mogriumbounty attribute which can be added to units. The value you put there is how much mana you will get when you kill that unit. | |
| | | DeeKay Administrator
Posts : 531 Reputation : 26 Join date : 2011-03-19 Age : 25 Location : Brazil - SP
| Subject: Re: Patch, bugs, balance, improvements... Tue Jun 28, 2016 4:31 pm | |
| - Paladin wrote:
- However even with this code
- Code:
-
sweetspot(piecenum) { piecenum = gear1; } units still targeted the middle of the gates. Yeah, as I said, they target the middle of the gate. You can see that even Cavedog tried to make them attack the towers instead of the middle, but even it had no success. The original code of Ara Gate: - Code:
-
Static_Var_1 = Rand( 1, 2 ); //when created
SweetSpot(Func_Var_1) { if( Static_Var_1 == 1 ) { Func_Var_1 = 1; //piece 1 (sweetspot1) } else { Func_Var_1 = 2; //piece 2 (sweetspot2) } } It'll make a reference to these pieces: Although, it seems not to work. - Paladin wrote:
- Another problem with scriptor is that it can't decompile production buildings (aracastl, arakeep, creacad, crenavy, cresmit, tarcastl, tardung, tarhell, verasy, vercastl, verkeep) if you don't use "Include standard libraries instead of defining them".
Yeah... they couldn't make an algorythm that defines them, so they made it manually... - Paladin wrote:
- On alltakdownloads.6te .net under source codes there is wrong link (mediafire .com/download/5c2c7qoydqj3cyo/TAKUP.exe) for scriptor source code.
Thanks, fixed. http://www.mediafire.com/download/9uady7mcdfe1ppz/Scriptor+v1%28RC1%29+Source+Code.rar - Paladin wrote:
- I am also having trouble installing gaf builder. I am having the same problem which is written here kingdoms.heavenforum .org/t1028-i-need-help-with-gaf-builder#p9936.
I have also tried other programs to open gaf files but without success. Go to C:\Windows\System32, find FM20.dll, rename it to FM20.dll.old. Install GAF Builder again, see if it works. Try doing it with C:\Cavedog\Windows\SysWOW64\FM20.dll too, idk which one. It might fix your problem. You can also rename the dll to FM20.dll.old and download Microsoft ActiveX Control Pad here: http://download.microsoft.com/download/activexcontrolpad/install/4.0.0.950/win98mexp/en-us/setuppad.exe It'll install the proper FM20.dll to GAF Builder work. To see if it work, before GAF Builder opens, it asks to choose World, and if it is surface textures or unit textures: If it doesn't open this window, it's not going to work. - Paladin wrote:
- I don't know if you know about it, but there is a mogriumbounty attribute which can be added to units.
The value you put there is how much mana you will get when you kill that unit. Ye we knew that: http://kingdoms.heavenforum.org/t1395-reward-for-killing-an-unit But before me, Vhaerun knew that lol. | |
| | | $ MalinOMW
Posts : 577 Reputation : 9 Join date : 2011-07-22 Age : 31 Location : Poland
| Subject: Re: Patch, bugs, balance, improvements... Sat Jul 02, 2016 11:58 am | |
| where are you from xD "I have also found out how to select units of the same type on screen. In keys.tdf add SelectUnitsOnScreenSelectedType to the chosen key (example: LOWER_Z = SelectUnitsOnScreenSelectedType;)" i have searching for that, and exploring, but without success, is it from TA :? you were in team that were making TA:Kingdoms :? , where you find that knowledge ? | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Sun Jul 03, 2016 10:59 pm | |
| Regarding the Creon gate, hopefully this fixes it:
Download, move kingdoms.key out of main TAK directory, make a scripts and objects3d folder, paste the corresponding files in the folders and run game. If not fixed, delete those files or try to put your own fixes on them and place kingdoms.key back in main TAK directory.
CreonGateRedone
The gate works even when opened, however units still target the center but the gate is kill able when opened. Then it dawned on me why, as I noticed the creon gate has four open or shut sides. The yardmap it uses shows all 'c' except for the four corner pieces which are 'o'. 'o' is target-able at any time but 'c' is target-able only when the gate is closed due to the script yardmap.
And if scriptor is giving problems on the buildings, maybe try scripteditor? It is a bit more complex as it does not show what variables do what and instead of returns or else statements, it uses Labels. But in my opinion, it works when I need it to. | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Wed Jul 06, 2016 11:34 pm | |
| Paladin says, - Quote :
- Looking at the kingdoms.icd I found out hex location (between 213C48 and 213CB6) where those attributes are outputted.
String value: Spoiler: UnitInfo.gui....%.0f %s ....deg/s...TurnRate....%.2f %s.m/s/s...Acceleration....N\A.%.1f %s ....m/s.MaxVelocity So to output values of other attributes kingdoms.icd will probably need to be changed. Ok, so this is boggling. I hexed the icd file using various combinations to get MaxDamage to work but it appears to be elusive as evidenced by these sample pics; Hexed Icd: Result: Viewing a unit's hit points via unitinfo is a wonderful idea! Hopefully someone can solve this... | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 11:04 am | |
| ^ Is that not working? Also I'd guess the (null) is because the formatter takes and %s then an %i and you're only passing an integer (the string used to be for the velocity's "m/s" thing) Or maybe you mean the unit's Current hit points?
Btw which hexeditor is that?? | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 11:33 am | |
| Ya, not working. Creon Sage hit points are 15000 and I have no idea how to format. The original string was Acceleration and the format was %.2f %s..m/s/s. I saw hp = %i in another part of the file and assumed hp means hitpoints. The hexeditor is hexedit. | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 2:25 pm | |
| the formatter looks like regular match pattern from the C printf function (https://en.wikipedia.org/wiki/Printf_format_string) From the picture: - Code:
-
%.0f %s....deg/s...TurnRate is probably the product of: - Code:
-
printf("%.0f %s", TurnRate, "deg/s"); The order looks weird though, maybe thats just how it looks after compilation So i mean that showing max damage should only pass an %d (edit: or %.0f) (no %s since it shouldnt pass any additional string like "m/s" or "deg/s"
Last edited by $_Spagg on Thu Jul 07, 2016 3:32 pm; edited 1 time in total | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 3:03 pm | |
| But now I see whereryou coming from... I dont understand though, I merely changed Acceleration, TurnRate, Velocity (tested with each) to MaxDamage (making sure not to change the offsets) and it just results in insta crash for me | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 3:04 pm | |
| Oh, ok. Seems you know programming Spagg? I think the problem is that I do not know what combination or format will return MaxDamage. I saw in Ida pro that MaxDamage( formerly Acceleration ) showed in another part of the icd file at 4b7fe0( 0b7fe0 ), hex 6a 01. I think the problem is changing the string or the format does not change the value, i.e returning a unit's hit points.
Changing the string, you will need to change the string in UnitInfo.gui to match the change in the icd or it will crash. I modified the unitinfo.gui, placed it in a guis folder in the kingdoms directory and then worked on the icd. | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 3:27 pm | |
| I know a little programming but pretty much clueless when it coems to these But these things trigger my curiosity regardless... Anyway by UnitInfo.gui you mean inside the hpi? And I actually think the formatting should be "%d" (decimal) but TurnRate seems to display a decimal but uses "%.0f" (format floating point with 0 zero-paddings) so simply reusing TurnRate should have worked And optionally remove the "%s" that follows it to hide the "deg/s" string (i.e the deg/s can stay there, just remove the "%s" placeholder by replacing it with spaces (hex 20)) | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 3:30 pm | |
| Looks good: Yes, unitinfo.gui inside data.hpi. | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 4:05 pm | |
| Ok, tried your way by replacing turnrate with maxdamage and game crashes. Same if MaxVelocity is replaced with MaxDamage, game crashes. But does not with Acceleration. Weird? | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 4:15 pm | |
| Yeah now I see, it only changes the label near it but not the actual value ^ I dunno, worked fine here. In gui I also changed the length (9 -> 10): 9 Turn Rate -> 10 Max Damage etc | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 4:20 pm | |
| Also, do you have any idea what those numbers are in the gui files? - Code:
-
19 1 1 2 119 247 121 20 1 0 0 0 Â Â Â Â Â Â Â Â Â Â Â // <------ these 3 255 255 255 255 1 0 0 1 18 lombardic (cd).gaf 7 Static2 1 2 2 1 0 0 0 0 1 0 0 0 0 2 2 2 10 Max Damage 2 2 10 Max Damage 2 1 0 1 0 2 0 0 0
Edit: - Code:
-
19 1 1 2 248 247 100 20 1 0 0 0 // <---- also these 3 255 255 255 255 1 0 0 1 0 9 MaxDamage 1 2 2 1 0 0 0 0 1 0 0 0 0 2 2 0 0 2 0 0 2 1 0 1 0 2 0 0 0
| |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 4:27 pm | |
| Yeah, those lines I pointed in the post above are definitely it (the second code block, not the first) I swapped the lines from Acceleration and MaxVelocity and their values swapped too Now to guess which values actually point to MaxDamage... (VALUE of acceleration is swapped with maxvelocity) By swapping line #123 with line #106 Contents (2 248 221 100 20 1 0 0 0 ) and (2 248 195 100 20 1 0 0 0 ) | |
| | | Vhaerun
Posts : 118 Reputation : 12 Join date : 2014-01-12 Age : 44 Location : VA, USA
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 4:54 pm | |
| Looks great! Hopefully we can find the value. If you use Ida pro free or ida pro demo that program will show in more detail which values are what as it also points to different places in the icd where the strings are pointing to.
And this should help you with the gui: Tak Gui | |
| | | $_Spagg
Posts : 385 Reputation : 14 Join date : 2010-10-31 Age : 111 Location : Brazil
| Subject: Re: Patch, bugs, balance, improvements... Thu Jul 07, 2016 5:45 pm | |
| Oh I see, I was mistaken then, oh dumb me, those actually just simply swapped the Y coords of where those strings were drawn on the screen | |
| | | Paladin
Posts : 8 Reputation : 5 Join date : 2016-06-23
| Subject: Re: Patch, bugs, balance, improvements... Sat Jul 09, 2016 1:35 pm | |
| Hello. The reason I haven't replied so long is because I have been trying to apply same cursors both to left and right click interface. In order to do that I have used the program IDA with the decompiler plugin. After a lot of search I was able to locate where program chooses cursors. You can force the program to use left click interface cursors by skipping the right click interface cursors part. original code - Spoiler:
c - Code:
-
switch ( a1 ) // mouse command { case 1: // current mouse command stop if ( !*(_BYTE *)(*((_DWORD *)dword_62D558 + 3) + 5) )// if right click interface { ... return cursor green/red } else // left click interface { ... return cursor attack/repair/revive/clear } ... assembly - Code:
-
.text:004DD875 mov eax, dword_62D558 .text:004DD87A mov ecx, [eax+0Ch] .text:004DD87D mov al, [ecx+5] .text:004DD880 test al, al .text:004DD882 jz loc_4DE03B hex (starting address DD875) - Code:
-
A1 58 D5 62 00 8B 48 0C 8A 41 05 84 C0 0F 84 B3 07 00 00
new code - Spoiler:
assembly - Code:
-
jmp short loc_4DD888 hex (starting address DD875) - Code:
-
EB 11 90 90 90
However the problem is that program applies left and right click logic depending on the type of cursor. Inside the following c code you can see that orders will be executed depending on the cursor look. - Spoiler:
- Code:
-
void __thiscall sub_527DD0(void *this, int a2)// event = left click release { signed int cursor_index; // eax@1 int v3; // eax@7 void *a3; // [sp+0h] [bp-4h]@1
a3 = this; cursor_index = get_current_cursor_index(); if ( cursor_index == 15 ) // cursor_select { sub_520700(a2); // select unit } else if ( cursor_index < 17 ) // not cursor red, green, normal, hourglass or pathicon { v3 = dword_62D55C; LOBYTE(a3) = 0; LOBYTE(v3) = *(_BYTE *)(dword_62D55C + 95788); sub_5214B0(a2, v3, (int)a3, dword_62D55C + 95764, 0, 0, 0);// perform action sub_526620(*(_DWORD *)(a2 + 8) & 4); } else if ( !*(_BYTE *)(*((_DWORD *)dword_62D558 + 3) + 5) && *(_BYTE *)(dword_62D55C + 95788) == 1 )// if (right click interface && current command == stop) { sub_51FB50(); // remove selection sub_524FF0(); } }
If value on hex address 127DEF is changed from 11 (17 decimal) to 00, left click actions will be disabled. The problem is that when you for example press m to move, you won't be able to either right or left click. Trying to find a way to fix all of this is what took most of my time, and unfortunately I still haven't finished. However, I have managed to discover several other useful changes. I have figured out how to display health bars of all players. In kingdoms.icd in function sub_4FC5B0 there is a check which makes player see only health bars of his own units. I have changed the code so that that check is skipped. original code - Spoiler:
c - Code:
-
if ( *(_BYTE *)(*((_DWORD *)dword_62D558 + 6) + 13) ) // if show health bars { ... if ( *(_BYTE *)(*(_DWORD *)(v55 + 184) + 235) == v89 // if unit belongs to current player || (v59 = *((_DWORD *)dword_62D558 + 1), *(_BYTE *)(v59 + 5)) && *(_BYTE *)(v59 + 4) ) { // display health bars ... assembly - Code:
-
.text:004FCD3D mov cl, byte ptr [ebp+var_14] .text:004FCD40 sub edi, eax .text:004FCD42 mov eax, [esi+0B8h] .text:004FCD48 cmp [eax+0EBh], cl .text:004FCD4E jz short loc_4FCD66 hex (starting address FCD3D) - Code:
-
8A 4D EC 2B F8 8B 86 B8 00 00 00 38 88 EB 00 00 00 74 16
new code - Spoiler:
assembly - Code:
-
sub edi, eax jmp short loc_4FCD66 hex (starting address FCD3D) - Code:
-
2B F8 EB 25 90
There is the same kind of check just slightly below that check. If you modify program to skip it, you will see squad numbers even under enemy units. (however this change shouldn't be in the patch) original code - Spoiler:
c - Code:
-
if ( *(_BYTE *)(*(_DWORD *)(v55 + 184) + 235) == v89 // if unit belongs to current player || (v61 = *((_DWORD *)dword_62D558 + 1), *(_BYTE *)(v61 + 5)) && *(_BYTE *)(v61 + 4) ) assembly - Code:
-
.text:004FCD85 mov edx, [esi+0B8h] .text:004FCD8B mov al, byte ptr [ebp+var_14] .text:004FCD8E cmp [edx+0EBh], al .text:004FCD94 jz short loc_4FCDB5 hex (starting address FCD85) - Code:
-
8B 96 B8 00 00 00 8A 45 EC 38 82 EB 00 00 00 74 1F
new code - Spoiler:
assembly - Code:
-
jmp short loc_4FCDB5 hex (starting address FCD85) - Code:
-
EB 2E 90 90 90 90
I have also found a way to increase unit limit. Function sub_499590 uses 3 variables. 1 of them is minimum unit limit, 1 is maximum unit limit and 1 is wanted unit limit. If wanted unit limit is below minimum it is set to minimum and if it is above maximum it is set to maximum. Hex addresses where boundary variables are located are 1F0400 for minimum and 1F0404 for maximum. Default values are 20 (hex 14) and 500 (hex 1F4). Variables use 4 bytes. Bytes are read from right to left. Variables are signed (they can be negative). Maximum positive value is 2^31 - 1 = 2 147 483 647 (hex 7F FF FF FF). Putting that value as maximum won't crash the game, but if the actual unit limit you try to apply is higher than 6553 (hex 1999) the game will crash. Recommended changes: minimum 14 00 00 00 -> 01 00 00 00 (from 20 to 1) maximum F4 01 00 00 -> 99 19 00 00 (from 500 to 6553) You could also change this function and remove all the checks, but I wouldn't recommend it. Here is how you would change it: original code - Spoiler:
c - Code:
-
signed int __thiscall apply_unit_limit(int this, signed int unit_limit) { signed int result; // eax@1 signed int v3; // esi@1
result = unit_limit; v3 = unit_limit; if ( unit_limit >= 500 ) v3 = 500; if ( v3 <= 20 ) { *(_DWORD *)(this + 12) = 20; } else if ( unit_limit < 500 ) { *(_DWORD *)(this + 12) = unit_limit; } else { *(_DWORD *)(this + 12) = 500; } return result; } assembly - Code:
-
.text:00499590 ; signed int __thiscall apply_unit_limit(int this, signed int unit_limit) .text:00499590 apply_unit_limit proc near ; CODE XREF: sub_49E180+31Ap .text:00499590 ; sub_49FCB0:loc_49FEBEp ... .text:00499590 .text:00499590 unit_limit = dword ptr 8 .text:00499590 .text:00499590 push ebp .text:00499591 mov ebp, esp .text:00499593 mov eax, [ebp+unit_limit] .text:00499596 mov edx, ds:dword_5F0404 ; maximum .text:0049959C push esi .text:0049959D cmp eax, edx .text:0049959F push edi .text:004995A0 mov esi, eax .text:004995A2 jl short loc_4995A6 .text:004995A4 mov esi, edx .text:004995A6 .text:004995A6 loc_4995A6: ; CODE XREF: apply_unit_limit+12j .text:004995A6 mov edi, ds:dword_5F0400 ; minimum .text:004995AC cmp esi, edi .text:004995AE jle short loc_4995BD .text:004995B0 cmp eax, edx .text:004995B2 jl short loc_4995C6 .text:004995B4 pop edi .text:004995B5 mov [ecx+0Ch], edx .text:004995B8 pop esi .text:004995B9 pop ebp .text:004995BA retn 4 .text:004995BD ; --------------------------------------------------------------------------- .text:004995BD .text:004995BD loc_4995BD: ; CODE XREF: apply_unit_limit+1Ej .text:004995BD mov [ecx+0Ch], edi .text:004995C0 pop edi .text:004995C1 pop esi .text:004995C2 pop ebp .text:004995C3 retn 4 .text:004995C6 ; --------------------------------------------------------------------------- .text:004995C6 .text:004995C6 loc_4995C6: ; CODE XREF: apply_unit_limit+22j .text:004995C6 pop edi .text:004995C7 mov [ecx+0Ch], eax .text:004995CA pop esi .text:004995CB pop ebp .text:004995CC retn 4 .text:004995CC apply_unit_limit endp hex (starting address 99590) - Code:
-
55 8B EC 8B 45 08 8B 15 04 04 5F 00 56 3B C2 57 8B F0 7C 02 8B F2 8B 3D 00 04 5F 00 3B F7 7E 0D 3B C2 7C 12 5F 89 51 0C 5E 5D C2 04 00 89 79 0C 5F 5E 5D C2 04 00 5F 89 41 0C 5E 5D C2 04 00 90
new code - Spoiler:
c - Code:
-
signed int __thiscall apply_unit_limit(int this, signed int unit_limit) { signed int result; // eax@1
result = unit_limit;
*(_DWORD *)(this + 12) = unit_limit;
return result; } assembly - Code:
-
push ebp mov ebp, esp mov eax, [ebp+unit_limit] mov [ecx+0Ch], eax pop ebp retn 4 hex (starting address 99590) - Code:
-
55 8B EC 8B 45 08 89 41 0C 5D C2 04 00
There are 2 additional places which also check unit limit boundaries. These checks are pointless since in the end the function above is called. original code (1. check) - Spoiler:
c - Code:
-
unit_limit = dword_634C34; if ( dword_634C34 <= 0 ) { apply_unit_limit(*((_DWORD *)dword_62D558 + 2), 150); } else if ( dword_634C34 >= 20 ) { if ( dword_634C34 > 500 ) { unit_limit = 500; dword_634C34 = 500; } apply_unit_limit(*((_DWORD *)dword_62D558 + 2), unit_limit); } else { dword_634C34 = 20; apply_unit_limit(*((_DWORD *)dword_62D558 + 2), 20); } assembly - Code:
-
.text:0049FE70 mov eax, dword_634C34 .text:0049FE75 cmp eax, esi .text:0049FE77 jle short loc_49FEB1 .text:0049FE79 cmp eax, 14h .text:0049FE7C jge short loc_49FE94 .text:0049FE7E mov edx, dword_62D558 .text:0049FE84 mov eax, 14h .text:0049FE89 mov dword_634C34, eax .text:0049FE8E push eax .text:0049FE8F mov ecx, [edx+8] .text:0049FE92 jmp short loc_49FEBE .text:0049FE94 ; --------------------------------------------------------------------------- .text:0049FE94 .text:0049FE94 loc_49FE94: ; CODE XREF: sub_49FCB0+1CCj .text:0049FE94 cmp eax, 1F4h .text:0049FE99 jle short loc_49FEA5 .text:0049FE9B mov eax, 1F4h .text:0049FEA0 mov dword_634C34, eax .text:0049FEA5 .text:0049FEA5 loc_49FEA5: ; CODE XREF: sub_49FCB0+1E9j .text:0049FEA5 mov edx, dword_62D558 .text:0049FEAB push eax .text:0049FEAC mov ecx, [edx+8] .text:0049FEAF jmp short loc_49FEBE .text:0049FEB1 ; --------------------------------------------------------------------------- .text:0049FEB1 .text:0049FEB1 loc_49FEB1: ; CODE XREF: sub_49FCB0+1C7j .text:0049FEB1 mov eax, dword_62D558 .text:0049FEB6 push 96h ; unit_limit .text:0049FEBB mov ecx, [eax+8] ; this .text:0049FEBE .text:0049FEBE loc_49FEBE: ; CODE XREF: sub_49FCB0+1E2j .text:0049FEBE ; sub_49FCB0+1FFj .text:0049FEBE call apply_unit_limit hex (starting address 9FE70) - Code:
-
A1 34 4C 63 00 3B C6 7E 38 83 F8 14 7D 16 8B 15 58 D5 62 00 B8 14 00 00 00 A3 34 4C 63 00 50 8B 4A 08 EB 2A 3D F4 01 00 00 7E 0A B8 F4 01 00 00 A3 34 4C 63 00 8B 15 58 D5 62 00 50 8B 4A 08 EB 0D A1 58 D5 62 00 68 96 00 00 00 8B 48 08 E8 CD 96 FF FF
new code - Spoiler:
c - Code:
-
apply_unit_limit(*((_DWORD *)dword_62D558 + 2), dword_634C34); assembly - Code:
-
mov eax, dword_634C34 push eax mov edx, dword_62D558 mov ecx, [edx+8] jmp short loc_49FEBE ; call apply_unit_limit hex (starting address 9FE70) - Code:
-
A1 34 4C 63 00 50 8B 15 58 D5 62 00 8B 4A 08 EB 3D 90 90 90
original code (2. check) - Spoiler:
c - Code:
-
if ( dword_634C34 ) { if ( dword_634C34 <= 500 ) { if ( dword_634C34 < 20 ) { dword_634C34 = 20; } } else { dword_634C34 = 500; } } assembly - Code:
-
.text:004EEE2A mov eax, dword_634C34 .text:004EEE2F cmp eax, esi .text:004EEE31 jz short loc_4EEE55 .text:004EEE33 cmp eax, 1F4h .text:004EEE38 jle short loc_4EEE46 .text:004EEE3A mov dword_634C34, 1F4h .text:004EEE44 jmp short loc_4EEE55 .text:004EEE46 ; --------------------------------------------------------------------------- .text:004EEE46 .text:004EEE46 loc_4EEE46: ; CODE XREF: sub_4EECE0+158j .text:004EEE46 cmp eax, 14h .text:004EEE49 jge short loc_4EEE55 .text:004EEE4B mov dword_634C34, 14h .text:004EEE55 .text:004EEE55 loc_4EEE55: ; CODE XREF: sub_4EECE0+151j .text:004EEE55 ; sub_4EECE0+164j ... hex (starting address EEE2A) - Code:
-
A1 34 4C 63 00 3B C6 74 22 3D F4 01 00 00 7E 0C C7 05 34 4C 63 00 F4 01 00 00 EB 0F 83 F8 14 7D 0A C7 05 34 4C 63 00 14 00 00 00
new code - Spoiler:
assembly - Code:
-
jmp short loc_4EEE55 hex (starting address EEE2A) - Code:
-
EB 29 90 90 90
Summary of hex edits: - Spoiler:
Enemy health bars FCD3D: 2B F8 EB 25 90
Unit limit 1F0400: 01 00 00 00 1F0404: 99 19 00 00 9FE70: A1 34 4C 63 00 50 8B 15 58 D5 62 00 8B 4A 08 EB 3D 90 90 90 EEE2A: EB 29 90 90 90
I have also found out alternative to creating empty sound files for unit action acknowledgement. In gamedata/soundclasses/ there are files with names corresponding to unit names. Inside of them are names of audio files that should be played. These can be deleted or replaced. Next to each of them is a number. If you have multiple sounds under same unit command, sound with higher number will be played more often. Example (araarch.tdf): [move] { TONEARA = 3.0; ARAARCHMOV1 = 1.0; } On average in 4 move orders toneara will be played 3 times and ARAARCHMOV1 1 time. If toneara is empty sound file, on average nothing will be played 3 times and ARAARCHMOV1 1 time. If you delete toneara, ARAARCHMOV1 will be played every time. This could also be annoying so empty sound files are still a good alternative. I have tried different values of range attribute of melee weapons and it seems to have no effect. I have found out that full screen minimap icons are located in anims/blips.gaf. So if we want to have bigger icons on minimap, we should modify that file. Here you can see icons that were made for TA megamap: tauniverse.com/forum/showpost.php?p=710852&postcount=102 Besides trying to find a way to get left click cursors to work for the right click interface, I will also try to see if sweetspot targeting is bugged the same way it is bugged in TA (tauniverse.com/forum/showthread.php?t=44781) and if it can be fixed. | |
| | | Sponsored content
| Subject: Re: Patch, bugs, balance, improvements... | |
| |
| | | | Patch, bugs, balance, improvements... | |
|
Similar topics | |
|
| Permissions in this forum: | You cannot reply to topics in this forum
| |
| |
| |
|