Current time: 24.04.2024, 16:39 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA PLUS
» 10-й город для ЭРА и не только...
Author Message
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #736

(15.09.2021 02:20)Bes Wrote:  а иконки городов когда подтянешь?Dry

Завтра. Готово.

Image: ecb2e70bae80.jpg
15.09.2021 02:22
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16489
Post: #737

(27.05.2021 17:12)XEPOMAHT Wrote:  
(27.05.2021 17:02)Berserker Wrote:  Поделись микропатчем, тоже применю.

Там просто 2 хука - первый сохраняет координаты, второй применяет их в воговском коде:

Code:
Hook 415AD2h, WoG_PlaceCreature,        TJump; замена концовки функции SoD_HintMessage
Hook 7575A3h, Fix_PlaceCreature,        TJump; исправить функцию WoG_PlaceCreature

Code:
proc WoG_PlaceCreature
    mov [HintWindowX], eax ; сохранить
    mov [HintWindowY], ecx ; координаты
    pushad
    mov eax, 7570D9h
    mov ecx, 697428h
    call eax
    popad
    push 415AF3h
    ret
endp

proc Fix_PlaceCreature
    push 0
    push -1
    push 0
    push -1
    push 0
    push -1
    push 0
    push -1
    push [HintWindowY]
    push [HintWindowX]
    mov eax, 4F6C00h
    mov edx, 4
    mov ecx, [ebp-38h]
    call eax
    push 7575B3h
    ret
endp

Обошёлся одним перехватчиком (координаты из стека взять можно):
Code:
function Hook_ZvsPlaceCreature_End (Context: ApiJack.PHookContext): longbool; stdcall;
begin
  PatchApi.Call(FASTCALL_, Ptr($4F6C00), [pinteger(Context.EBP - $38)^, 4, pinteger(Context.EBP + 60)^, pinteger(Context.EBP + 64)^, -1, 0, -1, 0, -1, 0, -1, 0]);

  result          := false;
  Context.RetAddr := Ptr($7575B3);
end;

(* Fix adventure map RMB popup coordinates: use tile coordinates, not centering *)
  ApiJack.HookCode(Ptr($7575A3), @Hook_ZvsPlaceCreature_End);


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
17.09.2021 01:27
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #738

(17.09.2021 01:27)Berserker Wrote:  Обошёлся одним перехватчиком (координаты из стека взять можно):

Не безопасно, т.к. непосредственно в аргументы функции эти координаты не идут. Любой моддер может вызывать функцию-посредника между двумя этими функциями и тогда адреса в стеке буду совершенно другими (так не редко делает WoG и даже я в Тифоне этим грешу, т.к. удобно), а сам моддер огребёт от era.dll по-полной и не будет понимать почему. Поэтому в ERA+ пока останется мой код, он понадёжнее будет (хотя может это просто паранойя 148 ).
17.09.2021 12:38
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16489
Post: #739

Да тут в любом случае не идеально выходит. С глобальными переменными-параметрами функцию PlaceCreature тоже нельзя вызвать из произвольного места. Точнее можно, но в твоём варианте со старыми координатами, а в моём — с мусорными.

Хотя я бы не считал функцию PlaceCreature самостоятельной, так как она обращается к ECX и EDI, а последний нарушает все соглашения о вызовах. Потому безопаснее вызывать LeaveCreature с параметрами оригинальной содовской функции. Тогда мой код будет работать с любого места. А вот с твоим координаты будет никак не передать.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
17.09.2021 14:32
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #740

(17.09.2021 14:32)Berserker Wrote:  Да тут в любом случае не идеально выходит.

Идеально - подменить всю воговскую функцию целиком вместе с её вызовом, на который уже напрямую пускать координаты подсказки прямо из содовской функции. Но это вряд ли кто-то будет делать (в MoP 2, насколько помню, эта функция вообще стёрта, т.к. все подсказки для карты выводятся родным для игры содовским кодом без костылей).

(17.09.2021 14:32)Berserker Wrote:  Хотя я бы не считал функцию PlaceCreature самостоятельной, так как она обращается к ECX и EDI, а последний нарушает все соглашения о вызовах.

Лично я не держусь за соглашения о вызовах на жестко привязанных "к месту" функциях, которые с 1% вероятностью могут вызываться сторонним кодом. Например в MoP сотни, если уже не тысячи, функций с нестандартными соглашениями, как непосредственно моповские, так и модифицированные содовские. Часто приходится избавляться от соглашения ради снижения размера кода игры, чтобы новый код влез в содовское пространство функции. В Тифоне такая роскошь конечно непозволительна. 148
17.09.2021 15:02
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16489
Post: #741

Вот только LeaveCreature — полноценная FASTCALL функция с параметрами. А в твоём варианте вызвать её из ЕРМ/Lua/C++Delphi по ЛКМ или вообще другому событию не выйдет, точнее выйдет, но без нужных координат. Так или иначе, с версии 3.9.0 баг вога исправлен, спасибо тебе за код 4


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
17.09.2021 17:25
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #742

(17.09.2021 17:25)Berserker Wrote:  Так или иначе, с версии 3.9.0 баг вога исправлен, спасибо тебе за код 4

Надеюсь, поддержку координат в !!IF:M0/4/^Подсказка^; не забудешь добавить тоже, чтобы не было несправедливости по отношению к пользовательским подсказкам на карте по сравнению с оригинальными содовскими. Spiteful
17.09.2021 17:55
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16489
Post: #743

XEPOMAHT, и ещё тьму диалогов с RMB всплытием, например IF:N, IF:Q и DL. Вот тут твой вариант с глобальными переменными начинает сиять новыми красками.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
17.09.2021 18:56
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #744

(17.09.2021 18:56)Berserker Wrote:  ещё тьму диалогов с RMB всплытием, например IF:N, IF:Q и DL.

DL вроде и так есть, по крайней мере в ERA+ оно отображается по координатам клика мыши (код скопировал из фреймворка, убрав ненужное).

(17.09.2021 18:56)Berserker Wrote:  Вот тут твой вариант с глобальными переменными начинает сиять новыми красками.

Потому что в ВоГ-е сам перехват на это дело не в том месте. Нужно ставить на содовский код, формирующий подсказку, а не на сам вызов вывода подсказки на экран. В самой ЭРЕ данный перехват как раз стоит в нужном месте, осталось за малым - убрать сам воговский перехват. Spiteful
17.09.2021 19:24
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16489
Post: #745

XEPOMAHT, в Эра плюс все DL-диалоги по координатам последнего щелчка отображаются?

Про перехват по какому именно адресу идёт речь в Эре?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
17.09.2021 19:49
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #746

(17.09.2021 19:49)Berserker Wrote:  XEPOMAHT, в Эра плюс все DL-диалоги по координатам последнего щелчка отображаются?

ERM-функция 99 в ERA+ это делает.

(17.09.2021 19:49)Berserker Wrote:  Про перехват по какому именно адресу идёт речь в Эре?

Извини, спутал с эровским хуком на хинт.

А хук на кастомные подсказки к объектам лучше ставить сразу после соотвествующего хука в Тифоне:

Code:
; Использование реального подтипа для подсказок по ПКМ:
      Hook 0x413912, MouseHintControl0, TJump; запоминание истинного подтипа в Temp

Там сразу пишешь в edi адрес на текст подсказки (ну или z-переменной, в которой эта подсказка записана) и возвращаешь код в 4159A0 - игра сама скопирует текст в буфер и выведет подсказку без всяких костылей.
Экраны Форджа и Бастиона в ERA+

Графика пока 8-битная, но в будущем оба города будут использовать 32-битную графику, т.е. станет непосредственно использоваться оригинальные PNG-файлы вместо def (т.к. и Фордж и Бастион делались изначально в 32-битном виде, а потом уже конвертировались в 8-битные def).

Image: 5b03d1bae274.jpg

Image: 4f3ab31df392.jpg
17.09.2021 20:09
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #747

Колесо ж из Павильона,не?Unsure
23.09.2021 06:07
Visit this user's website Find all posts by this user Quote this message in a reply
Grossmaster Offline
Moderators

Posts: 566
Post: #748

(23.09.2021 06:07)Bes Wrote:  Колесо ж из Павильона,не?Unsure

Да, колесо из павильона.


Новая графика для WoG
23.09.2021 06:13
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2270
Post: #749

(23.09.2021 06:13)Grossmaster Wrote:  
(23.09.2021 06:07)Bes Wrote:  Колесо ж из Павильона,не?Unsure

Да, колесо из павильона.

Из Павильона взято практически всё, кроме половины спецстроений и грааля Бастиона (рипнуто со скринов, поэтому можно считать, что тоже не оригинал). На использование оригинальной графики экран Бастиона пока что объявлен мораторий. 141
23.09.2021 07:10
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16489
Post: #750

XEPOMAHT, красота 132


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
23.09.2021 10:29
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group