summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorAndrew Van Caem <andrewwvc@gmail.com>2022-10-03 18:05:29 +1100
committerGitHub <noreply@github.com>2022-10-03 09:05:29 +0200
commit6bdca84b901fba583cfe1e74c54b744d48d2a480 (patch)
tree3bfefd1b78e39942b95e77d78914b616e5a52d22 /soh/src/code
parent75d04025251d389a361bc5129798af8564564158 (diff)
Add heart line length adjustment and modified magic meter anchoring (#965)
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/z_lifemeter.c74
-rw-r--r--soh/src/code/z_parameter.c16
2 files changed, 65 insertions, 25 deletions
diff --git a/soh/src/code/z_lifemeter.c b/soh/src/code/z_lifemeter.c
index 04e70159a..6e3bbb52b 100644
--- a/soh/src/code/z_lifemeter.c
+++ b/soh/src/code/z_lifemeter.c
@@ -380,10 +380,50 @@ static void* sHeartDDTextures[] = {
gDefenseHeartThreeQuarterTex,
};
+s16 getHealthMeterXOffset() {
+ s16 X_Margins;
+ if (CVar_GetS32("gHeartsUseMargins", 0) != 0)
+ X_Margins = Left_LM_Margin;
+ else
+ X_Margins = 0;
+
+ if (CVar_GetS32("gHeartsCountPosType", 0) != 0) {
+ if (CVar_GetS32("gHeartsCountPosType", 0) == 1) {//Anchor Left
+ return OTRGetDimensionFromLeftEdge(CVar_GetS32("gHeartsCountPosX", 0)+X_Margins+70.0f);
+ } else if (CVar_GetS32("gHeartsCountPosType", 0) == 2) {//Anchor Right
+ X_Margins = Right_LM_Margin;
+ return OTRGetDimensionFromRightEdge(CVar_GetS32("gHeartsCountPosX", 0)+X_Margins+70.0f);
+ } else if (CVar_GetS32("gHeartsCountPosType", 0) == 3) {//Anchor None
+ return CVar_GetS32("gHeartsCountPosX", 0)+70.0f;;
+ } else if (CVar_GetS32("gHeartsCountPosType", 0) == 4) {//Hidden
+ return -9999;
+ }
+ } else {
+ return OTRGetDimensionFromLeftEdge(0.0f)+X_Margins;
+ }
+}
+
+s16 getHealthMeterYOffset() {
+ s16 Y_Margins;
+ if (CVar_GetS32("gHeartsUseMargins", 0) != 0)
+ Y_Margins = (Top_LM_Margin*-1);
+ else
+ Y_Margins = 0;
+
+ f32 HeartsScale = 0.7f;
+ if (CVar_GetS32("gHeartsCountPosType", 0) != 0) {
+ HeartsScale = CVar_GetFloat("gHeartsCountScale", 0.7f);
+ return CVar_GetS32("gHeartsCountPosY", 0)+Y_Margins+(HeartsScale*15);
+ } else {
+ return 0.0f+Y_Margins;
+ }
+}
+
void HealthMeter_Draw(GlobalContext* globalCtx) {
s32 pad[5];
void* heartBgImg;
u32 curColorSet;
+ f32 PosX_anchor;
f32 offsetX;
f32 offsetY;
s32 i;
@@ -402,7 +442,7 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
s32 curCombineModeSet = 0;
u8* curBgImgLoaded = NULL;
s32 ddHeartCountMinusOne = gSaveContext.inventory.defenseHearts - 1;
- float HeartsScale = 0.7f;
+ f32 HeartsScale = 0.7f;
if (CVar_GetS32("gHeartsCountPosType", 0) != 0) {
HeartsScale = CVar_GetFloat("gHeartsCountScale", 0.7f);
}
@@ -416,6 +456,7 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
}
curColorSet = -1;
+/*
s16 X_Margins;
s16 Y_Margins;
if (CVar_GetS32("gHeartsUseMargins", 0) != 0) {
@@ -443,6 +484,9 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
offsetY = PosY_original;
offsetX = PosX_original;
}
+*/
+ offsetX = PosX_anchor = getHealthMeterXOffset();
+ offsetY = getHealthMeterYOffset();
for (i = 0; i < totalHeartCount; i++) {
FrameInterpolation_RecordOpenChild("HealthMeter Heart", i);
@@ -616,27 +660,11 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
}
}
- //offsetX += 10.0f;
- offsetX += (HeartsScale*14.5f);
- if (i == 9) {
- PosX_original = OTRGetDimensionFromLeftEdge(0.0f)+X_Margins;
- PosY_original = (HeartsScale*15)+Y_Margins;
- if (CVar_GetS32("gHeartsCountPosType", 0) != 0) {
- offsetY = CVar_GetS32("gHeartsCountPosY", 0)+((HeartsScale*15)*2)+Y_Margins;
- if (CVar_GetS32("gHeartsCountPosType", 0) == 1) {//Anchor Left
- offsetX = OTRGetDimensionFromLeftEdge(CVar_GetS32("gHeartsCountPosX", 0)+X_Margins+70.0f);
- } else if (CVar_GetS32("gHeartsCountPosType", 0) == 2) {//Anchor Right
- X_Margins = Right_LM_Margin;
- offsetX = OTRGetDimensionFromRightEdge(CVar_GetS32("gHeartsCountPosX", 0)+X_Margins+70.0f);
- } else if (CVar_GetS32("gHeartsCountPosType", 0) == 3) {//Anchor None
- offsetX = CVar_GetS32("gHeartsCountPosX", 0)+70.0f;
- } else if (CVar_GetS32("gHeartsCountPosType", 0) == 4) {//Hidden
- offsetX = -9999;
- }
- } else {
- offsetY = PosY_original;
- offsetX = PosX_original;
- }
+ offsetX += 10.0f;
+ s32 lineLength = CVar_GetS32("gHeartsLineLength", 10);
+ if (lineLength != 0 && (i+1)%lineLength == 0) {
+ offsetX = PosX_anchor;
+ offsetY += 10.0f;
}
FrameInterpolation_RecordCloseChild();
@@ -685,4 +713,4 @@ u32 HealthMeter_IsCritical(void) {
} else {
return false;
}
-} \ No newline at end of file
+}
diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c
index ec1f4beb0..56864d1c4 100644
--- a/soh/src/code/z_parameter.c
+++ b/soh/src/code/z_parameter.c
@@ -3381,6 +3381,7 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) {
void Interface_DrawMagicBar(GlobalContext* globalCtx) {
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
+ s16 magicDrop = R_MAGIC_BAR_LARGE_Y-R_MAGIC_BAR_SMALL_Y+2;
s16 magicBarY;
Color_RGB8 magicbar_yellow = {250,250,0}; //Magic bar being used
Color_RGB8 magicbar_green = {R_MAGIC_FILL_COLOR(0),R_MAGIC_FILL_COLOR(1),R_MAGIC_FILL_COLOR(2)}; //Magic bar fill
@@ -3408,6 +3409,7 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) {
s16 rMagicBarX;
s16 PosX_MidEnd;
s16 rMagicFillX;
+ s32 lineLength = CVar_GetS32("gHeartsLineLength", 10);
if (CVar_GetS32("gMagicBarPosType", 0) != 0) {
magicBarY = CVar_GetS32("gMagicBarPosY", 0)+Y_Margins;
if (CVar_GetS32("gMagicBarPosType", 0) == 1) {//Anchor Left
@@ -3432,10 +3434,20 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) {
rMagicBarX = -9999;
PosX_MidEnd = -9999;
rMagicFillX = -9999;
+ } else if (CVar_GetS32("gMagicBarPosType", 0) == 5) {//Anchor To life meter
+ magicBarY = R_MAGIC_BAR_SMALL_Y-2 +
+ magicDrop*(lineLength == 0 ? 0 : (gSaveContext.healthCapacity-1)/(0x10*lineLength)) +
+ CVar_GetS32("gMagicBarPosY", 0) + getHealthMeterYOffset();
+ s16 xPushover = CVar_GetS32("gMagicBarPosX", 0) + getHealthMeterXOffset() + R_MAGIC_BAR_X-1;
+ PosX_Start = xPushover;
+ rMagicBarX = xPushover;
+ PosX_MidEnd = xPushover+8;
+ rMagicFillX = CVar_GetS32("gMagicBarPosX", 0) + getHealthMeterXOffset() + R_MAGIC_FILL_X-1;
}
} else {
- if (gSaveContext.healthCapacity > 0xA0) {
- magicBarY = magicBarY_original_l;
+ if ((gSaveContext.healthCapacity-1)/0x10 >= lineLength && lineLength != 0) {
+ magicBarY = magicBarY_original_l +
+ magicDrop*(lineLength == 0 ? 0 : ((gSaveContext.healthCapacity-1)/(0x10*lineLength) - 1));
} else {
magicBarY = magicBarY_original_s;
}