![]() ![]() It causes online games to desync and immediately terminate. Unfortunately, there is a tiny issue with this method of moving units through code. The bot is injected into the Age of Empires process via a dynamic library (.dll), directly calling the movement function. This bot automatically dodges (my own) catapult attacks by moving all units from the impact location using their virtual move function. To verify that this was indeed the function triggering movement, I wrote a small bot. This way I could identify the movement function inside the virtual function table. Moving the unit around triggered only one breakpoint. To find the move function, I set breakpoints on all functions in our units virtual function table and then remove all breakpoints that trigger for unknown reasons.īy trial and error I could get rid of those “random” breakpoints until ![]() Its existence suggest that movement may be a virtual function that is then overwritten. So our unit is a AVTRIBE_Combat_Object which inherits from everything else to the right.Įspecially interesting is the inherited AVRGE_Moving_Object. ReClassEx reports this RTTI about our unit object:ĪVTRIBE_Combat_Object : AVRGE_Combat_Object : AVRGE_Action_Object : AVRGE_Moving_Object : AVGRGE_Animated_Object : AVRGE_Static_Object Thanks to Runtime Type Information (RTTI) this also gives insights about its inheritance hierarchie. ![]() ![]() Using CheatEngine I was able to find a pointer to a unit object, just by manual searching based on changing a units position. Much of the underlying code is exactly the same as in the original.įirst, I wanted to see if I can perform some actions through code. Quite a lot actually, since the game is mostly a graphic overhaul. What does a 90s networking architecture have to do with “Age of Empires II: Definitive Edition” released in November 2019? Missing or broken sanity checks would make it possible to send invalid commands that alter the game’s state in unintended ways.Īnd that would be devastating, wouldn’t it? Exploring the game This architecture implies that clients have to carefully inspect incoming commands and perform sanity checks on them. the validity of a command or the position of a unit) the simulation is in a “desynced” state and the match gets terminated
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |