vcbfm

Final Fight ONE_GBA_GAME

Oct 20th, 2024 (edited)
23
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.51 KB | Source Code | 0 0
  1. --2024.10.20 发布
  2. --首发 http://forum.cheatmaker.org/
  3. --显示血量.
  4. --伤害显示.
  5.  
  6. local sceneChangeAddr = 0x2087B
  7. -- 敌人 HP 地址列表
  8. local enemyHPAddrs = {0x2165e, 0x21762, 0x21866, 0x2196A, 0x21C76}
  9. local playerXLowAddr = 0x24E4E
  10. local playerXHighAddr = 0x24E4F
  11. local playerYLowAddr = 0x24E52
  12. local playerHPAddr = 0x24E5E
  13. local MaxplayerHPAddr = 0x24e62
  14. local screenYOffset = 0x208C2  
  15. local screenXOffset =  0x208c0  
  16. local memType = emu.memType.gbaExtWorkRam
  17.  
  18. local hpBoxWidth = 20
  19. local hpBoxHeight = 10
  20. local hpBoxOffsetX = -10  -- X 偏移
  21. local hpBoxOffsetY = 0 -- Y 偏移 -100
  22.  
  23. local damageInfo = {}
  24. local maxPlayerHP = emu.read(MaxplayerHPAddr, memType, false)
  25. local twoThirdsHP = math.floor(maxPlayerHP * 2 / 3)
  26. local oneThirdHP = math.floor(maxPlayerHP / 3)
  27.  
  28. local lastPlayerHP = emu.read(playerHPAddr, memType, false)
  29. local lastEnemyHPs = {}
  30. for _, addr in ipairs(enemyHPAddrs) do
  31.     lastEnemyHPs[addr] = emu.read(addr, memType, false)
  32. end
  33.  
  34. local function update()
  35.     emu.clearScreen()
  36.    
  37.      local sceneChangeState = emu.read(sceneChangeAddr, memType, false)
  38.     -- 读取玩家坐标
  39.     local playerXLow = emu.read(playerXLowAddr, memType, false)
  40.     local playerXHigh = emu.read(playerXHighAddr, memType, false)
  41.     local playerYLow = emu.read(playerYLowAddr, memType, false)
  42.  
  43.     -- 读取玩家的 HP
  44.     local playerHP = emu.read(playerHPAddr, memType, false)
  45.  
  46.     --读取屏幕偏移地址
  47.     local screenXOffsetStr = emu.readWord(screenXOffset, memType, false)
  48.     local screenYOffsetStr = emu.read(screenYOffset, memType, false)
  49.  
  50.     local hpColor
  51.     if playerHP >  twoThirdsHP then
  52.         hpColor = 0x0F00FF00  -- 绿色
  53.     elseif playerHP >= oneThirdHP then
  54.         hpColor = 0x0FFFF000  -- 黄色
  55.     else
  56.         hpColor = 0x0FFF0000  -- 红色
  57.     end
  58.  
  59.     if sceneChangeState == 0 then
  60.  
  61.         local playerX = playerXLow + playerXHigh * 256 - screenXOffsetStr
  62.         local playerY = 256 - playerYLow - screenYOffsetStr
  63.  
  64.         local hpBoxX = playerX + hpBoxOffsetX
  65.         local hpBoxY = playerY + hpBoxOffsetY
  66.  
  67.         emu.drawRectangle(hpBoxX, hpBoxY, hpBoxWidth, hpBoxHeight, 0xFF0000FF, false)  -- 红色填充
  68.         emu.drawString(hpBoxX + 5 - 1, hpBoxY + 2, "" .. playerHP, 0X00008, 0xFF000000)
  69.         emu.drawString(hpBoxX + 5 + 1, hpBoxY + 2, "" .. playerHP, 0X00008, 0xFF000000)  
  70.         emu.drawString(hpBoxX + 5, hpBoxY + 2 - 1, "" .. playerHP, 0X00008, 0xFF000000)  
  71.         emu.drawString(hpBoxX + 5, hpBoxY + 2 + 1, "" .. playerHP, 0X00008, 0xFF000000)
  72.         emu.drawString(hpBoxX + 5, hpBoxY + 2, "" .. playerHP, hpColor, 0xFF000000)
  73.  
  74.         if playerHP < lastPlayerHP then
  75.             local damage = lastPlayerHP - playerHP
  76.             table.insert(damageInfo, {x = playerX, y = playerY, value = "-" .. damage, color = 0x0FFF0000, timer = 70, floatY = -70})
  77.         elseif playerHP > lastPlayerHP then
  78.             local heal = playerHP - lastPlayerHP
  79.             table.insert(damageInfo, {x = playerX, y = playerY, value = "+" .. heal, color = 0x0F00FF00, timer = 70, floatY = -110})
  80.         end
  81.         lastPlayerHP = playerHP
  82.     end
  83.  
  84.     for _, enemyHPAddr in ipairs(enemyHPAddrs) do
  85.         local enemyHP = emu.readWord(enemyHPAddr, memType, false)
  86.         if enemyHP ~= 0 and enemyHP <= 2000 then  -- if enemyHP ~= 0 and enemyHP <= 65000 then
  87.             local enemyXLow = emu.read(enemyHPAddr - 0x10, memType, false)
  88.             local enemyXHigh = emu.read(enemyHPAddr - 0x10 + 1, memType, false)
  89.             local enemyYLow = emu.read(enemyHPAddr - 0xC, memType, false)
  90.             local enemyX = enemyXLow + enemyXHigh * 256 - screenXOffsetStr
  91.             local enemyY = 256 - enemyYLow - screenYOffsetStr
  92.             local enemyHpBoxX = enemyX + hpBoxOffsetX
  93.             local enemyHpBoxY = enemyY + hpBoxOffsetY
  94.             emu.drawRectangle(enemyHpBoxX, enemyHpBoxY, hpBoxWidth, hpBoxHeight, 0xFFFF0000, false)  -- 绿色填充
  95.  
  96.             emu.drawString(enemyHpBoxX + 5 - 1, enemyHpBoxY + 2, "" .. enemyHP, 0x0F222831, 0xFF000000)  
  97.             emu.drawString(enemyHpBoxX + 5 + 1, enemyHpBoxY + 2, "" .. enemyHP, 0x0F222831, 0xFF000000)  
  98.             emu.drawString(enemyHpBoxX + 5, enemyHpBoxY + 2 - 1, "" .. enemyHP, 0x0F222831, 0xFF000000)  
  99.             emu.drawString(enemyHpBoxX + 5, enemyHpBoxY + 2 + 1, "" .. enemyHP, 0x0F222831, 0xFF000000)  
  100.             emu.drawString(enemyHpBoxX + 5, enemyHpBoxY + 2, "" .. enemyHP, 0x0FFFFFFF, 0xFF000000)
  101.  
  102.             if enemyHP < lastEnemyHPs[enemyHPAddr] then
  103.                 local damage = lastEnemyHPs[enemyHPAddr] - enemyHP
  104.                 table.insert(damageInfo, {x = enemyX, y = enemyY, value = "-" .. damage, color = 0x0FFF0000, timer = 70, floatY = -70})
  105.             end
  106.             lastEnemyHPs[enemyHPAddr] = enemyHP
  107.         end
  108.     end
  109.  
  110.     for i, info in ipairs(damageInfo) do
  111.         emu.drawString(info.x - 1, info.y + info.floatY, info.value, 0x0F222831, 0xFF000000)  
  112.         emu.drawString(info.x + 1, info.y + info.floatY, info.value, 0x0F222831, 0xFF000000)  
  113.         emu.drawString(info.x, info.y + info.floatY - 1, info.value, 0x0F222831, 0xFF000000)  
  114.         emu.drawString(info.x, info.y + info.floatY + 1, info.value, 0x0F222831, 0xFF000000)  
  115.         emu.drawString(info.x, info.y + info.floatY, info.value, info.color, 0xFF000000)
  116.  
  117.         info.timer = info.timer - 1
  118.         info.floatY = info.floatY - 1
  119.  
  120.         if info.timer <= 0 then
  121.             table.remove(damageInfo, i)
  122.         end
  123.     end
  124. end
  125.  
  126. emu.addEventCallback(update, emu.eventType.endFrame)
  127.  
Tags: game lua GBA mesen2
Advertisement
Comments
Add Comment
Please, Sign In to add comment