yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::editor::dungeon_coords Namespace Reference

Coordinate conversion utilities for dungeon editing. More...

Classes

struct  CameraToLocalResult
 Convert camera coordinates back to room ID and local position. More...
 

Functions

std::pair< int, int > RoomToCanvas (int room_x, int room_y)
 Convert room tile coordinates to canvas pixel coordinates.
 
std::pair< int, int > CanvasToRoom (int canvas_x, int canvas_y)
 Convert canvas pixel coordinates to room tile coordinates.
 
std::pair< int, int > ScreenToCanvas (int screen_x, int screen_y, float scale)
 Convert screen coordinates to canvas coordinates (undo scale)
 
std::pair< int, int > CanvasToScreen (int canvas_x, int canvas_y, float scale)
 Convert canvas coordinates to screen coordinates (apply scale)
 
bool IsWithinBounds (int canvas_x, int canvas_y, int margin=0)
 Check if coordinates are within room bounds.
 
std::pair< int, int > ClampToRoom (int room_x, int room_y)
 Clamp room tile coordinates to valid range.
 
bool IsValidRoomId (int room_id)
 Validate room ID is within valid range.
 
std::pair< int, int > RoomIdToGridPosition (int room_id)
 Get the grid position (column, row) for a room ID.
 
uint16_t CalculateCameraX (int room_id, int local_pixel_x)
 Calculate absolute camera X coordinate from room and local position.
 
uint16_t CalculateCameraY (int room_id, int local_pixel_y)
 Calculate absolute camera Y coordinate from room and local position.
 
std::pair< uint16_t, uint16_t > TileToCameraCoords (int room_id, int tile_x, int tile_y)
 Calculate camera coordinates from room and tile position.
 
CameraToLocalResult CameraToLocalCoords (uint16_t camera_x, uint16_t camera_y)
 
std::pair< uint16_t, uint16_t > SpriteToCameraCoords (int room_id, int sprite_x, int sprite_y)
 Calculate sprite-format coordinates (16-pixel units)
 

Variables

constexpr int kTileSize = 8
 
constexpr int kRoomTileWidth = 64
 
constexpr int kRoomTileHeight = 64
 
constexpr int kRoomPixelWidth = 512
 
constexpr int kRoomPixelHeight = 512
 
constexpr int kRoomCount = 0x128
 
constexpr int kEntranceCount = 0x8C
 
constexpr int kSpriteTileSize = 16
 
constexpr int kSpriteGridMax = 31
 
constexpr uint16_t kCameraBaseOffset = 0x1000
 
constexpr int kDungeonGridWidth = 16
 

Detailed Description

Coordinate conversion utilities for dungeon editing.

Dungeon coordinate systems:

  • Room coordinates: Tile units (0-63 per axis, 8px per tile)
  • Canvas coordinates: Unscaled pixels relative to canvas origin
  • Screen coordinates: Scaled pixels relative to window
  • Camera coordinates: Absolute world position (16-bit, used by sprites/tracks)

Camera Coordinate System:

  • Base offset: $1000 (4096) for dungeons
  • Room grid: 16 columns x 16 rows (256 room slots, though not all used)
  • Each room is 512x512 pixels (2 "screens" in each dimension)
  • Camera X = base + (room_col * 512) + local_pixel_x
  • Camera Y = base + (room_row * 512) + local_pixel_y

All conversion functions work with UNSCALED canvas coordinates. Canvas drawing functions apply scale internally.

Function Documentation

◆ RoomToCanvas()

std::pair< int, int > yaze::editor::dungeon_coords::RoomToCanvas ( int room_x,
int room_y )
inline

Convert room tile coordinates to canvas pixel coordinates.

Parameters
room_xRoom X coordinate (0-63)
room_yRoom Y coordinate (0-63)
Returns
Unscaled canvas pixel coordinates

Definition at line 54 of file dungeon_coordinates.h.

References kTileSize.

Referenced by yaze::editor::BaseEntityHandler::RoomToCanvas().

◆ CanvasToRoom()

std::pair< int, int > yaze::editor::dungeon_coords::CanvasToRoom ( int canvas_x,
int canvas_y )
inline

Convert canvas pixel coordinates to room tile coordinates.

Parameters
canvas_xCanvas X coordinate (unscaled pixels)
canvas_yCanvas Y coordinate (unscaled pixels)
Returns
Room tile coordinates (0-63)

Definition at line 64 of file dungeon_coordinates.h.

References kTileSize.

Referenced by yaze::editor::BaseEntityHandler::CanvasToRoom().

◆ ScreenToCanvas()

std::pair< int, int > yaze::editor::dungeon_coords::ScreenToCanvas ( int screen_x,
int screen_y,
float scale )
inline

Convert screen coordinates to canvas coordinates (undo scale)

Parameters
screen_xScreen X position (scaled)
screen_yScreen Y position (scaled)
scaleCurrent canvas scale factor
Returns
Unscaled canvas coordinates

Definition at line 75 of file dungeon_coordinates.h.

◆ CanvasToScreen()

std::pair< int, int > yaze::editor::dungeon_coords::CanvasToScreen ( int canvas_x,
int canvas_y,
float scale )
inline

Convert canvas coordinates to screen coordinates (apply scale)

Parameters
canvas_xCanvas X coordinate (unscaled)
canvas_yCanvas Y coordinate (unscaled)
scaleCurrent canvas scale factor
Returns
Scaled screen coordinates

Definition at line 89 of file dungeon_coordinates.h.

◆ IsWithinBounds()

bool yaze::editor::dungeon_coords::IsWithinBounds ( int canvas_x,
int canvas_y,
int margin = 0 )
inline

Check if coordinates are within room bounds.

Parameters
canvas_xCanvas X coordinate (unscaled pixels)
canvas_yCanvas Y coordinate (unscaled pixels)
marginOptional margin in pixels (default 0)

Definition at line 101 of file dungeon_coordinates.h.

References kRoomPixelHeight, and kRoomPixelWidth.

Referenced by yaze::editor::BaseEntityHandler::IsWithinBounds().

◆ ClampToRoom()

std::pair< int, int > yaze::editor::dungeon_coords::ClampToRoom ( int room_x,
int room_y )
inline

Clamp room tile coordinates to valid range.

Parameters
room_xRoom X coordinate (will be clamped to 0-63)
room_yRoom Y coordinate (will be clamped to 0-63)
Returns
Clamped room coordinates

Definition at line 113 of file dungeon_coordinates.h.

References kRoomTileHeight, and kRoomTileWidth.

◆ IsValidRoomId()

bool yaze::editor::dungeon_coords::IsValidRoomId ( int room_id)
inline

Validate room ID is within valid range.

Parameters
room_idRoom ID to validate
Returns
true if valid (0 to 295)

Definition at line 126 of file dungeon_coordinates.h.

References kRoomCount.

Referenced by yaze::editor::InteractionContext::GetCurrentRoom(), and yaze::editor::InteractionContext::GetCurrentRoomConst().

◆ RoomIdToGridPosition()

std::pair< int, int > yaze::editor::dungeon_coords::RoomIdToGridPosition ( int room_id)
inline

Get the grid position (column, row) for a room ID.

Parameters
room_idRoom ID (0-295)
Returns
Pair of (column, row) in dungeon grid

Definition at line 139 of file dungeon_coordinates.h.

References kDungeonGridWidth.

Referenced by CalculateCameraX(), and CalculateCameraY().

◆ CalculateCameraX()

uint16_t yaze::editor::dungeon_coords::CalculateCameraX ( int room_id,
int local_pixel_x )
inline

Calculate absolute camera X coordinate from room and local position.

This is the format used by sprites, minecart tracks, and other game entities that need absolute world positioning.

Parameters
room_idRoom ID (0-295)
local_pixel_xLocal X position within room (0-511 pixels)
Returns
16-bit camera X coordinate

Definition at line 153 of file dungeon_coordinates.h.

References kCameraBaseOffset, kRoomPixelWidth, and RoomIdToGridPosition().

Referenced by SpriteToCameraCoords(), and TileToCameraCoords().

Here is the call graph for this function:

◆ CalculateCameraY()

uint16_t yaze::editor::dungeon_coords::CalculateCameraY ( int room_id,
int local_pixel_y )
inline

Calculate absolute camera Y coordinate from room and local position.

Parameters
room_idRoom ID (0-295)
local_pixel_yLocal Y position within room (0-511 pixels)
Returns
16-bit camera Y coordinate

Definition at line 165 of file dungeon_coordinates.h.

References kCameraBaseOffset, kRoomPixelWidth, and RoomIdToGridPosition().

Referenced by SpriteToCameraCoords(), and TileToCameraCoords().

Here is the call graph for this function:

◆ TileToCameraCoords()

std::pair< uint16_t, uint16_t > yaze::editor::dungeon_coords::TileToCameraCoords ( int room_id,
int tile_x,
int tile_y )
inline

Calculate camera coordinates from room and tile position.

Convenience function that converts tile coordinates to camera coordinates.

Parameters
room_idRoom ID (0-295)
tile_xTile X position within room (0-63)
tile_yTile Y position within room (0-63)
Returns
Pair of (camera_x, camera_y) 16-bit coordinates

Definition at line 180 of file dungeon_coordinates.h.

References CalculateCameraX(), CalculateCameraY(), and kTileSize.

Here is the call graph for this function:

◆ CameraToLocalCoords()

CameraToLocalResult yaze::editor::dungeon_coords::CameraToLocalCoords ( uint16_t camera_x,
uint16_t camera_y )
inline

◆ SpriteToCameraCoords()

std::pair< uint16_t, uint16_t > yaze::editor::dungeon_coords::SpriteToCameraCoords ( int room_id,
int sprite_x,
int sprite_y )
inline

Calculate sprite-format coordinates (16-pixel units)

Sprites use a different coordinate format with 16-pixel granularity.

Parameters
room_idRoom ID (0-295)
sprite_xSprite X position (0-31)
sprite_ySprite Y position (0-31)
Returns
Pair of (camera_x, camera_y) 16-bit coordinates

Definition at line 241 of file dungeon_coordinates.h.

References CalculateCameraX(), CalculateCameraY(), and kSpriteTileSize.

Here is the call graph for this function:

Variable Documentation

◆ kTileSize

◆ kRoomTileWidth

constexpr int yaze::editor::dungeon_coords::kRoomTileWidth = 64
constexpr

Definition at line 33 of file dungeon_coordinates.h.

Referenced by ClampToRoom().

◆ kRoomTileHeight

constexpr int yaze::editor::dungeon_coords::kRoomTileHeight = 64
constexpr

Definition at line 34 of file dungeon_coordinates.h.

Referenced by ClampToRoom().

◆ kRoomPixelWidth

constexpr int yaze::editor::dungeon_coords::kRoomPixelWidth = 512
constexpr

◆ kRoomPixelHeight

constexpr int yaze::editor::dungeon_coords::kRoomPixelHeight = 512
constexpr

Definition at line 36 of file dungeon_coordinates.h.

Referenced by CameraToLocalCoords(), and IsWithinBounds().

◆ kRoomCount

constexpr int yaze::editor::dungeon_coords::kRoomCount = 0x128
constexpr

Definition at line 37 of file dungeon_coordinates.h.

Referenced by IsValidRoomId().

◆ kEntranceCount

constexpr int yaze::editor::dungeon_coords::kEntranceCount = 0x8C
constexpr

Definition at line 38 of file dungeon_coordinates.h.

◆ kSpriteTileSize

◆ kSpriteGridMax

◆ kCameraBaseOffset

constexpr uint16_t yaze::editor::dungeon_coords::kCameraBaseOffset = 0x1000
constexpr

Definition at line 45 of file dungeon_coordinates.h.

Referenced by CalculateCameraX(), CalculateCameraY(), and CameraToLocalCoords().

◆ kDungeonGridWidth

constexpr int yaze::editor::dungeon_coords::kDungeonGridWidth = 16
constexpr

Definition at line 46 of file dungeon_coordinates.h.

Referenced by CameraToLocalCoords(), and RoomIdToGridPosition().