-
-
Save Skarsnik/aa9d6a0f5005ca18502f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function DrawNiceText(text_x, text_y, str) | |
--local sh = client.screenheight | |
--local sw = client.screenwidth | |
local calc_x = client.transformPointX(text_x) | |
local calc_y = client.transformPointY(text_y) | |
gui.text(calc_x, calc_y, str) | |
end | |
local prev_px = 0 | |
local prev_spx = 0 | |
local prev_py = 0 | |
while true do | |
local hspeed = mainmemory.read_s16_le(0x0058); | |
local vspeed = mainmemory.read_s16_le(0x0066); | |
local posx = mainmemory.read_u32_le(0x005A); | |
local posy = mainmemory.read_s16_le(0x0039); | |
local nuts = mainmemory.read_u16_le(0x0A29); | |
local player_x1 = mainmemory.read_s16_le(0x18A8); | |
local player_y1 = mainmemory.read_s16_le(0x18AA); | |
local player_x2 = mainmemory.read_s16_le(0x18AC); | |
local player_y2 = mainmemory.read_s16_le(0x18AE); | |
local skill_point = mainmemory.read_s16_le(0x189E); | |
local camx = mainmemory.read_s16_le(0x0CE); | |
local camy = mainmemory.read_s16_le(0x0D0); | |
local hitbox_x1 = player_x1 - camx; | |
local hitbox_x2 = player_x2 - camx; | |
local hitbox_y1 = player_y1 - camy; | |
local hitbox_y2 = player_y2 - camy; | |
-- Draw Enemy hitboxes | |
for i=0,20,1 do | |
local enemy_info = 0x5A3 + 0x40*i | |
local enemy_bounds = 0xA77 + 0xC*i | |
if (mainmemory.read_u16_le(enemy_bounds) == 0) then break end | |
local enemy_sprite = mainmemory.read_u16_le(enemy_info+4) | |
local enemy_hp = mainmemory.read_s8(enemy_info+0x2D) + 1 | |
local enemy_x1 = mainmemory.read_s16_le(enemy_bounds+2) | |
local enemy_y1 = mainmemory.read_s16_le(enemy_bounds+4) | |
local enemy_x2 = mainmemory.read_s16_le(enemy_bounds+6) | |
local enemy_y2 = mainmemory.read_s16_le(enemy_bounds+8) | |
gui.drawBox(enemy_x1-camx, enemy_y1-camy, enemy_x2-camx, enemy_y2-camy, 0xDDFF0000, 0x77FF2222) | |
DrawNiceText(enemy_x2-camx+3, enemy_y1-camy-16, bizstring.hex(enemy_sprite)) | |
DrawNiceText(enemy_x2-camx+3, enemy_y1-camy- 8, enemy_hp .. " HP") | |
end | |
-- Get/Draw Collectible on screen | |
local last_collec_entry = mainmemory.read_u16_le(0x1068) | |
for i = 0,100 do | |
local collec_entry = 0x106A + 0x14*i | |
if collec_entry >= last_collec_entry then | |
--console.writeline(i) | |
break | |
end | |
--console.writeline(string.format("%x", mainmemory.read_s16_le(collec_entry + 0x04))) | |
local collec_type = mainmemory.read_s16_le(collec_entry + 0x04); | |
local collec_color = 0xFF0000; | |
if collec_type == 0x2501 then | |
collec_color = 0x00FF00 | |
end | |
if collec_type == 0x2500 then | |
collec_color = 0xFFFF00 | |
end | |
local collec_x1 = mainmemory.read_s16_le(collec_entry + 0x06) | |
local collec_x2 = collec_x1 + mainmemory.read_s16_le(collec_entry + 0x10) | |
local collec_y1 = mainmemory.read_s16_le(collec_entry + 0x08) | |
local collec_y2 = collec_y1 + mainmemory.read_s16_le(collec_entry + 0x12) | |
gui.drawBox(collec_x1-camx, collec_y1-camy, collec_x2-camx, collec_y2-camy, 0xCC000000 + collec_color, 0x66000000 + collec_color) | |
end | |
-- Find Nuts/Collectible on the map | |
local collected_nuts_count = 0 | |
local total_nuts_count = 0 | |
local sprite_scroll_table = 0x18000 + mainmemory.read_u16_le(0x18002) | |
for i = 0,2047 do | |
local sprite_entry_A = sprite_scroll_table + 6*i | |
-- console.writeline(string.format("%x",sprite_entry_A)); | |
if sprite_entry_A >= 0x20000 then break end | |
local sprite_x = mainmemory.read_s16_le(sprite_entry_A + 0) | |
if sprite_x >= 0x7E00 then break end | |
local sprite_flags_A = mainmemory.read_s16_le(sprite_entry_A + 2) | |
local sprite_index = mainmemory.read_u16_le(sprite_entry_A + 4) | |
local sprite_entry_B = 0x1A000 + 8*sprite_index | |
if sprite_entry_B >= 0x20000 then break end | |
local sprite_enabled = mainmemory.read_u8(sprite_entry_B + 0) | |
local sprite_type = mainmemory.read_u8(sprite_entry_B + 1) | |
local sprite_x = mainmemory.read_s16_le(sprite_entry_B + 4) | |
local sprite_y = mainmemory.read_s16_le(sprite_entry_B + 6) | |
if sprite_type == 6 then | |
total_nuts_count = total_nuts_count + 1 | |
if sprite_enabled == 0xFF then | |
collected_nuts_count = collected_nuts_count + 1 | |
else | |
gui.drawLine((hitbox_x1+hitbox_x2)/2,(hitbox_y1+hitbox_y2)/2,sprite_x-camx,sprite_y-camy,0x77FFFFFF) | |
end | |
end | |
end | |
-- Draw Mr.Nutz hitbox | |
gui.drawBox(hitbox_x1, hitbox_y1, hitbox_x2, hitbox_y2, 0xFFFFFFFF, 0x77FFFF77) | |
DrawNiceText(200, 150, "HSpeed: ".. hspeed); | |
DrawNiceText(200, 155, "CSpeedx : "..player_x1 - prev_px); | |
DrawNiceText(200, 160, "CSSpeedx : "..posx - prev_spx); | |
DrawNiceText(200, 165, "VSpeed: ".. vspeed); | |
DrawNiceText(200, 170, "Pos SX: "..posx); | |
DrawNiceText(200, 180, "Pos X: "..player_x1); | |
DrawNiceText(200, 190, "Pos Y: "..player_y2); | |
DrawNiceText(200, 200, "Nuts: "..collected_nuts_count.."/"..total_nuts_count); | |
DrawNiceText(200, 210, "Sk Pt: "..string.format("%x",skill_point)); | |
prev_px = player_x1 | |
prev_spx = posx | |
emu.frameadvance(); | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment