[Modding] Add Adult Mask DL for mod compability (#6642)

This commit is contained in:
Reppan
2026-06-08 02:42:03 +02:00
committed by GitHub
parent b6151c131a
commit 228f9fecea
4 changed files with 76 additions and 2 deletions
@@ -510,5 +510,30 @@ static const ALIGN_ASSET(2) char gLinkAdultVtx_0340A0[] = dgLinkAdultVtx_0340A0;
#define dgLinkAdultVtx_02E7E0 "__OTR__objects/object_link_boy/gLinkAdultVtx_02E7E0"
static const ALIGN_ASSET(2) char gLinkAdultVtx_02E7E0[] = dgLinkAdultVtx_02E7E0;
// Adult-fitted mask display lists (for use when adult Link wears child masks via the AdultMasks enhancement)
#define dgLinkAdultKeatonMaskDL "__OTR__objects/object_link_boy/gLinkAdultKeatonMaskDL"
static const ALIGN_ASSET(2) char gLinkAdultKeatonMaskDL[] = dgLinkAdultKeatonMaskDL;
#define dgLinkAdultSkullMaskDL "__OTR__objects/object_link_boy/gLinkAdultSkullMaskDL"
static const ALIGN_ASSET(2) char gLinkAdultSkullMaskDL[] = dgLinkAdultSkullMaskDL;
#define dgLinkAdultSpookyMaskDL "__OTR__objects/object_link_boy/gLinkAdultSpookyMaskDL"
static const ALIGN_ASSET(2) char gLinkAdultSpookyMaskDL[] = dgLinkAdultSpookyMaskDL;
#define dgLinkAdultBunnyHoodDL "__OTR__objects/object_link_boy/gLinkAdultBunnyHoodDL"
static const ALIGN_ASSET(2) char gLinkAdultBunnyHoodDL[] = dgLinkAdultBunnyHoodDL;
#define dgLinkAdultGoronMaskDL "__OTR__objects/object_link_boy/gLinkAdultGoronMaskDL"
static const ALIGN_ASSET(2) char gLinkAdultGoronMaskDL[] = dgLinkAdultGoronMaskDL;
#define dgLinkAdultZoraMaskDL "__OTR__objects/object_link_boy/gLinkAdultZoraMaskDL"
static const ALIGN_ASSET(2) char gLinkAdultZoraMaskDL[] = dgLinkAdultZoraMaskDL;
#define dgLinkAdultGerudoMaskDL "__OTR__objects/object_link_boy/gLinkAdultGerudoMaskDL"
static const ALIGN_ASSET(2) char gLinkAdultGerudoMaskDL[] = dgLinkAdultGerudoMaskDL;
#define dgLinkAdultMaskOfTruthDL "__OTR__objects/object_link_boy/gLinkAdultMaskOfTruthDL"
static const ALIGN_ASSET(2) char gLinkAdultMaskOfTruthDL[] = dgLinkAdultMaskOfTruthDL;
#endif // OBJECTS_OBJECT_LINK_BOY_H
@@ -0,0 +1,38 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/ShipInit.hpp"
#include "soh/ResourceManagerHelpers.h"
extern "C" {
#include "macros.h"
#include "functions.h"
#include "objects/object_link_boy/object_link_boy.h"
extern SaveContext gSaveContext;
}
static const char* sAdultMaskDLists[] = {
gLinkAdultKeatonMaskDL, gLinkAdultSkullMaskDL, gLinkAdultSpookyMaskDL, gLinkAdultBunnyHoodDL,
gLinkAdultGoronMaskDL, gLinkAdultZoraMaskDL, gLinkAdultGerudoMaskDL, gLinkAdultMaskOfTruthDL,
};
static void RegisterAgeDependentMasks() {
COND_VB_SHOULD(VB_DRAW_PLAYER_MASK, CVarGetInteger(CVAR_SETTING("AltAssets"), 1), {
if (!LINK_IS_ADULT)
return;
PlayerMask currentMask = (PlayerMask)va_arg(args, int);
PlayState* play = va_arg(args, PlayState*);
int maskIndex = currentMask - 1;
if (maskIndex < 0 || maskIndex >= 8)
return;
const char* adultDL = sAdultMaskDLists[maskIndex];
if (!ResourceGetIsCustomByName(adultDL) && !ResourceMgr_FileExists(adultDL))
return;
*should = false;
gSPDisplayList(play->state.gfxCtx->polyOpa.p++, (Gfx*)adultDL);
});
}
static RegisterShipInitFunc initFunc(RegisterAgeDependentMasks, { CVAR_SETTING("AltAssets") });
@@ -579,6 +579,15 @@ typedef enum {
// - None
VB_DRAW_ADDITIONAL_RETICLES,
// #### `result`
// ```c
// true
// ```
// #### `args`
// - `PlayerMask currentMask`
// - `*PlayState play`
VB_DRAW_PLAYER_MASK,
// #### `result`
// In `Interface_DrawAmmoCount`:
// ```c
@@ -12449,8 +12449,10 @@ void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList,
MATRIX_TOMTX(bunnyEarMtx);
}
if (this->currentMask != PLAYER_MASK_BUNNY || !CVarGetInteger(CVAR_ENHANCEMENT("HideBunnyHood"), 0)) {
gSPDisplayList(POLY_OPA_DISP++, sMaskDlists[this->currentMask - 1]);
if (GameInteractor_Should(VB_DRAW_PLAYER_MASK, true, this->currentMask, play)) {
if (this->currentMask != PLAYER_MASK_BUNNY || !CVarGetInteger(CVAR_ENHANCEMENT("HideBunnyHood"), 0)) {
gSPDisplayList(POLY_OPA_DISP++, sMaskDlists[this->currentMask - 1]);
}
}
if (CVarGetInteger(CVAR_GENERAL("FixIceTrapWithBunnyHood"), 1))