local _sprites = {} function Sprite.register(sprite_data) if not sprite_data or not sprite_data.id then trace("Error: Invalid sprite object registered (missing id)!") return end if _sprites[sprite_data.id] then trace("Warning: Overwriting sprite with id: " .. sprite_data.id) end _sprites[sprite_data.id] = sprite_data end function Sprite.show(id, x, y, colorkey, scale, flip_x, flip_y, rot) local sprite_data = _sprites[id] if not sprite_data then trace("Error: No sprite found with id: " .. id) return end -- Use provided parameters, or fall back to sprite_data, then to defaults colorkey = colorkey or sprite_data.colorkey or 0 -- Default colorkey (transparent) scale = scale or sprite_data.scale or 1 -- Default scale flip_x = flip_x or sprite_data.flip_x or 0 -- Default flip_x (no flip) flip_y = flip_y or sprite_data.flip_y or 0 -- Default flip_y (no flip) rot = rot or sprite_data.rot or 0 -- Default rot (no rotation) if sprite_data.sprites then -- Complex sprite for i = 1, #sprite_data.sprites do local sub_sprite = sprite_data.sprites[i] spr( sub_sprite.s, x + (sub_sprite.x_offset or 0), y + (sub_sprite.y_offset or 0), sub_sprite.colorkey or colorkey, sub_sprite.scale or scale, sub_sprite.flip_x or flip_x, sub_sprite.flip_y or flip_y, sub_sprite.rot or rot ) end else -- Simple sprite spr(sprite_data.s, x, y, colorkey, scale, flip_x, flip_y, rot) end end