Skip to content

Instantly share code, notes, and snippets.

@Skarsnik
Last active January 21, 2016 17:43
Show Gist options
  • Save Skarsnik/aa9d6a0f5005ca18502f to your computer and use it in GitHub Desktop.
Save Skarsnik/aa9d6a0f5005ca18502f to your computer and use it in GitHub Desktop.
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