vcbfm

GBA_Double_Dragon_显血LUA脚本

Oct 24th, 2024 (edited)
30
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.32 KB | Source Code | 0 0
  1. -- 2024.10.24 发布到pastebin.
  2. -- Mesen模拟器的显示血量lua脚本.
  3.  
  4. -- 内存地址
  5. local playerHPAddress = 0x37C32
  6. local scroll1XAddress = 0x32C32
  7. local scroll1YAddress = 0x32BFA
  8. local enemyHPAddresses = {0x37E12, 0x37D52, 0x37DB2, 0x37CF2, 0x37C92}
  9.  
  10. local function getCoordinates(baseAddress)
  11.     local xAddress = baseAddress - 0x34
  12.     local yAddress = baseAddress - 0x30
  13.    
  14.     local x = emu.readWord(xAddress, emu.memType.gbaExtWorkRam, false)
  15.     local y = emu.readWord(yAddress, emu.memType.gbaExtWorkRam, false)
  16.    
  17.     return x, y
  18. end
  19.  
  20. local function getScrollOffsets()
  21.     local scrollX = emu.readWord(scroll1XAddress, emu.memType.gbaExtWorkRam, false)
  22.     local scrollY = emu.readWord(scroll1YAddress, emu.memType.gbaExtWorkRam, false)
  23.    
  24.     return scrollX, scrollY
  25. end
  26.  
  27. local function getHP(address)
  28.     return emu.read(address, emu.memType.gbaExtWorkRam, false)
  29. end
  30.  
  31. local function drawPlayerHP()
  32.     local playerX, playerY = getCoordinates(playerHPAddress)
  33.     local scrollX, scrollY = getScrollOffsets()
  34.    
  35.     local drawX = playerX - scrollX
  36.     local drawY = playerY - scrollY - 0
  37.    
  38.     local playerHP = getHP(playerHPAddress)
  39.    
  40.     local hpText = tostring(playerHP)
  41.     local charWidth = #hpText * 8
  42.     local boxWidth = charWidth + 2
  43.     local boxHeight = 12
  44.    
  45.     emu.drawRectangle(drawX, drawY, boxWidth, boxHeight, 0x0F000000, true)
  46.     emu.drawString(drawX + 1, drawY + 1, hpText, 0x0FFFFFFF, 0xFF000000)
  47.    
  48. end
  49.  
  50. local function drawEnemyHP()
  51.     local scrollX, scrollY = getScrollOffsets()
  52.    
  53.     for _, enemyHPAddress in ipairs(enemyHPAddresses) do
  54.         local enemyX, enemyY = getCoordinates(enemyHPAddress)
  55.         local drawX = enemyX - scrollX
  56.         local drawY = enemyY - scrollY - 0
  57.        
  58.         local enemyHP = getHP(enemyHPAddress)
  59.        
  60.         local hpText = tostring(enemyHP)
  61.         local charWidth = #hpText * 8
  62.         local boxWidth = charWidth + 2
  63.         local boxHeight = 12
  64.        
  65.         emu.drawRectangle(drawX, drawY, boxWidth, boxHeight, 0x0F000000, true)
  66.         emu.drawString(drawX + 1, drawY + 1, hpText, 0x0FFFFFFF, 0xFF000000)
  67.  
  68.     end
  69. end
  70.  
  71. -- 每帧更新玩家和敌人的HP
  72. local function update()
  73.     drawPlayerHP()
  74.     drawEnemyHP()
  75. end
  76.  
  77. emu.addEventCallback(update, emu.eventType.endFrame)
  78.  
Tags: lua GBA MESEN
Advertisement
Comments
Add Comment
Please, Sign In to add comment