Advertisement
Guest User

Acomage.lua script for MM8 by Rod Letr

a guest
Nov 22nd, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.10 KB | None | 0 0
  1. --~ Script to manage custom Arcomage games in Might and Magic VIII.
  2. --~ Put it into your "...\Scripts\General" folder.
  3. --~ Leave any answers at http://www.celestialheavens.com/forum/10/10423
  4. --~  - Rod.
  5.  
  6. local new1 = 0
  7. local new2 = 0
  8. local new3 = 0
  9. local new4 = 0
  10. local new5 = 0
  11. local new6 = 0
  12. local res = 0
  13. local AiAMTable = {107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117}
  14. function ArcomageMatchEnd() end -- Triggered after end of match, started by StartArcomage(). Use it as function on event. Add commands before starting, clear them after.
  15.  
  16.  
  17.  
  18. ----- Initialization area -----
  19.  
  20. mem.u1[0x5015fc] = 0
  21.  
  22. new1 = mem.asmproc([[
  23.     cmp byte [0x5015fc], 0x1
  24.     jnz @neq
  25.     mov esp, 0x18FD5C
  26.     mov byte [0x5015fc], 0x3
  27. @neq:
  28.     mov ecx, ebp
  29. ]])
  30.  
  31. NopPos = mem.asmproc([[call 0x49d228]])
  32. mem.asmpatch(NopPos, "call 0x49d228 - " .. NopPos)
  33.  
  34. NopPos = mem.asmproc([[jmp 0x46188d]])
  35. mem.asmpatch(NopPos, "jmp 0x46188d - " .. NopPos)
  36.  
  37. mem.asmpatch(0x461886, "jmp " .. new1 .. " - 0x461886")
  38.  
  39. new2 = mem.asmproc([[
  40.     cmp byte [0x5015fc], 0x2
  41.     jnz @not
  42.     mov byte [0x5015fc], 0x1
  43.     mov dword ptr [ds:0x51e330], 0x1
  44. @not:
  45.     cmp dword ptr [ds:0x51e330], ebx
  46. ]])
  47.  
  48. NopPos = mem.asmproc([[jmp 0x42ee66]])
  49. mem.asmpatch(NopPos, "jmp 0x42ee66 - " .. NopPos)
  50.  
  51. mem.asmpatch(0x42ee60, "jmp " .. new2 .. " - 0x42ee60")
  52.  
  53. new3 = mem.asmproc([[
  54.     cmp byte [0x5015fc], 0x1
  55.     je @equ
  56.     jmp dword ptr [ds:eax*0x4+0x432c1b]
  57. @equ:
  58.     cmp dword ptr [ss:0x18F6B0], 0x65
  59.     jnz @two
  60.     mov dword ptr [ss:0x18F6B0], 0x68
  61.     jmp 0x42ef55
  62. @two:
  63. ]])
  64.  
  65. mem.asmpatch(new3 + 37, "jmp 0x42ef55 - " .. new3 + 37)
  66.  
  67. NopPos = mem.asmproc([[jmp 0x42eecf]])
  68. mem.asmpatch(NopPos, "jmp 0x42eecf - " .. NopPos)
  69.  
  70. mem.asmpatch(0x42eeab, "jmp " .. new3 .. " - 0x42eeab")
  71.  
  72. new4 = mem.asmproc([[
  73.     jnz @toa
  74.     cmp byte [0x5015fc], 0x3
  75.     jnz @cor
  76.     mov byte [0x5015fc], 0x0
  77.     call 0x461332
  78. @cor:
  79.     jmp 0x461332
  80. @toa:
  81.     cmp byte [0x5015fc], 0x1
  82.     jnz @Std
  83.     mov word [0x501624], ax
  84.     mov ax, word [0x5015fd]
  85.     mov word [0x4f2d58], ax
  86.     mov ax, word [0x5015ff]
  87.     mov word [0x4f2d5c], ax
  88.     mov ax, word [0x501601]
  89.     mov word [0x516C04], ax
  90.     mov ax, word [0x501603]
  91.     mov word [0x516C08], ax
  92.     mov ax, word [0x501605]
  93.     mov word [0x516C0C], ax
  94.     mov ax, word [0x501607]
  95.     mov word [0x516C10], ax
  96.     mov ax, word [0x501609]
  97.     mov word [0x516C14], ax
  98.     mov ax, word [0x50160b]
  99.     mov word [0x516C18], ax
  100.     mov ax, word [0x50160d]
  101.     mov word [0x516C1C], ax
  102.     mov ax, word [0x50160f]
  103.     mov word [0x516C20], ax
  104.     mov ax, word [0x501611]
  105.     mov word [0x516CC0], ax
  106.     mov ax, word [0x501613]
  107.     mov word [0x516CC4], ax
  108.     mov ax, word [0x501615]
  109.     mov word [0x516CC8], ax
  110.     mov ax, word [0x501617]
  111.     mov word [0x516CCC], ax
  112.     mov ax, word [0x501619]
  113.     mov word [0x516CD0], ax
  114.     mov ax, word [0x50161b]
  115.     mov word [0x516CD4], ax
  116.     mov ax, word [0x50161d]
  117.     mov word [0x516CD8], ax
  118.     mov ax, word [0x50161f]
  119.     mov word [0x516CDC], ax
  120.     mov ax, word [0x501624]
  121.     mov ebx, 0x51d338
  122.     mov ebp, 0xec1980
  123.     mov esi, 0xfeb360
  124.     mov edi, 0x0
  125. @Std:
  126. ]])
  127.  
  128. NopPos = mem.asmproc([[jmp 0x461881]])
  129. mem.asmpatch(NopPos, "jmp 0x461881 - " .. NopPos)
  130. mem.hook(new4 + 18, function() ArcomageMatchEnd() end)
  131. mem.asmpatch(new4 + 23, "jmp 0x461332 - " .. new4 + 23)
  132.  
  133. mem.asmpatch(0x46132c, "jmp " .. new4 .. " - 0x46132c")
  134.  
  135. new5 = mem.asmproc([[
  136.     cmp byte [0x5015fc], 0x1
  137.     je @equ
  138.     mov eax, dword [ds:eax+0x1c]
  139.     jnz @neq
  140. @equ:
  141.     mov eax, dword [ds:0x50162c]
  142. @neq:
  143.     sub eax, 0x6b
  144. ]])
  145.  
  146. NopPos = mem.asmproc([[jmp 0x40a779]])
  147. mem.asmpatch(NopPos, "jmp 0x40a779 - " .. NopPos)
  148.  
  149. mem.asmpatch(0x40a773, "jmp " .. new5 .. " - 0x40a773")
  150.  
  151. new6 = mem.asmproc([[
  152.     cmp byte [0x5015fc], 0x1
  153.     je @equ
  154.     mov eax, dword [ds:0x519328]
  155.     jmp @end
  156. @equ:
  157.     mov eax, 0x51865c
  158. @end:
  159. ]])
  160.  
  161. NopPos = mem.asmproc([[jmp 0x40e7f2]])
  162. mem.asmpatch(NopPos, "jmp 0x40e7f2 - " .. NopPos)
  163.  
  164. mem.asmpatch(0x40e7ed, "jmp " .. new6 .. " - 0x40e7ed")
  165.  
  166.  
  167.  
  168.  
  169. ----- Functions area -----
  170.  
  171. function StartArcomage(TWin, RWin, TPl, WPl, HamPl, GemPl, MonPl, ProdPl, MagPl, RecPl, TEn, WEn, HamEn, GemEn, MonEn, ProdEn, MagEn, RecEn, Ai)
  172.  
  173.     PlTab = {TPl, WPl, HamPl, GemPl, MonPl, ProdPl, MagPl, RecPl}
  174.     EnTab = {TEn, WEn, HamEn, GemEn, MonEn, ProdEn, MagEn, RecEn}
  175.  
  176.     for i = 1, 8 do
  177.         if EnTab[i] == nil then
  178.             EnTab[i] = PlTab[i]
  179.         end
  180.     end
  181.  
  182.     for i = 3, 5 do
  183.         PlTab[i] = PlTab[i] - PlTab[i + 3]
  184.     end
  185.  
  186.     for i = 6, 8 do
  187.         EnTab[i] = EnTab[i] - 1
  188.         PlTab[i] = PlTab[i] - 1
  189.     end
  190.  
  191.     if Ai == nil or Ai > 11 then
  192.         Ai = math.random(11)
  193.     end
  194.  
  195.     mem.u4[0x50162c] = AiAMTable[Ai]
  196.  
  197.     mem.u2[0x5015fd] = TWin
  198.     mem.u2[0x5015ff] = RWin
  199.  
  200.     mem.u2[0x501601] = PlTab[1]
  201.     mem.u2[0x501603] = PlTab[2]
  202.     mem.u2[0x501605] = PlTab[6]
  203.     mem.u2[0x501607] = PlTab[7]
  204.     mem.u2[0x501609] = PlTab[8]
  205.     mem.u2[0x50160b] = PlTab[3]
  206.     mem.u2[0x50160d] = PlTab[4]
  207.     mem.u2[0x50160f] = PlTab[5]
  208.  
  209.     mem.u2[0x501611] = EnTab[1]
  210.     mem.u2[0x501613] = EnTab[2]
  211.     mem.u2[0x501615] = EnTab[6]
  212.     mem.u2[0x501617] = EnTab[7]
  213.     mem.u2[0x501619] = EnTab[8]
  214.     mem.u2[0x50161b] = EnTab[3]
  215.     mem.u2[0x50161d] = EnTab[4]
  216.     mem.u2[0x50161f] = EnTab[5]
  217.  
  218.     mem.u1[0x5015fc] = 2
  219. end
  220.  
  221. function GetLastAMresult()
  222.     res = mem.u4[0x516e1c]
  223.     if res > 2 then
  224.         res = 3
  225.     end
  226.     return res
  227. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement