Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --2024.10.20 发布
- --首发 http://forum.cheatmaker.org/
- --显示血量.
- --伤害显示.
- local sceneChangeAddr = 0x2087B
- -- 敌人 HP 地址列表
- local enemyHPAddrs = {0x2165e, 0x21762, 0x21866, 0x2196A, 0x21C76}
- local playerXLowAddr = 0x24E4E
- local playerXHighAddr = 0x24E4F
- local playerYLowAddr = 0x24E52
- local playerHPAddr = 0x24E5E
- local MaxplayerHPAddr = 0x24e62
- local screenYOffset = 0x208C2
- local screenXOffset = 0x208c0
- local memType = emu.memType.gbaExtWorkRam
- local hpBoxWidth = 20
- local hpBoxHeight = 10
- local hpBoxOffsetX = -10 -- X 偏移
- local hpBoxOffsetY = 0 -- Y 偏移 -100
- local damageInfo = {}
- local maxPlayerHP = emu.read(MaxplayerHPAddr, memType, false)
- local twoThirdsHP = math.floor(maxPlayerHP * 2 / 3)
- local oneThirdHP = math.floor(maxPlayerHP / 3)
- local lastPlayerHP = emu.read(playerHPAddr, memType, false)
- local lastEnemyHPs = {}
- for _, addr in ipairs(enemyHPAddrs) do
- lastEnemyHPs[addr] = emu.read(addr, memType, false)
- end
- local function update()
- emu.clearScreen()
- local sceneChangeState = emu.read(sceneChangeAddr, memType, false)
- -- 读取玩家坐标
- local playerXLow = emu.read(playerXLowAddr, memType, false)
- local playerXHigh = emu.read(playerXHighAddr, memType, false)
- local playerYLow = emu.read(playerYLowAddr, memType, false)
- -- 读取玩家的 HP
- local playerHP = emu.read(playerHPAddr, memType, false)
- --读取屏幕偏移地址
- local screenXOffsetStr = emu.readWord(screenXOffset, memType, false)
- local screenYOffsetStr = emu.read(screenYOffset, memType, false)
- local hpColor
- if playerHP > twoThirdsHP then
- hpColor = 0x0F00FF00 -- 绿色
- elseif playerHP >= oneThirdHP then
- hpColor = 0x0FFFF000 -- 黄色
- else
- hpColor = 0x0FFF0000 -- 红色
- end
- if sceneChangeState == 0 then
- local playerX = playerXLow + playerXHigh * 256 - screenXOffsetStr
- local playerY = 256 - playerYLow - screenYOffsetStr
- local hpBoxX = playerX + hpBoxOffsetX
- local hpBoxY = playerY + hpBoxOffsetY
- emu.drawRectangle(hpBoxX, hpBoxY, hpBoxWidth, hpBoxHeight, 0xFF0000FF, false) -- 红色填充
- emu.drawString(hpBoxX + 5 - 1, hpBoxY + 2, "" .. playerHP, 0X00008, 0xFF000000)
- emu.drawString(hpBoxX + 5 + 1, hpBoxY + 2, "" .. playerHP, 0X00008, 0xFF000000)
- emu.drawString(hpBoxX + 5, hpBoxY + 2 - 1, "" .. playerHP, 0X00008, 0xFF000000)
- emu.drawString(hpBoxX + 5, hpBoxY + 2 + 1, "" .. playerHP, 0X00008, 0xFF000000)
- emu.drawString(hpBoxX + 5, hpBoxY + 2, "" .. playerHP, hpColor, 0xFF000000)
- if playerHP < lastPlayerHP then
- local damage = lastPlayerHP - playerHP
- table.insert(damageInfo, {x = playerX, y = playerY, value = "-" .. damage, color = 0x0FFF0000, timer = 70, floatY = -70})
- elseif playerHP > lastPlayerHP then
- local heal = playerHP - lastPlayerHP
- table.insert(damageInfo, {x = playerX, y = playerY, value = "+" .. heal, color = 0x0F00FF00, timer = 70, floatY = -110})
- end
- lastPlayerHP = playerHP
- end
- for _, enemyHPAddr in ipairs(enemyHPAddrs) do
- local enemyHP = emu.readWord(enemyHPAddr, memType, false)
- if enemyHP ~= 0 and enemyHP <= 2000 then -- if enemyHP ~= 0 and enemyHP <= 65000 then
- local enemyXLow = emu.read(enemyHPAddr - 0x10, memType, false)
- local enemyXHigh = emu.read(enemyHPAddr - 0x10 + 1, memType, false)
- local enemyYLow = emu.read(enemyHPAddr - 0xC, memType, false)
- local enemyX = enemyXLow + enemyXHigh * 256 - screenXOffsetStr
- local enemyY = 256 - enemyYLow - screenYOffsetStr
- local enemyHpBoxX = enemyX + hpBoxOffsetX
- local enemyHpBoxY = enemyY + hpBoxOffsetY
- emu.drawRectangle(enemyHpBoxX, enemyHpBoxY, hpBoxWidth, hpBoxHeight, 0xFFFF0000, false) -- 绿色填充
- emu.drawString(enemyHpBoxX + 5 - 1, enemyHpBoxY + 2, "" .. enemyHP, 0x0F222831, 0xFF000000)
- emu.drawString(enemyHpBoxX + 5 + 1, enemyHpBoxY + 2, "" .. enemyHP, 0x0F222831, 0xFF000000)
- emu.drawString(enemyHpBoxX + 5, enemyHpBoxY + 2 - 1, "" .. enemyHP, 0x0F222831, 0xFF000000)
- emu.drawString(enemyHpBoxX + 5, enemyHpBoxY + 2 + 1, "" .. enemyHP, 0x0F222831, 0xFF000000)
- emu.drawString(enemyHpBoxX + 5, enemyHpBoxY + 2, "" .. enemyHP, 0x0FFFFFFF, 0xFF000000)
- if enemyHP < lastEnemyHPs[enemyHPAddr] then
- local damage = lastEnemyHPs[enemyHPAddr] - enemyHP
- table.insert(damageInfo, {x = enemyX, y = enemyY, value = "-" .. damage, color = 0x0FFF0000, timer = 70, floatY = -70})
- end
- lastEnemyHPs[enemyHPAddr] = enemyHP
- end
- end
- for i, info in ipairs(damageInfo) do
- emu.drawString(info.x - 1, info.y + info.floatY, info.value, 0x0F222831, 0xFF000000)
- emu.drawString(info.x + 1, info.y + info.floatY, info.value, 0x0F222831, 0xFF000000)
- emu.drawString(info.x, info.y + info.floatY - 1, info.value, 0x0F222831, 0xFF000000)
- emu.drawString(info.x, info.y + info.floatY + 1, info.value, 0x0F222831, 0xFF000000)
- emu.drawString(info.x, info.y + info.floatY, info.value, info.color, 0xFF000000)
- info.timer = info.timer - 1
- info.floatY = info.floatY - 1
- if info.timer <= 0 then
- table.remove(damageInfo, i)
- end
- end
- end
- emu.addEventCallback(update, emu.eventType.endFrame)
Advertisement