mirror of
				https://github.com/Zelda64Recomp/Zelda64Recomp.git
				synced 2025-10-30 08:03:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __TRANSFORM_IDS_H__
 | 
						|
#define __TRANSFORM_IDS_H__
 | 
						|
 | 
						|
#define CAMERA_TRANSFORM_ID 0x10U
 | 
						|
#define CIRCLE_OVERLAY_TRANSFORM_ID 0x11U
 | 
						|
#define CIRCLE_OVERLAY_TRANSFORM_PROJECTION_ID 0x12U
 | 
						|
#define TEXTBOX_TRANSFORM_ID 0x13U
 | 
						|
#define TEXTBOX_TRANSFORM_PROJECTION_ID 0x14U
 | 
						|
#define LETTERBOX_TRANSFORM_ID 0x15U
 | 
						|
#define LETTERBOX_TRANSFORM_PROJECTION_ID 0x16U
 | 
						|
#define PAUSE_CURSOR_TRANSFORM_ID 0x17U
 | 
						|
#define PAUSE_INFO_PANEL_TRANSFORM_ID 0x18U
 | 
						|
 | 
						|
#define SKYBOX_TRANSFORM_ID_START 0x100U
 | 
						|
 | 
						|
#define PARTICLE_TRANSFORM_ID_START 0x200U
 | 
						|
 | 
						|
#define SOARING_WINGS_TRANSFORM_ID 0x300U
 | 
						|
#define SOARING_CAPSULE_TRANSFORM_ID 0x301U
 | 
						|
#define SOARING_LENS_FLARE_TRANSFORM_ID 0x302U
 | 
						|
 | 
						|
#define BOWSTRING_TRANSFORM_ID 0x400U
 | 
						|
#define HOOKSHOT_RETICLE_TRANSFORM_ID 0x401U
 | 
						|
 | 
						|
#define CUSTOM_LENS_FLARE_TRANSFORM_ID_START 0x500 // Count: 2
 | 
						|
#define SUN_LENS_FLARE_TRANSFORM_ID 0x502 // Count: 1
 | 
						|
 | 
						|
#define GOHT_ROCKS_TRANSFORM_ID_START 0x600U // Count: 0x200
 | 
						|
#define SPECIAL_EFFECTS_TRANSFORM_ID_START 0x800U
 | 
						|
 | 
						|
#define STAR_TRANSFORM_ID_START 0x1000U
 | 
						|
 | 
						|
#define EFFECT_TRANSFORM_ID_COUNT                 0x800U
 | 
						|
#define EFFECT_SPARK_TRANSFORM_ID_START           0x2000U
 | 
						|
#define EFFECT_BLURE_TRANSFORM_ID_START           (EFFECT_SPARK_TRANSFORM_ID_START + 2 * EFFECT_TRANSFORM_ID_COUNT) 
 | 
						|
#define EFFECT_SHIELD_PARTICLE_TRANSFORM_ID_START (EFFECT_BLURE_TRANSFORM_ID_START + 2 * EFFECT_TRANSFORM_ID_COUNT)
 | 
						|
#define EFFECT_TIRE_MARK_TRANSFORM_ID_START       (EFFECT_SHIELD_PARTICLE_TRANSFORM_ID_START + 2 * EFFECT_TRANSFORM_ID_COUNT)
 | 
						|
 | 
						|
#define ACTOR_TRANSFORM_LIMB_COUNT 256
 | 
						|
#define ACTOR_TRANSFORM_ID_COUNT (ACTOR_TRANSFORM_LIMB_COUNT * 2) // One ID for each limb and another for each post-draw
 | 
						|
#define ACTOR_TRANSFORM_ID_START 0x1000000U
 | 
						|
 | 
						|
// Use 16 bits of compiler-inserted padding to hold the actor's transform ID.
 | 
						|
// 0x22 between halfDaysBits and world
 | 
						|
#define actorIdByte0(actor) ((u8*)(actor))[0x22]
 | 
						|
// 0x23 between halfDaysBits and world
 | 
						|
#define actorIdByte1(actor) ((u8*)(actor))[0x23]
 | 
						|
// 0x3A between audioFlags and focus
 | 
						|
#define actorIdByte2(actor) ((u8*)(actor))[0x3A]
 | 
						|
 | 
						|
// Other unused padding:
 | 
						|
// 0x3B between audioFlags and focus
 | 
						|
 | 
						|
static inline u32 actor_transform_id(Actor* actor) {
 | 
						|
    u32 actor_id = 
 | 
						|
        (actorIdByte0(actor) <<  0) |
 | 
						|
        (actorIdByte1(actor) <<  8);
 | 
						|
 | 
						|
    return (actor_id * ACTOR_TRANSFORM_ID_COUNT) + ACTOR_TRANSFORM_ID_START;
 | 
						|
}
 | 
						|
 | 
						|
typedef enum {
 | 
						|
    ACTOR_TRANSFORM_FLAG_INTERPOLATION_SKIPPED = 1 << 0,
 | 
						|
    ACTOR_CUSTOM_FLAG_1                        = 1 << 1,
 | 
						|
} CustomActorFlags;
 | 
						|
 | 
						|
static inline u32 actor_get_interpolation_skipped(Actor* actor) {
 | 
						|
    return (actorIdByte2(actor) & ACTOR_TRANSFORM_FLAG_INTERPOLATION_SKIPPED) != 0;
 | 
						|
}
 | 
						|
 | 
						|
static inline void actor_set_interpolation_skipped(Actor* actor) {
 | 
						|
    actorIdByte2(actor) |= ACTOR_TRANSFORM_FLAG_INTERPOLATION_SKIPPED;
 | 
						|
}
 | 
						|
 | 
						|
static inline void actor_clear_interpolation_skipped(Actor* actor) {
 | 
						|
    actorIdByte2(actor) &= ~ACTOR_TRANSFORM_FLAG_INTERPOLATION_SKIPPED;
 | 
						|
}
 | 
						|
 | 
						|
static inline void actor_set_custom_flag_1(Actor* actor) {
 | 
						|
    actorIdByte2(actor) |= ACTOR_CUSTOM_FLAG_1;
 | 
						|
}
 | 
						|
 | 
						|
static inline void actor_clear_custom_flag_1(Actor* actor) {
 | 
						|
    actorIdByte2(actor) &= ~ACTOR_CUSTOM_FLAG_1;
 | 
						|
}
 | 
						|
 | 
						|
static inline bool actor_get_custom_flag_1(Actor* actor) {
 | 
						|
    return (actorIdByte2(actor) & ACTOR_CUSTOM_FLAG_1) != 0;
 | 
						|
}
 | 
						|
 | 
						|
void force_camera_interpolation();
 | 
						|
void force_camera_skip_interpolation();
 | 
						|
 | 
						|
#endif
 |