Convert all menu code to new menu, convert Holiday structure to ShipInit and MenuInit, and disable custom rainbows.
This commit is contained in:
@@ -61,21 +61,13 @@ static void OnConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
//if (UIWidgets::EnhancementCheckbox("Evil Gossip Stone", CVAR("EvilGossipStone"))) {
|
||||
// OnConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Don't you dare talk to them.");
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
SohGui::mSohMenu->AddWidget(path, "Evil Gossip Stone", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("EvilGossipStone"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Don't you dare talk to them."));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
OnConfigurationChanged();
|
||||
// #endregion
|
||||
|
||||
// TODO: Anything you want to run once on startup
|
||||
}
|
||||
|
||||
// TODO: Uncomment this line to enable the mod
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -34,7 +34,7 @@ extern "C" void ClearOverrideSkips() {
|
||||
sSkipNextSkeleton = false;
|
||||
}
|
||||
|
||||
static void ConfigurationChanged() {
|
||||
static void OnConfigurationChanged() {
|
||||
COND_VB_SHOULD(VB_DRAW_SKEL_LIMB, CVarGetInteger(CVAR("SnowGolems"), 0), {
|
||||
if (!*should) {
|
||||
return;
|
||||
@@ -107,17 +107,15 @@ static void ConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
ImGui::SeparatorText(AUTHOR);
|
||||
|
||||
//if (UIWidgets::EnhancementCheckbox("Snow Golems", CVAR("SnowGolems"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
UIWidgets::Tooltip("Overrides most charactor skeletons with snow balls to make them look like Snow Golems");
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
SohGui::mSohMenu->AddWidget(path, "Snow Golems", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("SnowGolems"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Overrides most charactor skeletons with snow balls to make them look like Snow Golems"));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -84,8 +84,7 @@ void RandomizeBoulder(Actor* refActor) {
|
||||
|
||||
bool spawningPresents = false;
|
||||
|
||||
struct Present {
|
||||
};
|
||||
struct Present {};
|
||||
|
||||
std::unordered_map<Actor*, Present> presents;
|
||||
|
||||
@@ -126,7 +125,8 @@ void Present_Draw(Actor* actor, PlayState* play) {
|
||||
|
||||
Matrix_Scale(30.0f, 30.0f, 30.0f, MTXMODE_APPLY);
|
||||
Matrix_Translate(49.20f, 0.0f, -106.60f, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor100DL);
|
||||
|
||||
@@ -139,39 +139,37 @@ void Present_Destroy(Actor* actor, PlayState* play) {
|
||||
|
||||
static void OnPresentChange() {
|
||||
isExchangeDisabled = !CVarGetInteger(CVAR("OrnExch.Enabled"), 0);
|
||||
COND_ID_HOOK(OnOpenText, 0x204A, CVarGetInteger(CVAR("OrnExch.Enabled"), 0), [](u16 * textId, bool* loadFromMessageTable) {
|
||||
auto messageEntry = CustomMessage("");
|
||||
bool reduceGifts = false;
|
||||
uint32_t giftsCollected = CVarGetInteger(CVAR("GiftsCollected"), 0);
|
||||
uint32_t giftsRequired = CVarGetInteger(CVAR("OrnExch.Amount"), 15);
|
||||
if (giftsCollected < giftsRequired) {
|
||||
std::string msg = "You only have %r " + std::to_string(giftsCollected) + "%w If you bring me %g"
|
||||
+ std::to_string(giftsRequired) + "%w I'll give you a reward!";
|
||||
messageEntry = CustomMessage(msg);
|
||||
} else {
|
||||
std::string msg = "A present? And %g" + std::to_string(giftsRequired) +
|
||||
"%w to boot? Here's your reward, bring me more if you find any!";
|
||||
messageEntry = CustomMessage(msg);
|
||||
reduceGifts = true;
|
||||
}
|
||||
messageEntry.AutoFormat();
|
||||
messageEntry.LoadIntoFont();
|
||||
*loadFromMessageTable = false;
|
||||
COND_ID_HOOK(
|
||||
OnOpenText, 0x204A, CVarGetInteger(CVAR("OrnExch.Enabled"), 0), [](u16* textId, bool* loadFromMessageTable) {
|
||||
auto messageEntry = CustomMessage("");
|
||||
bool reduceGifts = false;
|
||||
uint32_t giftsCollected = CVarGetInteger(CVAR("GiftsCollected"), 0);
|
||||
uint32_t giftsRequired = CVarGetInteger(CVAR("OrnExch.Amount"), 15);
|
||||
if (giftsCollected < giftsRequired) {
|
||||
std::string msg = "You only have %r " + std::to_string(giftsCollected) + "%w If you bring me %g" +
|
||||
std::to_string(giftsRequired) + "%w I'll give you a reward!";
|
||||
messageEntry = CustomMessage(msg);
|
||||
} else {
|
||||
std::string msg = "A present? And %g" + std::to_string(giftsRequired) +
|
||||
"%w to boot? Here's your reward, bring me more if you find any!";
|
||||
messageEntry = CustomMessage(msg);
|
||||
reduceGifts = true;
|
||||
}
|
||||
messageEntry.AutoFormat();
|
||||
messageEntry.LoadIntoFont();
|
||||
*loadFromMessageTable = false;
|
||||
|
||||
if (reduceGifts) {
|
||||
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_TRIFORCE_PIECE).GetGIEntry_Copy();
|
||||
giftsCollected -= giftsRequired;
|
||||
CVarSetInteger(CVAR("GiftsCollected"), giftsCollected);
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
if (reduceGifts) {
|
||||
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_TRIFORCE_PIECE).GetGIEntry_Copy();
|
||||
giftsCollected -= giftsRequired;
|
||||
CVarSetInteger(CVAR("GiftsCollected"), giftsCollected);
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
|
||||
std::string msg = std::to_string(giftsCollected).c_str();
|
||||
msg += " Gifts in Inventory.";
|
||||
Notification::Emit({
|
||||
.itemIcon = "RG_TRIFORCE_PIECE",
|
||||
.message = msg
|
||||
});
|
||||
}
|
||||
});
|
||||
std::string msg = std::to_string(giftsCollected).c_str();
|
||||
msg += " Gifts in Inventory.";
|
||||
Notification::Emit({ .itemIcon = "RG_TRIFORCE_PIECE", .message = msg });
|
||||
}
|
||||
});
|
||||
|
||||
COND_HOOK(OnSceneSpawnActors, CVarGetInteger(CVAR("OrnExch.Enabled"), 0), []() {
|
||||
presents.clear();
|
||||
@@ -188,7 +186,7 @@ static void OnPresentChange() {
|
||||
pos.x = 0;
|
||||
pos.z = 0;
|
||||
}
|
||||
// X/Z anywhere from -1000.0 to +1000.0 from player
|
||||
// X/Z anywhere from -1000.0 to +1000.0 from player
|
||||
pos.x += (float)(Random(0, 20000)) - 10000.0f;
|
||||
pos.z += (float)(Random(0, 20000)) - 10000.0f;
|
||||
|
||||
@@ -196,7 +194,8 @@ static void OnPresentChange() {
|
||||
|
||||
if (raycastResult > BGCHECK_Y_MIN) {
|
||||
spawningPresents = true;
|
||||
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_OE2, pos.x, raycastResult, pos.z, 0, 0, 0, 0, false);
|
||||
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_OE2, pos.x, raycastResult, pos.z,
|
||||
0, 0, 0, 0, false);
|
||||
spawningPresents = false;
|
||||
// break;
|
||||
}
|
||||
@@ -205,15 +204,16 @@ static void OnPresentChange() {
|
||||
}
|
||||
});
|
||||
|
||||
COND_ID_HOOK(ShouldActorInit, ACTOR_EN_OE2, CVarGetInteger(CVAR("OrnExch.Enabled"), 0), [](void* actorRef, bool* should) {
|
||||
Actor* actor = (Actor*)actorRef;
|
||||
if (spawningPresents) {
|
||||
actor->init = Present_Init;
|
||||
actor->update = Present_Update;
|
||||
actor->draw = Present_Draw;
|
||||
actor->destroy = Present_Destroy;
|
||||
}
|
||||
});
|
||||
COND_ID_HOOK(ShouldActorInit, ACTOR_EN_OE2, CVarGetInteger(CVAR("OrnExch.Enabled"), 0),
|
||||
[](void* actorRef, bool* should) {
|
||||
Actor* actor = (Actor*)actorRef;
|
||||
if (spawningPresents) {
|
||||
actor->init = Present_Init;
|
||||
actor->update = Present_Update;
|
||||
actor->draw = Present_Draw;
|
||||
actor->destroy = Present_Destroy;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static void OnBlitzChange() {
|
||||
@@ -270,39 +270,48 @@ void CaladiusWindow::Draw() {
|
||||
ImGui::PopStyleVar(1);
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
//if (UIWidgets::EnhancementCheckbox("Holiday Fever", CVAR("Fever.Enabled"))) {
|
||||
// OnFeverConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Can you beat your objective before the Fever sets in?/n"
|
||||
// "- Obtaining Ice Traps extends your timer.");
|
||||
//if (CVarGetInteger(CVAR("Fever.Enabled"), 0)) {
|
||||
// if (UIWidgets::EnhancementSliderFloat("", "##FontScale", CVAR("FontScale"),
|
||||
// 1.0f, 5.0f, "Font: %.1fx", 1.0f, false, false, isFeverDisabled)) {
|
||||
// OnFeverConfigurationChanged();
|
||||
// }
|
||||
// UIWidgets::PaddedEnhancementSliderInt("Starting Timer: %d minutes", "##StartTime", CVAR("StartTimer"),
|
||||
// 5, 30, "", 15, true, true, false, isFeverDisabled);
|
||||
// UIWidgets::PaddedEnhancementSliderInt("Time Extensions: %d minutes", "##ExtendTime", CVAR("ExtendTimer"),
|
||||
// 1, 10, "", 5, true, true, false, isFeverDisabled);
|
||||
//}
|
||||
//UIWidgets::PaddedSeparator();
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
SohGui::mSohMenu->AddWidget(path, "Holiday Fever", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Fever.Enabled"))
|
||||
.Callback([](WidgetInfo& info) { OnFeverConfigurationChanged(); })
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Can you beat your objective before the Fever sets in?\n"
|
||||
"- Obtaining Ice Traps extends your timer."));
|
||||
SohGui::mSohMenu->AddWidget(path, "Font: %.1fx", WIDGET_CVAR_SLIDER_FLOAT)
|
||||
.CVar(CVAR("FontScale"))
|
||||
.Callback([](WidgetInfo& info) { OnFeverConfigurationChanged(); })
|
||||
.PreFunc([](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("Fever.Enabled"), 0); })
|
||||
.Options(UIWidgets::FloatSliderOptions().DefaultValue(1.0f).Min(1.0f).Max(5.0f));
|
||||
SohGui::mSohMenu->AddWidget(path, "Starting Timer: %d minutes", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("StartTimer"))
|
||||
.Callback([](WidgetInfo& info) { OnFeverConfigurationChanged(); })
|
||||
.PreFunc([](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("Fever.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(15).Min(5).Max(30));
|
||||
SohGui::mSohMenu->AddWidget(path, "Time Extensions: %d minutes", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("ExtendTimer"))
|
||||
.Callback([](WidgetInfo& info) { OnFeverConfigurationChanged(); })
|
||||
.PreFunc([](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("Fever.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(5).Min(1).Max(10));
|
||||
|
||||
//if (UIWidgets::EnhancementCheckbox("Boulder Blitz", CVAR("Blitz.Enabled"))) {
|
||||
// OnBlitzChange();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Boulders will randomly be replaced with other boulder types.");
|
||||
//UIWidgets::PaddedSeparator();
|
||||
SohGui::mSohMenu->AddWidget(path, "BoulderBlitzSect", WIDGET_SEPARATOR);
|
||||
SohGui::mSohMenu->AddWidget(path, "Boulder Blitz", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Blitz.Enabled"))
|
||||
.Callback([](WidgetInfo& info) { OnBlitzChange(); })
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Boulders will randomly be replaced with other boulder types."));
|
||||
|
||||
//if (UIWidgets::EnhancementCheckbox("Ornament Exchange", CVAR("OrnExch.Enabled"))) {
|
||||
// OnPresentChange();
|
||||
//}
|
||||
//UIWidgets::Tooltip("See Malon as Young Link in Lon Lon Ranch to exchange Gifts for Ornaments!");
|
||||
//if (CVarGetInteger(CVAR("OrnExch.Enabled"), 0)) {
|
||||
// UIWidgets::PaddedEnhancementSliderInt("Gifts Required: %d Gifts", "##GiftsReq", CVAR("OrnExch.Amount"),
|
||||
// 5, 30, "", 15, true, true, false, isExchangeDisabled);
|
||||
//}
|
||||
SohGui::mSohMenu->AddWidget(path, "OrnamentExchSect", WIDGET_SEPARATOR);
|
||||
SohGui::mSohMenu->AddWidget(path, "Ornament Exchange", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("OrnExch.Enabled"))
|
||||
.Callback([](WidgetInfo& info) { OnPresentChange(); })
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"See Malon as Young Link in Lon Lon Ranch to exchange Gifts for Ornaments!"));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Gifts Required: %d Gifts", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("OrnExch.Amount"))
|
||||
.Callback([](WidgetInfo& info) { OnFeverConfigurationChanged(); })
|
||||
.PreFunc([](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("OrnExch.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(15).Min(5).Max(30));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
@@ -311,4 +320,5 @@ static void RegisterMod() {
|
||||
OnPresentChange();
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(RegisterMod);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -27,10 +27,10 @@ static void OnConfigurationChanged() {
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
//if (UIWidgets::EnhancementCheckbox("DoSomethingWithPots", CVAR("DoSomethingWithPots"))) {
|
||||
// OnConfigurationChanged();
|
||||
//}
|
||||
// ImGui::SeparatorText(AUTHOR);
|
||||
// if (UIWidgets::EnhancementCheckbox("DoSomethingWithPots", CVAR("DoSomethingWithPots"))) {
|
||||
// OnConfigurationChanged();
|
||||
// }
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
|
||||
@@ -35,23 +35,25 @@ static CollisionPoly snowballPoly;
|
||||
static f32 raycastResult;
|
||||
|
||||
const s16 entrances[] = {
|
||||
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1, 0x0037, 0x0205,
|
||||
0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447, 0x009C, 0x033C, 0x00C9, 0x026A,
|
||||
0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E, 0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2,
|
||||
0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349, 0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D,
|
||||
0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4, 0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD,
|
||||
0x00B7, 0x0201, 0x003B, 0x0463, 0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394,
|
||||
0x0272, 0x0211, 0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
|
||||
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809, 0x070A, 0x080A,
|
||||
0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711, 0x0811, 0x0712, 0x0812,
|
||||
0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718, 0x0818, 0x0719, 0x0819, 0x081A,
|
||||
0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F, 0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361,
|
||||
0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286, 0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE,
|
||||
0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD, 0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D,
|
||||
0x0130, 0x03AC, 0x0123, 0x0365, 0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9,
|
||||
0x0246, 0x01C1, 0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
|
||||
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417, 0x0423, 0x008D,
|
||||
0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
|
||||
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1,
|
||||
0x0037, 0x0205, 0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447,
|
||||
0x009C, 0x033C, 0x00C9, 0x026A, 0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E,
|
||||
0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2, 0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349,
|
||||
0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D, 0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4,
|
||||
0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD, 0x00B7, 0x0201, 0x003B, 0x0463,
|
||||
0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394, 0x0272, 0x0211,
|
||||
0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
|
||||
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809,
|
||||
0x070A, 0x080A, 0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711,
|
||||
0x0811, 0x0712, 0x0812, 0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718,
|
||||
0x0818, 0x0719, 0x0819, 0x081A, 0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F,
|
||||
0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361, 0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286,
|
||||
0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE, 0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD,
|
||||
0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D, 0x0130, 0x03AC, 0x0123, 0x0365,
|
||||
0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9, 0x0246, 0x01C1,
|
||||
0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
|
||||
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417,
|
||||
0x0423, 0x008D, 0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
|
||||
};
|
||||
|
||||
static bool midoGrottoInit = false;
|
||||
@@ -67,7 +69,6 @@ static Vec3s collectionPointJointTable[17];
|
||||
static Vec3s collectionPointMorphTable[17];
|
||||
static std::string collectionPointNametag;
|
||||
|
||||
|
||||
static void RandomGrotto_WaitOpen(DoorAna* doorAna, PlayState* play) {
|
||||
if (!midoGrottoInit) {
|
||||
midoGrottoInit = true;
|
||||
@@ -149,32 +150,35 @@ static Vec3f FindValidPos(f32 distance) {
|
||||
|
||||
// TODO: If in hyrule field and treeChopper is on, teleport somewhere else in hyrule field
|
||||
static void SpawnRandomGrotto() {
|
||||
if (
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS
|
||||
) {
|
||||
if (gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS) {
|
||||
return;
|
||||
}
|
||||
|
||||
Vec3f pos = FindValidPos(2000.0f);
|
||||
Actor* grotto = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_ANA, pos.x, pos.y, pos.z, 0, 0, 0, 0, false);
|
||||
Actor* grotto =
|
||||
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_ANA, pos.x, pos.y, pos.z, 0, 0, 0, 0, false);
|
||||
midoGrottoInit = false;
|
||||
DoorAna_SetupAction((DoorAna*)grotto, RandomGrotto_WaitOpen);
|
||||
grotto->draw = RandomGrotto_Draw;
|
||||
}
|
||||
|
||||
void SpawnStick(Vec3f pos) {
|
||||
CustomCollectible::Spawn(pos.x, pos.y + 150.0f, pos.z, 0, CustomCollectible::KILL_ON_TOUCH | CustomCollectible::TOSS_ON_SPAWN, 0, [](Actor* actor, PlayState* play) {
|
||||
FredsQuestWoodOnHand++;
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}, [](Actor* actor, PlayState* play) {
|
||||
Matrix_Scale(40.0f, 40.0f, 40.0f, MTXMODE_APPLY);
|
||||
for (int i = 4; i < 7; i++) {
|
||||
Matrix_RotateZYX(800 * i, 0, 800 * i, MTXMODE_APPLY);
|
||||
GetItem_Draw(play, GID_STICK);
|
||||
}
|
||||
});
|
||||
CustomCollectible::Spawn(
|
||||
pos.x, pos.y + 150.0f, pos.z, 0, CustomCollectible::KILL_ON_TOUCH | CustomCollectible::TOSS_ON_SPAWN, 0,
|
||||
[](Actor* actor, PlayState* play) {
|
||||
FredsQuestWoodOnHand++;
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
},
|
||||
[](Actor* actor, PlayState* play) {
|
||||
Matrix_Scale(40.0f, 40.0f, 40.0f, MTXMODE_APPLY);
|
||||
for (int i = 4; i < 7; i++) {
|
||||
Matrix_RotateZYX(800 * i, 0, 800 * i, MTXMODE_APPLY);
|
||||
GetItem_Draw(play, GID_STICK);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Actor* specialTree = nullptr;
|
||||
@@ -201,7 +205,7 @@ void ChooseSpecialTree() {
|
||||
|
||||
extern "C" bool HandleTreeBonk(Actor* actor) {
|
||||
if (!CVarGetInteger(CVAR("FredsQuest.Enabled"), 0)) {
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
int damage = 2;
|
||||
@@ -255,7 +259,8 @@ void DrawCrazyTaxiArrow(Actor* actor, PlayState* play) {
|
||||
Matrix_Translate(0.0f, 70.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateY(5.86f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 255, 0, 255);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 255, 0, 255);
|
||||
gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gDebugArrowDL);
|
||||
@@ -281,7 +286,8 @@ void CollectionPoint_Update(Actor* actor, PlayState* play) {
|
||||
lastDisplayedCount = FredsQuestWoodCollected;
|
||||
collectionPointNametag = "Bring me wood!";
|
||||
if (FredsQuestWoodCollected > 0) {
|
||||
collectionPointNametag += std::string(" (") + std::to_string(FredsQuestWoodCollected) + "/" + std::to_string(CVarGetInteger(CVAR("FredsQuest.WoodNeeded"), 300)) + ")";
|
||||
collectionPointNametag += std::string(" (") + std::to_string(FredsQuestWoodCollected) + "/" +
|
||||
std::to_string(CVarGetInteger(CVAR("FredsQuest.WoodNeeded"), 300)) + ")";
|
||||
}
|
||||
NameTag_RemoveAllForActor(actor);
|
||||
NameTag_RegisterForActorWithOptions(actor, collectionPointNametag.c_str(), { .yOffset = 100 });
|
||||
@@ -291,7 +297,8 @@ void CollectionPoint_Update(Actor* actor, PlayState* play) {
|
||||
if (FredsQuestWoodOnHand) {
|
||||
FredsQuestWoodCollected++;
|
||||
FredsQuestWoodOnHand--;
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_METRONOME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
|
||||
if (FredsQuestWoodCollected >= CVarGetInteger(CVAR("FredsQuest.WoodNeeded"), 300)) {
|
||||
FredsQuestComplete = true;
|
||||
@@ -304,7 +311,6 @@ void CollectionPoint_Update(Actor* actor, PlayState* play) {
|
||||
} else {
|
||||
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_HEART_CONTAINER).GetGIEntry_Copy();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -322,7 +328,7 @@ void CollectionPoint_Draw(Actor* actor, PlayState* play) {
|
||||
for (int i = 0; i < FredsQuestWoodCollected / (CVarGetInteger(CVAR("FredsQuest.WoodNeeded"), 300) / 50); i++) {
|
||||
float angle = 10 * i;
|
||||
float radius = (50 - i) * 0.5f; // Radius decreases as it goes up
|
||||
float height = 10.0f; // Incremental height
|
||||
float height = 10.0f; // Incremental height
|
||||
|
||||
Matrix_Translate(radius * cosf(angle), height, radius * sinf(angle), MTXMODE_APPLY);
|
||||
Matrix_RotateY(angle, MTXMODE_APPLY);
|
||||
@@ -337,8 +343,9 @@ void SpawnCollectionPoint() {
|
||||
collectionPoint->actor.update = CollectionPoint_Update;
|
||||
collectionPoint->actor.draw = CollectionPoint_Draw;
|
||||
collectionPoint->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
|
||||
SkelAnime_InitFlex(gPlayState, &collectionPointSkelAnime, (FlexSkeletonHeader*)&object_toryo_Skel_007150,
|
||||
(AnimationHeader*)&object_toryo_Anim_000E50, collectionPointJointTable, collectionPointMorphTable, 17);
|
||||
SkelAnime_InitFlex(gPlayState, &collectionPointSkelAnime, (FlexSkeletonHeader*)&object_toryo_Skel_007150,
|
||||
(AnimationHeader*)&object_toryo_Anim_000E50, collectionPointJointTable,
|
||||
collectionPointMorphTable, 17);
|
||||
}
|
||||
|
||||
void RandomTrap_Update(Actor* actor, PlayState* play) {
|
||||
@@ -391,7 +398,8 @@ void RandomTrap_Draw(Actor* actor, PlayState* play) {
|
||||
|
||||
void SpawnRandomTrap() {
|
||||
Vec3f pos = FindValidPos(2000.0f);
|
||||
EnItem00* randomTrap = CustomCollectible::Spawn(pos.x, pos.y, pos.z, 0, CustomCollectible::TOSS_ON_SPAWN, 0, NULL, NULL);
|
||||
EnItem00* randomTrap =
|
||||
CustomCollectible::Spawn(pos.x, pos.y, pos.z, 0, CustomCollectible::TOSS_ON_SPAWN, 0, NULL, NULL);
|
||||
SoundSource_PlaySfxAtFixedWorldPos(gPlayState, &randomTrap->actor.world.pos, 20, NA_SE_EV_LIGHTNING);
|
||||
randomTrap->actor.update = RandomTrap_Update;
|
||||
randomTrap->actor.draw = RandomTrap_Draw;
|
||||
@@ -414,17 +422,18 @@ void OnSceneInit() {
|
||||
SpawnCollectionPoint();
|
||||
}
|
||||
|
||||
static void ConfigurationChanged() {
|
||||
static void OnConfigurationChanged() {
|
||||
COND_HOOK(OnSceneSpawnActors, CVarGetInteger(CVAR("FredsQuest.Enabled"), 0), OnSceneInit);
|
||||
|
||||
COND_HOOK(OnPlayerUpdate, CVarGetInteger(CVAR("RandomTraps.Enabled"), 0), []() {
|
||||
if (rand() % CVarGetInteger(CVAR("RandomTraps.SpawnChance"), 400) == 0) {
|
||||
if (rand() % CVarGetInteger(CVAR("RandomTraps.SpawnChance"), 400) == 0) {
|
||||
SpawnRandomTrap();
|
||||
}
|
||||
});
|
||||
|
||||
COND_HOOK(OnPlayerUpdate, CVarGetInteger(CVAR("FredsQuest.Enabled"), 0), []() {
|
||||
if (CVarGetInteger(CVAR("FredsQuest.EncumberedThreshold"), 60) == 0 || FredsQuestWoodOnHand <= CVarGetInteger(CVAR("FredsQuest.EncumberedThreshold"), 60)) {
|
||||
if (CVarGetInteger(CVAR("FredsQuest.EncumberedThreshold"), 60) == 0 ||
|
||||
FredsQuestWoodOnHand <= CVarGetInteger(CVAR("FredsQuest.EncumberedThreshold"), 60)) {
|
||||
GameInteractor::State::MovementSpeedMultiplier = 0;
|
||||
} else {
|
||||
GameInteractor::State::MovementSpeedMultiplier = -2;
|
||||
@@ -438,8 +447,7 @@ static void ConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
ImGui::SeparatorText(AUTHOR);
|
||||
static void RegisterMenu() {
|
||||
|
||||
// UIWidgets::EnhancementSliderFloat("Xfloat", "Xfloat", CVAR("tmpxf"), 0.0f, 10.0f, "%.2f", 1.0f, false);
|
||||
// UIWidgets::EnhancementSliderFloat("Yfloat", "Yfloat", CVAR("tmpyf"), 0.0f, 10.0f, "%.2f", 1.0f, false);
|
||||
@@ -447,49 +455,75 @@ static void DrawMenu() {
|
||||
// UIWidgets::EnhancementSliderInt("Xs", "Xs", CVAR("tmpxs"), 0, UINT16_MAX, "%d", 1, false);
|
||||
// UIWidgets::EnhancementSliderInt("Ys", "Ys", CVAR("tmpys"), 0, UINT16_MAX, "%d", 1, false);
|
||||
// UIWidgets::EnhancementSliderInt("Zs", "Zs", CVAR("tmpzs"), 0, UINT16_MAX, "%d", 1, false);
|
||||
/*if (UIWidgets::EnhancementCheckbox("Fred's Quest", CVAR("FredsQuest.Enabled"))) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
UIWidgets::Tooltip("Collect wood and bring it to the collection point in Hyrule Field for a small reward.");
|
||||
if (CVarGetInteger(CVAR("FredsQuest.Enabled"), 0)) {
|
||||
if (UIWidgets::EnhancementCheckbox("Crazy Taxi Arrow", CVAR("FredsQuest.CrazyTaxiArrow"))) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
if (UIWidgets::EnhancementSliderInt("Wood Needed", "##FredsQuest.WoodNeeded", CVAR("FredsQuest.WoodNeeded"), 0, 1000, "%d", 300, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
if (UIWidgets::EnhancementSliderInt("Tree Bonk Drop Rate", "##FredsQuest.TreeBonkDropRate", CVAR("FredsQuest.TreeBonkDropRate"), 0, 10, "%d", 1, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
if (UIWidgets::EnhancementSliderInt("Tree Break Drop Rate", "##FredsQuest.TreeBreakDropRate", CVAR("FredsQuest.TreeBreakDropRate"), 0, 50, "%d", 3, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
if (UIWidgets::EnhancementSliderInt("Special Break Drop Rate", "##FredsQuest.SpecialBreakDropRate", CVAR("FredsQuest.SpecialBreakDropRate"), 0, 50, "%d", 10, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
if (UIWidgets::EnhancementSliderInt("Encumbered Threshold", "##FredsQuest.EncumberedThreshold", CVAR("FredsQuest.EncumberedThreshold"), 0, 200, "%d", 60, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
UIWidgets::Tooltip("If you have more than this many sticks, you will be encumbered and run slower. 0 for disabled");
|
||||
}
|
||||
if (UIWidgets::EnhancementCheckbox("Random Traps", CVAR("RandomTraps.Enabled"))) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
UIWidgets::Tooltip("Random traps will spawn around you at a configurable rate. (Currently only knockback)");
|
||||
if (CVarGetInteger(CVAR("RandomTraps.Enabled"), 0)) {
|
||||
if (UIWidgets::EnhancementSliderInt("Trap Lifetime (Seconds)", "##RandomTraps.Lifetime", CVAR("RandomTraps.Lifetime"), 0, 60, "%d", 30, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
if (UIWidgets::EnhancementSliderInt("Spawn Chance", "##RandomTraps.SpawnChance", CVAR("RandomTraps.SpawnChance"), 40, 2000, "%d", 1000, false)) {
|
||||
ConfigurationChanged();
|
||||
}
|
||||
}*/
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Fred's Quest", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("FredsQuest.Enabled"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Collect wood and bring it to the collection point in Hyrule Field for a small reward."));
|
||||
SohGui::mSohMenu->AddWidget(path, "Crazy Taxi Arrow", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("FredsQuest.CrazyTaxiArrow"))
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("FredsQuest.Enabled"), 0); })
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Collect wood and bring it to the collection point in Hyrule Field for a small reward."));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Wood Needed", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("FredsQuest.WoodNeeded"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("FredsQuest.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(300).Min(0).Max(1000));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Tree Bonk Drop Rate", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("FredsQuest.TreeBonkDropRate"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("FredsQuest.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(1).Min(0).Max(10));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Tree Break Drop Rate", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("FredsQuest.TreeBreakDropRate"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("FredsQuest.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(3).Min(0).Max(50));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Special Break Drop Rate", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("FredsQuest.SpecialBreakDropRate"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("FredsQuest.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(10).Min(0).Max(50));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Encumbered Threshold", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("FredsQuest.EncumberedThreshold"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("FredsQuest.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(60).Min(0).Max(200).Tooltip(
|
||||
"If you have more than this many sticks, you will be encumbered and run slower. 0 for disabled"));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Random Traps", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("RandomTraps.Enabled"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Random traps will spawn around you at a configurable rate. (Currently only knockback)"));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Trap Lifetime (Seconds)", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("RandomTraps.Lifetime"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("RandomTraps.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(30).Min(0).Max(60));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Spawn Chance", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("RandomTraps.SpawnChance"))
|
||||
.Callback([](WidgetInfo& info) { OnConfigurationChanged(); })
|
||||
.PreFunc(
|
||||
[](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("RandomTraps.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(1000).Min(40).Max(2000));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
ConfigurationChanged();
|
||||
// #endregion
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -104,7 +104,7 @@ void Penguin_Destroy(Actor* actor, PlayState* play) {
|
||||
static void OnConfigurationChanged() {
|
||||
COND_HOOK(OnPlayerUpdate, CVarGetInteger(CVAR("Hailstorm"), 0), []() {
|
||||
// Every frame has a 1/500 chance of spawning close hail
|
||||
if (rand() % 500 == 0) {
|
||||
if (rand() % 500 == 0) {
|
||||
int spawned = 0;
|
||||
while (spawned < 1) {
|
||||
Vec3f pos = GET_PLAYER(gPlayState)->actor.world.pos;
|
||||
@@ -112,7 +112,8 @@ static void OnConfigurationChanged() {
|
||||
pos.z += (float)Random(0, 50) - 25.0f;
|
||||
pos.y += 200.0f;
|
||||
|
||||
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_NUTSBALL, pos.x, pos.y, pos.z, 0, 0, 0, 0, false);
|
||||
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_NUTSBALL, pos.x, pos.y, pos.z, 0,
|
||||
0, 0, 0, false);
|
||||
EnNutsball* nut = (EnNutsball*)actor;
|
||||
nut->actor.draw = EnNutsball_Draw;
|
||||
nut->actor.shape.rot.y = 0;
|
||||
@@ -124,7 +125,7 @@ static void OnConfigurationChanged() {
|
||||
}
|
||||
}
|
||||
// Every frame has a 1/50 chance of spawning far hail
|
||||
if (rand() % 50 == 0) {
|
||||
if (rand() % 50 == 0) {
|
||||
int spawned = 0;
|
||||
while (spawned < 1) {
|
||||
Vec3f pos = GET_PLAYER(gPlayState)->actor.world.pos;
|
||||
@@ -207,25 +208,18 @@ static void OnConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
//if (UIWidgets::EnhancementCheckbox("Penguins", CVAR("Penguins"))) {
|
||||
// OnConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Penguins will spawn in huddles throughout hyrule");
|
||||
//if (UIWidgets::EnhancementCheckbox("Hailstorm", CVAR("Hailstorm"))) {
|
||||
// OnConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Ever persistent hailstorm throughout hyrule");
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Penguins", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Penguins"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Penguins will spawn in huddles throughout hyrule"));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Hailstorm", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Hailstorm"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Ever persistent hailstorm throughout hyrule"));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
OnConfigurationChanged();
|
||||
// #endregion
|
||||
|
||||
// TODO: Anything you want to run once on startup
|
||||
}
|
||||
|
||||
// TODO: Uncomment this line to enable the mod
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -4,35 +4,17 @@
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
#include <libultraship/libultraship.h>
|
||||
#include "soh/SohGui/UIWidgets.hpp"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
#include "soh/Enhancements/cosmetics/CosmeticsEditor.h"
|
||||
#include "soh/SohGui/SohMenu.h"
|
||||
#include "soh/SohGui/SohGui.hpp"
|
||||
#include "soh/SohGui/UIWidgets.hpp"
|
||||
|
||||
inline std::vector<std::function<void()>> holidayDrawFuncs = {};
|
||||
inline std::vector<std::function<void()>> holidayRegisterFuncs = {};
|
||||
|
||||
inline void DrawHolidayMenu() {
|
||||
if (ImGui::BeginMenu("Holiday")) {
|
||||
for (auto& drawFunc : holidayDrawFuncs) {
|
||||
ImGui::PushID(&drawFunc);
|
||||
drawFunc();
|
||||
ImGui::PopID();
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
namespace SohGui {
|
||||
extern std::shared_ptr<SohMenu> mSohMenu;
|
||||
}
|
||||
|
||||
inline void RegisterHoliday() {
|
||||
for (auto& regFunc : holidayRegisterFuncs) {
|
||||
regFunc();
|
||||
}
|
||||
}
|
||||
|
||||
struct Holiday {
|
||||
Holiday(std::function<void()> drawFunc, std::function<void()> registerFunc) {
|
||||
holidayDrawFuncs.push_back(drawFunc);
|
||||
holidayRegisterFuncs.push_back(registerFunc);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // HOLIDAY_HPP
|
||||
|
||||
@@ -42,88 +42,60 @@ Color_RGBA8 Color_ImGuiToLUS(ImVec4 color) {
|
||||
}
|
||||
|
||||
static void OnConfigurationChanged() {
|
||||
Color_RGBA8 c1 = CVarGetColor(CVAR("lCustomRainbow1"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][0]));
|
||||
Color_RGBA8 c2 = CVarGetColor(CVAR("lCustomRainbow2"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][1]));
|
||||
Color_RGBA8 c3 = CVarGetColor(CVAR("lCustomRainbow3"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][2]));
|
||||
Color_RGBA8 c4 = CVarGetColor(CVAR("lCustomRainbow4"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][3]));
|
||||
Color_RGBA8 c1 = CVarGetColor(CVAR("CustomRainbow1"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][0]));
|
||||
Color_RGBA8 c2 = CVarGetColor(CVAR("CustomRainbow2"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][1]));
|
||||
Color_RGBA8 c3 = CVarGetColor(CVAR("CustomRainbow3"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][2]));
|
||||
Color_RGBA8 c4 = CVarGetColor(CVAR("CustomRainbow4"), Color_ImGuiToLUS(RAINBOW_PRESETS[0][3]));
|
||||
|
||||
customColorZero = Color_LUSToImGui((Color_RGBA8)c1);
|
||||
customColorOne = Color_LUSToImGui((Color_RGBA8)c2);
|
||||
customColorMinusZero = Color_LUSToImGui((Color_RGBA8)c3);
|
||||
customColorMinusOne = Color_LUSToImGui((Color_RGBA8)c4);
|
||||
|
||||
// TODO: Register any hooks or things that need to run on startup and when the main CVar is toggled
|
||||
// Note: Hooks should be registered/unregistered depending on the CVar state (Use COND_HOOK or COND_ID_HOOK)
|
||||
|
||||
// COND_HOOK(OnSceneSpawnActors, CVarGetInteger(CVAR("Enabled"), 0), []() {
|
||||
// // Spawn your own actors?
|
||||
// });
|
||||
|
||||
// COND_ID_HOOK(OnActorInit, ACTOR_OBJ_TSUBO, CVarGetInteger(CVAR("DoSomethingWithPots"), 0), [](void* actorRef) {
|
||||
// // Do something with pots?
|
||||
// });
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
ImGui::SeparatorText(AUTHOR);
|
||||
//if (ImGui::BeginMenu("Customize Rainbows")) {
|
||||
// UIWidgets::EnhancementCheckbox("Enable", CVAR("lEnableCustomRainbows"));
|
||||
// if (CVarGetInteger(CVAR("lEnableCustomRainbows"), 0)) {
|
||||
// ImGui::ColorEdit3("Color 1", (float*)&customColorZero, ImGuiColorEditFlags_NoInputs);
|
||||
// ImGui::ColorEdit3("Color 2", (float*)&customColorOne, ImGuiColorEditFlags_NoInputs);
|
||||
// ImGui::ColorEdit3("Color 3", (float*)&customColorMinusZero, ImGuiColorEditFlags_NoInputs);
|
||||
// ImGui::ColorEdit3("Color 4", (float*)&customColorMinusOne, ImGuiColorEditFlags_NoInputs);
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
|
||||
// UIWidgets::PaddedText("Presets", true, false);
|
||||
// size_t rainbowPresetIdx = 0;
|
||||
// if (UIWidgets::EnhancementCombobox(CVAR("lCustomRainbowPreset"), RAINBOW_PRESET_NAMES, 0) &&
|
||||
// (rainbowPresetIdx = CVarGetInteger(CVAR("lCustomRainbowPreset"), 0)) <= RAINBOW_PRESET_LEN) { //paranoia
|
||||
// customColorZero = RAINBOW_PRESETS[rainbowPresetIdx][0];
|
||||
// customColorOne = RAINBOW_PRESETS[rainbowPresetIdx][1];
|
||||
// customColorMinusZero = RAINBOW_PRESETS[rainbowPresetIdx][2];
|
||||
// customColorMinusOne = RAINBOW_PRESETS[rainbowPresetIdx][3];
|
||||
// }
|
||||
SohGui::mSohMenu->AddWidget(path, "Custom Rainbows", WIDGET_CVAR_CHECKBOX).CVar(CVAR("EnableCustomRainbows"));
|
||||
|
||||
// Color_RGBA8 color1, color2, color3, color4;
|
||||
// color1.r = static_cast<uint8_t>(customColorZero.x * 255.0f);
|
||||
// color1.g = static_cast<uint8_t>(customColorZero.y * 255.0f);
|
||||
// color1.b = static_cast<uint8_t>(customColorZero.z * 255.0f);
|
||||
SohGui::mSohMenu->AddWidget(path, "Color 1", WIDGET_CVAR_COLOR_PICKER)
|
||||
.CVar(CVAR("CustomRainbow1"))
|
||||
.Options(UIWidgets::ColorPickerOptions().ShowRandom().ShowReset().UseAlpha(false).DefaultValue(
|
||||
Color_ImGuiToLUS(RAINBOW_PRESETS[0][0])));
|
||||
SohGui::mSohMenu->AddWidget(path, "Color 2", WIDGET_CVAR_COLOR_PICKER)
|
||||
.CVar(CVAR("CustomRainbow2"))
|
||||
.Options(UIWidgets::ColorPickerOptions().ShowRandom().ShowReset().UseAlpha(false).DefaultValue(
|
||||
Color_ImGuiToLUS(RAINBOW_PRESETS[0][1])));
|
||||
SohGui::mSohMenu->AddWidget(path, "Color 3", WIDGET_CVAR_COLOR_PICKER)
|
||||
.CVar(CVAR("CustomRainbow3"))
|
||||
.Options(UIWidgets::ColorPickerOptions().ShowRandom().ShowReset().UseAlpha(false).DefaultValue(
|
||||
Color_ImGuiToLUS(RAINBOW_PRESETS[0][2])));
|
||||
SohGui::mSohMenu->AddWidget(path, "Color 4", WIDGET_CVAR_COLOR_PICKER)
|
||||
.CVar(CVAR("CustomRainbow4"))
|
||||
.Options(UIWidgets::ColorPickerOptions().ShowRandom().ShowReset().UseAlpha(false).DefaultValue(
|
||||
Color_ImGuiToLUS(RAINBOW_PRESETS[0][3])));
|
||||
|
||||
// color2.r = static_cast<uint8_t>(customColorOne.x * 255.0f);
|
||||
// color2.g = static_cast<uint8_t>(customColorOne.y * 255.0f);
|
||||
// color2.b = static_cast<uint8_t>(customColorOne.z * 255.0f);
|
||||
SohGui::mSohMenu->AddWidget(path, "Presets", WIDGET_SEPARATOR_TEXT);
|
||||
SohGui::mSohMenu->AddWidget(path, "Custom Rainbow Presets", WIDGET_CVAR_COMBOBOX)
|
||||
.CVar(CVAR("CustomRainbowPreset"))
|
||||
.Options(UIWidgets::ComboboxOptions().ComboMap(RAINBOW_PRESET_NAMES))
|
||||
.Callback([&](WidgetInfo& info) {
|
||||
size_t rainbowPresetIdx = CVarGetInteger(CVAR("CustomRainbowPreset"), 0);
|
||||
customColorZero = RAINBOW_PRESETS[rainbowPresetIdx][0];
|
||||
customColorOne = RAINBOW_PRESETS[rainbowPresetIdx][1];
|
||||
customColorMinusZero = RAINBOW_PRESETS[rainbowPresetIdx][2];
|
||||
customColorMinusOne = RAINBOW_PRESETS[rainbowPresetIdx][3];
|
||||
|
||||
// color3.r = static_cast<uint8_t>(customColorMinusZero.x * 255.0f);
|
||||
// color3.g = static_cast<uint8_t>(customColorMinusZero.y * 255.0f);
|
||||
// color3.b = static_cast<uint8_t>(customColorMinusZero.z * 255.0f);
|
||||
CVarSetColor(CVAR("CustomRainbow1.Value"), Color_ImGuiToLUS(customColorZero));
|
||||
CVarSetColor(CVAR("CustomRainbow2.Value"), Color_ImGuiToLUS(customColorOne));
|
||||
CVarSetColor(CVAR("CustomRainbow3.Value"), Color_ImGuiToLUS(customColorMinusZero));
|
||||
CVarSetColor(CVAR("CustomRainbow4.Value"), Color_ImGuiToLUS(customColorMinusOne));
|
||||
CVarSave();
|
||||
});
|
||||
|
||||
// color4.r = static_cast<uint8_t>(customColorMinusOne.x * 255.0f);
|
||||
// color4.g = static_cast<uint8_t>(customColorMinusOne.y * 255.0f);
|
||||
// color4.b = static_cast<uint8_t>(customColorMinusOne.z * 255.0f);
|
||||
|
||||
// CVarSetColor(CVAR("lCustomRainbow1"), color1);
|
||||
// CVarSetColor(CVAR("lCustomRainbow2"), color2);
|
||||
// CVarSetColor(CVAR("lCustomRainbow3"), color3);
|
||||
// CVarSetColor(CVAR("lCustomRainbow4"), color4);
|
||||
|
||||
// OnConfigurationChanged();
|
||||
// }
|
||||
|
||||
// ImGui::EndMenu();
|
||||
|
||||
//}
|
||||
//if (UIWidgets::EnhancementCheckbox("DoSomethingWithPots", CVAR("DoSomethingWithPots"))) {
|
||||
// OnConfigurationChanged();
|
||||
//}
|
||||
SohGui::mSohMenu->AddWidget(path, "Do Something With Pots", WIDGET_CVAR_CHECKBOX).CVar(CVAR("DoSomethingWithPots"));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
OnConfigurationChanged();
|
||||
// #endregion
|
||||
|
||||
// TODO: Anything you want to run once on startup
|
||||
}
|
||||
|
||||
// TODO: Uncomment this line to enable the mod
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
// static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
// static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -1,85 +1,70 @@
|
||||
#ifndef LL_H
|
||||
#define LL_H
|
||||
|
||||
#include <map>
|
||||
#include "soh/Enhancements/cosmetics/CosmeticsEditor.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
|
||||
const size_t RAINBOW_PRESET_LEN = 9;
|
||||
|
||||
static const char* RAINBOW_PRESET_NAMES[RAINBOW_PRESET_LEN] = {
|
||||
"Christmas",
|
||||
"Transgender",
|
||||
"Nonbinary",
|
||||
"Bisexual",
|
||||
"Lesbian",
|
||||
"Gay (MLM)",
|
||||
"Asexual",
|
||||
"Brazil",
|
||||
"Italy"
|
||||
std::unordered_map<int32_t, const char*> RAINBOW_PRESET_NAMES = {
|
||||
{ 0, "Christmas" }, { 1, "Transgender" }, { 2, "Nonbinary" }, { 3, "Bisexual" }, { 4, "Lesbian" },
|
||||
{ 5, "Gay (MLM)" }, { 6, "Asexual" }, { 7, "Brazil" }, { 8, "Italy" }
|
||||
};
|
||||
|
||||
static const ImVec4 RAINBOW_PRESETS[RAINBOW_PRESET_LEN][4] = {
|
||||
{ //christmas
|
||||
{0.0/255.0, 140.0/255.0, 69.0/255.0, 0},
|
||||
{205.0/255.0, 33.0/255.0, 42.0/255.0, 0},
|
||||
{0.0/255.0, 140.0/255.0, 69.0/255.0, 0},
|
||||
{205.0/255.0, 33.0/255.0, 42.0/255.0, 0}
|
||||
},
|
||||
{ //trans
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{255.0/255.0, 159.0/255.0, 186.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{71.0/255.0, 186.0/255.0, 230.0/255.0, 0}
|
||||
},
|
||||
{ // christmas
|
||||
{ 0.0f / 255.0f, 140.0f / 255.0f, 69.0f / 255.0f, 1 },
|
||||
{ 205.0f / 255.0f, 33.0f / 255.0f, 42.0f / 255.0f, 1 },
|
||||
{ 0.0f / 255.0f, 140.0f / 255.0f, 69.0f / 255.0f, 1 },
|
||||
{ 205.0f / 255.0f, 33.0f / 255.0f, 42.0f / 255.0f, 1 } },
|
||||
{ // trans
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 159.0f / 255.0f, 186.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 71.0f / 255.0f, 186.0f / 255.0f, 230.0f / 255.0f, 1 } },
|
||||
|
||||
{ //enby
|
||||
{252.0/255.0, 244.0/255.0, 52.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{156.0/255.0, 89.0/255.0, 209.0/255.0, 0},
|
||||
{0.0/255.0, 0.0/255.0, 0.0/255.0, 0}
|
||||
},
|
||||
{ // enby
|
||||
{ 252.0f / 255.0f, 244.0f / 255.0f, 52.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 156.0f / 255.0f, 89.0f / 255.0f, 209.0f / 255.0f, 1 },
|
||||
{ 0.0f / 255.0f, 0.0f / 255.0f, 0.0f / 255.0f, 1 } },
|
||||
|
||||
{ //bi
|
||||
{155.0/255.0, 79.0/255.0, 150.0/255.0, 0},
|
||||
{0.0/255.0, 56.0/255.0, 168.0/255.0, 0},
|
||||
{155.0/255.0, 79.0/255.0, 150.0/255.0, 0},
|
||||
{214.0/255.0, 2.0/255.0, 112.0/255.0, 0}
|
||||
},
|
||||
{ // bi
|
||||
{ 155.0f / 255.0f, 79.0f / 255.0f, 150.0f / 255.0f, 1 },
|
||||
{ 0.0f / 255.0f, 56.0f / 255.0f, 168.0f / 255.0f, 1 },
|
||||
{ 155.0f / 255.0f, 79.0f / 255.0f, 150.0f / 255.0f, 1 },
|
||||
{ 214.0f / 255.0f, 2.0f / 255.0f, 112.0f / 255.0f, 1 } },
|
||||
|
||||
{ //lesbian
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{213.0/255.0, 45.0/255.0, 0.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{163.0/255.0, 2.0/255.0, 98.0/255.0, 0}
|
||||
},
|
||||
{ // lesbian
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 213.0f / 255.0f, 45.0f / 255.0f, 0.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 163.0f / 255.0f, 2.0f / 255.0f, 98.0f / 255.0f, 1 } },
|
||||
|
||||
{ //gay
|
||||
{7.0/255.0, 141.0/255.0, 112.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{123.0/255.0, 173.0/255.0, 226.0/255.0, 0},
|
||||
{61.0/255.0, 26.0/255.0, 120.0/255.0, 0}
|
||||
},
|
||||
{ // gay
|
||||
{ 7.0f / 255.0f, 141.0f / 255.0f, 112.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 123.0f / 255.0f, 173.0f / 255.0f, 226.0f / 255.0f, 1 },
|
||||
{ 61.0f / 255.0f, 26.0f / 255.0f, 120.0f / 255.0f, 1 } },
|
||||
|
||||
{ //ace
|
||||
{0.0/255.0, 0.0/255.0, 0.0/255.0, 0},
|
||||
{163.0/255.0, 163.0/255.0, 163.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{128.0/255.0, 0.0/255.0, 128.0/255.0, 0}
|
||||
},
|
||||
{ // ace
|
||||
{ 0.0f / 255.0f, 0.0f / 255.0f, 0.0f / 255.0f, 1 },
|
||||
{ 163.0f / 255.0f, 163.0f / 255.0f, 163.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 128.0f / 255.0f, 0.0f / 255.0f, 128.0f / 255.0f, 1 } },
|
||||
|
||||
{ //br
|
||||
{0.0/255.0, 151.0/255.0, 57.0/255.0, 0},
|
||||
{254.0/255.0, 221.0/255.0, 0.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{1.0/255.0, 33.0/255.0, 105.0/255.0, 0}
|
||||
},
|
||||
{ // br
|
||||
{ 0.0f / 255.0f, 151.0f / 255.0f, 57.0f / 255.0f, 1 },
|
||||
{ 254.0f / 255.0f, 221.0f / 255.0f, 0.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 1.0f / 255.0f, 33.0f / 255.0f, 105.0f / 255.0f, 1 } },
|
||||
|
||||
{ //it
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{0.0/255.0, 140.0/255.0, 69.0/255.0, 0},
|
||||
{255.0/255.0, 255.0/255.0, 255.0/255.0, 0},
|
||||
{205.0/255.0, 33.0/255.0, 42.0/255.0, 0}
|
||||
}
|
||||
{ // it
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 0.0f / 255.0f, 140.0f / 255.0f, 69.0f / 255.0f, 1 },
|
||||
{ 255.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1 },
|
||||
{ 205.0f / 255.0f, 33.0f / 255.0f, 42.0f / 255.0f, 1 } }
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ const std::vector<Dialog> dialogs = { { // 0
|
||||
{ "Our way. Our history.", -3, -1 },
|
||||
} } };
|
||||
|
||||
static void ConfigurationChanged() {
|
||||
static void OnConfigurationChanged() {
|
||||
COND_ID_HOOK(OnActorInit, ACTOR_BOSS_GANON, CVarGetInteger(CVAR("GanonDatingSim"), 0), [](void* actorRef) {
|
||||
dialogIndex = 0;
|
||||
affection = 0;
|
||||
@@ -121,18 +121,15 @@ static void ConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
//if (UIWidgets::EnhancementCheckbox("Ganon Dating Sim", CVAR("GanonDatingSim"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Prior to fighting him at the top of his Castle, you make an attempt to convince Ganon to join you instead.");
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Ganon Dating Sim", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("GanonDatingSim"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Prior to fighting him at the top of his Castle, you make an "
|
||||
"attempt to convince Ganon to join you instead."));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
ConfigurationChanged();
|
||||
// #endregion
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -113,49 +113,45 @@ void SpawnShinyReward(Actor* actor) {
|
||||
}
|
||||
|
||||
void RegisterShiny() {
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>([](void* refActor) {
|
||||
COND_HOOK(OnActorInit, CVarGetInteger(CVAR("Shiny.Enabled"), 0), [](void* refActor) {
|
||||
Actor* actor = static_cast<Actor*>(refActor);
|
||||
if (CVarGetInteger(CVAR("Shiny.Enabled"), 0) && CanBeShiny(actor) &&
|
||||
Rand_ZeroOne() < (1.0f / (s32)CVarGetInteger(CVAR("Shiny.Chance"), 8192))) {
|
||||
if (CanBeShiny(actor) && Rand_ZeroOne() < (1.0f / (s32)CVarGetInteger(CVAR("Shiny.Chance"), 8192))) {
|
||||
ApplyShinyness(actor);
|
||||
}
|
||||
});
|
||||
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnEnemyDefeat>([](void* refActor) {
|
||||
COND_HOOK(OnEnemyDefeat, CVarGetInteger(CVAR("Shiny.Enabled"), 0), [](void* refActor) {
|
||||
Actor* actor = static_cast<Actor*>(refActor);
|
||||
if (CVarGetInteger(CVAR("Shiny.Enabled"), 0) && actor->isShiny) {
|
||||
if (actor->isShiny) {
|
||||
SpawnShinyReward(actor);
|
||||
}
|
||||
});
|
||||
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorDraw>([](void* refActor) {
|
||||
COND_HOOK(OnActorDraw, CVarGetInteger(CVAR("Shiny.Enabled"), 0), [](void* refActor) {
|
||||
Actor* actor = static_cast<Actor*>(refActor);
|
||||
if (CVarGetInteger(CVAR("Shiny.Enabled"), 0) && actor->isShiny) {
|
||||
if (actor->isShiny) {
|
||||
RenderShines(actor);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ShinyDrawImGui() {
|
||||
//UIWidgets::PaddedEnhancementCheckbox("Enable Shiny Enemies", CVAR("Shiny.Enabled"), true, false);
|
||||
//UIWidgets::Tooltip("Allows enemies to be shiny.\nShiny enemies are 25% bigger and have 4 times the health but drop "
|
||||
// "the equivalent of a gold rupee upon death");
|
||||
|
||||
//if (CVarGetInteger(CVAR("Shiny.Enabled"), 0)) {
|
||||
// UIWidgets::PaddedEnhancementSliderInt("Shiny Chance: %d", "##ShinyChance", CVAR("Shiny.Chance"), 1, 8192, "", 8192, true, true, false, false, "");
|
||||
// UIWidgets::Tooltip("The chance for an enemy to be shiny is 1 / Shiny Chance");
|
||||
//}
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
static void DrawMenu() {
|
||||
ImGui::SeparatorText(AUTHOR);
|
||||
ShinyDrawImGui();
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
SohGui::mSohMenu->AddWidget(path, "Enable Shiny Enemies", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Shiny.Enabled"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Allows enemies to be shiny.\nShiny enemies are 25% bigger and have 4 times the health but drop "
|
||||
"the equivalent of a gold rupee upon death"));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Shiny Chance: %d", WIDGET_CVAR_SLIDER_INT)
|
||||
.CVar(CVAR("OrnExch.Amount"))
|
||||
.PreFunc([](WidgetInfo& info) { info.options.get()->disabled = !CVarGetInteger(CVAR("Shiny.Enabled"), 0); })
|
||||
.Options(UIWidgets::IntSliderOptions().DefaultValue(8192).Min(1).Max(8192).Tooltip(
|
||||
"The chance for an enemy to be shiny is 1 / {Shiny Chance}"));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
RegisterShiny();
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(RegisterShiny);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
@@ -105,23 +105,25 @@ static void SpawnIcebergs() {
|
||||
}
|
||||
|
||||
const s16 entrances[] = {
|
||||
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1, 0x0037, 0x0205,
|
||||
0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447, 0x009C, 0x033C, 0x00C9, 0x026A,
|
||||
0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E, 0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2,
|
||||
0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349, 0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D,
|
||||
0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4, 0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD,
|
||||
0x00B7, 0x0201, 0x003B, 0x0463, 0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394,
|
||||
0x0272, 0x0211, 0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
|
||||
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809, 0x070A, 0x080A,
|
||||
0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711, 0x0811, 0x0712, 0x0812,
|
||||
0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718, 0x0818, 0x0719, 0x0819, 0x081A,
|
||||
0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F, 0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361,
|
||||
0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286, 0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE,
|
||||
0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD, 0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D,
|
||||
0x0130, 0x03AC, 0x0123, 0x0365, 0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9,
|
||||
0x0246, 0x01C1, 0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
|
||||
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417, 0x0423, 0x008D,
|
||||
0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
|
||||
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1,
|
||||
0x0037, 0x0205, 0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447,
|
||||
0x009C, 0x033C, 0x00C9, 0x026A, 0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E,
|
||||
0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2, 0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349,
|
||||
0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D, 0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4,
|
||||
0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD, 0x00B7, 0x0201, 0x003B, 0x0463,
|
||||
0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394, 0x0272, 0x0211,
|
||||
0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
|
||||
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809,
|
||||
0x070A, 0x080A, 0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711,
|
||||
0x0811, 0x0712, 0x0812, 0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718,
|
||||
0x0818, 0x0719, 0x0819, 0x081A, 0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F,
|
||||
0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361, 0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286,
|
||||
0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE, 0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD,
|
||||
0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D, 0x0130, 0x03AC, 0x0123, 0x0365,
|
||||
0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9, 0x0246, 0x01C1,
|
||||
0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
|
||||
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417,
|
||||
0x0423, 0x008D, 0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
|
||||
};
|
||||
|
||||
static void RandomGrotto_WaitOpen(DoorAna* doorAna, PlayState* play) {
|
||||
@@ -146,11 +148,9 @@ static void RandomGrotto_WaitOpen(DoorAna* doorAna, PlayState* play) {
|
||||
}
|
||||
|
||||
static void SpawnRandomGrotto() {
|
||||
if (
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS
|
||||
) {
|
||||
if (gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT ||
|
||||
gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ static void SpawnRandomGrotto() {
|
||||
}
|
||||
}
|
||||
|
||||
static void ConfigurationChanged() {
|
||||
static void OnConfigurationChanged() {
|
||||
COND_HOOK(OnSceneSpawnActors, CVarGetInteger(CVAR("Snowballs"), 0), SpawnSnowballs);
|
||||
COND_HOOK(OnPlayerUpdate, CVarGetInteger(CVAR("SuperBonk"), 0), []() {
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
@@ -201,30 +201,26 @@ static void ConfigurationChanged() {
|
||||
COND_HOOK(OnSceneSpawnActors, CVarGetInteger(CVAR("DownTheRabbitHole"), 0), SpawnRandomGrotto);
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
|
||||
//if (UIWidgets::EnhancementCheckbox("Snowballs", CVAR("Snowballs"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Rogue snowballs will spawn in Hyrule Field and Kakariko Village.");
|
||||
//if (UIWidgets::EnhancementCheckbox("Lake Hylia Icebergs", CVAR("Icebergs"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Icebergs will spawn in Lake Hylia.");
|
||||
//if (UIWidgets::EnhancementCheckbox("Down the Rabbit Hole", CVAR("DownTheRabbitHole"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Random grottos will spawn throughout Hyrule. Who knows where they will take you?");
|
||||
//if (UIWidgets::EnhancementCheckbox("Super Bonk", CVAR("SuperBonk"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
SohGui::mSohMenu->AddWidget(path, "Snowballs", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Snowballs"))
|
||||
.Options(
|
||||
UIWidgets::CheckboxOptions().Tooltip("Rogue snowballs will spawn in Hyrule Field and Kakariko Village."));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Lake Hylia Icebergs", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("Icebergs"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Icebergs will spawn in Lake Hylia."));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Down the Rabbit Hole", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("DownTheRabbitHole"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Random grottos will spawn throughout Hyrule. Who knows where they will take you?"));
|
||||
|
||||
SohGui::mSohMenu->AddWidget(path, "Super Bonk", WIDGET_CVAR_CHECKBOX).CVar(CVAR("SuperBonk"));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
ConfigurationChanged();
|
||||
// #endregion
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -13,7 +13,7 @@ extern "C" {
|
||||
extern PlayState* gPlayState;
|
||||
}
|
||||
|
||||
static void ConfigurationChanged() {
|
||||
static void OnConfigurationChanged() {
|
||||
COND_ID_HOOK(OnOpenText, 0x406B, IS_RANDO, [](u16* textId, bool* loadFromMessageTable) {
|
||||
if (gPlayState->sceneNum != SCENE_KAKARIKO_VILLAGE) {
|
||||
return;
|
||||
@@ -35,15 +35,7 @@ static void ConfigurationChanged() {
|
||||
messageEntry.LoadIntoFont();
|
||||
*loadFromMessageTable = false;
|
||||
});
|
||||
COND_HOOK(OnLoadGame, true, [](int16_t fileNum) { OnConfigurationChanged(); });
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
ConfigurationChanged();
|
||||
// #endregion
|
||||
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnLoadGame>(
|
||||
[](int16_t fileNum) { ConfigurationChanged(); });
|
||||
}
|
||||
|
||||
static Holiday holiday([]() {}, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
|
||||
@@ -14,7 +14,7 @@ extern PlayState* gPlayState;
|
||||
|
||||
uint8_t rocsUseCount = 0;
|
||||
|
||||
static void ConfigurationChanged() {
|
||||
static void OnConfigurationChanged() {
|
||||
|
||||
COND_HOOK(OnPlayerUpdate, CVarGetInteger(CVAR("RocsFeather"), 0), []() {
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
@@ -58,19 +58,15 @@ static void ConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
|
||||
//if (UIWidgets::EnhancementCheckbox("Roc's Feather", CVAR("RocsFeather"))) {
|
||||
// ConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Using Nayru's Love will now act as Roc's Feather instead! No magic required.");
|
||||
SohGui::mSohMenu->AddWidget(path, "Roc's Feather", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("RocsFeather"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip(
|
||||
"Using Nayru's Love will now act as Roc's Feather instead! No magic required."));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
ConfigurationChanged();
|
||||
// #endregion
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -115,20 +115,13 @@ static void OnConfigurationChanged() {
|
||||
});
|
||||
}
|
||||
|
||||
static void DrawMenu() {
|
||||
//ImGui::SeparatorText(AUTHOR);
|
||||
//if (UIWidgets::EnhancementCheckbox("Bomb Arrows", CVAR("BombArrows.Enabled"))) {
|
||||
// OnConfigurationChanged();
|
||||
//}
|
||||
//UIWidgets::Tooltip("Equip bombs over an already equipped Bow to shoot bomb arrows");
|
||||
static void RegisterMenu() {
|
||||
WidgetPath path = { "Holiday", AUTHOR, SECTION_COLUMN_1 };
|
||||
SohGui::mSohMenu->AddSidebarEntry("Holiday", AUTHOR, SECTION_COLUMN_2);
|
||||
SohGui::mSohMenu->AddWidget(path, "Bomb Arrows", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR("BombArrows.Enabled"))
|
||||
.Options(UIWidgets::CheckboxOptions().Tooltip("Equip bombs over an already equipped Bow to shoot bomb arrows"));
|
||||
}
|
||||
|
||||
static void RegisterMod() {
|
||||
// #region Leave this alone unless you know what you are doing
|
||||
OnConfigurationChanged();
|
||||
// #endregion
|
||||
|
||||
CVarSetInteger(CVAR("BombArrows.Active"), 0);
|
||||
}
|
||||
|
||||
static Holiday holiday(DrawMenu, RegisterMod);
|
||||
static RegisterShipInitFunc initFunc(OnConfigurationChanged);
|
||||
static RegisterMenuInitFunc menuInitFunc(RegisterMenu);
|
||||
|
||||
@@ -137,8 +137,8 @@ static void TimeDisplayGetTimer(uint32_t timeID) {
|
||||
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("NAVI_TIMER");
|
||||
break;
|
||||
case DISPLAY_FRED_QUEST:
|
||||
timeDisplayTime = std::to_string(FredsQuestWoodOnHand) + "/" + std::to_string(FredsQuestWoodCollected) + "/" +
|
||||
std::to_string(CVarGetInteger("gHoliday.Fredomato.FredsQuest.WoodNeeded", 300));
|
||||
timeDisplayTime = std::to_string(FredsQuestWoodOnHand) + "/" + std::to_string(FredsQuestWoodCollected) +
|
||||
"/" + std::to_string(CVarGetInteger("gHoliday.Fredomato.FredsQuest.WoodNeeded", 300));
|
||||
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("ITEM_STICK");
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -521,7 +521,10 @@ void ResetPositionAll() {
|
||||
|
||||
int hue = 0;
|
||||
|
||||
#define CVAR_LL(v) "gHoliday." "LL" "." v
|
||||
#define CVAR_LL(v) \
|
||||
"gHoliday." \
|
||||
"LL" \
|
||||
"." v
|
||||
|
||||
// Runs every frame to update rainbow hue, a potential future optimization is to only run this a once or twice a second
|
||||
// and increase the speed of the rainbow hue rotation.
|
||||
@@ -534,13 +537,12 @@ void CosmeticsUpdateTick() {
|
||||
Color_RGBA8 newColor;
|
||||
|
||||
newColor.a = 255;
|
||||
|
||||
|
||||
if (!CVarGetInteger(CVAR_LL("lEnableCustomRainbows"), 0)) {
|
||||
newColor.r = static_cast<uint8_t>(sin(frequency * (hue + index) + 0) * 127) + 128;
|
||||
newColor.g = static_cast<uint8_t>(sin(frequency * (hue + index) + (2 * M_PI / 3)) * 127) + 128;
|
||||
newColor.b = static_cast<uint8_t>(sin(frequency * (hue + index) + (4 * M_PI / 3)) * 127) + 128;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
Color_RGBA8 customColorZero = CVarGetColor(CVAR_LL("lCustomRainbow1"), {});
|
||||
Color_RGBA8 customColorOne = CVarGetColor(CVAR_LL("lCustomRainbow2"), {});
|
||||
Color_RGBA8 customColorMinusZero = CVarGetColor(CVAR_LL("lCustomRainbow3"), {});
|
||||
@@ -551,25 +553,25 @@ void CosmeticsUpdateTick() {
|
||||
bool quadrant3 = hue >= (360 * rainbowSpeed) / 2 && hue <= (360 * rainbowSpeed) * 3 / 4;
|
||||
bool quadrant4 = hue >= (360 * rainbowSpeed) * 3 / 4;
|
||||
|
||||
if (quadrant1) { //zero to one
|
||||
if (quadrant1) { // zero to one
|
||||
newColor.r = sinangle * (customColorOne.r - customColorZero.r) + customColorZero.r;
|
||||
newColor.g = sinangle * (customColorOne.g - customColorZero.g) + customColorZero.g;
|
||||
newColor.b = sinangle * (customColorOne.b - customColorZero.b) + customColorZero.b;
|
||||
} else if (quadrant2) { //one to zero
|
||||
} else if (quadrant2) { // one to zero
|
||||
newColor.r = sinangle * (customColorOne.r - customColorMinusZero.r) + customColorMinusZero.r;
|
||||
newColor.g = sinangle * (customColorOne.g - customColorMinusZero.g) + customColorMinusZero.g;
|
||||
newColor.b = sinangle * (customColorOne.b - customColorMinusZero.b) + customColorMinusZero.b;
|
||||
} else if (quadrant3) { //zero to minus one
|
||||
} else if (quadrant3) { // zero to minus one
|
||||
newColor.r = -sinangle * (customColorMinusOne.r - customColorMinusZero.r) + customColorMinusZero.r;
|
||||
newColor.g = -sinangle * (customColorMinusOne.g - customColorMinusZero.g) + customColorMinusZero.g;
|
||||
newColor.b = -sinangle * (customColorMinusOne.b - customColorMinusZero.b) + customColorMinusZero.b;
|
||||
} else if (quadrant4) { //minus one to zero
|
||||
} else if (quadrant4) { // minus one to zero
|
||||
newColor.r = -sinangle * (customColorMinusOne.r - customColorZero.r) + customColorZero.r;
|
||||
newColor.g = -sinangle * (customColorMinusOne.g - customColorZero.g) + customColorZero.g;
|
||||
newColor.b = -sinangle * (customColorMinusOne.b - customColorZero.b) + customColorZero.b;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// For alpha supported options, retain the last set alpha instead of overwriting
|
||||
if (cosmeticOption.supportsAlpha) {
|
||||
newColor.a = static_cast<uint8_t>(cosmeticOption.currentColor.w * 255.0f);
|
||||
|
||||
@@ -658,5 +658,4 @@ void InitMods() {
|
||||
RegisterPatchHandHandler();
|
||||
RegisterHurtContainerModeHandler();
|
||||
RandoKaleido_RegisterHooks();
|
||||
RegisterHoliday();
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ void Anchor::HandlePacket_SetCheckStatus(nlohmann::json payload) {
|
||||
RandomizerCheck rc = payload["rc"].get<RandomizerCheck>();
|
||||
RandomizerCheckStatus status = payload["status"].get<RandomizerCheckStatus>();
|
||||
bool skipped = payload["skipped"].get<bool>();
|
||||
|
||||
|
||||
isResultOfHandling = true;
|
||||
|
||||
if (randoContext->GetItemLocation(rc)->GetCheckStatus() != status) {
|
||||
|
||||
@@ -86,6 +86,7 @@ void SohMenu::InitElement() {
|
||||
AddMenuSettings();
|
||||
AddMenuEnhancements();
|
||||
AddMenuRandomizer();
|
||||
AddMenuEntry("Holiday", CVAR_SETTING("Menu.HolidaySidebarSection"));
|
||||
AddMenuNetwork();
|
||||
AddMenuDevTools();
|
||||
|
||||
|
||||
@@ -16,8 +16,9 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/Enhancements/Holiday/Archez.h"
|
||||
|
||||
#define FLAGS \
|
||||
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
|
||||
#define FLAGS \
|
||||
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
|
||||
ACTOR_FLAG_DRAW_CULLING_DISABLED)
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ THROW_NORMAL,
|
||||
|
||||
@@ -77,7 +77,8 @@ void EnChristmasTree_Talk(EnChristmasTree* this, PlayState* play) {
|
||||
if (dialogState != TEXT_STATE_CHOICE) {
|
||||
if ((dialogState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { // advanced final textbox
|
||||
// Teleport to credits when goal is reached.
|
||||
if (gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected >= Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED)) {
|
||||
if (gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected >=
|
||||
Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED)) {
|
||||
gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_TRIFORCE_COMPLETED] = GAMEPLAYSTAT_TOTAL_TIME;
|
||||
gSaveContext.ship.stats.gameComplete = 1;
|
||||
Play_PerformSave(play);
|
||||
|
||||
@@ -371,8 +371,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
|
||||
dropsSpawnPt.y += 200.0f;
|
||||
if (HandleTreeBonk(&this->actor)) {
|
||||
// no-op
|
||||
} else
|
||||
if (GameInteractor_Should(VB_TREE_DROP_ITEM, true, this)) {
|
||||
} else if (GameInteractor_Should(VB_TREE_DROP_ITEM, true, this)) {
|
||||
if ((this->unk_14C >= 0) && (this->unk_14C < 0x64)) {
|
||||
if (GameInteractor_Should(VB_TREE_DROP_COLLECTIBLE, true, this)) {
|
||||
Item_DropCollectibleRandom(play, &this->actor, &dropsSpawnPt, this->unk_14C << 4);
|
||||
@@ -381,7 +380,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
|
||||
this->actor.home.rot.z &= 0x1FFF;
|
||||
this->actor.home.rot.z |= 0xE000;
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, dropsSpawnPt.x, dropsSpawnPt.y, dropsSpawnPt.z, 0,
|
||||
this->actor.world.rot.y, 0, this->actor.home.rot.z, true);
|
||||
this->actor.world.rot.y, 0, this->actor.home.rot.z, true);
|
||||
this->actor.home.rot.z = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user