이 블로그 검색

2023년 4월 1일 토요일

Homm3 모드(MOD) 조각 개발 기획서. - 임프(패밀리어) 자기 희생 특기., 데빌-강제희생

{0x59F63B, (long)MovingMonsters8, H_LONG}, // sacrifice select whom to revieve
{0x59F65A, (long)MovingMonsters9, H_LONG}, // sacrifice select whom to kill
이미 있다. option 759 - Devils sacrificing.erm
을 참조하면 되겠고, 임프만 어떻게 하면 되려나.
SOD3.2와 WOG의 해당 커맨드 주소를 알게되어 기획 가능.

임프는 자기를 희생해서 우리편을 살릴 수 있음. 
패밀리어는 자기를 희생해서 우리편을 살릴 수 있음(
    차이점이 필요함.
    1. 패밀리어만 가능하게 한다. 
    2. 우리편을 살리는데 필요한만큼만 희생한다. 
    3. 부활 불가능하지만 시체를 남긴다. (!!) 핏로드와 연계 가능 최종목표는 여기로하자.
당장은 해당 기능은 불가능하므로 2번을 가능하도록 코딩을 하자.
ERM에 해당 명령은 존재하지만 살짝 고쳐야하므로, c/c++를 좀 만져야함. 
필요한만큼의 희생은 부활마법에서 잃은 체력을 계산할 수 있음.
그 다음 필요한 패밀리어의 수를 계산할 수 있음. 
이 방법을 쓰면 부활 불가능을 위해서, 초기 전투시 시작 유닛의 숫자 부분을 고치는 코드가 필요함!!

데빌특기 우리편 강제희생.- 
임프 특기랑 결국은 같은 방향. 인퍼노 최하층 1레벨은 알아서 희생하는 역할, 7레벨은 남을 희생시켜서라도 자기가 오래사는 역할!!로 해서 희생마법의 두 특징을 나누어서 사용가능하게 하는게 목표. 
최고의 이기주의를 방향으로하고, 기본체력이 작으므로, 행동스택을 잃지 않고 희생시킨 후, 원래대로 전투를 가능하게하거나, 
우리편에 데빌이 있으면, 다른 유닛들한테 그런특기가 가능한 것 처럼 바꾸는 방향도 가능.


WOG관련 코드에서 __newcallers가 어떤 구조인지 알아야함. 
첫번째가 주소인것 같으나 offset이 있을 수 있음. 두번째는 리턴(&함수이름)의 형태로 보임 하지만 정확치 않음, 3번째는 함수형태를 말하는듯함. H_CALL5는 5개 변수를 받는 STDCALL또는 FASTCALL일 것. 
그러면 H_LONG은 무엇일까? LONG하나를 받는 함수일 것인가. 아 롱점프인듯하다. 
LJMP니까 절대 주소가 맞고, HOTA도 같은 위치일 수 있겠음.  같은위치 맞는듯.
Long jump로 이름없는 함수로 뛰는데 이름없는 함수는 ghidra에서도 네이밍을 해주기까 까다로움.
코맨트를 열심히 달아놔야 할 것으로 보임.
졸업준비로 바빠서 기획서만 쓰고 마침.

댓글 없음:

댓글 쓰기

가장 많이 본 글