#ifndef __TRANSFORM_IDS_H__
#define __TRANSFORM_IDS_H__

#include "PR/ultratypes.h"
#include "rt64_extended_gbi.h"

#define MARKER_TRANSFORM_ID_COUNT 256 // Number of transform IDs for each ActorMarker.

// Projections: 0x00001000 - 0x00001FFF
#define PROJECTION_GAMEPLAY_TRANSFORM_ID       0x00001000
#define PROJECTION_SKYBOX_TRANSFORM_ID         0x00001001
#define PROJECTION_TRANSITION_TRANSFORM_ID     0x00001002
#define PROJECTION_PRESS_START_TRANSFORM_ID    0x00001003
#define PROJECTION_HUD_TRANSFORM_ID            0x00001004
#define PROJECTION_BK_LOGO_TRANSFORM_ID        0x00001005
#define PROJECTION_COPYRIGHT_TRANSFORM_ID      0x00001006
#define PROJECTION_GAME_OVER_TRANSFORM_ID      0x00001007
#define PROJECTION_THE_END_TRANSFORM_ID        0x00001008
#define PROJECTION_PILLARBOX_TRANSFORM_ID      0x00001009
#define PROJECTION_PORTRAIT_TRANSFORM_ID_START 0x00001100 // 1 for each portrait ID

// Map models: 0x00400000 - 0x00EFFFFF
#define MAP_MODEL_OPA_TRANSFORM_ID_START 0x00400000
#define MAP_MODEL_XLU_TRANSFORM_ID_START 0x00800000

// Transition model: 0x00F00000 - 0x00F1FFFF
#define TRANSITION_MODEL_TRANSFORM_ID_START 0x00F00000

// Skybox: 0x00F20000 - 0x00F2FFFF
#define SKYBOX_MODEL_TRANSFORM_ID_COUNT 256
#define SKYBOX_TRANSFORM_ID_START 0x00F20000

// Zoombox: 0x00F30000 - 0x00F31FFFF
#define ZOOMBOX_TRANSFORM_ID_START 0x00F30000
#define ZOOMBOX_PORTRAIT_TRANSFORM_ID_START 0x00F31000

// Projectiles: 0x00F32000 - 0x00F33FFF
#define PROJECTILE_TRANSFORM_ID_START 0x00F32000

// HUD Honeycomb: 0x00F34000 - 0x00F3400F
#define HUD_HONEYCOMB_TRANSFORM_ID_START 0x00F34000

// HUD Life Score: 0x00F34010 - 0x00F34017
#define HUD_LIFESCORE_TRANSFORM_PRINT_ID_START 0x00F34010

// HUD Life Score: 0x00F34018 - 0x00F3401F
#define HUD_LIFESCORE_TRANSFORM_ID_START 0x00F34018

// HUD Health Score: 0x00F34020 - 0x00F3402F
#define HUD_HEALTHSCORE_TRANSFORM_ID_START 0x00F34020

// HUD Air Score: 0x00F34030 - 0x00F3403F
#define HUD_AIRSCORE_TRANSFORM_ID_START 0x00F34030

// HUD Jinjo Score: 0x00F34040 - 0x00F3404F
#define HUD_JINJOSCORE_TRANSFORM_ID_START 0x00F34040

// HUD Score 2 Print: 0x00F34050 - 0x00F3414F
#define HUD_SCORE2_TRANSFORM_PRINT_ID_START 0x00F34050
#define HUD_SCORE2_TRANSFORM_PRINT_ID_COUNT 4

// HUD Score 2: 0x00F34150 - 0x00F3424F
#define HUD_SCORE2_TRANSFORM_ID_START 0x00F34150

// HUD Score 3 Print: 0x00F34250 - 0x00F3434F
#define HUD_SCORE3_TRANSFORM_PRINT_ID_START 0x00F34250
#define HUD_SCORE3_TRANSFORM_PRINT_ID_COUNT 4

// HUD score item depth rects: 0x00F34350 - 0x00F343FF
#define HUD_SCORE3_DEPTH_RECT_TRANSFORM_ID_START 0x00F34350

// HUD Score 3: 0x00F34400 - 0x00F3FFFF
#define HUD_SCORE3_TRANSFORM_ID_START 0x00F34400

// Lens flare: 0x00F40000 - 0x00F40FFF
#define LENS_FLARE_TRANSFORM_ID_START 0x00F40000
#define LENS_FLARE_TRANSFORM_ID_COUNT 256

// Snow: 0x00F41000 - 0x00F410FF
#define SNOW_TRANSFORM_ID_START 0x00F41000

// Clanker: 0x00F42000 - 0x00F420FF
#define CLANKER_TRANSFORM_ID_START 0x00F42000

// HUD Totals Print: 0x00F42100 - 0x00F421FF
#define HUD_TOTALS_PRINT_TRANSFORM_ID_START 0x00F42100

// Zoombox Print: 0x00F42200 - 0x00F520FF
#define ZOOMBOX_PRINT_TRANSFORM_ID_START 0x00F42200
#define ZOOMBOX_PRINT_TRANSFORM_ID_COUNT 512

// Normal Particles: 0x01000000 - 0x01FFFFFF
#define NORMAL_PARTICLE_TRANSFORM_ID_START 0x01000000
#define NORMAL_PARTICLE_ID_MAX 0x01000000

// Model Particles: 0x02000000 - 0x03FFFFFF
#define MODEL_PARTICLE_TRANSFORM_ID_START 0x02000000
#define MODEL_PARTICLE_TRANSFORM_ID_COUNT 0x02000000
#define MODEL_PARTICLE_ID_MAX (MODEL_PARTICLE_TRANSFORM_ID_COUNT / MARKER_TRANSFORM_ID_COUNT)

// Weather Particles: 0x30000000 - 0x30800000
#define WEATHER_PARTICLE_TRANSFORM_ID_START 0x30000000
#define WEATHER_PARTICLE_ID_COUNT 256
#define WEATHER_PARTICLE_ID_MAX 0x8000

// Rain Particles: 0x30800000 - 0x31000000
#define RAIN_PARTICLE_TRANSFORM_ID_START 0x30800000
#define RAIN_PARTICLE_ID_COUNT 256
#define RAIN_PARTICLE_ID_MAX 0x8000

// Pillarbox Rectangles: 0x31000000 - 0x31000010
#define PILLARBOX_RECTANGLE_TRANSFORM_ID_START 0x31000000

// Markers: 0x10000000 - 0x1FFFFFFF
#define BANJO_TRANSFORM_ID_START 0x10000000
#define MARKER_TRANSFORM_ID_START (BANJO_TRANSFORM_ID_START + MARKER_TRANSFORM_ID_COUNT)

// Props: 0x20000000 - 0x2FFFFFFF
#define PROP_TRANSFORM_ID_COUNT 256
#define PROP_TRANSFORM_ID_START 0x20000000

void reset_projection_ids();

extern s32 cur_drawn_model_is_map;
extern s32 cur_drawn_model_transform_id;
extern s32 cur_drawn_model_skip_interpolation;
extern s32 cur_perspective_projection_transform_id;
extern s32 cur_ortho_projection_transform_id;

#endif
