AlexSpl писал(а):
Defend в 20% слабоватый конечно. Хотелось бы повысить разнообразие стратегий, чтобы чаще был резон эту кнопку нажимать. Так что думаю сделать 35%.
Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: Как создать плагин для HD модаAlexSpl писал(а): Defend в 20% слабоватый конечно. Хотелось бы повысить разнообразие стратегий, чтобы чаще был резон эту кнопку нажимать. Так что думаю сделать 35%. |
Re: Как создать плагин для HD модаЦитата: Ставим брейкпоинт на запись значения защиты юнита - и выходим на нужный код. |
Re: Как создать плагин для HD модаbaratorch, конечно, большой молодец. Можно только позавидовать его энтузиазму и стамине.
|
Re: Как создать плагин для HD модаBen80 писал(а): Если править только бонус, то можно ассамблерно:
Если захотеть для различных существ разный бонус устроить, то так:
|
Re: Как создать плагин для HD модаДавно хотел сделать такую вещь: завоз новых артефактов у торговцев артефактами каждую неделю (невыкупленные арты сохраняются)
upd: дополнил код торговцами на карте приключений Последний раз редактировалось igrik 19 сен 2017, 06:41, всего редактировалось 2 раз(а).
|
Re: Как создать плагин для HD модаРешил наконец разобраться с этим "странным умножением", тем более, что в коде игры мне оно встречается уже не в первый раз:
"Странное число" - это результат оптимизации кода: n / 100 = n * 0.01 = n * 0.32 / 32 = (n * 0.32 * 2^32) / (32 * 2^32) = (n * 1374389534.72) / (2^5 * 2^32) ~ (n * 1374389535) / 2^37 (или n * 0x51EB851F >> 37 для целых неотрицательных n). UPD Добавил доказательство. Исправил ошибки в выкладках. |
Re: Как создать плагин для HD модаAlexSpl, шикарный разбор . Спасибо. Для непрограммиста (как я) такая информация очень ценна. Наконец-то я понял что такое сдвиг и как он работает.
Также я увидел что вы нопаете так (в "HD.Plugin.TownPortal"):
Удобнее это делать так:
|
Re: Как создать плагин для HD модаВообще, согласно мануалу от Intel, последовательность "нопов" следует заменять на:
Цитата: Code generators generate a no-operation (NOP) to align instructions. Examples of NOPs of different lengths in 32-bit mode are shown below: 1-byte: XCHG EAX, EAX 2-byte: 66 NOP 3-byte: LEA REG, 0 (REG) (8-bit displacement) 4-byte: NOP DWORD PTR [EAX + 0] (8-bit displacement) 5-byte: NOP DWORD PTR [EAX + EAX*1 + 0] (8-bit displacement) 6-byte: LEA REG, 0 (REG) (32-bit displacement) 7-byte: NOP DWORD PTR [EAX + 0] (32-bit displacement) 8-byte: NOP DWORD PTR [EAX + EAX*1 + 0] (32-bit displacement) 9-byte: NOP WORD PTR [EAX + EAX*1 + 0] (32-bit displacement) These are all true NOPs, having no effect on the state of the machine except to advance the EIP. Because NOPs require hardware resources to decode and execute, use the fewest number to achieve the desired padding. The one byte NOP:[XCHG EAX,EAX] has special hardware support. Although it still consumes a µop and its accompanying resources, the dependence upon the old value of EAX is removed. This µop can be executed at the earliest possible opportunity, reducing the number of outstanding instructions and is the lowest cost NOP. The other NOPs have no special hardware support. Their input and output registers are interpreted by the hardware. Therefore, a code generator should arrange to use the register containing the oldest value as input, so that the NOP will dispatch and release RS resources at the earliest possible opportunity. GENERAL OPTIMIZATION GUIDELINES Try to observe the following NOP generation priority: • Select the smallest number of NOPs and pseudo-NOPs to provide the desired padding. • Select NOPs that are least likely to execute on slower execution unit clusters. • Select the register arguments of NOPs to reduce dependencies. Но тогда получится каша из инструкций, уж лучше байтом 90 (xchg eax, eax), чтобы легко было читать. * * * Вот ещё из одного мануала от Intel табличка: Цитата: Length Assembly Byte Sequence 2 bytes 66 NOP 66 90H 3 bytes NOP DWORD ptr [EAX] 0F 1F 00H 4 bytes NOP DWORD ptr [EAX + 00H] 0F 1F 40 00H 5 bytes NOP DWORD ptr [EAX + EAX*1 + 00H] 0F 1F 44 00 00H 6 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00H] 66 0F 1F 44 00 00H 7 bytes NOP DWORD ptr [EAX + 00000000H] 0F 1F 80 00 00 00 00H 8 bytes NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0F 1F 84 00 00 00 00 00H 9 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] 66 0F 1F 84 00 00 00 00 00H
Так что забивать, наверное, лучше так:
Но в этом нет особого смысла, важнее читабельность Я даже иногда в начало длинной последовательности "нопов" вставляю безусловный переход, чтобы в режиме блок-схем в IDA было всё красиво:
|
Re: Как создать плагин для HD модаПлагин, изменяющий длительность заклинаний, который я написал для FfuzzyLogik.
Длительность обычных заклинаний (1 round/spell power) изменяется по формуле 1 + (2 * power + knowledge) / n (см. код). По этой же формуле вычисляется длительность Quicksand, Force Field, Fire Wall, Frenzy, Fire/Earth/Water/Air Elemental. Плагин FfuzzyLogikBeta Debug версия плагина UPD Теперь продолжительность жизни элементалов больше не пишется в полe cost.wood. |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7