add various cosmetic options

This commit is contained in:
gymnast86
2026-07-01 00:27:35 -07:00
parent 26d0725c76
commit a5bc71795e
19 changed files with 839 additions and 14 deletions
+20 -4
View File
@@ -58,12 +58,9 @@
#include "res/Object/Alink.h"
#include <cstring>
#include <dusk/string.hpp>
#endif
#include "dusk/cosmetics/color_utils.hpp"
#include "dusk/randomizer/game/flags.h"
#include "dusk/randomizer/game/stages.h"
#if TARGET_PC
#include "dusk/randomizer/game/tools.h"
#endif
@@ -4238,6 +4235,25 @@ int daAlink_c::createHeap() {
if (mpHIO == NULL) {
return 0;
}
#if TARGET_PC
const auto& lanternColor = dusk::getSettings().cosmetics.lanternGlowColor.getValue();
if (dusk::cosmetics::is_valid_hex_color_str(lanternColor)) {
u8 r = std::stoi(lanternColor.substr(0, 2), nullptr, 16);
u8 g = std::stoi(lanternColor.substr(2, 2), nullptr, 16);
u8 b = std::stoi(lanternColor.substr(4, 2), nullptr, 16);
auto& lanternAmbience = mpHIO->mItem.mLanternPL.m;
auto& lanternSphere = mpHIO->mItem.mLantern.m;
lanternAmbience.mColorR = r;
lanternAmbience.mColorG = g;
lanternAmbience.mColorB = b;
lanternSphere.mColorReg1R = r;
lanternSphere.mColorReg1G = g;
lanternSphere.mColorReg1B = b;
lanternSphere.mColorReg2R = r;
lanternSphere.mColorReg2G = g;
lanternSphere.mColorReg2B = b;
}
#endif
if (!(mpWlChangeModel = initModel(dRes_ID_ALINK_BMD_WL_CHANGE_e, 0))) {
return 0;
+55 -2
View File
@@ -1624,7 +1624,7 @@ const daAlinkHIO_bomb_c1 daAlinkHIO_bomb_c0::m = {
#pragma push
#pragma force_active on
const daAlinkHIO_huLight_c1 daAlinkHIO_huLight_c0::m = {
IF_NOT_DUSK(const) daAlinkHIO_huLight_c1 daAlinkHIO_huLight_c0::m = {
0,
3,
0,
@@ -1638,8 +1638,25 @@ const daAlinkHIO_huLight_c1 daAlinkHIO_huLight_c0::m = {
0.0f,
};
#pragma pop
#if TARGET_PC
// Save original lantern colors incase player reverts to default
const daAlinkHIO_huLight_c1 daAlinkHIO_huLight_c0::original = {
0,
3,
0,
181,
112,
40,
-70,
1.0f,
50.0f,
350.0f,
0.0f,
};
#endif
const daAlinkHIO_kandelaar_c1 daAlinkHIO_kandelaar_c0::m = {
IF_NOT_DUSK(const) daAlinkHIO_kandelaar_c1 daAlinkHIO_kandelaar_c0::m = {
{
30,
1.1f,
@@ -1672,6 +1689,42 @@ const daAlinkHIO_kandelaar_c1 daAlinkHIO_kandelaar_c0::m = {
0.5f,
};
#if TARGET_PC
// Save original lantern colors incase player reverts to default
const daAlinkHIO_kandelaar_c1 daAlinkHIO_kandelaar_c0::original = {
{
30,
1.1f,
2.0f,
3.0f,
17.0f,
},
{
11,
1.0f,
0.0f,
3.0f,
12.0f,
},
{
17,
1.0f,
0.0f,
3.0f,
18.0f,
},
80,
40,
20,
40,
30,
10,
3,
200,
0.5f,
};
#endif
const daAlinkHIO_fmChain_c1 daAlinkHIO_fmChain_c0::m = {
{
20,
+13
View File
@@ -1191,6 +1191,19 @@ void daAlink_c::setLightningSwordEffect() {
emitter = setEmitter(&field_0x327c[i], effName[i], &current.pos, &shape_angle);
if (emitter != NULL) {
emitter->setGlobalRTMatrix(mSwordModel->getBaseTRMtx());
#if TARGET_PC
// Apply custom light sword glow if applicable
const auto& lightSwordGlowColor = dusk::getSettings().cosmetics.lightSwordGlowColor.getValue();
if (dusk::cosmetics::is_valid_hex_color_str(lightSwordGlowColor)) {
GXColor color = dusk::cosmetics::hex_color_str_to_gx_color(lightSwordGlowColor);
emitter->setGlobalEnvColor(color.r, color.g, color.b);
emitter->setGlobalPrmColor(color.r, color.g, color.b);
} else if (lightSwordGlowColor == "Rainbow") {
GXColor color = dusk::cosmetics::get_rainbow_rgb(127.5f);
emitter->setGlobalEnvColor(color.r, color.g, color.b);
emitter->setGlobalPrmColor(color.r, color.g, color.b);
}
#endif
}
}
} else {
+1 -1
View File
@@ -884,7 +884,7 @@ dItem_fieldItemResource dItem_data::field_item_res_randomizer[] = {
/* 0x2E */ {"F_gD_rupy", 0x0004,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x2F */ {"F_gD_rupy", 0x0004,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x30 */ {"O_gD_marm", 0x0003,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x31 */ {"O_gD_ZORA", 0x0003,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x31 */ {"O_gD_zora", 0x0003,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x32 */ {"O_gD_Injy", 0x0003,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x33 */ {"O_gD_TKS", 0x0008,-0x0001,-0x0001, 0xFF, 0x1000},
/* 0x34 */ {"O_gD_puL2", 0x0003,-0x0001,-0x0001, 0xFF, 0x1000},
+22
View File
@@ -7,6 +7,11 @@
#include "d/d_meter_HIO.h"
#include "d/d_pane_class.h"
#if TARGET_PC
#include "d/actor/d_a_alink.h"
#include "dusk/cosmetics/color_utils.hpp"
#endif
dKantera_icon_c::dKantera_icon_c() {
initiate();
}
@@ -50,6 +55,23 @@ void dKantera_icon_c::setScale(f32 h, f32 v) {
void dKantera_icon_c::setNowGauge(u16 h, u16 v) {
mpGauge->scale((f32)v / (f32)h, 1.0f);
#if TARGET_PC
// Apply custom lantern glow if necessary
const auto& lanternColorStr = dusk::getSettings().cosmetics.lanternGlowColor.getValue();
if (dusk::cosmetics::is_valid_hex_color_str(lanternColorStr)) {
auto color = dusk::cosmetics::hex_color_str_to_gx_color(lanternColorStr);
mpGauge->setBlackWhite(JUtility::TColor(color.r, color.g, color.b, 255),
JUtility::TColor(color.r, color.g, color.b, 255));
} else if (lanternColorStr == "Rainbow") {
auto lv = &daAlink_getAlinkActorClass()->mpHIO->mItem.mLantern.m;
mpGauge->setBlackWhite(JUtility::TColor(lv->mColorReg1R, lv->mColorReg1G, lv->mColorReg1B, 255),
JUtility::TColor(lv->mColorReg1R, lv->mColorReg1G, lv->mColorReg1B, 255));
} else {
// Smaller gauge is just pure yellow
mpGauge->setBlackWhite(JUtility::TColor(255, 255, 0, 255),
JUtility::TColor(255, 255, 0, 255));
}
#endif
}
void dDlst_KanteraIcon_c::draw() {
+35 -3
View File
@@ -20,10 +20,11 @@
#include "d/d_msg_class.h"
#include "d/d_msg_object.h"
#include "d/d_pane_class.h"
#include "dusk/frame_interpolation.h"
#include <cstring>
#if TARGET_PC
#include "dusk/cosmetics/color_utils.hpp"
#include "dusk/frame_interpolation.h"
#include "dusk/settings.h"
#include "dusk/ui/icon_provider.hpp"
#include <algorithm>
@@ -1676,8 +1677,39 @@ void dMeter2Draw_c::drawKanteraScreen(u8 i_meterType) {
mpMagicMeter->setBlackWhite(black, mpMagicMeter->getInitWhite());
setAlphaMagicChange(true);
} else if (i_meterType == 1) {
mpMagicMeter->setBlackWhite(JUtility::TColor(255, 255, 140, 255),
JUtility::TColor(230, 170, 0, 255));
#if TARGET_PC
// Apply custom lantern glow if necessary
const auto& lanternColorStr = dusk::getSettings().cosmetics.lanternGlowColor.getValue();
auto lv = &daAlink_getAlinkActorClass()->mpHIO->mItem.mLantern.m;
auto hlv = &daAlink_getAlinkActorClass()->mpHIO->mItem.mLanternPL.m;
if (dusk::cosmetics::is_valid_hex_color_str(lanternColorStr)) {
auto color = dusk::cosmetics::hex_color_str_to_gx_color(lanternColorStr);
mpMagicMeter->setBlackWhite(JUtility::TColor(color.r, color.g, color.b, 255),
JUtility::TColor(color.r, color.g, color.b, 255));
} else if (lanternColorStr == "Rainbow") {
GXColor color = dusk::cosmetics::get_rainbow_rgb(127.5f);
lv->mColorReg1R = color.r / 2;
lv->mColorReg1G = color.g / 2;
lv->mColorReg1B = color.b / 2;
lv->mColorReg2R = color.r / 2;
lv->mColorReg2G = color.g / 2;
lv->mColorReg2B = color.b / 2;
hlv->mColorR = color.r / 2;
hlv->mColorG = color.g / 2;
hlv->mColorB = color.b / 2;
mpMagicMeter->setBlackWhite(JUtility::TColor(color.r/2, color.g/2, color.b/2, 255),
JUtility::TColor(color.r/2, color.g/2, color.b/2, 255));
} else {
// Set back original colors if no valid cosmetic choice
*lv = daAlink_getAlinkActorClass()->mpHIO->mItem.mLantern.original;
*hlv = daAlink_getAlinkActorClass()->mpHIO->mItem.mLanternPL.original;
#endif
mpMagicMeter->setBlackWhite(JUtility::TColor(255, 255, 140, 255),
JUtility::TColor(230, 170, 0, 255));
#if TARGET_PC
}
#endif
setAlphaKanteraChange(true);
} else if (i_meterType == 2) {
f32 oxygen_percent = (f32)dComIfGp_getOxygen() / (f32)dComIfGp_getMaxOxygen();