mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-23 06:35:33 -07:00
Merge branch 'testing-out-item-replacement' into melon-randomizer
This commit is contained in:
commit
96ff3f8a23
6 changed files with 312 additions and 39 deletions
|
@ -105,8 +105,7 @@ static void set_fullscreen(bool on, bool call_callback) {
|
||||||
window_width = mode.w;
|
window_width = mode.w;
|
||||||
window_height = mode.h;
|
window_height = mode.h;
|
||||||
SDL_ShowCursor(false);
|
SDL_ShowCursor(false);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
window_width = DESIRED_SCREEN_WIDTH;
|
window_width = DESIRED_SCREEN_WIDTH;
|
||||||
window_height = DESIRED_SCREEN_HEIGHT;
|
window_height = DESIRED_SCREEN_HEIGHT;
|
||||||
}
|
}
|
||||||
|
@ -210,8 +209,7 @@ static void gfx_sdl_get_dimensions(uint32_t* width, uint32_t* height) {
|
||||||
static int translate_scancode(int scancode) {
|
static int translate_scancode(int scancode) {
|
||||||
if (scancode < 512) {
|
if (scancode < 512) {
|
||||||
return inverted_scancode_table[scancode];
|
return inverted_scancode_table[scancode];
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,6 +258,7 @@ static void gfx_sdl_handle_events(void) {
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
|
SDL_Quit(); // bandaid fix for linux window closing issue
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -448,11 +448,17 @@ namespace SohImGui {
|
||||||
EnhancementRadioButton("German", "gLanguages", 1);
|
EnhancementRadioButton("German", "gLanguages", 1);
|
||||||
EnhancementRadioButton("French", "gLanguages", 2);
|
EnhancementRadioButton("French", "gLanguages", 2);
|
||||||
*/
|
*/
|
||||||
|
std::string make_invisible = "##";
|
||||||
|
make_invisible += text;
|
||||||
|
make_invisible += cvarName;
|
||||||
|
|
||||||
int val = CVar_GetS32(cvarName, 0);
|
int val = CVar_GetS32(cvarName, 0);
|
||||||
if (ImGui::RadioButton(text, id == val)) {
|
if (ImGui::RadioButton(make_invisible.c_str(), id == val)) {
|
||||||
CVar_SetS32(cvarName, id);
|
CVar_SetS32(cvarName, id);
|
||||||
needs_save = true;
|
needs_save = true;
|
||||||
}
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text("%s", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnhancementCheckbox(const char* text, const char* cvarName)
|
void EnhancementCheckbox(const char* text, const char* cvarName)
|
||||||
|
@ -856,9 +862,48 @@ namespace SohImGui {
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Graphics"))
|
if (ImGui::BeginMenu("Graphics"))
|
||||||
{
|
{
|
||||||
|
if (ImGui::BeginMenu("Animated Link in Pause Menu")) {
|
||||||
|
ImGui::Text("Rotation");
|
||||||
|
EnhancementRadioButton("Disabled", "gPauseLiveRotation", 0);
|
||||||
|
EnhancementRadioButton("Rotate Link with D-pad", "gPauseLiveRotation", 1);
|
||||||
|
Tooltip("Allow you to rotate Link on the Equipment menu with the DPAD\nUse DPAD-Up or DPAD-Down to reset Link's rotation");
|
||||||
|
EnhancementRadioButton("Rotate Link with C-buttons", "gPauseLiveRotation", 2);
|
||||||
|
Tooltip("Allow you to rotate Link on the Equipment menu with the C-buttons\nUse C-Up or C-Down to reset Link's rotation");
|
||||||
|
|
||||||
|
if (CVar_GetS32("gPauseLiveRotation", 0) != 0) {
|
||||||
|
EnhancementSliderInt("Rotation Speed: %d", "##MinRotationSpeed", "gPauseLiveLinkRotationSpeed", 1, 20, "");
|
||||||
|
}
|
||||||
|
ImGui::Separator();
|
||||||
|
ImGui::Text("Static loop");
|
||||||
|
EnhancementRadioButton("Disabled", "gPauseLiveLink", 0);
|
||||||
|
EnhancementRadioButton("Idle (standing)", "gPauseLiveLink", 1);
|
||||||
|
EnhancementRadioButton("Idle (look around)", "gPauseLiveLink", 2);
|
||||||
|
EnhancementRadioButton("Idle (belt)", "gPauseLiveLink", 3);
|
||||||
|
EnhancementRadioButton("Idle (shield)", "gPauseLiveLink", 4);
|
||||||
|
EnhancementRadioButton("Idle (test sword)", "gPauseLiveLink", 5);
|
||||||
|
EnhancementRadioButton("Idle (yawn)", "gPauseLiveLink", 6);
|
||||||
|
EnhancementRadioButton("Battle Stance", "gPauseLiveLink", 7);
|
||||||
|
EnhancementRadioButton("Walking (no shield)", "gPauseLiveLink", 8);
|
||||||
|
EnhancementRadioButton("Walking (holding shield)", "gPauseLiveLink", 9);
|
||||||
|
EnhancementRadioButton("Running (no shield)", "gPauseLiveLink", 10);
|
||||||
|
EnhancementRadioButton("Running (holding shield)", "gPauseLiveLink", 11);
|
||||||
|
EnhancementRadioButton("Hand on hip", "gPauseLiveLink", 12);
|
||||||
|
EnhancementRadioButton("Spin attack charge", "gPauseLiveLink", 13);
|
||||||
|
EnhancementRadioButton("Look at hand", "gPauseLiveLink", 14);
|
||||||
|
ImGui::Separator();
|
||||||
|
ImGui::Text("Randomize");
|
||||||
|
EnhancementRadioButton("Random", "gPauseLiveLink", 15);
|
||||||
|
Tooltip("Randomize the animation played each time you open the menu");
|
||||||
|
EnhancementRadioButton("Random cycle", "gPauseLiveLink", 16);
|
||||||
|
Tooltip("andomize the animation played on hte menu after a certain time");
|
||||||
|
if (CVar_GetS32("gPauseLiveLink", 0) >= 16) {
|
||||||
|
EnhancementSliderInt("Frame to wait: %d", "##MinFrameCount", "gMinFrameCount", 1, 1000, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
EnhancementCheckbox("N64 Mode", "gN64Mode");
|
EnhancementCheckbox("N64 Mode", "gN64Mode");
|
||||||
Tooltip("Sets aspect ratio to 4:3 and lowers resolution to 240p, the N64's native resolution");
|
Tooltip("Sets aspect ratio to 4:3 and lowers resolution to 240p, the N64's native resolution");
|
||||||
EnhancementCheckbox("Animated Link in Pause Menu", "gPauseLiveLink");
|
|
||||||
EnhancementCheckbox("Enable 3D Dropped items", "gNewDrops");
|
EnhancementCheckbox("Enable 3D Dropped items", "gNewDrops");
|
||||||
EnhancementCheckbox("Dynamic Wallet Icon", "gDynamicWalletIcon");
|
EnhancementCheckbox("Dynamic Wallet Icon", "gDynamicWalletIcon");
|
||||||
Tooltip("Changes the rupee in the wallet icon to match the wallet size you currently have");
|
Tooltip("Changes the rupee in the wallet icon to match the wallet size you currently have");
|
||||||
|
|
|
@ -921,6 +921,29 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId)
|
||||||
case SMALL_KEY_THIEVES_HIDEOUT:
|
case SMALL_KEY_THIEVES_HIDEOUT:
|
||||||
case SMALL_KEY_WATER_TEMPLE:
|
case SMALL_KEY_WATER_TEMPLE:
|
||||||
return GI_KEY_SMALL;
|
return GI_KEY_SMALL;
|
||||||
|
// todo implement dungeon-specific maps/compasses
|
||||||
|
case MAP_DEKU_TREE:
|
||||||
|
case MAP_DODONGOS_CAVERN:
|
||||||
|
case MAP_JABU_JABUS_BELLY:
|
||||||
|
case MAP_FOREST_TEMPLE:
|
||||||
|
case MAP_FIRE_TEMPLE:
|
||||||
|
case MAP_WATER_TEMPLE:
|
||||||
|
case MAP_SPIRIT_TEMPLE:
|
||||||
|
case MAP_SHADOW_TEMPLE:
|
||||||
|
case MAP_BOTTOM_OF_THE_WELL:
|
||||||
|
case MAP_ICE_CAVERN:
|
||||||
|
return GI_MAP;
|
||||||
|
case COMPASS_DEKU_TREE:
|
||||||
|
case COMPASS_DODONGOS_CAVERN:
|
||||||
|
case COMPASS_JABU_JABUS_BELLY:
|
||||||
|
case COMPASS_FOREST_TEMPLE:
|
||||||
|
case COMPASS_FIRE_TEMPLE:
|
||||||
|
case COMPASS_WATER_TEMPLE:
|
||||||
|
case COMPASS_SPIRIT_TEMPLE:
|
||||||
|
case COMPASS_SHADOW_TEMPLE:
|
||||||
|
case COMPASS_BOTTOM_OF_THE_WELL:
|
||||||
|
case COMPASS_ICE_CAVERN:
|
||||||
|
return GI_COMPASS;
|
||||||
case MAGIC_METER:
|
case MAGIC_METER:
|
||||||
switch (gSaveContext.magicLevel) {
|
switch (gSaveContext.magicLevel) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1136,6 +1159,8 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
return DMC_UPPER_GROTTO_CHEST;
|
return DMC_UPPER_GROTTO_CHEST;
|
||||||
case 22985:
|
case 22985:
|
||||||
return ZR_OPEN_GROTTO_CHEST;
|
return ZR_OPEN_GROTTO_CHEST;
|
||||||
|
case 262:
|
||||||
|
return HF_TEKTITE_GROTTO_FREESTANDING_POH;
|
||||||
}
|
}
|
||||||
case 64:
|
case 64:
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
|
@ -1153,9 +1178,15 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
return GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST;
|
return GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST;
|
||||||
}
|
}
|
||||||
case 72:
|
case 72:
|
||||||
|
// todo make sure dampe gives the PoH when the chest is opened
|
||||||
|
// default logic seems to be give PoH when hookshot in inventory
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
case 4352:
|
case 4352:
|
||||||
return GRAVEYARD_HOOKSHOT_CHEST;
|
return GRAVEYARD_HOOKSHOT_CHEST;
|
||||||
|
case 262:
|
||||||
|
return KAK_WINDMILL_FREESTANDING_POH;
|
||||||
|
case 1798:
|
||||||
|
return GRAVEYARD_DAMPE_RACE_FREESTANDING_POH;
|
||||||
}
|
}
|
||||||
case 96:
|
case 96:
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
|
@ -1172,6 +1203,8 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
return GC_MAZE_RIGHT_CHEST;
|
return GC_MAZE_RIGHT_CHEST;
|
||||||
case 23202:
|
case 23202:
|
||||||
return GC_MAZE_CENTER_CHEST;
|
return GC_MAZE_CENTER_CHEST;
|
||||||
|
case 7942:
|
||||||
|
return GC_POT_FREESTANDING_POH;
|
||||||
}
|
}
|
||||||
case 88:
|
case 88:
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
|
@ -1182,6 +1215,10 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
case 23200:
|
case 23200:
|
||||||
return GV_CHEST;
|
return GV_CHEST;
|
||||||
|
case 262:
|
||||||
|
return GV_WATERFALL_FREESTANDING_POH;
|
||||||
|
case 518:
|
||||||
|
return GV_CRATE_FREESTANDING_POH;
|
||||||
}
|
}
|
||||||
case 93:
|
case 93:
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
|
@ -1422,6 +1459,8 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
return SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST;
|
return SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST;
|
||||||
case 13673:
|
case 13673:
|
||||||
return SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST;
|
return SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST;
|
||||||
|
case 3334:
|
||||||
|
return COLOSSUS_FREESTANDING_POH;
|
||||||
}
|
}
|
||||||
case 9:
|
case 9:
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
|
@ -1431,6 +1470,8 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
return ICE_CAVERN_COMPASS_CHEST;
|
return ICE_CAVERN_COMPASS_CHEST;
|
||||||
case 5570:
|
case 5570:
|
||||||
return ICE_CAVERN_IRON_BOOTS_CHEST;
|
return ICE_CAVERN_IRON_BOOTS_CHEST;
|
||||||
|
case 262:
|
||||||
|
return ICE_CAVERN_FREESTANDING_POH;
|
||||||
}
|
}
|
||||||
case 11:
|
case 11:
|
||||||
switch(actorParams) {
|
switch(actorParams) {
|
||||||
|
@ -1477,6 +1518,78 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
case 2860:
|
case 2860:
|
||||||
return GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST;
|
return GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST;
|
||||||
}
|
}
|
||||||
|
case 13:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 30857:
|
||||||
|
return GANONS_CASTLE_FOREST_TRIAL_CHEST;
|
||||||
|
case 24455:
|
||||||
|
return GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST;
|
||||||
|
case 22790:
|
||||||
|
return GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST;
|
||||||
|
case 22664:
|
||||||
|
return GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST;
|
||||||
|
case 14021:
|
||||||
|
return GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST;
|
||||||
|
case 22668:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST;
|
||||||
|
case 24459:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST;
|
||||||
|
case 22797:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST;
|
||||||
|
case 24462:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST;
|
||||||
|
case 22890:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST;
|
||||||
|
case 24463:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST;
|
||||||
|
case 30800:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST;
|
||||||
|
case -30639:
|
||||||
|
return GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST;
|
||||||
|
case -29326:
|
||||||
|
return GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST;
|
||||||
|
case 26964:
|
||||||
|
return GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST;
|
||||||
|
}
|
||||||
|
case 10:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 10219:
|
||||||
|
return GANONS_TOWER_BOSS_KEY_CHEST;
|
||||||
|
}
|
||||||
|
case 87:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 7686:
|
||||||
|
return LH_FREESTANDING_POH;
|
||||||
|
}
|
||||||
|
case 76:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 262:
|
||||||
|
return LLR_FREESTANDING_POH;
|
||||||
|
}
|
||||||
|
case 55:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 262:
|
||||||
|
return KAK_IMPAS_HOUSE_FREESTANDING_POH;
|
||||||
|
}
|
||||||
|
case 83:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 1030:
|
||||||
|
return GRAVEYARD_FREESTANDING_POH;
|
||||||
|
}
|
||||||
|
case 97:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 2054:
|
||||||
|
return DMC_VOLCANO_FREESTANDING_POH;
|
||||||
|
case 518:
|
||||||
|
return DMC_WALL_FREESTANDING_POH;
|
||||||
|
}
|
||||||
|
case 89:
|
||||||
|
switch(actorParams) {
|
||||||
|
case 5126:
|
||||||
|
return ZF_BOTTOM_FREESTANDING_POH;
|
||||||
|
case 262:
|
||||||
|
return ZF_ICEBERG_FREESTANDING_POH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return UNKNOWN_CHECK;
|
return UNKNOWN_CHECK;
|
||||||
|
|
|
@ -1661,26 +1661,118 @@ void func_80091A24(GlobalContext* globalCtx, void* seg04, void* seg06, SkelAnime
|
||||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_player_lib.c", 3288);
|
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_player_lib.c", 3288);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uintptr_t SelectedAnim = 0; // Current Animaiton on the menu
|
||||||
|
s16 EquipedStance; // Link's current mode (Two handed, One handed...)
|
||||||
|
s16 FrameCountSinceLastAnim = 0; // Time since last animation
|
||||||
|
s16 MinFrameCount; // Frame to wait before checking if we need to change the animation
|
||||||
|
|
||||||
void func_8009214C(GlobalContext* globalCtx, u8* segment, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, f32 scale,
|
void func_8009214C(GlobalContext* globalCtx, u8* segment, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, f32 scale,
|
||||||
s32 sword, s32 tunic, s32 shield, s32 boots) {
|
s32 sword, s32 tunic, s32 shield, s32 boots) {
|
||||||
|
Input* p1Input = &globalCtx->state.input[0];
|
||||||
Vec3f eye = { 0.0f, 0.0f, -400.0f };
|
Vec3f eye = { 0.0f, 0.0f, -400.0f };
|
||||||
Vec3f at = { 0.0f, 0.0f, 0.0f };
|
Vec3f at = { 0.0f, 0.0f, 0.0f };
|
||||||
Vec3s* destTable;
|
Vec3s* destTable;
|
||||||
Vec3s* srcTable;
|
Vec3s* srcTable;
|
||||||
s32 i;
|
s32 i;
|
||||||
|
bool canswitchrnd = false;
|
||||||
|
s16 SelectedMode = CVar_GetS32("gPauseLiveLink", 1);
|
||||||
|
MinFrameCount = CVar_GetS32("gMinFrameCount", 200);
|
||||||
|
|
||||||
gSegments[4] = VIRTUAL_TO_PHYSICAL(segment + 0x3800);
|
gSegments[4] = VIRTUAL_TO_PHYSICAL(segment + 0x3800);
|
||||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(segment + 0x8800);
|
gSegments[6] = VIRTUAL_TO_PHYSICAL(segment + 0x8800);
|
||||||
|
|
||||||
if (CVar_GetS32("gPauseLiveLink", 0) || CVar_GetS32("gPauseTriforce", 0)) {
|
uintptr_t* PauseMenuAnimSet[15][4] = {
|
||||||
uintptr_t anim = gPlayerAnim_003238; // idle
|
{ 0, 0, 0, 0 }, // 0 = none
|
||||||
|
// IDLE // Two Handed // No shield // Kid Hylian Shield
|
||||||
|
{ gPlayerAnim_003238, gPlayerAnim_002BE0, gPlayerAnim_003240, gPlayerAnim_003240 }, // Idle
|
||||||
|
{ gPlayerAnim_003200, gPlayerAnim_003200, gPlayerAnim_003200, gPlayerAnim_003200 }, // Idle look around
|
||||||
|
{ gPlayerAnim_0033E0, gPlayerAnim_0033E0, gPlayerAnim_0033E0, gPlayerAnim_0033E0 }, // Idle Belt
|
||||||
|
{ gPlayerAnim_003418, gPlayerAnim_003418, gPlayerAnim_003418, gPlayerAnim_003418 }, // Idle shield adjust
|
||||||
|
{ gPlayerAnim_003420, gPlayerAnim_003428, gPlayerAnim_003420, gPlayerAnim_003420 }, // Idle test sword
|
||||||
|
{ gPlayerAnim_0033F0, gPlayerAnim_0033F0, gPlayerAnim_0033F0, gPlayerAnim_0033F0 }, // Idle yawn
|
||||||
|
{ gPlayerAnim_0025D0, gPlayerAnim_002BD0, gPlayerAnim_0025D0, gPlayerAnim_0025D0 }, // Battle Stance
|
||||||
|
{ gPlayerAnim_003290, gPlayerAnim_002BF8, gPlayerAnim_003290, gPlayerAnim_003290 }, // Walking (No shield)
|
||||||
|
{ gPlayerAnim_003268, gPlayerAnim_002BF8, gPlayerAnim_003268, gPlayerAnim_003268 }, // Walking (Holding shield)
|
||||||
|
{ gPlayerAnim_003138, gPlayerAnim_002B40, gPlayerAnim_003138, gPlayerAnim_003138 }, // Running (No shield)
|
||||||
|
{ gPlayerAnim_003140, gPlayerAnim_002B40, gPlayerAnim_003140, gPlayerAnim_003140 }, // Running (Holding shield)
|
||||||
|
{ gPlayerAnim_0031A8, gPlayerAnim_0031A8, gPlayerAnim_0031A8, gPlayerAnim_0031A8 }, // Hand on hip
|
||||||
|
{ gPlayerAnim_002AF0, gPlayerAnim_002928, gPlayerAnim_002AF0, gPlayerAnim_002AF0 }, // Spin Charge
|
||||||
|
{ gPlayerAnim_002820, gPlayerAnim_002820, gPlayerAnim_002820, gPlayerAnim_002820 }, // Look at hand
|
||||||
|
};
|
||||||
|
s16 AnimArraySize = ARRAY_COUNT(PauseMenuAnimSet);
|
||||||
|
|
||||||
if (CUR_EQUIP_VALUE(EQUIP_SWORD) >= 3)
|
if (CVar_GetS32("gPauseLiveLink", !0) || CVar_GetS32("gPauseTriforce", 0)) {
|
||||||
anim = gPlayerAnim_002BE0; // Two Handed Anim
|
uintptr_t anim = 0; // Initialise anim
|
||||||
else if (CUR_EQUIP_VALUE(EQUIP_SHIELD) == 0)
|
|
||||||
anim = gPlayerAnim_003240;
|
if (CUR_EQUIP_VALUE(EQUIP_SWORD) >= 3) {
|
||||||
else if (CUR_EQUIP_VALUE(EQUIP_SHIELD) == 2 && LINK_AGE_IN_YEARS == YEARS_CHILD)
|
EquipedStance = 1;
|
||||||
anim = gPlayerAnim_003240;
|
} else if (CUR_EQUIP_VALUE(EQUIP_SHIELD) == 0) {
|
||||||
|
EquipedStance = 2;
|
||||||
|
} else if (CUR_EQUIP_VALUE(EQUIP_SHIELD) == 2 && LINK_AGE_IN_YEARS == YEARS_CHILD) {
|
||||||
|
EquipedStance = 3;
|
||||||
|
} else {
|
||||||
|
// Link is idle so revert to 0
|
||||||
|
EquipedStance = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SelectedMode == 16) {
|
||||||
|
// Apply Random function
|
||||||
|
s16 SwitchAtFrame = 0;
|
||||||
|
s16 CurAnimDuration = 0;
|
||||||
|
if (FrameCountSinceLastAnim == 0) {
|
||||||
|
// When opening Kaleido this will be passed one time
|
||||||
|
SelectedAnim = rand() % (AnimArraySize - 0);
|
||||||
|
if (SelectedAnim == 0) {
|
||||||
|
// prevent loading 0 that would result to a crash.
|
||||||
|
SelectedAnim = 1;
|
||||||
|
}
|
||||||
|
} else if (FrameCountSinceLastAnim >= 1) {
|
||||||
|
SwitchAtFrame = Animation_GetLastFrame(PauseMenuAnimSet[SelectedAnim][EquipedStance]);
|
||||||
|
CurAnimDuration = Animation_GetLastFrame(PauseMenuAnimSet[SelectedAnim][EquipedStance]);
|
||||||
|
if (SwitchAtFrame < MinFrameCount) {
|
||||||
|
// Animation frame count is lower than minimal wait time then we wait for another round.
|
||||||
|
// This will be looped to always add current animation time if that still lower than minimum time
|
||||||
|
while (SwitchAtFrame < MinFrameCount) {
|
||||||
|
SwitchAtFrame = SwitchAtFrame + CurAnimDuration;
|
||||||
|
}
|
||||||
|
} else if (CurAnimDuration >= MinFrameCount) {
|
||||||
|
// Since we have more (or same) animation time than min duration we set the wait time to animation
|
||||||
|
// time.
|
||||||
|
SwitchAtFrame = CurAnimDuration;
|
||||||
|
}
|
||||||
|
if (FrameCountSinceLastAnim >= SwitchAtFrame) {
|
||||||
|
SelectedAnim = rand() % (AnimArraySize - 0);
|
||||||
|
if (SelectedAnim == 0) {
|
||||||
|
// prevent loading 0 that would result to a crash.
|
||||||
|
SelectedAnim = 1;
|
||||||
|
}
|
||||||
|
FrameCountSinceLastAnim = 1;
|
||||||
|
}
|
||||||
|
anim = PauseMenuAnimSet[SelectedAnim][EquipedStance];
|
||||||
|
}
|
||||||
|
FrameCountSinceLastAnim++;
|
||||||
|
} else if (SelectedMode == 15) {
|
||||||
|
// When opening Kaleido this will be passed one time
|
||||||
|
if (FrameCountSinceLastAnim < 1) {
|
||||||
|
SelectedAnim = rand() % (AnimArraySize - 0);
|
||||||
|
FrameCountSinceLastAnim++;
|
||||||
|
if (SelectedAnim == 0) {
|
||||||
|
// prevent loading 0 that would result to a crash.
|
||||||
|
SelectedAnim = 1;
|
||||||
|
}
|
||||||
|
FrameCountSinceLastAnim = 1;
|
||||||
|
}
|
||||||
|
if (CHECK_BTN_ALL(p1Input->press.button, BTN_B) || CHECK_BTN_ALL(p1Input->press.button, BTN_START)) {
|
||||||
|
FrameCountSinceLastAnim = 0;
|
||||||
|
}
|
||||||
|
anim = PauseMenuAnimSet[SelectedAnim][EquipedStance];
|
||||||
|
} else if (SelectedMode < 16) {
|
||||||
|
// Not random so we place our CVar as SelectedAnim
|
||||||
|
SelectedAnim = SelectedMode;
|
||||||
|
anim = PauseMenuAnimSet[SelectedAnim][EquipedStance];
|
||||||
|
}
|
||||||
|
|
||||||
|
anim = PauseMenuAnimSet[SelectedAnim][EquipedStance];
|
||||||
|
|
||||||
//anim = gPlayerAnim_003428; // Use for biggoron sword?
|
//anim = gPlayerAnim_003428; // Use for biggoron sword?
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ void func_809DF778(EnCow* this, GlobalContext* globalCtx) {
|
||||||
this->actor.parent = NULL;
|
this->actor.parent = NULL;
|
||||||
this->actionFunc = func_809DF730;
|
this->actionFunc = func_809DF730;
|
||||||
} else {
|
} else {
|
||||||
func_8002F434(&this->actor, globalCtx, GID_MEDALLION_FIRE, 10000.0f, 100.0f);
|
func_8002F434(&this->actor, globalCtx, GI_MILK, 10000.0f, 100.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,11 +89,17 @@ void KaleidoScope_DrawEquipmentImage(GlobalContext* globalCtx, void* source, u32
|
||||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_kaleido_equipment.c", 122);
|
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_kaleido_equipment.c", 122);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vec3s link_kaleido_rot = { 0, 32300, 0 }; // Default rotation link face us.
|
||||||
|
|
||||||
void KaleidoScope_DrawPlayerWork(GlobalContext* globalCtx) {
|
void KaleidoScope_DrawPlayerWork(GlobalContext* globalCtx) {
|
||||||
PauseContext* pauseCtx = &globalCtx->pauseCtx;
|
PauseContext* pauseCtx = &globalCtx->pauseCtx;
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
Vec3s rot;
|
//Vec3s rot; // Removed for not having it use din the function
|
||||||
f32 scale;
|
f32 scale;
|
||||||
|
Input* input = &globalCtx->state.input[0];
|
||||||
|
s16 RotationSpeed = 150 * CVar_GetS32("gPauseLiveLinkRotationSpeed", 0);
|
||||||
|
bool AllowCRotation = (CVar_GetS32("gPauseLiveLinkRotation", 0) == 2) ? true : false;
|
||||||
|
bool AllowDPadRotation = (CVar_GetS32("gPauseLiveLinkRotation", 0) == 1) ? true : false;
|
||||||
|
|
||||||
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
|
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
|
||||||
pos.x = 2.0f;
|
pos.x = 2.0f;
|
||||||
|
@ -112,11 +118,29 @@ void KaleidoScope_DrawPlayerWork(GlobalContext* globalCtx) {
|
||||||
scale = 0.047f;
|
scale = 0.047f;
|
||||||
}
|
}
|
||||||
|
|
||||||
rot.y = 32300;
|
link_kaleido_rot.x = link_kaleido_rot.z = 0;
|
||||||
rot.x = rot.z = 0;
|
|
||||||
|
if (AllowDPadRotation && CHECK_BTN_ALL(input->cur.button, BTN_DLEFT) ||
|
||||||
|
AllowCRotation && CHECK_BTN_ALL(input->cur.button, BTN_CLEFT)) {
|
||||||
|
link_kaleido_rot.y = link_kaleido_rot.y - RotationSpeed;
|
||||||
|
} else if (AllowDPadRotation && CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT) ||
|
||||||
|
AllowCRotation && CHECK_BTN_ALL(input->cur.button, BTN_CRIGHT)) {
|
||||||
|
link_kaleido_rot.y = link_kaleido_rot.y + RotationSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AllowDPadRotation && CHECK_BTN_ALL(input->press.button, BTN_DUP) ||
|
||||||
|
AllowDPadRotation && CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
|
||||||
|
link_kaleido_rot.y = 32300;
|
||||||
|
} else if (AllowCRotation && CHECK_BTN_ALL(input->press.button, BTN_CUP) ||
|
||||||
|
AllowCRotation && CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
|
||||||
|
link_kaleido_rot.y = 32300;
|
||||||
|
}
|
||||||
|
|
||||||
|
link_kaleido_rot.x = 0;
|
||||||
|
|
||||||
extern int fbTest;
|
extern int fbTest;
|
||||||
gsSPSetFB(globalCtx->state.gfxCtx->polyOpa.p++, fbTest);
|
gsSPSetFB(globalCtx->state.gfxCtx->polyOpa.p++, fbTest);
|
||||||
func_8009214C(globalCtx, pauseCtx->playerSegment, &pauseCtx->playerSkelAnime, &pos, &rot, scale,
|
func_8009214C(globalCtx, pauseCtx->playerSegment, &pauseCtx->playerSkelAnime, &pos, &link_kaleido_rot, scale,
|
||||||
CUR_EQUIP_VALUE(EQUIP_SWORD), CUR_EQUIP_VALUE(EQUIP_TUNIC) - 1, CUR_EQUIP_VALUE(EQUIP_SHIELD),
|
CUR_EQUIP_VALUE(EQUIP_SWORD), CUR_EQUIP_VALUE(EQUIP_TUNIC) - 1, CUR_EQUIP_VALUE(EQUIP_SHIELD),
|
||||||
CUR_EQUIP_VALUE(EQUIP_BOOTS) - 1);
|
CUR_EQUIP_VALUE(EQUIP_BOOTS) - 1);
|
||||||
gsSPResetFB(globalCtx->state.gfxCtx->polyOpa.p++);
|
gsSPResetFB(globalCtx->state.gfxCtx->polyOpa.p++);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue