Skip to content

Position functions

distance

source

function distance(uid_a: integer, uid_b: integer): number
uid_a: integer
uid_b: integer

Returns number

Calculate the tile distance of two entities by uid

draw_text_size

source

-- draw text
set_callback(function(draw_ctx)
-- get a random color
local color = math.random(0, 0xffffffff)
-- zoom the font size based on frame
local size = (get_frame() % 199)+1
local text = 'Awesome!'
-- calculate size of text
local w, h = draw_text_size(size, text)
-- draw to the center of screen
draw_ctx:draw_text(0-w/2, 0-h/2, size, text, color)
end, ON.GUIFRAME)
function draw_text_size(size: number, text: string): number, number
size: number
text: string

Returns number, number

Calculate the bounding box of text, so you can center it etc. Returns width, height in screen distance.

fix_liquid_out_of_bounds

source

-- call this in ON.FRAME if needed in your custom level
set_callback(fix_liquid_out_of_bounds, ON.FRAME)
function fix_liquid_out_of_bounds()

Removes all liquid that is about to go out of bounds, this would normally crash the game, but playlunky/overlunky patch this bug. The patch however does not destroy the liquids that fall pass the level bounds, so you may still want to use this function if you spawn a lot of liquid that may fall out of the level

game_position

source

function game_position(x: number, y: number): number, number
x: number
y: number

Returns number, number

Get the game coordinates at the screen position (x, y)

get_aabb_bounds

source

function get_aabb_bounds(): AABB

Returns AABB

Same as get_bounds but returns AABB struct instead of loose floats

get_bounds

source

-- Draw the level boundaries
set_callback(function(draw_ctx)
local xmin, ymax, xmax, ymin = get_bounds()
local sx, sy = screen_position(xmin, ymax) -- top left
local sx2, sy2 = screen_position(xmax, ymin) -- bottom right
draw_ctx:draw_rect(sx, sy, sx2, sy2, 4, 0, rgba(255, 255, 255, 255))
end, ON.GUIFRAME)
function get_bounds(): number, number, number, number

Returns number, number, number, number

Basically gets the absolute coordinates of the area inside the unbreakable bedrock walls, from wall to wall. Every solid entity should be inside these boundaries. The order is: left x, top y, right x, bottom y

get_camera_position

source

function get_camera_position(): number, number

Returns number, number

Gets the current camera position in the level

get_hitbox

source

function get_hitbox(uid: integer, extrude?: number, offsetx?: number, offsety?: number): AABB
uid: integer
extrude?: numberoptional
offsetx?: numberoptional
offsety?: numberoptional

Returns AABB

Gets the hitbox of an entity, use extrude to make the hitbox bigger/smaller in all directions and offset to offset the hitbox in a given direction

get_hud_position

source

function get_hud_position(index: integer): AABB
index: integer

Returns AABB

Approximate bounding box of the player hud element for player index 1..4 based on user settings and player count

get_image_size

source

function get_image_size(path: string): integer, integer
path: string

Returns integer, integer

Get image size from file. Returns a tuple containing width and height.

get_position

source

function get_position(uid: integer): number, number, integer
uid: integer

Returns number, number, integer

Get position x, y, layer of entity by uid. Use this, don't use Entity.x/y because those are sometimes just the offset to the entity you're standing on, not real level coordinates.

get_render_hitbox

source

function get_render_hitbox(uid: integer, extrude?: number, offsetx?: number, offsety?: number): AABB
uid: integer
extrude?: numberoptional
offsetx?: numberoptional
offsety?: numberoptional

Returns AABB

Same as get_hitbox but based on get_render_position

get_render_position

source

function get_render_position(uid: integer): number, number, integer
uid: integer

Returns number, number, integer

Get interpolated render position x, y, layer of entity by uid. This gives smooth hitboxes for 144Hz master race etc...

get_velocity

source

function get_velocity(uid: integer): number, number
uid: integer

Returns number, number

Get velocity vx, vy of an entity by uid. Use this to get velocity relative to the game world, (the Entity.velocityx/velocityy are relative to Entity.overlay). Only works for movable or liquid entities

get_window_size

source

function get_window_size(): integer, integer

Returns integer, integer

Gets the resolution (width and height) of the screen

get_zoom_level

source

function get_zoom_level(): number

Returns number

Get the current set zoom level

position_is_valid

source

function position_is_valid(x: number, y: number, layer: LAYER, flags: POS_TYPE): boolean
x: number
y: number
layer: LAYER
flags: POS_TYPE

Returns boolean

Check if position satisfies the given POS_TYPE flags, to be used in a custom is_valid function procedural for spawns.

screen_aabb

source

function screen_aabb(box: AABB): AABB
box: AABB

Returns AABB

Convert an AABB to a screen AABB that can be directly passed to draw functions

screen_distance

source

function screen_distance(x: number): number
x: number

Returns number

Translate a distance of x tiles to screen distance to be be used in drawing functions

screen_position

source

function screen_position(x: number, y: number): number, number
x: number
y: number

Returns number, number

Translate an entity position to screen position to be used in drawing functions

set_camera_position

source

function set_camera_position(cx: number, cy: number)
cx: number
cy: number

Sets the absolute current camera position without rubberbanding animation. Ignores camera bounds or currently focused uid, but doesn't clear them. Best used in ON.RENDER_PRE_GAME or similar. See Camera for proper camera handling with bounds and rubberbanding.

update_camera_position

source

function update_camera_position()

Updates the camera focus according to the params set in Camera, i.e. to apply normal camera movement when paused etc.

zoom

source

function zoom(level: number)
level: number

Set the zoom level used in levels and shops. 13.5 is the default, or 12.5 for shops. See zoom_reset.

zoom_reset

source

function zoom_reset()

Reset the default zoom levels for all areas and sets current zoom level to 13.5.