Code:
; 23. Колдовство боевых заклинаний без использования Книги
; Меняем вызовы исходной функции:
73E32 E872080000; CALL mop.004746A9
73F55 E84F070000; CALL mop.004746A9
; При вызове исходной функции заносим в ини-байт значение -1
746A9 C605A8464700FF; MOV BYTE PTR DS:[4746A8],0FF
; Под-функция
239C2D 55; PUSH EBP
239C2E 8BEC; MOV EBP,ESP
239C30 53; PUSH EBX
239C31 56; PUSH ESI
239C32 57; PUSH EDI
239C33 8B5D08; MOV EBX,DWORD PTR SS:[EBP+8] - положить указатель на BattleManager в ebx для корректной работы функции
239C36 E958ACE3FF; JMP mop.00474893
; Замена номера выбранного заклинания в Книге на требуемый:
19ED44 E9F2AE0900; JMP mop.00639C3B
239C3B A1D0926900; MOV EAX,DWORD PTR DS:[6992D0]
239C40 803DA8464700FF; CMP BYTE PTR DS:[4746A8],0FF
239C47 7505; JNZ SHORT mop.00639C4E
239C49 E9FB50F6FF; JMP mop.0059ED49
239C4E 0FB615A8464700; MOVZX EDX,BYTE PTR DS:[4746A8]
239C55 895038; MOV DWORD PTR DS:[EAX+38],EDX
239C58 EBEF; JMP SHORT mop.00639C49
; Не показывать диалог Книги Заклинаний:
19ED2D E928AF0900; JMP mop.00639C5A
239C5A 803DA8464700FF; CMP BYTE PTR DS:[4746A8],0FF
239C61 7408; JE SHORT mop.00639C6B
239C63 83C404; ADD ESP,4
239C66 E9C750F6FF; JMP mop.0059ED32
239C6B E8B05DFCFF; CALL mop.005FFA20
239C70 EBF4; JMP SHORT mop.00639C66
; Сама функция:
239C72 803DA8464700FF; CMP BYTE PTR DS:[4746A8],0FF
239C79 7518; JNZ SHORT mop.00639C93
239C7B 880DA8464700; MOV BYTE PTR DS:[4746A8],CL - занести номер заклинания в неиспользуемый байт
239C81 FF3520946900; PUSH DWORD PTR DS:[699420] - указатель на BattleManager
239C87 E8A1FFFFFF; CALL mop.00639C2D - вызов подфункции
239C8C C605A8464700FF; MOV BYTE PTR DS:[4746A8],0FF
239C93 C3;