From 12405715959d8cf26ee316cc4f67fcc3e3e9707e Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 26 Apr 2025 08:41:25 +0200 Subject: [PATCH] Add relocatable overlay IDs --- include/System/OverlayManager.hpp | 193 ++++++++++++++++++++---------- libs/nds/include/nds/Overlay.h | 3 + 2 files changed, 131 insertions(+), 65 deletions(-) diff --git a/include/System/OverlayManager.hpp b/include/System/OverlayManager.hpp index 4c83bbe4..42118b57 100644 --- a/include/System/OverlayManager.hpp +++ b/include/System/OverlayManager.hpp @@ -2,74 +2,137 @@ #include "types.h" +#include + #include "Item/Item.hpp" +EXTERN_OVERLAY_ID(0); +EXTERN_OVERLAY_ID(1); +EXTERN_OVERLAY_ID(2); +EXTERN_OVERLAY_ID(3); +EXTERN_OVERLAY_ID(4); +EXTERN_OVERLAY_ID(5); +EXTERN_OVERLAY_ID(6); +EXTERN_OVERLAY_ID(7); +EXTERN_OVERLAY_ID(8); +EXTERN_OVERLAY_ID(9); +EXTERN_OVERLAY_ID(10); +EXTERN_OVERLAY_ID(11); +EXTERN_OVERLAY_ID(12); +EXTERN_OVERLAY_ID(13); +EXTERN_OVERLAY_ID(14); +EXTERN_OVERLAY_ID(15); +EXTERN_OVERLAY_ID(16); +EXTERN_OVERLAY_ID(17); +EXTERN_OVERLAY_ID(18); +EXTERN_OVERLAY_ID(19); +EXTERN_OVERLAY_ID(20); +EXTERN_OVERLAY_ID(21); +EXTERN_OVERLAY_ID(22); +EXTERN_OVERLAY_ID(23); +EXTERN_OVERLAY_ID(24); +EXTERN_OVERLAY_ID(25); +EXTERN_OVERLAY_ID(26); +EXTERN_OVERLAY_ID(27); +EXTERN_OVERLAY_ID(28); +EXTERN_OVERLAY_ID(29); +EXTERN_OVERLAY_ID(30); +EXTERN_OVERLAY_ID(31); +EXTERN_OVERLAY_ID(32); +EXTERN_OVERLAY_ID(33); +EXTERN_OVERLAY_ID(34); +EXTERN_OVERLAY_ID(35); +EXTERN_OVERLAY_ID(36); +EXTERN_OVERLAY_ID(37); +EXTERN_OVERLAY_ID(38); +EXTERN_OVERLAY_ID(39); +EXTERN_OVERLAY_ID(40); +EXTERN_OVERLAY_ID(41); +EXTERN_OVERLAY_ID(42); +EXTERN_OVERLAY_ID(43); +EXTERN_OVERLAY_ID(44); +EXTERN_OVERLAY_ID(45); +EXTERN_OVERLAY_ID(46); +EXTERN_OVERLAY_ID(47); +EXTERN_OVERLAY_ID(48); +EXTERN_OVERLAY_ID(49); +EXTERN_OVERLAY_ID(50); +EXTERN_OVERLAY_ID(51); +EXTERN_OVERLAY_ID(52); +EXTERN_OVERLAY_ID(53); +EXTERN_OVERLAY_ID(54); +EXTERN_OVERLAY_ID(55); +EXTERN_OVERLAY_ID(56); +EXTERN_OVERLAY_ID(57); +EXTERN_OVERLAY_ID(58); +EXTERN_OVERLAY_ID(59); +EXTERN_OVERLAY_ID(60); +EXTERN_OVERLAY_ID(61); + typedef u32 OverlayId; -enum OverlayId_ { - OverlayId_None = -1, - OverlayId_Core, - OverlayId_01, - OverlayId_02, - OverlayId_03, - OverlayId_Memory, - OverlayId_05, - OverlayId_06, - OverlayId_07, - OverlayId_08, - OverlayId_09, - OverlayId_10, - OverlayId_11, - OverlayId_12, - OverlayId_13, - OverlayId_Land, - OverlayId_15, - OverlayId_16, - OverlayId_17, - OverlayId_18, - OverlayId_19, - OverlayId_20, - OverlayId_21, - OverlayId_22, - OverlayId_23, - OverlayId_24, - OverlayId_25, - OverlayId_26, - OverlayId_27, - OverlayId_28, - OverlayId_29, - OverlayId_30, - OverlayId_31, - OverlayId_32, - OverlayId_33, - OverlayId_34, - OverlayId_35, - OverlayId_36, - OverlayId_37, - OverlayId_38, - OverlayId_39, - OverlayId_40, - OverlayId_41, - OverlayId_42, - OverlayId_43, - OverlayId_44, - OverlayId_45, - OverlayId_46, - OverlayId_47, - OverlayId_48, - OverlayId_49, - OverlayId_50, - OverlayId_51, - OverlayId_52, - OverlayId_PlayerBoomerang, - OverlayId_PlayerScoop, - OverlayId_PlayerBomb, - OverlayId_PlayerBow, - OverlayId_PlayerRope, - OverlayId_PlayerBombchu, - OverlayId_PlayerHammer, - OverlayId_60, - OverlayId_61, -}; +#define OverlayId_None -1 +#define OverlayId_Core OVERLAY_ID(0) +#define OverlayId_01 OVERLAY_ID(1) +#define OverlayId_02 OVERLAY_ID(2) +#define OverlayId_03 OVERLAY_ID(3) +#define OverlayId_Memory OVERLAY_ID(4) +#define OverlayId_05 OVERLAY_ID(5) +#define OverlayId_06 OVERLAY_ID(6) +#define OverlayId_07 OVERLAY_ID(7) +#define OverlayId_08 OVERLAY_ID(8) +#define OverlayId_09 OVERLAY_ID(9) +#define OverlayId_10 OVERLAY_ID(10) +#define OverlayId_11 OVERLAY_ID(11) +#define OverlayId_12 OVERLAY_ID(12) +#define OverlayId_13 OVERLAY_ID(13) +#define OverlayId_Land OVERLAY_ID(14) +#define OverlayId_15 OVERLAY_ID(15) +#define OverlayId_16 OVERLAY_ID(16) +#define OverlayId_17 OVERLAY_ID(17) +#define OverlayId_18 OVERLAY_ID(18) +#define OverlayId_19 OVERLAY_ID(19) +#define OverlayId_20 OVERLAY_ID(20) +#define OverlayId_21 OVERLAY_ID(21) +#define OverlayId_22 OVERLAY_ID(22) +#define OverlayId_23 OVERLAY_ID(23) +#define OverlayId_24 OVERLAY_ID(24) +#define OverlayId_25 OVERLAY_ID(25) +#define OverlayId_26 OVERLAY_ID(26) +#define OverlayId_27 OVERLAY_ID(27) +#define OverlayId_28 OVERLAY_ID(28) +#define OverlayId_29 OVERLAY_ID(29) +#define OverlayId_30 OVERLAY_ID(30) +#define OverlayId_31 OVERLAY_ID(31) +#define OverlayId_32 OVERLAY_ID(32) +#define OverlayId_33 OVERLAY_ID(33) +#define OverlayId_34 OVERLAY_ID(34) +#define OverlayId_35 OVERLAY_ID(35) +#define OverlayId_36 OVERLAY_ID(36) +#define OverlayId_37 OVERLAY_ID(37) +#define OverlayId_38 OVERLAY_ID(38) +#define OverlayId_39 OVERLAY_ID(39) +#define OverlayId_40 OVERLAY_ID(40) +#define OverlayId_41 OVERLAY_ID(41) +#define OverlayId_42 OVERLAY_ID(42) +#define OverlayId_43 OVERLAY_ID(43) +#define OverlayId_44 OVERLAY_ID(44) +#define OverlayId_45 OVERLAY_ID(45) +#define OverlayId_46 OVERLAY_ID(46) +#define OverlayId_47 OVERLAY_ID(47) +#define OverlayId_48 OVERLAY_ID(48) +#define OverlayId_49 OVERLAY_ID(49) +#define OverlayId_50 OVERLAY_ID(50) +#define OverlayId_51 OVERLAY_ID(51) +#define OverlayId_52 OVERLAY_ID(52) +#define OverlayId_PlayerBoomerang OVERLAY_ID(53) +#define OverlayId_PlayerScoop OVERLAY_ID(54) +#define OverlayId_PlayerBomb OVERLAY_ID(55) +#define OverlayId_PlayerBow OVERLAY_ID(56) +#define OverlayId_PlayerRope OVERLAY_ID(57) +#define OverlayId_PlayerBombchu OVERLAY_ID(58) +#define OverlayId_PlayerHammer OVERLAY_ID(59) +#define OverlayId_60 OVERLAY_ID(60) +#define OverlayId_61 OVERLAY_ID(61) typedef u32 OverlayIndex; enum OverlayIndex_ { diff --git a/libs/nds/include/nds/Overlay.h b/libs/nds/include/nds/Overlay.h index 5339a9d7..254253bd 100644 --- a/libs/nds/include/nds/Overlay.h +++ b/libs/nds/include/nds/Overlay.h @@ -5,6 +5,9 @@ extern "C" { #endif +#define EXTERN_OVERLAY_ID(name_or_index) extern u32 OVERLAY_##name_or_index##_ID; +#define OVERLAY_ID(name_or_index) ((u32) & OVERLAY_##name_or_index##_ID) + typedef struct Overlay { /* 00 */ unk32 mId; /* 04 */ void *mBaseAddress;