Position functions
distance
function distance(uid_a: integer, uid_b: integer): numberuid_a:integeruid_b:integer
Returns number
Calculate the tile distance of two entities by uid
draw_text_size
-- draw textset_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, numbersize:numbertext: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
-- call this in ON.FRAME if needed in your custom levelset_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
function game_position(x: number, y: number): number, numberx:numbery:number
Returns number, number
Get the game coordinates at the screen position (x, y)
get_aabb_bounds
function get_aabb_bounds(): AABBReturns AABB
Same as get_bounds but returns AABB struct instead of loose floats
get_bounds
-- Draw the level boundariesset_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, numberReturns 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
function get_camera_position(): number, numberReturns number, number
Gets the current camera position in the level
get_hitbox
function get_hitbox(uid: integer, extrude?: number, offsetx?: number, offsety?: number): AABBuid:integerextrude?:numberoptionaloffsetx?:numberoptionaloffsety?: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
function get_hud_position(index: integer): AABBindex: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
function get_image_size(path: string): integer, integerpath:string
Returns integer, integer
Get image size from file. Returns a tuple containing width and height.
get_position
function get_position(uid: integer): number, number, integeruid: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
function get_render_hitbox(uid: integer, extrude?: number, offsetx?: number, offsety?: number): AABBuid:integerextrude?:numberoptionaloffsetx?:numberoptionaloffsety?:numberoptional
Returns AABB
Same as get_hitbox but based on get_render_position
get_render_position
function get_render_position(uid: integer): number, number, integeruid: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
function get_velocity(uid: integer): number, numberuid: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
function get_window_size(): integer, integerReturns integer, integer
Gets the resolution (width and height) of the screen
get_zoom_level
function get_zoom_level(): numberReturns number
Get the current set zoom level
position_is_valid
function position_is_valid(x: number, y: number, layer: LAYER, flags: POS_TYPE): booleanReturns boolean
Check if position satisfies the given POS_TYPE flags, to be used in a custom is_valid function procedural for spawns.
screen_aabb
function screen_aabb(box: AABB): AABBbox:AABB
Returns AABB
Convert an AABB to a screen AABB that can be directly passed to draw functions
screen_distance
function screen_distance(x: number): numberx:number
Returns number
Translate a distance of x tiles to screen distance to be be used in drawing functions
screen_position
function screen_position(x: number, y: number): number, numberx:numbery:number
Returns number, number
Translate an entity position to screen position to be used in drawing functions
set_camera_position
function set_camera_position(cx: number, cy: number)cx:numbercy: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
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
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
function zoom_reset()Reset the default zoom levels for all areas and sets current zoom level to 13.5.