Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --~ Script to manage custom Arcomage games in Might and Magic VIII.
- --~ Put it into your "...\Scripts\General" folder.
- --~ Leave any answers at http://www.celestialheavens.com/forum/10/10423
- --~ - Rod.
- local new1 = 0
- local new2 = 0
- local new3 = 0
- local new4 = 0
- local new5 = 0
- local new6 = 0
- local res = 0
- local AiAMTable = {107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117}
- function ArcomageMatchEnd() end -- Triggered after end of match, started by StartArcomage(). Use it as function on event. Add commands before starting, clear them after.
- ----- Initialization area -----
- mem.u1[0x5015fc] = 0
- new1 = mem.asmproc([[
- cmp byte [0x5015fc], 0x1
- jnz @neq
- mov esp, 0x18FD5C
- mov byte [0x5015fc], 0x3
- @neq:
- mov ecx, ebp
- ]])
- NopPos = mem.asmproc([[call 0x49d228]])
- mem.asmpatch(NopPos, "call 0x49d228 - " .. NopPos)
- NopPos = mem.asmproc([[jmp 0x46188d]])
- mem.asmpatch(NopPos, "jmp 0x46188d - " .. NopPos)
- mem.asmpatch(0x461886, "jmp " .. new1 .. " - 0x461886")
- new2 = mem.asmproc([[
- cmp byte [0x5015fc], 0x2
- jnz @not
- mov byte [0x5015fc], 0x1
- mov dword ptr [ds:0x51e330], 0x1
- @not:
- cmp dword ptr [ds:0x51e330], ebx
- ]])
- NopPos = mem.asmproc([[jmp 0x42ee66]])
- mem.asmpatch(NopPos, "jmp 0x42ee66 - " .. NopPos)
- mem.asmpatch(0x42ee60, "jmp " .. new2 .. " - 0x42ee60")
- new3 = mem.asmproc([[
- cmp byte [0x5015fc], 0x1
- je @equ
- jmp dword ptr [ds:eax*0x4+0x432c1b]
- @equ:
- cmp dword ptr [ss:0x18F6B0], 0x65
- jnz @two
- mov dword ptr [ss:0x18F6B0], 0x68
- jmp 0x42ef55
- @two:
- ]])
- mem.asmpatch(new3 + 37, "jmp 0x42ef55 - " .. new3 + 37)
- NopPos = mem.asmproc([[jmp 0x42eecf]])
- mem.asmpatch(NopPos, "jmp 0x42eecf - " .. NopPos)
- mem.asmpatch(0x42eeab, "jmp " .. new3 .. " - 0x42eeab")
- new4 = mem.asmproc([[
- jnz @toa
- cmp byte [0x5015fc], 0x3
- jnz @cor
- mov byte [0x5015fc], 0x0
- call 0x461332
- @cor:
- jmp 0x461332
- @toa:
- cmp byte [0x5015fc], 0x1
- jnz @Std
- mov word [0x501624], ax
- mov ax, word [0x5015fd]
- mov word [0x4f2d58], ax
- mov ax, word [0x5015ff]
- mov word [0x4f2d5c], ax
- mov ax, word [0x501601]
- mov word [0x516C04], ax
- mov ax, word [0x501603]
- mov word [0x516C08], ax
- mov ax, word [0x501605]
- mov word [0x516C0C], ax
- mov ax, word [0x501607]
- mov word [0x516C10], ax
- mov ax, word [0x501609]
- mov word [0x516C14], ax
- mov ax, word [0x50160b]
- mov word [0x516C18], ax
- mov ax, word [0x50160d]
- mov word [0x516C1C], ax
- mov ax, word [0x50160f]
- mov word [0x516C20], ax
- mov ax, word [0x501611]
- mov word [0x516CC0], ax
- mov ax, word [0x501613]
- mov word [0x516CC4], ax
- mov ax, word [0x501615]
- mov word [0x516CC8], ax
- mov ax, word [0x501617]
- mov word [0x516CCC], ax
- mov ax, word [0x501619]
- mov word [0x516CD0], ax
- mov ax, word [0x50161b]
- mov word [0x516CD4], ax
- mov ax, word [0x50161d]
- mov word [0x516CD8], ax
- mov ax, word [0x50161f]
- mov word [0x516CDC], ax
- mov ax, word [0x501624]
- mov ebx, 0x51d338
- mov ebp, 0xec1980
- mov esi, 0xfeb360
- mov edi, 0x0
- @Std:
- ]])
- NopPos = mem.asmproc([[jmp 0x461881]])
- mem.asmpatch(NopPos, "jmp 0x461881 - " .. NopPos)
- mem.hook(new4 + 18, function() ArcomageMatchEnd() end)
- mem.asmpatch(new4 + 23, "jmp 0x461332 - " .. new4 + 23)
- mem.asmpatch(0x46132c, "jmp " .. new4 .. " - 0x46132c")
- new5 = mem.asmproc([[
- cmp byte [0x5015fc], 0x1
- je @equ
- mov eax, dword [ds:eax+0x1c]
- jnz @neq
- @equ:
- mov eax, dword [ds:0x50162c]
- @neq:
- sub eax, 0x6b
- ]])
- NopPos = mem.asmproc([[jmp 0x40a779]])
- mem.asmpatch(NopPos, "jmp 0x40a779 - " .. NopPos)
- mem.asmpatch(0x40a773, "jmp " .. new5 .. " - 0x40a773")
- new6 = mem.asmproc([[
- cmp byte [0x5015fc], 0x1
- je @equ
- mov eax, dword [ds:0x519328]
- jmp @end
- @equ:
- mov eax, 0x51865c
- @end:
- ]])
- NopPos = mem.asmproc([[jmp 0x40e7f2]])
- mem.asmpatch(NopPos, "jmp 0x40e7f2 - " .. NopPos)
- mem.asmpatch(0x40e7ed, "jmp " .. new6 .. " - 0x40e7ed")
- ----- Functions area -----
- function StartArcomage(TWin, RWin, TPl, WPl, HamPl, GemPl, MonPl, ProdPl, MagPl, RecPl, TEn, WEn, HamEn, GemEn, MonEn, ProdEn, MagEn, RecEn, Ai)
- PlTab = {TPl, WPl, HamPl, GemPl, MonPl, ProdPl, MagPl, RecPl}
- EnTab = {TEn, WEn, HamEn, GemEn, MonEn, ProdEn, MagEn, RecEn}
- for i = 1, 8 do
- if EnTab[i] == nil then
- EnTab[i] = PlTab[i]
- end
- end
- for i = 3, 5 do
- PlTab[i] = PlTab[i] - PlTab[i + 3]
- end
- for i = 6, 8 do
- EnTab[i] = EnTab[i] - 1
- PlTab[i] = PlTab[i] - 1
- end
- if Ai == nil or Ai > 11 then
- Ai = math.random(11)
- end
- mem.u4[0x50162c] = AiAMTable[Ai]
- mem.u2[0x5015fd] = TWin
- mem.u2[0x5015ff] = RWin
- mem.u2[0x501601] = PlTab[1]
- mem.u2[0x501603] = PlTab[2]
- mem.u2[0x501605] = PlTab[6]
- mem.u2[0x501607] = PlTab[7]
- mem.u2[0x501609] = PlTab[8]
- mem.u2[0x50160b] = PlTab[3]
- mem.u2[0x50160d] = PlTab[4]
- mem.u2[0x50160f] = PlTab[5]
- mem.u2[0x501611] = EnTab[1]
- mem.u2[0x501613] = EnTab[2]
- mem.u2[0x501615] = EnTab[6]
- mem.u2[0x501617] = EnTab[7]
- mem.u2[0x501619] = EnTab[8]
- mem.u2[0x50161b] = EnTab[3]
- mem.u2[0x50161d] = EnTab[4]
- mem.u2[0x50161f] = EnTab[5]
- mem.u1[0x5015fc] = 2
- end
- function GetLastAMresult()
- res = mem.u4[0x516e1c]
- if res > 2 then
- res = 3
- end
- return res
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement