/* Web64 SDK header printout: web64/world.h * Generated by scripts/copy-web64-ide-source.mjs. * The IDE resolves this header as a read-only virtual SDK document. */ #ifndef WEB64_WORLD_H #define WEB64_WORLD_H #include #include #define WEB64_WORLD_MODE_MULTICOLOR 1 #define WEB64_WORLD_CAMERA_WRAP 1 #define WEB64_WORLD_CAMERA_CLAMP 2 #define WEB64_WORLD_COLOR_REGION 0 #define WEB64_WORLD_COLOR_PER_CELL 1 #define WEB64_WORLD_COLOR_NONE 2 #define WEB64_WORLD_BOUNDARY_LEFT 1 #define WEB64_WORLD_BOUNDARY_RIGHT 2 #define WEB64_WORLD_BOUNDARY_UP 4 #define WEB64_WORLD_BOUNDARY_DOWN 8 #define WEB64_WORLD_SCREEN_COLUMNS 40 #define WEB64_WORLD_SCREEN_ROWS 25 typedef struct { uint16_t x; uint16_t y; uint8_t fine_x; uint8_t fine_y; uint8_t flags; } Web64WorldCamera; typedef struct { uint16_t cells; uint16_t colors; uint16_t materials; uint16_t blocks; uint16_t screen; uint16_t color_ram; uint16_t row_stride; uint8_t width; uint8_t height; uint8_t cell_width; uint8_t cell_height; uint8_t color_mode; uint8_t region_color; uint8_t flags; } Web64WorldView; typedef struct { uint8_t column; uint8_t row; uint8_t width; uint8_t height; } Web64WorldRect; _web64_rt void web64_world_apply_video_mode(uint8_t flags, uint8_t memory_setup); /* Compatibility wrapper retained from Web64 1.7; prefer web64_asset_copy(). */ _web64_rt void web64_world_copy_asset(uint8_t *destination, const uint8_t *source, uint16_t length); _web64_rt uint8_t web64_world_draw_char_view(uint8_t *cells, uint8_t *colors, uint8_t *screen, uint8_t *color_ram, uint8_t width, uint8_t height, uint8_t row_stride, uint8_t color_mode, uint8_t region_color); _web64_rt uint8_t web64_world_draw_block2_view(uint8_t *map, uint8_t *blocks, uint8_t *block_colors, uint8_t *screen, uint8_t *color_ram, uint8_t width, uint8_t height, uint8_t row_stride, uint8_t color_mode, uint8_t region_color); _web64_rt uint8_t web64_world_draw_char_view_screen(uint8_t *cells, uint8_t *screen, uint8_t width, uint8_t height, uint8_t row_stride); _web64_rt uint8_t web64_world_draw_block2_view_screen(uint8_t *map, uint8_t *blocks, uint8_t *screen, uint8_t width, uint8_t height, uint8_t row_stride); _web64_rt uint8_t web64_world_stream_column(uint8_t *cells, uint8_t *colors, uint8_t *screen, uint8_t *color_ram, uint8_t source_column, uint8_t dest_column, uint8_t height, uint8_t row_stride, uint8_t screen_stride, uint8_t color_mode, uint8_t region_color); _web64_rt uint8_t web64_world_stream_row(uint8_t *cells, uint8_t *colors, uint8_t *screen, uint8_t *color_ram, uint8_t source_row, uint8_t dest_row, uint8_t width, uint8_t row_stride, uint8_t screen_stride, uint8_t color_mode, uint8_t region_color); _web64_rt uint8_t web64_world_stream_column_screen(uint8_t *cells, uint8_t *screen, uint8_t source_column, uint8_t dest_column, uint8_t height, uint8_t row_stride, uint8_t screen_stride); _web64_rt uint8_t web64_world_stream_row_screen(uint8_t *cells, uint8_t *screen, uint8_t source_row, uint8_t dest_row, uint8_t width, uint8_t row_stride, uint8_t screen_stride); /* Camera math only: the application owns rendering and frame synchronization. */ /* Boundary bits report direction, not a crossing count; split render steps so each call crosses at most one cell. */ _web64_rt uint8_t web64_world_scroll_x(Web64WorldCamera *camera, int8_t delta_pixels, uint16_t max_cell_x, uint8_t flags); _web64_rt uint8_t web64_world_scroll_y(Web64WorldCamera *camera, int8_t delta_pixels, uint16_t max_cell_y, uint8_t flags); /* Synchronize directly from Motion Q12.4 position; clamp or wrap the Motion position before calling. */ _web64_rt uint8_t web64_world_camera_sync_x(Web64WorldCamera *camera, uint16_t subpixel_position); _web64_rt uint8_t web64_world_camera_sync_y(Web64WorldCamera *camera, uint16_t subpixel_position); /* Offscreen-page primitives only. Never pass the screen currently selected by VIC-II. */ _web64_rt void web64_world_shift_left(uint8_t *screen, uint8_t *color_ram, uint8_t height, uint8_t color_mode); _web64_rt void web64_world_shift_right(uint8_t *screen, uint8_t *color_ram, uint8_t height, uint8_t color_mode); _web64_rt void web64_world_shift_up(uint8_t *screen, uint8_t *color_ram, uint8_t height, uint8_t color_mode); _web64_rt void web64_world_shift_down(uint8_t *screen, uint8_t *color_ram, uint8_t height, uint8_t color_mode); _web64_rt uint8_t web64_world_mutate_cell(uint8_t *cells, uint8_t *colors, uint8_t *materials, uint8_t *screen, uint8_t *color_ram, Web64WorldCamera *camera, uint8_t column, uint8_t row, uint8_t value, uint8_t color, uint8_t material, uint8_t row_stride, uint8_t screen_stride, uint8_t color_mode); #define web64_world_shift_left_screen(screen, height) web64_world_shift_left((screen), 0, (height), WEB64_WORLD_COLOR_NONE) #define web64_world_shift_right_screen(screen, height) web64_world_shift_right((screen), 0, (height), WEB64_WORLD_COLOR_NONE) #define web64_world_shift_up_screen(screen, height) web64_world_shift_up((screen), 0, (height), WEB64_WORLD_COLOR_NONE) #define web64_world_shift_down_screen(screen, height) web64_world_shift_down((screen), 0, (height), WEB64_WORLD_COLOR_NONE) #define web64_world_mutate_cell_screen(cells, screen, camera, column, row, value, row_stride, screen_stride) web64_world_mutate_cell((cells), 0, 0, (screen), 0, (camera), (column), (row), (value), 0, 0, (row_stride), (screen_stride), WEB64_WORLD_COLOR_NONE) #define WEB64_WORLD_PIXEL_TO_CELL(pixel) ((uint16_t)(pixel) >> 3) #define WEB64_WORLD_PIXEL_FINE(pixel) ((uint8_t)(pixel) & 7) #define WEB64_WORLD_SUBPIXEL_TO_PIXEL(position) ((uint16_t)(position) >> WEB64_SUBPIXEL_BITS) #define WEB64_WORLD_SUBPIXEL_TO_CELL(position) (WEB64_WORLD_SUBPIXEL_TO_PIXEL(position) >> 3) #define WEB64_WORLD_SUBPIXEL_FINE(position) (WEB64_WORLD_SUBPIXEL_TO_PIXEL(position) & 7) #define web64_world_camera_vic_fine_x(camera) (7 - ((camera)->fine_x & 7)) #define web64_world_camera_vic_fine_y(camera) (7 - ((camera)->fine_y & 7)) #define web64_world_camera_pixel_x(camera) (((camera)->x << 3) + (camera)->fine_x) #define web64_world_camera_pixel_y(camera) (((camera)->y << 3) + (camera)->fine_y) #endif