mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-05-25 07:32:48 -04:00
Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d397c1d871 | |||
| facd1723f8 | |||
| 78ad282056 | |||
| d61d4e508a | |||
| 0f7a88bd5a | |||
| fe02818d51 | |||
| b89cc25df3 | |||
| 7eba85c3b4 | |||
| 73447f05ab | |||
| 18013e1ae0 | |||
| b4f4e36acb | |||
| d332c3d9d6 | |||
| b59c9cdf02 | |||
| 8c25e9a992 | |||
| 02c50cd0c4 | |||
| 87ed5fedfd | |||
| 5f6d0939bd | |||
| 01347dc9f9 | |||
| 44bdfe552c | |||
| bd787719b8 | |||
| d4bd953c0b | |||
| 474eee5d98 | |||
| bd95fe616b | |||
| 84236e7ac3 | |||
| 52f22275e3 | |||
| c19beca980 | |||
| eb49053e73 | |||
| d08b1d277e | |||
| e41873fff4 | |||
| dfa929a16f | |||
| 880e3928cf | |||
| 41d1bbe137 | |||
| e519caa554 | |||
| 1d208c7dc2 | |||
| 2edc81ee2d | |||
| cddca2700a | |||
| 17b3f65276 | |||
| 75a4d2cf99 | |||
| 795ee54f2b | |||
| 3633bdeeaf | |||
| 235cef6abf | |||
| e871b53afc | |||
| dabb83fccf | |||
| 046b7e8949 | |||
| 97d1f0e46c | |||
| edfa369639 | |||
| 169f757954 | |||
| 4745f73655 | |||
| 660897ff63 | |||
| 37afdbd84c | |||
| 9679075cba | |||
| 5e5e57ea8f | |||
| 9118788149 | |||
| cc28a1444d | |||
| c65a40f432 | |||
| 9e8335c1f0 | |||
| 10cb23ad74 | |||
| 2daddd8a5a | |||
| d45968270a | |||
| 93bea4c151 |
+1
-1
@@ -12,7 +12,7 @@
|
||||
8. Build the solution.
|
||||
9. Launching `OTRExporter/extract_assets.py` will generate an `oot.otr` archive file in `OTRExporter/oot.otr`.
|
||||
10. Run `soh/soh.sln`
|
||||
11. Switch the solution to `Release x86`.
|
||||
11. Switch the solution to `Release x86` or `Release x64`.
|
||||
12. Build the solution.
|
||||
13. Copy the `OTRExporter/oot.otr` archive file to `soh/Release`.
|
||||
14. Launch `soh.exe`.
|
||||
|
||||
Vendored
+8
-2
@@ -4,6 +4,7 @@ pipeline {
|
||||
options {
|
||||
timestamps()
|
||||
skipDefaultCheckout(true)
|
||||
disableConcurrentBuilds(abortPrevious: true)
|
||||
}
|
||||
|
||||
stages {
|
||||
@@ -125,6 +126,11 @@ pipeline {
|
||||
agent {
|
||||
label "SoH-Mac-Builders"
|
||||
}
|
||||
environment {
|
||||
CC = 'clang -arch arm64 -arch x86_64'
|
||||
CXX = 'clang++ -arch arm64 -arch x86_64'
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.15
|
||||
}
|
||||
steps {
|
||||
checkout([
|
||||
$class: 'GitSCM',
|
||||
@@ -137,8 +143,8 @@ pipeline {
|
||||
sh '''
|
||||
cp ../../ZELOOTD.z64 OTRExporter/baserom_non_mq.z64
|
||||
cd soh
|
||||
export CC="clang -arch arm64 -arch x86_64"; export CXX="clang++ -arch arm64 -arch x86_64"; make setup -j4 OPTFLAGS=-O2 DEBUG=0 LD="ld"
|
||||
export CC="clang -arch arm64 -arch x86_64"; export CXX="clang++ -arch arm64 -arch x86_64"; make -j4 DEBUG=0 OPTFLAGS=-O2 LD="ld"
|
||||
make setup -j4 OPTFLAGS=-O2 DEBUG=0 LD="ld"
|
||||
make -j4 DEBUG=0 OPTFLAGS=-O2 LD="ld"
|
||||
make -j4 appbundle
|
||||
mv ../README.md readme.txt
|
||||
7z a soh-mac.7z soh.app readme.txt
|
||||
|
||||
@@ -4,10 +4,15 @@ import os, sys, shutil
|
||||
import shutil
|
||||
from rom_info import Z64Rom
|
||||
import rom_chooser
|
||||
import struct
|
||||
|
||||
def BuildOTR(xmlPath, rom):
|
||||
shutil.copytree("assets", "Extract/assets")
|
||||
|
||||
checksum = int(Z64Rom(rom).checksum.value, 16)
|
||||
with open("Extract/version", "wb") as f:
|
||||
f.write(struct.pack('<L', checksum))
|
||||
|
||||
execStr = "x64\\Release\\ZAPD.exe" if sys.platform == "win32" else "../ZAPDTR/ZAPD.out"
|
||||
execStr += " ed -i %s -b %s -fl CFG/filelists -o placeholder -osf placeholder -gsf 1 -rconf CFG/Config.xml -se OTR" % (xmlPath, rom)
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ Other shortcuts:
|
||||
| Alt+Enter | Fullscreen (DirectX) |
|
||||
| Ctrl+R | Reset |
|
||||
|
||||
Currently, DirectX 11 and OpenGL are supported. Change the renderer by opening the `shipofharkinian.ini` configuration file in notepad and add `sdl` to `gfx backend` for OpenGL or leave blank for DirectX.
|
||||
Currently, DirectX 11 and OpenGL are supported. Change the renderer by opening the `shipofharkinian.json` configuration file in notepad and add `sdl` to the quotes in `"GfxBackend": ""` for OpenGL or leave blank for DirectX.
|
||||
|
||||
## Take The Survey
|
||||
Want to use cartridge readers in tandem with the OTRGui?
|
||||
|
||||
+3
-3
@@ -45,8 +45,8 @@ ifneq ($(DEPRECATION_ON),0)
|
||||
endif
|
||||
# CXXFLAGS += -DTEXTURE_DEBUG
|
||||
|
||||
LDFLAGS := -lm -ldl \
|
||||
-L../StormLib/build -L../libultraship -lbz2 -pthread -lultraship -lstorm
|
||||
LDFLAGS := -Llib/libgfxd -L../libultraship -L../StormLib/build \
|
||||
-pthread -lgfxd -lultraship ZAPDUtils/ZAPDUtils.a -lstorm -lbz2 -lm -ldl
|
||||
|
||||
ifeq ($(UNAME), Darwin)
|
||||
LDFLAGS += $(shell pkg-config --libs glew libpng zlib) $(shell sdl2-config --libs) -framework OpenGL -framework Foundation
|
||||
@@ -137,4 +137,4 @@ ZAPDUtils:
|
||||
|
||||
# Linking
|
||||
ZAPD.out: $(O_FILES) lib/libgfxd/libgfxd.a ExporterTest ZAPDUtils StormLib
|
||||
$(CXX) $(CXXFLAGS) $(O_FILES) lib/libgfxd/libgfxd.a ZAPDUtils/ZAPDUtils.a ../StormLib/build/libstorm.a $(EXPORTERS) $(LDFLAGS) $(OUTPUT_OPTION)
|
||||
$(CXX) $(CXXFLAGS) $(O_FILES) $(EXPORTERS) $(LDFLAGS) $(OUTPUT_OPTION)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
curl -sSfLO "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
|
||||
chmod a+x linuxdeploy*.AppImage
|
||||
curl -sSfLO "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
chmod a+x appimagetool*.AppImage
|
||||
curl -sSfL https://github.com$(curl https://github.com/probonopd/go-appimage/releases | grep "mkappimage-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2) -o mkappimage.AppImage
|
||||
chmod a+x mkappimage.AppImage
|
||||
|
||||
mkdir -p AppDir/usr/bin
|
||||
cp appimage/{soh.desktop,soh.sh} AppDir/
|
||||
@@ -30,5 +30,5 @@ export UPD_INFO="gh-releases-zsync|HarbourMasters|Shipwright-linux|develop|SOH-L
|
||||
|
||||
cd /soh
|
||||
|
||||
./appimagetool-x86_64.AppImage --appimage-extract-and-run ./AppDir "SOH-Linux.AppImage"
|
||||
|
||||
VERSION=Linux ./mkappimage.AppImage --appimage-extract-and-run ./AppDir # "SOH-Linux-x86_64.AppImage"
|
||||
mv SOH-Linux-x86_64.AppImage SOH-Linux.AppImage # Keep Original Name
|
||||
|
||||
+19
-4
@@ -3,6 +3,7 @@ HERE="$(dirname "$(readlink -f "${0}")")"/../..
|
||||
|
||||
export PATH="$HERE"/bin:"$HERE"/usr/bin:"$PATH"
|
||||
export LD_LIBRARY_PATH="$HERE"/usr/lib:"$LD_LIBRARY_PATH"
|
||||
export ZENITY=$(command -v zenity)
|
||||
|
||||
while [[ ! -e "$PWD"/oot.otr ]]; do
|
||||
export ASSETDIR="$(mktemp -d /tmp/assets-XXXXX)"
|
||||
@@ -14,16 +15,26 @@ while [[ ! -e "$PWD"/oot.otr ]]; do
|
||||
ln -s "$OLDPWD"/*.*64 "$ASSETDIR"/tmp/rom.z64
|
||||
cp -r "$ASSETDIR"/assets/game/ship_of_harkinian "$ASSETDIR"/Extract/assets/
|
||||
cd "$ASSETDIR"
|
||||
case $(sha1sum -b "$ASSETDIR"/tmp/rom.z64 | awk '{ print $1 }') in
|
||||
ROMHASH=$(sha1sum -b "$ASSETDIR"/tmp/rom.z64 | awk '{ print $1 }')
|
||||
case "$ROMHASH" in
|
||||
cee6bc3c2a634b41728f2af8da54d9bf8cc14099)
|
||||
ROM=GC_NMQ_D;;
|
||||
0227d7c0074f2d0ac935631990da8ec5914597b4)
|
||||
ROM=GC_NMQ_PAL_F;;
|
||||
*)
|
||||
echo -e "\nrom hash does not match\n"
|
||||
if [ -n "$ZENITY" ]; then
|
||||
zenity --error --timeout=10 --text="ROM hash <b>$ROMHASH</b> does not match" --title="Incorrect ROM file" --width=500 --width=200
|
||||
else
|
||||
echo -e "\nrom hash does not match\n"
|
||||
fi
|
||||
exit;;
|
||||
esac
|
||||
echo "Processing..."
|
||||
if [ -n "$ZENITY" ]; then
|
||||
(echo "# 25%"; echo "25"; sleep 2; echo "# 50%"; echo "50"; sleep 3; echo "# 75%"; echo "75"; sleep 2; echo "# 100%"; echo "100"; sleep 3) |
|
||||
zenity --progress --title="OTR Generating..." --timeout=10 --percentage=0 --icon-name=soh --window-icon=soh.png --height=80 --width=400 &
|
||||
else
|
||||
echo "Processing..."
|
||||
fi
|
||||
assets/extractor/ZAPD.out ed -eh -i assets/extractor/xmls/"${ROM}" -b tmp/rom.z64 -fl assets/extractor/filelists -o placeholder -osf placeholder -gsf 1 -rconf assets/extractor/Config_"${ROM}".xml -se OTR > /dev/null 2>&1
|
||||
cp "$ASSETDIR"/oot.otr "$OLDPWD"
|
||||
echo "Restart $APPIMAGE to play!"
|
||||
@@ -31,7 +42,11 @@ while [[ ! -e "$PWD"/oot.otr ]]; do
|
||||
rm -r "$ASSETDIR"
|
||||
break
|
||||
else
|
||||
echo -e "\nPlace ROM in this folder\n"
|
||||
if [ -n "$ZENITY" ]; then
|
||||
zenity --error --timeout=5 --text="Place ROM in $OWD" --title="Missing ROM file" --width=500 --width=200
|
||||
else
|
||||
echo -e "\nPlace ROM in this folder\n"
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -68,6 +68,7 @@ namespace SohImGui {
|
||||
static ImVector<ImRect> s_GroupPanelLabelStack;
|
||||
bool p_open = false;
|
||||
bool needs_save = false;
|
||||
int lastBackendID = 0;
|
||||
|
||||
const char* filters[3] = {
|
||||
"Three-Point",
|
||||
@@ -75,6 +76,14 @@ namespace SohImGui {
|
||||
"None"
|
||||
};
|
||||
|
||||
std::pair<const char*, const char*> backends[] = {
|
||||
#ifdef _WIN32
|
||||
{ "dx11", "DirectX" },
|
||||
#endif
|
||||
{ "sdl", "OpenGL" }
|
||||
};
|
||||
|
||||
|
||||
const char* powers[9] = {
|
||||
"Vanilla (1x)",
|
||||
"Double (2x)",
|
||||
@@ -91,6 +100,21 @@ namespace SohImGui {
|
||||
std::map<std::string, std::vector<std::string>> windowCategories;
|
||||
std::map<std::string, CustomWindow> customWindows;
|
||||
|
||||
int GetBackendID(std::shared_ptr<Mercury> cfg) {
|
||||
std::string backend = cfg->getString("Window.GfxBackend");
|
||||
if (backend.empty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < (sizeof(backends) / sizeof(backends[0])); i++) {
|
||||
if(backend == backends[i].first) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ClampFloatToInt(float value, int min, int max) {
|
||||
return fmin(fmax(value, min), max);
|
||||
}
|
||||
@@ -315,6 +339,8 @@ namespace SohImGui {
|
||||
io = &ImGui::GetIO();
|
||||
io->ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
||||
io->Fonts->AddFontDefault();
|
||||
|
||||
lastBackendID = GetBackendID(GlobalCtx2::GetInstance()->GetConfig());
|
||||
if (CVar_GetS32("gOpenMenuBar", 0) != 1) {
|
||||
SohImGui::overlay->TextDrawNotification(30.0f, true, "Press F1 to access enhancements menu");
|
||||
}
|
||||
@@ -451,11 +477,21 @@ namespace SohImGui {
|
||||
}
|
||||
}
|
||||
|
||||
void EnhancementSliderInt(const char* text, const char* id, const char* cvarName, int min, int max, const char* format, int defaultValue)
|
||||
void EnhancementSliderInt(const char* text, const char* id, const char* cvarName, int min, int max, const char* format, int defaultValue, bool PlusMinusButton)
|
||||
{
|
||||
int val = CVar_GetS32(cvarName, defaultValue);
|
||||
|
||||
ImGui::Text(text, val);
|
||||
if(PlusMinusButton) {
|
||||
std::string MinusBTNName = " - ##";
|
||||
MinusBTNName += cvarName;
|
||||
if (ImGui::Button(MinusBTNName.c_str())) {
|
||||
val--;
|
||||
CVar_SetS32(cvarName, val);
|
||||
needs_save = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
}
|
||||
|
||||
if (ImGui::SliderInt(id, &val, min, max, format))
|
||||
{
|
||||
@@ -463,6 +499,18 @@ namespace SohImGui {
|
||||
needs_save = true;
|
||||
}
|
||||
|
||||
if(PlusMinusButton) {
|
||||
std::string PlusBTNName = " + ##";
|
||||
PlusBTNName += cvarName;
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
if (ImGui::Button(PlusBTNName.c_str())) {
|
||||
val++;
|
||||
CVar_SetS32(cvarName, val);
|
||||
needs_save = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (val < min)
|
||||
{
|
||||
val = min;
|
||||
@@ -478,7 +526,7 @@ namespace SohImGui {
|
||||
}
|
||||
}
|
||||
|
||||
void EnhancementSliderFloat(const char* text, const char* id, const char* cvarName, float min, float max, const char* format, float defaultValue, bool isPercentage)
|
||||
void EnhancementSliderFloat(const char* text, const char* id, const char* cvarName, float min, float max, const char* format, float defaultValue, bool isPercentage, bool PlusMinusButton)
|
||||
{
|
||||
float val = CVar_GetFloat(cvarName, defaultValue);
|
||||
|
||||
@@ -487,12 +535,36 @@ namespace SohImGui {
|
||||
else
|
||||
ImGui::Text(text, static_cast<int>(100 * val));
|
||||
|
||||
if(PlusMinusButton) {
|
||||
std::string MinusBTNName = " - ##";
|
||||
MinusBTNName += cvarName;
|
||||
if (ImGui::Button(MinusBTNName.c_str())) {
|
||||
val -= 0.1f;
|
||||
CVar_SetFloat(cvarName, val);
|
||||
needs_save = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
}
|
||||
|
||||
if (ImGui::SliderFloat(id, &val, min, max, format))
|
||||
{
|
||||
CVar_SetFloat(cvarName, val);
|
||||
needs_save = true;
|
||||
}
|
||||
|
||||
if(PlusMinusButton) {
|
||||
std::string PlusBTNName = " + ##";
|
||||
PlusBTNName += cvarName;
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
if (ImGui::Button(PlusBTNName.c_str())) {
|
||||
val += 0.1f;
|
||||
CVar_SetFloat(cvarName, val);
|
||||
needs_save = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (val < min)
|
||||
{
|
||||
val = min;
|
||||
@@ -653,6 +725,8 @@ namespace SohImGui {
|
||||
ImGui::NewFrame();
|
||||
|
||||
const std::shared_ptr<Window> wnd = GlobalCtx2::GetInstance()->GetWindow();
|
||||
const std::shared_ptr<Mercury> pConf = GlobalCtx2::GetInstance()->GetConfig();
|
||||
|
||||
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoBackground |
|
||||
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove |
|
||||
ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus | ImGuiWindowFlags_NoResize;
|
||||
@@ -785,10 +859,12 @@ namespace SohImGui {
|
||||
|
||||
if (ImGui::BeginMenu("Graphics"))
|
||||
{
|
||||
#ifndef __APPLE__
|
||||
EnhancementSliderFloat("Internal Resolution: %d %%", "##IMul", "gInternalResolution", 0.5f, 2.0f, "", 1.0f, true);
|
||||
Tooltip("Multiplies your output resolution by the value inputted,\nas a more intensive but effective form of anti-aliasing");
|
||||
gfx_current_dimensions.internal_mul = CVar_GetFloat("gInternalResolution", 1);
|
||||
EnhancementSliderInt("MSAA: %d", "##IMSAA", "gMSAAValue", 1, 8, "");
|
||||
#endif
|
||||
EnhancementSliderInt("MSAA: %d", "##IMSAA", "gMSAAValue", 1, 8, "", 1, true);
|
||||
Tooltip("Activates multi-sample anti-aliasing when above 1x\nup to 8x for 8 samples for every pixel");
|
||||
gfx_msaa_level = CVar_GetS32("gMSAAValue", 1);
|
||||
|
||||
@@ -808,6 +884,16 @@ namespace SohImGui {
|
||||
ImGui::Text("Jitter fix: >= %d FPS", fps);
|
||||
}
|
||||
|
||||
std::string MinusBTNELT = " - ##ExtraLatencyThreshold";
|
||||
std::string PlusBTNELT = " + ##ExtraLatencyThreshold";
|
||||
if (ImGui::Button(MinusBTNELT.c_str())) {
|
||||
val--;
|
||||
CVar_SetS32(cvar, val);
|
||||
needs_save = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
|
||||
if (ImGui::SliderInt("##ExtraLatencyThreshold", &val, 0, 250, "", ImGuiSliderFlags_AlwaysClamp))
|
||||
{
|
||||
CVar_SetS32(cvar, val);
|
||||
@@ -820,6 +906,26 @@ namespace SohImGui {
|
||||
"to work on one frame while GPU works on the previous frame.\n"
|
||||
"This setting should be used when your computer is too slow\n"
|
||||
"to do CPU + GPU work in time.");
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
if (ImGui::Button(PlusBTNELT.c_str())) {
|
||||
val++;
|
||||
CVar_SetS32(cvar, val);
|
||||
needs_save = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ImGui::Text("Renderer API (Needs reload)");
|
||||
if (ImGui::BeginCombo("##RApi", backends[lastBackendID].second)) {
|
||||
for (uint8_t i = 0; i < sizeof(backends) / sizeof(backends[0]); i++) {
|
||||
if (ImGui::Selectable(backends[i].second, i == lastBackendID)) {
|
||||
pConf->setString("Window.GfxBackend", backends[i].first);
|
||||
lastBackendID = i;
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
EXPERIMENTAL();
|
||||
@@ -915,54 +1021,54 @@ namespace SohImGui {
|
||||
{
|
||||
EnhancementCheckbox("Change Red Potion Effect", "gRedPotionEffect");
|
||||
Tooltip("Enable the following changes to the amount of health restored by Red Potions");
|
||||
EnhancementSliderInt("Red Potion Health: %d", "##REDPOTIONHEALTH", "gRedPotionHealth", 1, 100, "");
|
||||
EnhancementSliderInt("Red Potion Health: %d", "##REDPOTIONHEALTH", "gRedPotionHealth", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of health restored by Red Potions");
|
||||
EnhancementCheckbox("Red Potion Percent Restore", "gRedPercentRestore");
|
||||
Tooltip("Toggles from Red Potions restoring a fixed amount of health to a percent of the player's current max health");
|
||||
|
||||
EnhancementCheckbox("Change Green Potion Effect", "gGreenPotionEffect");
|
||||
Tooltip("Enable the following changes to the amount of mana restored by Green Potions");
|
||||
EnhancementSliderInt("Green Potion Mana: %d", "##GREENPOTIONMANA", "gGreenPotionMana", 1, 100, "");
|
||||
EnhancementSliderInt("Green Potion Mana: %d", "##GREENPOTIONMANA", "gGreenPotionMana", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of mana restored by Green Potions, base max mana is 48, max upgraded mana is 96");
|
||||
EnhancementCheckbox("Green Potion Percent Restore", "gGreenPercentRestore");
|
||||
Tooltip("Toggles from Green Potions restoring a fixed amount of mana to a percent of the player's current max mana");
|
||||
|
||||
EnhancementCheckbox("Change Blue Potion Effects", "gBluePotionEffects");
|
||||
Tooltip("Enable the following changes to the amount of health and mana restored by Blue Potions");
|
||||
EnhancementSliderInt("Blue Potion Health: %d", "##BLUEPOTIONHEALTH", "gBluePotionHealth", 1, 100, "");
|
||||
EnhancementSliderInt("Blue Potion Health: %d", "##BLUEPOTIONHEALTH", "gBluePotionHealth", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of health restored by Blue Potions");
|
||||
EnhancementCheckbox("Blue Potion Health Percent Restore", "gBlueHealthPercentRestore");
|
||||
Tooltip("Toggles from Blue Potions restoring a fixed amount of health to a percent of the player's current max health");
|
||||
|
||||
EnhancementSliderInt("Blue Potion Mana: %d", "##BLUEPOTIONMANA", "gBluePotionMana", 1, 100, "");
|
||||
EnhancementSliderInt("Blue Potion Mana: %d", "##BLUEPOTIONMANA", "gBluePotionMana", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of mana restored by Blue Potions, base max mana is 48, max upgraded mana is 96");
|
||||
EnhancementCheckbox("Blue Potion Mana Percent Restore", "gBlueManaPercentRestore");
|
||||
Tooltip("Toggles from Blue Potions restoring a fixed amount of mana to a percent of the player's current max mana");
|
||||
|
||||
EnhancementCheckbox("Change Milk Effect", "gMilkEffect");
|
||||
Tooltip("Enable the following changes to the amount of health restored by Milk");
|
||||
EnhancementSliderInt("Milk Health: %d", "##MILKHEALTH", "gMilkHealth", 1, 100, "");
|
||||
EnhancementSliderInt("Milk Health: %d", "##MILKHEALTH", "gMilkHealth", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of health restored by Milk");
|
||||
EnhancementCheckbox("Milk Percent Restore", "gMilkPercentRestore");
|
||||
Tooltip("Toggles from Milk restoring a fixed amount of health to a percent of the player's current max health");
|
||||
|
||||
EnhancementCheckbox("Separate Half Milk Effect", "gSeparateHalfMilkEffect");
|
||||
Tooltip("Enable the following changes to the amount of health restored by Half Milk\nIf this is disabled, Half Milk will behave the same as Full Milk.");
|
||||
EnhancementSliderInt("Half Milk Health: %d", "##HALFMILKHEALTH", "gHalfMilkHealth", 1, 100, "");
|
||||
EnhancementSliderInt("Half Milk Health: %d", "##HALFMILKHEALTH", "gHalfMilkHealth", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of health restored by Half Milk");
|
||||
EnhancementCheckbox("Half Milk Percent Restore", "gHalfMilkPercentRestore");
|
||||
Tooltip("Toggles from Half Milk restoring a fixed amount of health to a percent of the player's current max health");
|
||||
|
||||
EnhancementCheckbox("Change Fairy Effect", "gFairyEffect");
|
||||
Tooltip("Enable the following changes to the amount of health restored by Fairies");
|
||||
EnhancementSliderInt("Fairy: %d", "##FAIRYHEALTH", "gFairyHealth", 1, 100, "");
|
||||
EnhancementSliderInt("Fairy: %d", "##FAIRYHEALTH", "gFairyHealth", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of health restored by Fairies");
|
||||
EnhancementCheckbox("Fairy Percent Restore", "gFairyPercentRestore");
|
||||
Tooltip("Toggles from Fairies restoring a fixed amount of health to a percent of the player's current max health");
|
||||
|
||||
EnhancementCheckbox("Change Fairy Revive Effect", "gFairyReviveEffect");
|
||||
Tooltip("Enable the following changes to the amount of health restored by Fairy Revivals");
|
||||
EnhancementSliderInt("Fairy Revival: %d", "##FAIRYREVIVEHEALTH", "gFairyReviveHealth", 1, 100, "");
|
||||
EnhancementSliderInt("Fairy Revival: %d", "##FAIRYREVIVEHEALTH", "gFairyReviveHealth", 1, 100, "", 0, true);
|
||||
Tooltip("Changes the amount of health restored by Fairy Revivals");
|
||||
EnhancementCheckbox("Fairy Revive Percent Restore", "gFairyRevivePercentRestore");
|
||||
Tooltip("Toggles from Fairy Revivals restoring a fixed amount of health to a percent of the player's current max health");
|
||||
@@ -1051,7 +1157,7 @@ namespace SohImGui {
|
||||
EnhancementRadioButton("Random cycle", "gPauseLiveLink", 16);
|
||||
Tooltip("Randomize the animation played on the menu after a certain time");
|
||||
if (CVar_GetS32("gPauseLiveLink", 0) >= 16) {
|
||||
EnhancementSliderInt("Frame to wait: %d", "##MinFrameCount", "gMinFrameCount", 1, 1000, "");
|
||||
EnhancementSliderInt("Frame to wait: %d", "##MinFrameCount", "gMinFrameCount", 1, 1000, "", 0, true);
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
@@ -1123,6 +1229,16 @@ namespace SohImGui {
|
||||
ImGui::Text("Frame interpolation: %d FPS", fps);
|
||||
}
|
||||
|
||||
std::string MinusBTNFPSI = " - ##FPSInterpolation";
|
||||
std::string PlusBTNFPSI = " + ##FPSInterpolation";
|
||||
if (ImGui::Button(MinusBTNFPSI.c_str())) {
|
||||
val--;
|
||||
CVar_SetS32(fps_cvar, val);
|
||||
needs_save = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
|
||||
if (ImGui::SliderInt("##FPSInterpolation", &val, 20, 250, "", ImGuiSliderFlags_AlwaysClamp))
|
||||
{
|
||||
CVar_SetS32(fps_cvar, val);
|
||||
@@ -1135,6 +1251,14 @@ namespace SohImGui {
|
||||
"and might give a worse result.\n"
|
||||
"For consistent input lag, set this value and your monitor's refresh rate to a multiple of 20\n"
|
||||
"Ctrl+Click for keyboard input");
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
|
||||
if (ImGui::Button(PlusBTNFPSI.c_str())) {
|
||||
val++;
|
||||
CVar_SetS32(fps_cvar, val);
|
||||
needs_save = true;
|
||||
}
|
||||
}
|
||||
if (impl.backend == Backend::DX11)
|
||||
{
|
||||
@@ -1162,6 +1286,7 @@ namespace SohImGui {
|
||||
Tooltip("Holding down B skips text\nKnown to cause a cutscene softlock in Water Temple\nSoftlock can be fixed by pressing D-Right in Debug mode");
|
||||
|
||||
EnhancementCheckbox("Free Camera", "gFreeCamera");
|
||||
Tooltip("Enables camera control\nNote: You must remap C buttons off of\nthe right stick in the controller\nconfig menu, and map the camera stick\nto the right stick.");
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
@@ -1211,11 +1336,23 @@ namespace SohImGui {
|
||||
{
|
||||
EnhancementCheckbox("OoT Debug Mode", "gDebugEnabled");
|
||||
Tooltip("Enables Debug Mode, allowing you to select maps with L + R + Z, noclip with L + D-pad Right,\nand open the debug menu with L on the pause screen");
|
||||
EnhancementCheckbox("OoT Skulltula Debug", "gSkulltulaDebugEnabled");
|
||||
Tooltip("Enables Skulltula Debug, when moving the cursor in the menu above various map\nicons (boss key, compass, map screen locations, etc) will set the GS bits in that\narea. USE WITH CAUTION AS IT DOES NOT UPDATE THE GS COUNT.");
|
||||
EnhancementCheckbox("Fast File Select", "gSkipLogoTitle");
|
||||
Tooltip("Load the game to the selected slot below upon launch\nUse slot number 4 to load directly into the game's internal Map Select\n(Does not require the Debug Menu, but you will be unable to save there\nYou can also load the Map Select with OoT Debug Mode + slot 0)\nWith slot 0 you can directly go to the File Select menu\nAttention: loading an empty save file will result in a crash");
|
||||
Tooltip("Load the game to the selected menu or file\n\"Zelda Map Select\" require debug mode else you will fallback to File choose menu\nUsing a file number that don't have save will create a save file only\nif you toggle on \"Create a new save if none ?\" else it will bring you to the\nFile choose menu");
|
||||
if (CVar_GetS32("gSkipLogoTitle", 0)) {
|
||||
EnhancementSliderInt("Loading %d", "##SaveFileID", "gSaveFileID", 0, 4, "");
|
||||
}
|
||||
const char* FastFileSelect[5] = {
|
||||
"File N.1",
|
||||
"File N.2",
|
||||
"File N.3",
|
||||
"File select",
|
||||
"Zelda Map Select (require OoT Debug Mode)"
|
||||
};
|
||||
ImGui::Text("Loading :");
|
||||
EnhancementCombobox("gSaveFileID", FastFileSelect, 5, 0);
|
||||
EnhancementCheckbox("Create a new save if none", "gCreateNewSave");
|
||||
Tooltip("Enable the creation of a new save file\nif none exist in the File number selected\nNo file name will be assigned please do in Save editor once you see the first text\nelse your save file name will be named \"00000000\"\nIf disabled you will fall back in File select menu");
|
||||
};
|
||||
ImGui::Separator();
|
||||
EnhancementCheckbox("Stats", "gStatsEnabled");
|
||||
Tooltip("Shows the stats window, with your FPS and frametimes,\nand the OS you're playing on");
|
||||
|
||||
@@ -70,8 +70,8 @@ namespace SohImGui {
|
||||
void EnhancementRadioButton(const char* text, const char* cvarName, int id);
|
||||
void EnhancementCheckbox(const char* text, const char* cvarName);
|
||||
void EnhancementButton(const char* text, const char* cvarName);
|
||||
void EnhancementSliderInt(const char* text, const char* id, const char* cvarName, int min, int max, const char* format, int defaultValue = 0);
|
||||
void EnhancementSliderFloat(const char* text, const char* id, const char* cvarName, float min, float max, const char* format, float defaultValue, bool isPercentage);
|
||||
void EnhancementSliderInt(const char* text, const char* id, const char* cvarName, int min, int max, const char* format, int defaultValue = 0, bool PlusMinusButton = false);
|
||||
void EnhancementSliderFloat(const char* text, const char* id, const char* cvarName, float min, float max, const char* format, float defaultValue, bool isPercentage, bool PlusMinusButton = false);
|
||||
void EnhancementCombobox(const char* name, const char* ComboArray[], size_t arraySize, uint8_t FirstTimeValue);
|
||||
void EnhancementColor(const char* text, const char* cvarName, ImVec4 ColorRGBA, ImVec4 default_colors, bool allow_rainbow = true, bool has_alpha=false, bool TitleSameLine=false);
|
||||
void EnhancementCombo(const std::string& name, const char* cvarName, const std::vector<std::string>& items, int defaultValue = 0);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "ImGuiImpl.h"
|
||||
#include "Utils/StringHelper.h"
|
||||
#include "Lib/ImGui/imgui_internal.h"
|
||||
#include "Cvar.h"
|
||||
|
||||
namespace Ship {
|
||||
|
||||
@@ -94,7 +95,11 @@ namespace Ship {
|
||||
|
||||
if (ControllerName != nullptr && ImGui::BeginCombo("##ControllerEntries", ControllerName)) {
|
||||
for (uint8_t i = 0; i < devices.size(); i++) {
|
||||
if (ImGui::Selectable(devices[i]->GetControllerName(), i == vDevices[CurrentPort])) {
|
||||
std::string DeviceName = devices[i]->GetControllerName();
|
||||
if (DeviceName != "Keyboard" && DeviceName != "Auto") {
|
||||
DeviceName+="##"+std::to_string(i);
|
||||
}
|
||||
if (ImGui::Selectable(DeviceName.c_str(), i == vDevices[CurrentPort])) {
|
||||
Window::ControllerApi->SetPhysicalDevice(CurrentPort, i);
|
||||
}
|
||||
}
|
||||
@@ -249,13 +254,14 @@ namespace Ship {
|
||||
|
||||
if (!this->Opened) {
|
||||
BtnReading = -1;
|
||||
CVar_SetS32("gControllerConfigurationEnabled", 0);
|
||||
return;
|
||||
}
|
||||
|
||||
ImGui::SetNextWindowSizeConstraints(ImVec2(641, 250), ImVec2(1200, 290));
|
||||
//OTRTODO: Disable this stupid workaround ( ReadRawPress() only works when the window is on the main viewport )
|
||||
ImGui::SetNextWindowViewport(ImGui::GetMainViewport()->ID);
|
||||
ImGui::Begin("Controller Configuration", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize);
|
||||
ImGui::Begin("Controller Configuration", &this->Opened, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize);
|
||||
|
||||
ImGui::BeginTabBar("##Controllers");
|
||||
|
||||
|
||||
@@ -229,9 +229,8 @@ static void onkeyup(WPARAM w_param, LPARAM l_param) {
|
||||
}
|
||||
}
|
||||
|
||||
char fileName[256];
|
||||
|
||||
static LRESULT CALLBACK gfx_dxgi_wnd_proc(HWND h_wnd, UINT message, WPARAM w_param, LPARAM l_param) {
|
||||
char fileName[256];
|
||||
SohImGui::EventImpl event_impl;
|
||||
event_impl.win32 = { h_wnd, static_cast<int>(message), static_cast<int>(w_param), static_cast<int>(l_param) };
|
||||
SohImGui::Update(event_impl);
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include "../../Cvar.h"
|
||||
|
||||
#include "gfx_pc.h"
|
||||
#include "gfx_cc.h"
|
||||
#include "gfx_window_manager_api.h"
|
||||
@@ -2649,7 +2651,12 @@ void gfx_init(struct GfxWindowManagerAPI *wapi, struct GfxRenderingAPI *rapi, co
|
||||
gfx_wapi->init(game_name, start_in_fullscreen, width, height);
|
||||
gfx_rapi->init();
|
||||
gfx_rapi->update_framebuffer_parameters(0, width, height, 1, false, true, true, true);
|
||||
#ifdef __APPLE__
|
||||
gfx_current_dimensions.internal_mul = 1;
|
||||
#else
|
||||
gfx_current_dimensions.internal_mul = CVar_GetFloat("gInternalResolution", 1);
|
||||
#endif
|
||||
gfx_msaa_level = CVar_GetS32("gMSAAValue", 1);
|
||||
gfx_current_dimensions.width = width;
|
||||
gfx_current_dimensions.height = height;
|
||||
game_framebuffer = gfx_rapi->create_framebuffer();
|
||||
@@ -2867,4 +2874,4 @@ uint16_t gfx_get_pixel_depth(float x, float y) {
|
||||
get_pixel_depth_pending.clear();
|
||||
|
||||
return get_pixel_depth_cached.find(make_pair(x, y))->second;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,8 +212,8 @@ namespace Ship {
|
||||
pConf->setString("Window.GfxBackend", "");
|
||||
|
||||
pConf->setBool("Window.Fullscreen.Enabled", false);
|
||||
pConf->setInt("Window.Fullscreen.Width", 640);
|
||||
pConf->setInt("Window.Fullscreen.Height", 480);
|
||||
pConf->setInt("Window.Fullscreen.Width", 1920);
|
||||
pConf->setInt("Window.Fullscreen.Height", 1080);
|
||||
|
||||
pConf->setString("Game.SaveName", "");
|
||||
pConf->setString("Game.Main Archive", "");
|
||||
@@ -233,8 +233,14 @@ namespace Ship {
|
||||
SetAudioPlayer();
|
||||
bIsFullscreen = pConf->getBool("Window.Fullscreen.Enabled", false);
|
||||
|
||||
dwWidth = pConf->getInt("Window.Fullscreen.Width", bIsFullscreen ? 1920 : 640);
|
||||
dwHeight = pConf->getInt("Window.Fullscreen.Height", bIsFullscreen ? 1080 : 480);
|
||||
if (bIsFullscreen) {
|
||||
dwWidth = pConf->getInt("Window.Fullscreen.Width", 1920);
|
||||
dwHeight = pConf->getInt("Window.Fullscreen.Height", 1080);
|
||||
} else {
|
||||
dwWidth = pConf->getInt("Window.Width", 640);
|
||||
dwHeight = pConf->getInt("Window.Height", 480);
|
||||
}
|
||||
|
||||
dwMenubar = pConf->getBool("Window.Options", false);
|
||||
const std::string& gfx_backend = pConf->getString("Window.GfxBackend");
|
||||
SetWindowManager(&WmApi, &RenderingApi, gfx_backend);
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
[subrepo]
|
||||
remote = https://github.com/HarbourMasters/soh.git
|
||||
branch = master
|
||||
commit = ba904bbd0d724784f8f37ff4bea378f6fe26151b
|
||||
parent = 0bb0e7b53bd80bdc7f78e08c441691737e039b2b
|
||||
commit = 75ccbade8ba26485266a8c8aa7d81e495d0ca4dd
|
||||
parent = 8417db65c73cb3d117f2a0f9040105022a45480c
|
||||
method = rebase
|
||||
cmdver = 0.4.1
|
||||
|
||||
@@ -25,7 +25,8 @@ typedef struct {
|
||||
/* 0x0C */ Vec3f position;
|
||||
/* 0x18 */ Vec3s unkVelocity;
|
||||
/* 0x1E */ Vec3s unkPosition;
|
||||
} EffectSparkElement; // size = 0x24
|
||||
/* 0x24 */ u32 epoch;
|
||||
} EffectSparkElement; // size = 0x28
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ Vec3s position;
|
||||
@@ -117,7 +118,8 @@ typedef struct {
|
||||
/* 0x10 */ f32 startX;
|
||||
/* 0x14 */ s16 yaw;
|
||||
/* 0x16 */ s16 pitch;
|
||||
} EffectShieldParticleElement; // size = 0x18
|
||||
/* 0x18 */ u32 epoch;
|
||||
} EffectShieldParticleElement; // size = 0x1C
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 numElements;
|
||||
|
||||
+16
-2
@@ -356,7 +356,20 @@ typedef struct {
|
||||
/* 0x00 */ s32 active;
|
||||
/* 0x04 */ Vec3f tip;
|
||||
/* 0x10 */ Vec3f base;
|
||||
} WeaponInfo; // size = 0x1C
|
||||
} WeaponInfo; // size = 0x1C\
|
||||
|
||||
typedef enum {
|
||||
FLAG_NONE,
|
||||
FLAG_SCENE_SWITCH,
|
||||
FLAG_SCENE_TREASURE,
|
||||
FLAG_SCENE_CLEAR,
|
||||
FLAG_SCENE_COLLECTIBLE,
|
||||
} FlagType;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 flagID; // which flag to set when Player_SetPendingFlag is called
|
||||
/* 0x04 */ FlagType flagType; // type of flag to set when Player_SetPendingFlag is called
|
||||
} PendingFlag; // size = 0x06
|
||||
|
||||
#define PLAYER_STATE1_0 (1 << 0)
|
||||
#define PLAYER_STATE1_1 (1 << 1)
|
||||
@@ -612,6 +625,7 @@ typedef struct Player {
|
||||
/* 0x0A86 */ s8 unk_A86;
|
||||
/* 0x0A87 */ u8 unk_A87;
|
||||
/* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position
|
||||
} Player; // size = 0xA94
|
||||
/* 0x0A94 */ PendingFlag pendingFlag;
|
||||
} Player; // size = 0xAA0
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64math.h"
|
||||
#include <randomizerTypes.h>
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 buttonItems[8];
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>soh</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>2.0.0</string>
|
||||
<string>3.0.0</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>soh.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -22,14 +22,14 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.0.0</string>
|
||||
<string>3.0.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>ZOoT</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.0.0</string>
|
||||
<string>3.0.0</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright 2022 HarbourMasters.</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.3</string>
|
||||
<string>10.15</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#include <Lib/spdlog/include/spdlog/spdlog.h>
|
||||
|
||||
void GenerateRandomizer() {
|
||||
int ret = Playthrough::Playthrough_Init(std::hash<std::string>{}(Settings::seed));
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret == -1) { // Failed to generate after 5 tries
|
||||
SPDLOG_ERROR(
|
||||
"\n\nFailed to generate after 5 tries.\nPress B to go back to the menu.\nA different seed might be "
|
||||
"successful.");
|
||||
return;
|
||||
} else {
|
||||
SPDLOG_ERROR("\n\nError %d with fill.\nPress Select to exit or B to go back to the menu.\n", ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const auto& randomizerHash = GetRandomizerHash();
|
||||
}
|
||||
+1
-1
@@ -983,7 +983,7 @@
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\tinyxml2.h" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\trial.hpp" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\utils.hpp" />
|
||||
<ClInclude Include="randomizerTypes.h" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizerTypes.h" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizer_item_tracker.h" />
|
||||
<ClInclude Include="soh\frame_interpolation.h" />
|
||||
<ClInclude Include="include\alloca.h" />
|
||||
|
||||
+111
-93
@@ -82,6 +82,24 @@
|
||||
<Filter Include="Source Files\soh\Enhancements\debugger">
|
||||
<UniqueIdentifier>{04fc1c52-49ff-48e2-ae23-2c00867374f8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer">
|
||||
<UniqueIdentifier>{fd63976d-64b1-45ee-b3ab-530c636391c3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer\3drando">
|
||||
<UniqueIdentifier>{ff94f63c-a792-49af-869b-42557318a32b}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer\3drando\hint_list">
|
||||
<UniqueIdentifier>{1ba82a8d-b7d9-4f79-b80b-389322e189bc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer\3drando\location_access">
|
||||
<UniqueIdentifier>{9e20d69b-6a26-48ef-9aae-09c149b2c459}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\soh\Enhancements\randomizer">
|
||||
<UniqueIdentifier>{d7b4c12f-3876-40ec-a8ec-db435513156c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\soh\Enhancements\randomizer\3drando">
|
||||
<UniqueIdentifier>{38ae4e39-fade-4f81-bfdb-af83bf641df0}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\boot\assert.c">
|
||||
@@ -2206,172 +2224,172 @@
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list\hint_list_exclude_dungeon.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\hint_list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list\hint_list_exclude_overworld.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\hint_list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list\hint_list_item.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\hint_list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_bottom_of_the_well.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_castle_town.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_death_mountain.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_deku_tree.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_dodongos_cavern.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_fire_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_forest_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_ganons_castle.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_gerudo_training_grounds.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_gerudo_valley.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_hyrule_field.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_ice_cavern.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_jabujabus_belly.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_kakariko.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_lost_woods.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_shadow_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_spirit_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_water_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_zoras_domain.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\cosmetics.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\custom_messages.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\debug.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\dungeon.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\entrance.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\fill.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hints.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item_list.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item_location.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item_pool.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\logic.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\menu.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\music.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\patch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\playthrough.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\preset.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\random.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\rando_main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\settings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\setting_descriptions.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\shops.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\sound_effects.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\spoiler_log.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\starting_inventory.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\tinyxml2.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\trial.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\utils.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\gfx.c">
|
||||
<Filter>Header Files\soh\Enhancements</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer_item_tracker.cpp">
|
||||
<Filter>Source Files\src</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -3948,118 +3966,118 @@
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\category.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\cosmetics.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\custom_messages.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\debug.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\dungeon.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\entrance.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\fill.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\hints.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\hint_list.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item_list.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item_location.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item_pool.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\keys.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\location_access.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\logic.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\menu.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\music.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\patch.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\playthrough.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\pool_functions.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\preset.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\random.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\randomizer.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\rando_main.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\settings.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\setting_descriptions.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\shops.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\sound_effects.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\spoiler_log.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\starting_inventory.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\text.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\tinyxml2.h">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\trial.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\utils.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="randomizerTypes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizerTypes.h">
|
||||
<Filter>Header Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\gfx.h">
|
||||
<Filter>Header Files\soh\Enhancements</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizer_item_tracker.h">
|
||||
<Filter>Source Files\src</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -44,6 +44,7 @@ void BootCommands_Init()
|
||||
CVar_RegisterS32("gUseTunicsCol", 0);
|
||||
CVar_RegisterS32("gGuardVision", 0);
|
||||
CVar_RegisterS32("gTimeFlowFileSelect", 0);
|
||||
CVar_RegisterS32("gSkulltulaDebugEnabled", 0);
|
||||
}
|
||||
|
||||
//void BootCommands_ParseBootArgs(char* str)
|
||||
|
||||
@@ -529,7 +529,7 @@ void DrawColCheckList(std::vector<Gfx>& dl, Collider** objects, int32_t count) {
|
||||
|
||||
Mtx m;
|
||||
MtxF mt;
|
||||
SkinMatrix_SetTranslate(&mt, cyl->dim.pos.x, cyl->dim.pos.y, cyl->dim.pos.z);
|
||||
SkinMatrix_SetTranslate(&mt, cyl->dim.pos.x, cyl->dim.pos.y + cyl->dim.yShift, cyl->dim.pos.z);
|
||||
MtxF ms;
|
||||
int32_t radius = cyl->dim.radius == 0 ? 1 : cyl->dim.radius;
|
||||
SkinMatrix_SetScale(&ms, radius / 128.0f, cyl->dim.height / 128.0f, radius / 128.0f);
|
||||
|
||||
@@ -1561,6 +1561,18 @@ void DrawPlayerTab() {
|
||||
ImGui::InputScalar("C Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[2], &one, NULL);
|
||||
ImGui::SameLine();
|
||||
ImGui::InputScalar("C Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[3], &one, NULL);
|
||||
|
||||
if (CVar_GetS32("gDpadEquips", 0)) {
|
||||
ImGui::NewLine();
|
||||
ImGui::Text("Current D-pad Equips");
|
||||
ImGui::InputScalar("D-pad Up ", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[4], &one, NULL); // Two spaces at the end for aligning, not elegant but it's working
|
||||
ImGui::SameLine();
|
||||
ImGui::InputScalar("D-pad Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[5], &one, NULL);
|
||||
// Intentionnal to not put everything on the same line, else it's taking too much for lower resolution.
|
||||
ImGui::InputScalar("D-pad Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[6], &one, NULL);
|
||||
ImGui::SameLine();
|
||||
ImGui::InputScalar("D-pad Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[7], &one, NULL);
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
@@ -2102,7 +2102,7 @@ void HintTable_Init() {
|
||||
|
||||
hintTable[GANON_LINE07] = HintText::GanonLine({
|
||||
//obscure text
|
||||
Text{"What about Zelda makes you think she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats.",
|
||||
Text{"What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats.",
|
||||
/*french*/"Zelda ne sera jamais un meilleur monarque que moi!^J'ai un château volant, mes sujets sont des belles amazones... et mes Moblins sont clairement plus puissants que jamais!",
|
||||
/*spanish*/"¿Qué te hace pensar que Zelda gobierna mejor que yo?^Yo he salvado el Rancho Lon Lon,&he alimentado a los hambrientos&y hasta hago que mi castillo flote."},
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include "location_access.hpp"
|
||||
#include "debug.hpp"
|
||||
#include <Lib/spdlog/include/spdlog/spdlog.h>
|
||||
#include "randomizerTypes.h"
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
namespace {
|
||||
bool seedChanged;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include "randomizerTypes.h"
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
#define MAIN_MENU 0
|
||||
#define OPTION_SUB_MENU 1
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "logic.hpp"
|
||||
#include "random.hpp"
|
||||
#include "spoiler_log.hpp"
|
||||
#include "randomizerTypes.h"
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
namespace Playthrough {
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ static RandomizerHash randomizerHash;
|
||||
static SpoilerData spoilerData;
|
||||
|
||||
void GenerateHash() {
|
||||
for (size_t i = 0; i < Settings::seed.size(); i++) {
|
||||
for (size_t i = 0; i < Settings::hashIconIndexes.size(); i++) {
|
||||
int number = Settings::seed[i] - '0';
|
||||
Settings::hashIconIndexes[i] = number;
|
||||
}
|
||||
@@ -371,10 +371,11 @@ static void WriteSettings(const bool printAll = false) {
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// 3drando doesn't have a "skip child zelda" setting, manually add it to the spoilerfile
|
||||
jsonData["settings"]["Skip Child Zelda"] = Settings::skipChildZelda;
|
||||
}
|
||||
|
||||
// 3drando doesn't have a "skip child zelda" setting, manually add it to the spoilerfile
|
||||
jsonData["settings"]["Skip Child Zelda"] = Settings::skipChildZelda;
|
||||
|
||||
// spoilerLog.RootElement()->InsertEndChild(parentNode);
|
||||
|
||||
// for (const uint32_t key : allLocations) {
|
||||
@@ -578,7 +579,7 @@ std::string AutoFormatHintTextString(std::string unformattedHintTextString) {
|
||||
bool needsAutomaicNewlines = true;
|
||||
if (textStr == "Erreur 0x69a504:&Traduction manquante^C'est de la faute à Purple Hato!&J'vous jure!" ||
|
||||
textStr == "Mon très cher @:&Viens vite au château, je t'ai préparé&un délicieux gâteau...^À bientôt, Princesse Zelda" ||
|
||||
textStr == "What about Zelda makes you think she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats." ||
|
||||
textStr == "What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats." ||
|
||||
textStr == "Many tricks are up my sleeve,&to save yourself&you'd better leave!" ||
|
||||
textStr == "I've learned this spell,&it's really neat,&I'll keep it later&for your treat!" ||
|
||||
textStr == "Sale petit garnement,&tu fais erreur!&C'est maintenant que marque&ta dernière heure!" ||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <string>
|
||||
#include "../../../include/ultra64.h"
|
||||
#include "../../../include/z64item.h"
|
||||
#include <randomizerTypes.h>
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
class Randomizer {
|
||||
private:
|
||||
|
||||
@@ -869,21 +869,19 @@ SaveStateReturn SaveStateMgr::AddRequest(const SaveStateRequest request) {
|
||||
switch (request.type) {
|
||||
case RequestType::SAVE:
|
||||
requests.push(request);
|
||||
break;
|
||||
return SaveStateReturn::SUCCESS;
|
||||
case RequestType::LOAD:
|
||||
if (states.contains(request.slot)) {
|
||||
requests.push(request);
|
||||
return SaveStateReturn::SUCCESS;
|
||||
} else {
|
||||
SPDLOG_ERROR("Invalid SaveState slot: {}", request.type);
|
||||
SohImGui::overlay->TextDrawNotification(1.0f, true, "state slot %u empty", request.slot);
|
||||
return SaveStateReturn::FAIL_INVALID_SLOT;
|
||||
}
|
||||
break;
|
||||
[[unlikely]] default:
|
||||
SPDLOG_ERROR("Invalid SaveState request type: {}", request.type);
|
||||
return SaveStateReturn::FAIL_BAD_REQUEST;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+22
-13
@@ -1367,23 +1367,23 @@ extern "C" void* getN64WeirdFrame(s32 i) {
|
||||
return &weirdFrameBytes[i + sizeof(n64WeirdFrames)];
|
||||
}
|
||||
|
||||
extern "C" s16 GetItemModelFromId(s16 itemId) {
|
||||
extern "C" s16 Randomizer_GetItemModelFromId(s16 itemId) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetItemModelFromId(itemId);
|
||||
}
|
||||
|
||||
extern "C" s32 GetItemIDFromGetItemID(s32 getItemId) {
|
||||
extern "C" s32 Randomizer_GetItemIDFromGetItemID(s32 getItemId) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetItemIDFromGetItemID(getItemId);
|
||||
}
|
||||
|
||||
extern "C" void LoadRandomizerSettings(const char* spoilerFileName) {
|
||||
extern "C" void Randomizer_LoadSettings(const char* spoilerFileName) {
|
||||
OTRGlobals::Instance->gRandomizer->LoadRandomizerSettings(spoilerFileName);
|
||||
}
|
||||
|
||||
extern "C" void LoadHintLocations(const char* spoilerFileName) {
|
||||
extern "C" void Randomizer_LoadHintLocations(const char* spoilerFileName) {
|
||||
OTRGlobals::Instance->gRandomizer->LoadHintLocations(spoilerFileName);
|
||||
}
|
||||
|
||||
extern "C" void LoadItemLocations(const char* spoilerFileName, bool silent) {
|
||||
extern "C" void Randomizer_LoadItemLocations(const char* spoilerFileName, bool silent) {
|
||||
OTRGlobals::Instance->gRandomizer->LoadItemLocations(spoilerFileName, silent);
|
||||
}
|
||||
|
||||
@@ -1391,11 +1391,11 @@ extern "C" bool SpoilerFileExists(const char* spoilerFileName) {
|
||||
return OTRGlobals::Instance->gRandomizer->SpoilerFileExists(spoilerFileName);
|
||||
}
|
||||
|
||||
extern "C" u8 GetRandoSettingValue(RandomizerSettingKey randoSettingKey) {
|
||||
extern "C" u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(randoSettingKey);
|
||||
}
|
||||
|
||||
extern "C" RandomizerCheck GetCheckFromActor(s16 sceneNum, s16 actorId, s16 actorParams) {
|
||||
extern "C" RandomizerCheck Randomizer_GetCheckFromActor(s16 sceneNum, s16 actorId, s16 actorParams) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetCheckFromActor(sceneNum, actorId, actorParams);
|
||||
}
|
||||
|
||||
@@ -1471,33 +1471,42 @@ extern "C" int CopyScrubMessage(u16 scrubTextId, char* buffer, const int maxBuff
|
||||
return CopyStringToCharBuffer(scrubText, buffer, maxBufferSize);
|
||||
}
|
||||
|
||||
extern "C" int CopyAltarMessage(char* buffer, const int maxBufferSize) {
|
||||
extern "C" int Randomizer_CopyAltarMessage(char* buffer, const int maxBufferSize) {
|
||||
const std::string& altarText = (LINK_IS_ADULT) ? OTRGlobals::Instance->gRandomizer->GetAdultAltarText()
|
||||
: OTRGlobals::Instance->gRandomizer->GetChildAltarText();
|
||||
return CopyStringToCharBuffer(altarText, buffer, maxBufferSize);
|
||||
}
|
||||
|
||||
extern "C" int CopyGanonText(char* buffer, const int maxBufferSize) {
|
||||
extern "C" int Randomizer_CopyGanonText(char* buffer, const int maxBufferSize) {
|
||||
const std::string& ganonText = OTRGlobals::Instance->gRandomizer->GetGanonText();
|
||||
return CopyStringToCharBuffer(ganonText, buffer, maxBufferSize);
|
||||
}
|
||||
|
||||
extern "C" int CopyGanonHintText(char* buffer, const int maxBufferSize) {
|
||||
extern "C" int Randomizer_CopyGanonHintText(char* buffer, const int maxBufferSize) {
|
||||
const std::string& ganonText = OTRGlobals::Instance->gRandomizer->GetGanonHintText();
|
||||
return CopyStringToCharBuffer(ganonText, buffer, maxBufferSize);
|
||||
}
|
||||
|
||||
extern "C" int CopyHintFromCheck(RandomizerCheck check, char* buffer, const int maxBufferSize) {
|
||||
extern "C" int Randomizer_CopyHintFromCheck(RandomizerCheck check, char* buffer, const int maxBufferSize) {
|
||||
// we don't want to make a copy of the std::string returned from GetHintFromCheck
|
||||
// so we're just going to let RVO take care of it
|
||||
const std::string& hintText = OTRGlobals::Instance->gRandomizer->GetHintFromCheck(check);
|
||||
return CopyStringToCharBuffer(hintText, buffer, maxBufferSize);
|
||||
}
|
||||
|
||||
extern "C" s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum) {
|
||||
extern "C" s32 Randomizer_GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemId(ogId, actorId, actorParams, sceneNum);
|
||||
}
|
||||
|
||||
extern "C" s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||
extern "C" s32 Randomizer_GetItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemIdFromKnownCheck(randomizerCheck, ogId);
|
||||
}
|
||||
|
||||
extern "C" bool Randomizer_ObtainedFreestandingIceTrap(RandomizerCheck randomizerCheck, GetItemID ogId, Actor* actor) {
|
||||
return gSaveContext.n64ddFlag && (actor->parent != NULL) &&
|
||||
Randomizer_GetItemIdFromKnownCheck(randomizerCheck, ogId) == GI_ICE_TRAP;
|
||||
}
|
||||
|
||||
extern "C" bool Randomizer_ItemIsIceTrap(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||
return gSaveContext.n64ddFlag && Randomizer_GetItemIdFromKnownCheck(randomizerCheck, ogId) == GI_ICE_TRAP;
|
||||
}
|
||||
|
||||
+15
-13
@@ -84,19 +84,21 @@ void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples);
|
||||
int Controller_ShouldRumble(size_t i);
|
||||
void* getN64WeirdFrame(s32 i);
|
||||
Sprite* GetSeedTexture(uint8_t index);
|
||||
void LoadRandomizerSettings(const char* spoilerFileName);
|
||||
u8 GetRandoSettingValue(RandomizerSettingKey randoSettingKey);
|
||||
RandomizerCheck GetCheckFromActor(s16 actorId, s16 actorParams, s16 sceneNum);
|
||||
int CopyAltarMessage(char* buffer, const int maxBufferSize);
|
||||
int CopyHintFromCheck(RandomizerCheck check, char* buffer, const int maxBufferSize);
|
||||
int CopyGanonText(char* buffer, const int maxBufferSize);
|
||||
int CopyGanonHintText(char* buffer, const int maxBufferSize);
|
||||
void LoadHintLocations(const char* spoilerFileName);
|
||||
void LoadItemLocations(const char* spoilerFileName, bool silent);
|
||||
s16 GetItemModelFromId(s16 itemId);
|
||||
s32 GetItemIDFromGetItemID(s32 getItemId);
|
||||
s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
||||
s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||
void Randomizer_LoadSettings(const char* spoilerFileName);
|
||||
u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey);
|
||||
RandomizerCheck Randomizer_GetCheckFromActor(s16 actorId, s16 actorParams, s16 sceneNum);
|
||||
int Randomizer_CopyAltarMessage(char* buffer, const int maxBufferSize);
|
||||
int Randomizer_CopyHintFromCheck(RandomizerCheck check, char* buffer, const int maxBufferSize);
|
||||
int Randomizer_CopyGanonText(char* buffer, const int maxBufferSize);
|
||||
int Randomizer_CopyGanonHintText(char* buffer, const int maxBufferSize);
|
||||
void Randomizer_LoadHintLocations(const char* spoilerFileName);
|
||||
void Randomizer_LoadItemLocations(const char* spoilerFileName, bool silent);
|
||||
s16 Randomizer_GetItemModelFromId(s16 itemId);
|
||||
s32 Randomizer_GetItemIDFromGetItemID(s32 getItemId);
|
||||
s32 Randomizer_GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
||||
s32 Randomizer_GetItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||
bool Randomizer_ObtainedFreestandingIceTrap(RandomizerCheck randomizerCheck, GetItemID ogId, Actor* actor);
|
||||
bool Randomizer_ItemIsIceTrap(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -517,6 +517,19 @@ void SaveManager::LoadFile(int fileNum) {
|
||||
InitMeta(fileNum);
|
||||
}
|
||||
|
||||
bool SaveManager::SaveFile_Exist(int fileNum) {
|
||||
|
||||
try {
|
||||
std::filesystem::exists(GetFileName(fileNum));
|
||||
printf("File[%d] - exist \n",fileNum);
|
||||
return true;
|
||||
}
|
||||
catch(std::filesystem::filesystem_error const& ex) {
|
||||
printf("File[%d] - do not exist \n",fileNum);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void SaveManager::AddInitFunction(InitFunc func) {
|
||||
initFuncs.emplace_back(func);
|
||||
}
|
||||
@@ -1332,3 +1345,7 @@ extern "C" void Save_CopyFile(int from, int to) {
|
||||
extern "C" void Save_DeleteFile(int fileNum) {
|
||||
SaveManager::Instance->DeleteZeldaFile(fileNum);
|
||||
}
|
||||
|
||||
extern "C" bool Save_Exist(int fileNum) {
|
||||
return SaveManager::Instance->SaveFile_Exist(fileNum);
|
||||
}
|
||||
@@ -41,6 +41,7 @@ public:
|
||||
void SaveFile(int fileNum);
|
||||
void SaveGlobal();
|
||||
void LoadFile(int fileNum);
|
||||
bool SaveFile_Exist(int fileNum);
|
||||
|
||||
// Adds a function that is called when we are intializing a save, including when we are loading a save.
|
||||
void AddInitFunction(InitFunc func);
|
||||
@@ -149,5 +150,5 @@ void Save_AddSaveFunction(char* name, int version, Save_SaveFunc func);
|
||||
SaveFileMetaInfo* Save_GetSaveMetaInfo(int fileNum);
|
||||
void Save_CopyFile(int from, int to);
|
||||
void Save_DeleteFile(int fileNum);
|
||||
|
||||
bool Save_Exist(int fileNum);
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const char gBuildVersion[] = "RACHAEL ALFA (3.0.0)";
|
||||
const char gBuildVersion[] = "RACHAEL BRAVO (3.0.1)";
|
||||
const char gBuildTeam[] = "github.com/harbourmasters";
|
||||
const char gBuildDate[] = __DATE__ " " __TIME__;
|
||||
const char gBuildMakeOption[] = "";
|
||||
|
||||
@@ -409,7 +409,9 @@ void GameState_Update(GameState* gameState) {
|
||||
// Unrestricted Items
|
||||
if (CVar_GetS32("gNoRestrictItems", 0) != 0) {
|
||||
if (gGlobalCtx) {
|
||||
u8 sunsBackup = gGlobalCtx->interfaceCtx.restrictions.sunsSong;
|
||||
memset(&gGlobalCtx->interfaceCtx.restrictions, 0, sizeof(gGlobalCtx->interfaceCtx.restrictions));
|
||||
gGlobalCtx->interfaceCtx.restrictions.sunsSong = sunsBackup;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,13 +55,13 @@ void SpeedMeter_DrawTimeEntries(SpeedMeter* this, GraphicsContext* gfxCtx) {
|
||||
uly = this->y;
|
||||
lry = this->y + 2;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
/*! @bug if gIrqMgrRetraceTime is 0, CLOSE_DISPS will never be reached */
|
||||
if (gIrqMgrRetraceTime == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0];
|
||||
for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) {
|
||||
temp = ((f64) * (sSpeedMeterTimeEntryPtr->time) / gIrqMgrRetraceTime) * 64.0;
|
||||
|
||||
+12
-8
@@ -3973,6 +3973,8 @@ void Actor_DrawDoorLock(GlobalContext* globalCtx, s32 frame, s32 type) {
|
||||
f32 chainsTranslateX;
|
||||
f32 chainsTranslateY;
|
||||
f32 rotZStep;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
entry = &sDoorLocksInfo[type];
|
||||
chainRotZ = entry->chainsRotZInit;
|
||||
@@ -3986,6 +3988,7 @@ void Actor_DrawDoorLock(GlobalContext* globalCtx, s32 frame, s32 type) {
|
||||
chainsTranslateY = cosf(entry->chainAngle - chainRotZ) * (10 - frame) * 0.1f * entry->chainLength;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
FrameInterpolation_RecordOpenChild(entry, epoch + i * 25);
|
||||
Matrix_Put(&baseMtxF);
|
||||
Matrix_RotateZ(chainRotZ, MTXMODE_APPLY);
|
||||
Matrix_Translate(chainsTranslateX, chainsTranslateY, 0.0f, MTXMODE_APPLY);
|
||||
@@ -4005,6 +4008,7 @@ void Actor_DrawDoorLock(GlobalContext* globalCtx, s32 frame, s32 type) {
|
||||
}
|
||||
|
||||
chainRotZ += rotZStep;
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
Matrix_Put(&baseMtxF);
|
||||
@@ -5983,7 +5987,7 @@ s32 func_80038290(GlobalContext* globalCtx, Actor* actor, Vec3s* arg2, Vec3s* ar
|
||||
}
|
||||
|
||||
s32 GetChestGameRandoGetItemId(s8 room, s16 ogDrawId, GlobalContext* globalCtx) {
|
||||
if (GetRandoSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
// RANDOTODO update this logic when we implement keysanity
|
||||
// because 3drando replaces the keys not the rupees
|
||||
if (ogDrawId == GID_RUPEE_GREEN ||
|
||||
@@ -5993,27 +5997,27 @@ s32 GetChestGameRandoGetItemId(s8 room, s16 ogDrawId, GlobalContext* globalCtx)
|
||||
switch(room) {
|
||||
case 1:
|
||||
if(!Flags_GetCollectible(globalCtx, 0x1B)) {
|
||||
return GetRandomizedItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, GI_RUPEE_GREEN);
|
||||
return Randomizer_GetItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, GI_RUPEE_GREEN);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if(!Flags_GetCollectible(globalCtx, 0x1C)) {
|
||||
return GetRandomizedItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, GI_RUPEE_GREEN);
|
||||
return Randomizer_GetItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, GI_RUPEE_GREEN);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if(!Flags_GetCollectible(globalCtx, 0x1D)) {
|
||||
return GetRandomizedItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, GI_RUPEE_BLUE);
|
||||
return Randomizer_GetItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, GI_RUPEE_BLUE);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if(!Flags_GetCollectible(globalCtx, 0x1E)) {
|
||||
return GetRandomizedItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, GI_RUPEE_BLUE);
|
||||
return Randomizer_GetItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, GI_RUPEE_BLUE);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if(!Flags_GetCollectible(globalCtx, 0x1F)) {
|
||||
return GetRandomizedItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, GI_RUPEE_RED);
|
||||
return Randomizer_GetItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, GI_RUPEE_RED);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -6021,7 +6025,7 @@ s32 GetChestGameRandoGetItemId(s8 room, s16 ogDrawId, GlobalContext* globalCtx)
|
||||
}
|
||||
|
||||
if(ogDrawId == GID_HEART_PIECE) {
|
||||
return GetRandomizedItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_REWARD, GI_HEART_PIECE);
|
||||
return Randomizer_GetItemIdFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_REWARD, GI_HEART_PIECE);
|
||||
}
|
||||
|
||||
return GI_NONE;
|
||||
@@ -6031,7 +6035,7 @@ s16 GetChestGameRandoGiDrawId(s8 room, s16 ogDrawId, GlobalContext* globalCtx) {
|
||||
s32 randoGetItemId = GetChestGameRandoGetItemId(room, ogDrawId, globalCtx);
|
||||
|
||||
if(randoGetItemId != GI_NONE) {
|
||||
return GetItemModelFromId(randoGetItemId);
|
||||
return Randomizer_GetItemModelFromId(randoGetItemId);
|
||||
}
|
||||
|
||||
return ogDrawId;
|
||||
|
||||
+46
-56
@@ -1431,70 +1431,53 @@ s32 SetCameraManual(Camera* camera) {
|
||||
}
|
||||
|
||||
s32 Camera_Free(Camera* camera) {
|
||||
Normal1* norm1 = (Normal1*)camera->paramData;
|
||||
Vec3f* eye = &camera->eye;
|
||||
Vec3f* at = &camera->at;
|
||||
Vec3f* eyeNext = &camera->eyeNext;
|
||||
VecSph spA8;
|
||||
CamColChk sp6C;
|
||||
Parallel1* para1 = (Parallel1*)camera->paramData;
|
||||
f32 playerHeight;
|
||||
|
||||
f32 playerHeight = Player_GetHeight(camera->player);
|
||||
f32 sp94;
|
||||
CamColChk camBgChk;
|
||||
PosRot* playerPosRot = &camera->playerPosRot;
|
||||
Vec3f at;
|
||||
at->x = Camera_LERPCeilF(camera->player->actor.world.pos.x, camera->at.x, 0.5f, 1.0f);
|
||||
at->y = Camera_LERPCeilF(camera->player->actor.world.pos.y + (camera->player->rideActor != NULL
|
||||
? Player_GetHeight(camera->player) / 2
|
||||
: Player_GetHeight(camera->player)) /
|
||||
1.2f,
|
||||
camera->at.y, 0.5f, 1.0f);
|
||||
at->z = Camera_LERPCeilF(camera->player->actor.world.pos.z, camera->at.z, 0.5f, 1.0f);
|
||||
|
||||
sCameraInterfaceFlags = norm1->interfaceFlags;
|
||||
playerHeight = Player_GetHeight(camera->player);
|
||||
|
||||
if (RELOAD_PARAMS) {
|
||||
VecSph eyeAdjustment1;
|
||||
OLib_Vec3fDiffToVecSphGeo(&eyeAdjustment1, &camera->at, &camera->eye);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spA8, &camera->at, &camera->eye);
|
||||
|
||||
camera->globalCtx->camX = eyeAdjustment1.yaw;
|
||||
camera->globalCtx->camY = eyeAdjustment1.pitch;
|
||||
camera->globalCtx->camX = spA8.yaw;
|
||||
camera->globalCtx->camY = spA8.pitch;
|
||||
|
||||
CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
|
||||
f32 yNormal = (1.0f + PCT(R_CAM_YOFFSET_NORM) - PCT(R_CAM_YOFFSET_NORM) * (68.0f / playerHeight));
|
||||
sp94 = yNormal * PCT(playerHeight);
|
||||
f32 yNormal = (1.0f + PCT(OREG(46))) - (PCT(OREG(46)) * (68.0f / playerHeight));
|
||||
|
||||
norm1->yOffset = NEXTSETTING * sp94;
|
||||
norm1->distMin = NEXTSETTING * sp94;
|
||||
norm1->distMax = NEXTSETTING * sp94;
|
||||
norm1->pitchTarget = DEGF_TO_BINANG(NEXTSETTING);
|
||||
norm1->unk_0C = NEXTSETTING;
|
||||
norm1->unk_10 = NEXTSETTING;
|
||||
norm1->unk_14 = NEXTPCT;
|
||||
norm1->fovTarget = NEXTSETTING;
|
||||
norm1->atLERPScaleMax = NEXTPCT;
|
||||
norm1->interfaceFlags = NEXTSETTING;
|
||||
para1->yOffset = NEXTPCT * playerHeight * yNormal;
|
||||
para1->distTarget = NEXTPCT * playerHeight * yNormal;
|
||||
para1->pitchTarget = DEGF_TO_BINANG(NEXTSETTING);
|
||||
para1->yawTarget = DEGF_TO_BINANG(NEXTSETTING);
|
||||
para1->unk_08 = NEXTSETTING;
|
||||
para1->unk_0C = NEXTSETTING;
|
||||
para1->fovTarget = NEXTSETTING;
|
||||
para1->unk_14 = NEXTPCT;
|
||||
para1->interfaceFlags = NEXTSETTING;
|
||||
para1->unk_18 = NEXTPCT * playerHeight * yNormal;
|
||||
para1->unk_1C = NEXTPCT;
|
||||
}
|
||||
|
||||
if (R_RELOAD_CAM_PARAMS) {
|
||||
Camera_CopyPREGToModeValues(camera);
|
||||
}
|
||||
|
||||
VecSph eyeAdjustment;
|
||||
const f32 camSpeed = 0.5f;
|
||||
sCameraInterfaceFlags = 1;
|
||||
|
||||
camera->animState = 0;
|
||||
|
||||
at.x = Camera_LERPCeilF(camera->player->actor.world.pos.x, camera->at.x, camSpeed, 1.0f);
|
||||
at.y = Camera_LERPCeilF(camera->player->actor.world.pos.y + (camera->player->rideActor != NULL ? Player_GetHeight(camera->player) / 2 : Player_GetHeight(camera->player)) / 1.2f, camera->at.y, camSpeed, 1.0f);
|
||||
at.z = Camera_LERPCeilF(camera->player->actor.world.pos.z, camera->at.z, camSpeed, 1.0f);
|
||||
|
||||
OLib_Vec3fDiffToVecSphGeo(&eyeAdjustment, &at, &camera->eye);
|
||||
|
||||
camBgChk.pos = camera->eye;
|
||||
|
||||
float maxRadius = 150.0f;
|
||||
if (Camera_BGCheckInfo(camera, &at, &camBgChk)) {
|
||||
VecSph collSphere;
|
||||
OLib_Vec3fDiffToVecSphGeo(&collSphere, &at, &camBgChk.pos);
|
||||
float rad = collSphere.r;
|
||||
|
||||
if (rad >= maxRadius) {
|
||||
camera->dist = eyeAdjustment.r = Camera_LERPCeilF(maxRadius, camera->dist, camSpeed / 4, 1.0f);
|
||||
} else {
|
||||
camera->dist = eyeAdjustment.r = rad;
|
||||
}
|
||||
} else {
|
||||
camera->dist = eyeAdjustment.r = Camera_LERPCeilF(maxRadius, camera->dist, camSpeed / 4, 1.0f);
|
||||
}
|
||||
camera->animState = 1;
|
||||
|
||||
f32 newCamX = -D_8015BD7C->state.input[0].cur.cam_x;
|
||||
f32 newCamY = D_8015BD7C->state.input[0].cur.cam_y;
|
||||
@@ -1509,15 +1492,22 @@ s32 Camera_Free(Camera* camera) {
|
||||
camera->globalCtx->camY = -0x228C;
|
||||
}
|
||||
|
||||
eyeAdjustment.yaw = camera->globalCtx->camX;
|
||||
eyeAdjustment.pitch = camera->globalCtx->camY;
|
||||
camera->dist = Camera_LERPCeilF(para1->distTarget, camera->dist, 1.0f / camera->rUpdateRateInv, 0.0f);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spA8, at, eyeNext);
|
||||
|
||||
Camera_Vec3fVecSphGeoAdd(&camera->eye, &at, &eyeAdjustment);
|
||||
spA8.r = camera->dist;
|
||||
spA8.yaw = camera->globalCtx->camX;
|
||||
spA8.pitch = camera->globalCtx->camY;
|
||||
|
||||
camera->at = at;
|
||||
camera->fov = Camera_LERPCeilF(60.0f, camera->fov, camSpeed / 2, 1.0f);
|
||||
camera->roll = 0;
|
||||
camera->eyeNext = camera->eye;
|
||||
Camera_Vec3fVecSphGeoAdd(eyeNext, at, &spA8);
|
||||
if (camera->status == CAM_STAT_ACTIVE) {
|
||||
sp6C.pos = *eyeNext;
|
||||
Camera_BGCheckInfo(camera, at, &sp6C);
|
||||
*eye = sp6C.pos;
|
||||
}
|
||||
|
||||
camera->fov = Camera_LERPCeilF(65.0f, camera->fov, camera->fovUpdateRate, 1.0f);
|
||||
camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5, 0xA);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -2124,7 +2124,7 @@ void Cutscene_HandleConditionalTriggers(GlobalContext* globalCtx) {
|
||||
|
||||
// If we are rando and tower escape skip is on, then set the flag to say we saw the towers fall
|
||||
// and exit.
|
||||
if (gSaveContext.n64ddFlag && GetRandoSettingValue(RSK_SKIP_TOWER_ESCAPE)) {
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SKIP_TOWER_ESCAPE)) {
|
||||
return;
|
||||
}
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
|
||||
@@ -47,6 +47,7 @@ void EffectShieldParticle_Init(void* thisx, void* initParamsx) {
|
||||
elem->endXChange = elem->initialSpeed;
|
||||
elem->yaw = Rand_ZeroOne() * 65534.0f;
|
||||
elem->pitch = Rand_ZeroOne() * 65534.0f;
|
||||
elem->epoch++;
|
||||
}
|
||||
|
||||
this->lightDecay = initParams->lightDecay;
|
||||
@@ -156,7 +157,6 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
||||
Color_RGBA8 primColor;
|
||||
Color_RGBA8 envColor;
|
||||
|
||||
FrameInterpolation_RecordOpenChild(this, 0);
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
if (this != NULL) {
|
||||
@@ -182,6 +182,8 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
|
||||
for (elem = &this->elements[0]; elem < &this->elements[this->numElements]; elem++) {
|
||||
FrameInterpolation_RecordOpenChild(elem, elem->epoch);
|
||||
|
||||
Mtx* mtx;
|
||||
MtxF sp104;
|
||||
MtxF spC4;
|
||||
@@ -212,9 +214,10 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPVertex(POLY_XLU_DISP++, sVertices, 4, 0);
|
||||
gSP2Triangles(POLY_XLU_DISP++, 0, 1, 2, 0, 0, 3, 1, 0);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
@@ -89,6 +89,7 @@ void EffectSpark_Init(void* thisx, void* initParamsx) {
|
||||
elem->unkPosition.x = Rand_ZeroOne() * 65534.0f;
|
||||
elem->unkPosition.y = Rand_ZeroOne() * 65534.0f;
|
||||
elem->unkPosition.z = Rand_ZeroOne() * 65534.0f;
|
||||
elem->epoch++;
|
||||
}
|
||||
|
||||
this->timer = 0;
|
||||
@@ -210,6 +211,8 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
||||
Mtx* mtx;
|
||||
f32 temp;
|
||||
|
||||
FrameInterpolation_RecordOpenChild(elem, elem->epoch);
|
||||
|
||||
SkinMatrix_SetTranslate(&spEC, elem->position.x, elem->position.y, elem->position.z);
|
||||
temp = ((Rand_ZeroOne() * 2.5f) + 1.5f) / 64.0f;
|
||||
SkinMatrix_SetScale(&spAC, temp, temp, 1.0f);
|
||||
@@ -264,6 +267,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
||||
|
||||
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp12C);
|
||||
if (mtx == NULL) {
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
goto end;
|
||||
}
|
||||
|
||||
@@ -273,6 +277,8 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
||||
}
|
||||
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
end:
|
||||
|
||||
@@ -509,7 +509,7 @@ void EnItem00_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if ((gSaveContext.n64ddFlag || getItemId != GI_NONE) && !Actor_HasParent(&this->actor, globalCtx)) {
|
||||
getItemId = GetRandomizedItemId(getItemId, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
getItemId = Randomizer_GetRandomizedItemId(getItemId, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
func_8002F554(&this->actor, globalCtx, getItemId);
|
||||
}
|
||||
|
||||
@@ -548,7 +548,7 @@ void func_8001DFC8(EnItem00* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->actor.params == ITEM00_HEART_PIECE) {
|
||||
if ((CVar_GetS32("gNewDrops", 0) !=0) && !gSaveContext.n64ddFlag) {
|
||||
if (CVar_GetS32("gNewDrops", 0) && !gSaveContext.n64ddFlag) {
|
||||
this->actor.shape.yOffset = Math_SinS(this->actor.shape.rot.y) * 20.0f + 50.0f;
|
||||
} else {
|
||||
this->actor.shape.yOffset = Math_SinS(this->actor.shape.rot.y) * 150.0f + 850.0f;
|
||||
@@ -881,7 +881,7 @@ void EnItem00_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
if ((getItemId != GI_NONE) && !Actor_HasParent(&this->actor, globalCtx)) {
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
getItemId = GetRandomizedItemId(getItemId, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
getItemId = Randomizer_GetRandomizedItemId(getItemId, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
}
|
||||
func_8002F554(&this->actor, globalCtx, getItemId);
|
||||
}
|
||||
@@ -996,6 +996,7 @@ void EnItem00_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->actor.shape.shadowScale = 0.3f;
|
||||
this->actor.world.rot.x = 0x4000;
|
||||
GetItem_Draw(globalCtx, GID_RUPEE_PURPLE);
|
||||
break;
|
||||
} else {
|
||||
Actor_SetScale(&this->actor, 0.03f);
|
||||
this->actor.shape.shadowScale = 6.0f;
|
||||
@@ -1297,14 +1298,14 @@ void EnItem00_DrawRupee(EnItem00* this, GlobalContext* globalCtx) {
|
||||
* Draw Function used for most collectible types of En_Item00 (ammo, bombs, sticks, nuts, magic...).
|
||||
*/
|
||||
void EnItem00_DrawCollectible(EnItem00* this, GlobalContext* globalCtx) {
|
||||
if ((gSaveContext.n64ddFlag && this->getItemId != GI_NONE) || this->actor.params == ITEM00_SMALL_KEY) {
|
||||
if (gSaveContext.n64ddFlag && (this->getItemId != GI_NONE || this->actor.params == ITEM00_SMALL_KEY)) {
|
||||
f32 mtxScale = 16.0f;
|
||||
Matrix_Scale(mtxScale, mtxScale, mtxScale, MTXMODE_APPLY);
|
||||
s32 randoGetItemId = GetRandomizedItemId(this->getItemId, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
s32 randoGetItemId = Randomizer_GetRandomizedItemId(this->getItemId, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
if (randoGetItemId >= GI_MINUET_OF_FOREST && randoGetItemId <= GI_DOUBLE_DEFENSE) {
|
||||
EnItem00_CustomItemsParticles(&this->actor, globalCtx, randoGetItemId);
|
||||
}
|
||||
GetItem_Draw(globalCtx, GetItemModelFromId(randoGetItemId));
|
||||
GetItem_Draw(globalCtx, Randomizer_GetItemModelFromId(randoGetItemId));
|
||||
} else {
|
||||
s32 texIndex = this->actor.params - 3;
|
||||
|
||||
@@ -1360,11 +1361,11 @@ void EnItem00_DrawHeartPiece(EnItem00* this, GlobalContext* globalCtx) {
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
f32 mtxScale = 16.0f;
|
||||
Matrix_Scale(mtxScale, mtxScale, mtxScale, MTXMODE_APPLY);
|
||||
s32 randoGetItemId = GetRandomizedItemId(GI_HEART_PIECE, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
s32 randoGetItemId = Randomizer_GetRandomizedItemId(GI_HEART_PIECE, this->actor.id, this->ogParams, globalCtx->sceneNum);
|
||||
if (randoGetItemId >= GI_MINUET_OF_FOREST && randoGetItemId <= GI_DOUBLE_DEFENSE) {
|
||||
EnItem00_CustomItemsParticles(&this->actor, globalCtx, randoGetItemId);
|
||||
}
|
||||
GetItem_Draw(globalCtx, GetItemModelFromId(randoGetItemId));
|
||||
GetItem_Draw(globalCtx, Randomizer_GetItemModelFromId(randoGetItemId));
|
||||
} else {
|
||||
s32 pad;
|
||||
|
||||
|
||||
+24
-4
@@ -3,6 +3,7 @@
|
||||
#include "vt.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ LENS_FLARE_CIRCLE0,
|
||||
@@ -950,7 +951,6 @@ void Environment_Update(GlobalContext* globalCtx, EnvironmentContext* envCtx, Li
|
||||
Gfx* prevDisplayList;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
prevDisplayList = POLY_OPA_DISP;
|
||||
displayList = Graph_GfxPlusOne(POLY_OPA_DISP);
|
||||
gSPDisplayList(OVERLAY_DISP++, displayList);
|
||||
@@ -1459,6 +1459,8 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
|
||||
LENS_FLARE_RING, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1,
|
||||
LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1,
|
||||
};
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
@@ -1502,9 +1504,7 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
|
||||
unk88Target = cosAngle;
|
||||
}
|
||||
|
||||
if (cosAngle < 0.0f) {
|
||||
|
||||
} else {
|
||||
if (!(cosAngle < 0.0f)) {
|
||||
if (arg9) {
|
||||
u32 shrink = ShrinkWindow_GetCurrentVal();
|
||||
func_800C016C(globalCtx, &pos, &screenPos);
|
||||
@@ -1517,6 +1517,8 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(lensFlareTypes); i++) {
|
||||
FrameInterpolation_RecordOpenChild("Lens Flare", epoch + i * 25);
|
||||
|
||||
Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_NEW);
|
||||
|
||||
if (arg9) {
|
||||
@@ -1573,6 +1575,8 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLensFlareRingDL);
|
||||
break;
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
alphaScale = cosAngle - (1.5f - cosAngle);
|
||||
@@ -1638,6 +1642,8 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
|
||||
Vec3f unused = { 0.0f, 0.0f, 0.0f };
|
||||
Vec3f windDirection = { 0.0f, 0.0f, 0.0f };
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
if (!(globalCtx->cameraPtrs[0]->unk_14C & 0x100) && (globalCtx->envCtx.unk_EE[2] == 0)) {
|
||||
OPEN_DISPS(gfxCtx);
|
||||
@@ -1667,6 +1673,8 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
|
||||
|
||||
// draw rain drops
|
||||
for (i = 0; i < globalCtx->envCtx.unk_EE[1]; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Rain Drop", epoch + i * 25);
|
||||
|
||||
temp2 = Rand_ZeroOne();
|
||||
temp1 = Rand_ZeroOne();
|
||||
temp3 = Rand_ZeroOne();
|
||||
@@ -1692,6 +1700,8 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gRaindropDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
// draw droplet rings on the ground
|
||||
@@ -1699,6 +1709,8 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
|
||||
u8 firstDone = false;
|
||||
|
||||
for (i = 0; i < globalCtx->envCtx.unk_EE[1]; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Droplet Ring", epoch + i * 25);
|
||||
|
||||
if (!firstDone) {
|
||||
func_80093D84(gfxCtx);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0);
|
||||
@@ -1719,6 +1731,8 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1911,10 +1925,14 @@ void Environment_DrawLightning(GlobalContext* globalCtx, s32 unused) {
|
||||
s32 pad[2];
|
||||
Vec3f unused1 = { 0.0f, 0.0f, 0.0f };
|
||||
Vec3f unused2 = { 0.0f, 0.0f, 0.0f };
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sLightningBolts); i++) {
|
||||
FrameInterpolation_RecordOpenChild("Lightning Bolt", epoch + i * 25);
|
||||
|
||||
switch (sLightningBolts[i].state) {
|
||||
case LIGHTNING_BOLT_START:
|
||||
dx = globalCtx->view.lookAt.x - globalCtx->view.eye.x;
|
||||
@@ -1969,6 +1987,8 @@ void Environment_DrawLightning(GlobalContext* globalCtx, s32 unused) {
|
||||
gSPMatrix(POLY_XLU_DISP++, SEG_ADDR(1, 0), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffLightningDL);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "textures/parameter_static/parameter_static.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
s16 Top_LM_Margin = 0;
|
||||
s16 Left_LM_Margin = 0;
|
||||
@@ -412,6 +413,8 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
|
||||
s32 curCombineModeSet = 0;
|
||||
u8* curBgImgLoaded = NULL;
|
||||
s32 ddHeartCountMinusOne = gSaveContext.inventory.defenseHearts - 1;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
@@ -449,6 +452,8 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
for (i = 0; i < totalHeartCount; i++) {
|
||||
FrameInterpolation_RecordOpenChild("HealthMeter Heart", epoch + i * 25);
|
||||
|
||||
if ((ddHeartCountMinusOne < 0) || (i > ddHeartCountMinusOne)) {
|
||||
if (i < fullHeartCount) {
|
||||
if (curColorSet != 0) {
|
||||
@@ -624,6 +629,8 @@ void HealthMeter_Draw(GlobalContext* globalCtx) {
|
||||
offsetX = PosX_original;
|
||||
}
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
|
||||
@@ -1676,11 +1676,11 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) {
|
||||
// if we're rando'd and talking to a gossip stone
|
||||
if (gSaveContext.n64ddFlag &&
|
||||
textId == 0x2053 &&
|
||||
GetRandoSettingValue(RSK_GOSSIP_STONE_HINTS) != 0 &&
|
||||
(GetRandoSettingValue(RSK_GOSSIP_STONE_HINTS) == 1 ||
|
||||
(GetRandoSettingValue(RSK_GOSSIP_STONE_HINTS) == 2 &&
|
||||
Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) != 0 &&
|
||||
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == 1 ||
|
||||
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == 2 &&
|
||||
Player_GetMask(globalCtx) == PLAYER_MASK_TRUTH) ||
|
||||
(GetRandoSettingValue(RSK_GOSSIP_STONE_HINTS) == 3 &&
|
||||
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == 3 &&
|
||||
CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)))) {
|
||||
|
||||
s16 actorParams = msgCtx->talkActor->params;
|
||||
@@ -1700,14 +1700,14 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) {
|
||||
}
|
||||
}
|
||||
|
||||
RandomizerCheck hintCheck = GetCheckFromActor(globalCtx->sceneNum, msgCtx->talkActor->id, actorParams);
|
||||
RandomizerCheck hintCheck = Randomizer_GetCheckFromActor(globalCtx->sceneNum, msgCtx->talkActor->id, actorParams);
|
||||
|
||||
// Pass the sizeof the message buffer so we don't hardcode any sizes and can rely on globals.
|
||||
// If no hint can be found, this just returns 0 size and doesn't modify the buffer, so no worries.
|
||||
msgCtx->msgLength = font->msgLength = CopyHintFromCheck(hintCheck, font->msgBuf, sizeof(font->msgBuf));
|
||||
msgCtx->msgLength = font->msgLength = Randomizer_CopyHintFromCheck(hintCheck, font->msgBuf, sizeof(font->msgBuf));
|
||||
} else if (gSaveContext.n64ddFlag && (textId == 0x7040 || textId == 0x7088)) {
|
||||
// rando hints at altar
|
||||
msgCtx->msgLength = font->msgLength = CopyAltarMessage(font->msgBuf, sizeof(font->msgBuf));
|
||||
msgCtx->msgLength = font->msgLength = Randomizer_CopyAltarMessage(font->msgBuf, sizeof(font->msgBuf));
|
||||
} else if (textId == 0x00b4 && CVar_GetS32("gInjectSkulltulaCount", 0) != 0) {
|
||||
switch (gSaveContext.language) {
|
||||
case LANGUAGE_FRA:
|
||||
@@ -1731,9 +1731,9 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) {
|
||||
msgCtx->msgLength = font->msgLength = CopyScrubMessage(textId, font->msgBuf, sizeof(font->msgBuf));
|
||||
} else if (gSaveContext.n64ddFlag && textId == 0x70CC) {
|
||||
if (INV_CONTENT(ITEM_ARROW_LIGHT) == ITEM_ARROW_LIGHT) {
|
||||
msgCtx->msgLength = font->msgLength = CopyGanonText(font->msgBuf, sizeof(font->msgBuf));
|
||||
msgCtx->msgLength = font->msgLength = Randomizer_CopyGanonText(font->msgBuf, sizeof(font->msgBuf));
|
||||
} else {
|
||||
msgCtx->msgLength = font->msgLength = CopyGanonHintText(font->msgBuf, sizeof(font->msgBuf));
|
||||
msgCtx->msgLength = font->msgLength = Randomizer_CopyGanonHintText(font->msgBuf, sizeof(font->msgBuf));
|
||||
}
|
||||
} else {
|
||||
msgCtx->msgLength = font->msgLength;
|
||||
@@ -2237,14 +2237,14 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
|
||||
}
|
||||
} else {
|
||||
osSyncPrintf("Na_StartOcarinaSinglePlayCheck2( message->ocarina_no );\n");
|
||||
func_800ECC04((1 << msgCtx->ocarinaAction) + 0x8000);
|
||||
func_800ECC04((1 << (msgCtx->ocarinaAction % 32)) + 0x8000);
|
||||
}
|
||||
msgCtx->msgMode = MSGMODE_OCARINA_PLAYING;
|
||||
} else if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_STARTING) {
|
||||
msgCtx->stateTimer = 20;
|
||||
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_SELECT_INSTRUMENT;
|
||||
} else {
|
||||
func_800ECC04((1 << (msgCtx->ocarinaAction + 0x11)) + 0x8000);
|
||||
func_800ECC04((1 << ((msgCtx->ocarinaAction + 0x11) % 32)) + 0x8000);
|
||||
// "Performance Check"
|
||||
osSyncPrintf("演奏チェック=%d\n", msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET);
|
||||
msgCtx->msgMode = MSGMODE_SONG_PLAYBACK;
|
||||
|
||||
@@ -1363,6 +1363,12 @@ void Inventory_SwapAgeEquipment(void) {
|
||||
u16 temp;
|
||||
|
||||
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
|
||||
// When becoming adult, remove swordless flag since we'll get master sword
|
||||
// Only in rando to keep swordless link bugs in vanilla
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
gSaveContext.infTable[29] &= ~1;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) {
|
||||
if (i != 0) {
|
||||
gSaveContext.childEquips.buttonItems[i] = gSaveContext.equips.buttonItems[i];
|
||||
@@ -1423,6 +1429,12 @@ void Inventory_SwapAgeEquipment(void) {
|
||||
gSaveContext.equips.equipment = gSaveContext.adultEquips.equipment;
|
||||
}
|
||||
} else {
|
||||
// When becoming child, set swordless flag if player doesn't have kokiri sword
|
||||
// Only in rando to keep swordless link bugs in vanilla
|
||||
if (gSaveContext.n64ddFlag && (1 << 0 & gSaveContext.inventory.equipment) == 0) {
|
||||
gSaveContext.infTable[29] |= 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) {
|
||||
gSaveContext.adultEquips.buttonItems[i] = gSaveContext.equips.buttonItems[i];
|
||||
|
||||
@@ -1676,13 +1688,15 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
|
||||
if (item == ITEM_SWORD_BGS) {
|
||||
gSaveContext.swordHealth = 8;
|
||||
|
||||
if (ALL_EQUIP_VALUE(EQUIP_SWORD) == 0xF) {
|
||||
gSaveContext.inventory.equipment ^= 8 << gEquipShifts[EQUIP_SWORD];
|
||||
if (ALL_EQUIP_VALUE(EQUIP_SWORD) == 0xF
|
||||
||(gSaveContext.n64ddFlag && ALL_EQUIP_VALUE(EQUIP_SWORD) == 0xE)) { // In rando, when buying Giant's Knife, also check
|
||||
gSaveContext.inventory.equipment ^= 8 << gEquipShifts[EQUIP_SWORD]; // for 0xE in case we don't have Kokiri Sword
|
||||
if (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KNIFE) {
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS;
|
||||
Interface_LoadItemIcon1(globalCtx, 0);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (item == ITEM_SWORD_MASTER) {
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
|
||||
gSaveContext.equips.equipment &= 0xFFF0;
|
||||
@@ -1810,13 +1824,13 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
|
||||
return ITEM_NONE;
|
||||
} else if (item == ITEM_WALLET_ADULT) {
|
||||
Inventory_ChangeUpgrade(UPG_WALLET, 1);
|
||||
if (gSaveContext.n64ddFlag && GetRandoSettingValue(RSK_FULL_WALLETS)) {
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_FULL_WALLETS)) {
|
||||
Rupees_ChangeBy(200);
|
||||
}
|
||||
return ITEM_NONE;
|
||||
} else if (item == ITEM_WALLET_GIANT) {
|
||||
Inventory_ChangeUpgrade(UPG_WALLET, 2);
|
||||
if (gSaveContext.n64ddFlag && GetRandoSettingValue(RSK_FULL_WALLETS)) {
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_FULL_WALLETS)) {
|
||||
Rupees_ChangeBy(500);
|
||||
}
|
||||
return ITEM_NONE;
|
||||
@@ -3329,8 +3343,8 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) {
|
||||
const s16 C_Right_BTN_Pos_ori[] = { C_RIGHT_BUTTON_X+X_Margins_CR, C_RIGHT_BUTTON_Y+Y_Margins_CR };
|
||||
const s16 C_Up_BTN_Pos_ori[] = { C_UP_BUTTON_X+X_Margins_CU, C_UP_BUTTON_Y+Y_Margins_CU };
|
||||
const s16 C_Down_BTN_Pos_ori[] = { C_DOWN_BUTTON_X+X_Margins_CD, C_DOWN_BUTTON_Y+Y_Margins_CD };
|
||||
s16 LabelX_Navi=8;
|
||||
s16 LabelY_Navi=4 - !!CVar_GetS32("gNaviTextFix", 0);
|
||||
s16 LabelX_Navi=7 + !!CVar_GetS32("gNaviTextFix", 0);
|
||||
s16 LabelY_Navi=4;
|
||||
s16 C_Left_BTN_Pos[2]; //(X,Y)
|
||||
s16 C_Right_BTN_Pos[2];
|
||||
s16 C_Up_BTN_Pos[2];
|
||||
|
||||
+12
-10
@@ -198,9 +198,10 @@ void GivePlayerRandoRewardSongOfTime(GlobalContext* globalCtx, RandomizerCheck c
|
||||
|
||||
if (gSaveContext.entranceIndex == 0x050F && player != NULL && !Player_InBlockingCsMode(globalCtx, player) &&
|
||||
!Flags_GetTreasure(globalCtx, 0x1F) && gSaveContext.nextTransition == 0xFF) {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_SONG_OF_TIME);
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_SONG_OF_TIME);
|
||||
GiveItemWithoutActor(globalCtx, getItemId);
|
||||
Flags_SetTreasure(globalCtx, 0x1F);
|
||||
player->pendingFlag.flagID = 0x1F;
|
||||
player->pendingFlag.flagType = FLAG_SCENE_TREASURE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,7 +213,7 @@ void GivePlayerRandoRewardNocturne(GlobalContext* globalCtx, RandomizerCheck che
|
||||
gSaveContext.entranceIndex == 0x0195) && LINK_IS_ADULT && CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) &&
|
||||
CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE) && CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER) && player != NULL &&
|
||||
!Player_InBlockingCsMode(globalCtx, player) && !Flags_GetEventChkInf(0xAA)) {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_NOCTURNE_OF_SHADOW);
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_NOCTURNE_OF_SHADOW);
|
||||
GiveItemWithoutActor(globalCtx, getItemId);
|
||||
Flags_SetEventChkInf(0xAA);
|
||||
}
|
||||
@@ -224,7 +225,7 @@ void GivePlayerRandoRewardRequiem(GlobalContext* globalCtx, RandomizerCheck chec
|
||||
if ((gSaveContext.gameMode == 0) && (gSaveContext.respawnFlag <= 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) {
|
||||
if ((gSaveContext.entranceIndex == 0x01E1) && !Flags_GetEventChkInf(0xAC) && player != NULL &&
|
||||
!Player_InBlockingCsMode(globalCtx, player)) {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_SONG_OF_TIME);
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_SONG_OF_TIME);
|
||||
GiveItemWithoutActor(globalCtx, getItemId);
|
||||
Flags_SetEventChkInf(0xAC);
|
||||
}
|
||||
@@ -237,17 +238,18 @@ void GivePlayerRandoRewardZeldaLightArrowsGift(GlobalContext* globalCtx, Randomi
|
||||
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) && LINK_IS_ADULT &&
|
||||
(gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_TOKINOMA) &&
|
||||
!Flags_GetTreasure(globalCtx, 0x1E) && player != NULL && !Player_InBlockingCsMode(globalCtx, player) &&
|
||||
globalCtx->sceneLoadFlag == 0 && player->getItemId == GI_NONE) {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_ARROW_LIGHT);
|
||||
globalCtx->sceneLoadFlag == 0) {
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_ARROW_LIGHT);
|
||||
GiveItemWithoutActor(globalCtx, getItemId);
|
||||
Flags_SetTreasure(globalCtx, 0x1E);
|
||||
player->pendingFlag.flagID = 0x1E;
|
||||
player->pendingFlag.flagType = FLAG_SCENE_TREASURE;
|
||||
}
|
||||
}
|
||||
|
||||
void GivePlayerRandoRewardSariaGift(GlobalContext* globalCtx, RandomizerCheck check) {
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
if (gSaveContext.entranceIndex == 0x05E0) {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_ZELDAS_LULLABY);
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_ZELDAS_LULLABY);
|
||||
|
||||
if ((!Flags_GetEventChkInf(0xC1) || (player->getItemId == getItemId && getItemId != GI_ICE_TRAP)) &&
|
||||
player != NULL && !Player_InBlockingCsMode(globalCtx, player)) {
|
||||
@@ -271,7 +273,7 @@ void Gameplay_Init(GameState* thisx) {
|
||||
u8 tempSetupIndex;
|
||||
s32 pad[2];
|
||||
|
||||
if (gSaveContext.n64ddFlag && GetRandoSettingValue(RSK_SKIP_CHILD_STEALTH)) {
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SKIP_CHILD_STEALTH)) {
|
||||
if (gSaveContext.entranceIndex == 0x7A) {
|
||||
gSaveContext.entranceIndex = 0x400;
|
||||
} else if (gSaveContext.entranceIndex == 0x296) {
|
||||
@@ -1407,7 +1409,7 @@ void Gameplay_Draw(GlobalContext* globalCtx) {
|
||||
OVERLAY_DISP = sp70;
|
||||
globalCtx->unk_121C7 = 2;
|
||||
SREG(33) |= 1;
|
||||
} else {
|
||||
} else if (R_PAUSE_MENU_MODE != 3) {
|
||||
Gameplay_Draw_DrawOverlayElements:
|
||||
if ((HREG(80) != 10) || (HREG(89) != 0)) {
|
||||
Gameplay_DrawOverlayElements(globalCtx);
|
||||
|
||||
@@ -402,6 +402,12 @@ BgImage* func_80096A74(PolygonType1* polygon1, GlobalContext* globalCtx) {
|
||||
|
||||
camera = GET_ACTIVE_CAM(globalCtx);
|
||||
camId = camera->camDataIdx;
|
||||
if (camId == -1 && CVar_GetS32("gNoRestrictItems", 0)) {
|
||||
// This prevents a crash when using items that change the
|
||||
// camera (such as din's fire) on scenes with prerendered backgrounds
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// jfifid
|
||||
camId2 = func_80041C10(&globalCtx->colCtx, camId, BGCHECK_SCENE)[2].y;
|
||||
if (camId2 >= 0) {
|
||||
|
||||
+19
-19
@@ -416,7 +416,7 @@ void GiveLinkDungeonReward(GetItemID getItemId) {
|
||||
}
|
||||
|
||||
void GiveLinksPocketMedallion() {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(RC_LINKS_POCKET, RG_NONE);
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(RC_LINKS_POCKET, RG_NONE);
|
||||
|
||||
GiveLinkDungeonReward(getItemId);
|
||||
}
|
||||
@@ -644,7 +644,7 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
// Give Link's pocket item
|
||||
GiveLinksPocketMedallion();
|
||||
|
||||
int openForest = GetRandoSettingValue(RSK_FOREST);
|
||||
int openForest = Randomizer_GetSettingValue(RSK_FOREST);
|
||||
switch (openForest) {
|
||||
case 0: // closed
|
||||
break;
|
||||
@@ -657,28 +657,28 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
break;
|
||||
}
|
||||
|
||||
int doorOfTime = GetRandoSettingValue(RSK_DOOR_OF_TIME);
|
||||
int doorOfTime = Randomizer_GetSettingValue(RSK_DOOR_OF_TIME);
|
||||
switch (doorOfTime) {
|
||||
case 0: // open
|
||||
gSaveContext.eventChkInf[4] |= 0x800;
|
||||
break;
|
||||
}
|
||||
|
||||
int kakGate = GetRandoSettingValue(RSK_KAK_GATE);
|
||||
int kakGate = Randomizer_GetSettingValue(RSK_KAK_GATE);
|
||||
switch (kakGate) {
|
||||
case 1: // open
|
||||
gSaveContext.infTable[7] |= 0x40;
|
||||
break;
|
||||
}
|
||||
|
||||
if(GetRandoSettingValue(RSK_STARTING_KOKIRI_SWORD)) GiveLinkKokiriSword();
|
||||
if(GetRandoSettingValue(RSK_STARTING_DEKU_SHIELD)) GiveLinkDekuShield();
|
||||
if(Randomizer_GetSettingValue(RSK_STARTING_KOKIRI_SWORD)) GiveLinkKokiriSword();
|
||||
if(Randomizer_GetSettingValue(RSK_STARTING_DEKU_SHIELD)) GiveLinkDekuShield();
|
||||
|
||||
if(GetRandoSettingValue(RSK_STARTING_OCARINA)) {
|
||||
if(Randomizer_GetSettingValue(RSK_STARTING_OCARINA)) {
|
||||
INV_CONTENT(ITEM_OCARINA_FAIRY) = ITEM_OCARINA_FAIRY;
|
||||
}
|
||||
|
||||
if(GetRandoSettingValue(RSK_STARTING_MAPS_COMPASSES)) {
|
||||
if(Randomizer_GetSettingValue(RSK_STARTING_MAPS_COMPASSES)) {
|
||||
uint32_t mapBitMask = 1 << 1;
|
||||
uint32_t compassBitMask = 1 << 2;
|
||||
uint32_t startingDungeonItemsBitMask = mapBitMask | compassBitMask;
|
||||
@@ -687,13 +687,13 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
if (GetRandoSettingValue(RSK_STARTING_CONSUMABLES)) {
|
||||
if (Randomizer_GetSettingValue(RSK_STARTING_CONSUMABLES)) {
|
||||
GiveLinkDekuSticks(10);
|
||||
GiveLinkDekuNuts(20);
|
||||
}
|
||||
|
||||
if(GetRandoSettingValue(RSK_SKIP_CHILD_ZELDA)) {
|
||||
s32 giid = GetRandomizedItemIdFromKnownCheck(RC_SONG_FROM_IMPA, GI_ZELDAS_LULLABY);
|
||||
if(Randomizer_GetSettingValue(RSK_SKIP_CHILD_ZELDA)) {
|
||||
s32 giid = Randomizer_GetItemIdFromKnownCheck(RC_SONG_FROM_IMPA, GI_ZELDAS_LULLABY);
|
||||
|
||||
if(giid >= GI_ZELDAS_LULLABY && giid <= GI_PRELUDE_OF_LIGHT) {
|
||||
GiveLinkSong(giid);
|
||||
@@ -780,7 +780,7 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
} else if (giid == GI_DOUBLE_DEFENSE) {
|
||||
GiveLinkDoubleDefense();
|
||||
} else {
|
||||
s32 iid = GetItemIDFromGetItemID(giid);
|
||||
s32 iid = Randomizer_GetItemIDFromGetItemID(giid);
|
||||
if (iid != -1) INV_CONTENT(iid) = iid;
|
||||
}
|
||||
|
||||
@@ -801,18 +801,18 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
INV_CONTENT(ITEM_LETTER_ZELDA) = ITEM_LETTER_ZELDA;
|
||||
}
|
||||
|
||||
if (GetRandoSettingValue(RSK_FULL_WALLETS)) {
|
||||
if (Randomizer_GetSettingValue(RSK_FULL_WALLETS)) {
|
||||
GiveLinkRupees(9001);
|
||||
}
|
||||
|
||||
// For Ganon's boss key "Start With" is 0
|
||||
if(GetRandoSettingValue(RSK_GANONS_BOSS_KEY) == 0) {
|
||||
if(Randomizer_GetSettingValue(RSK_GANONS_BOSS_KEY) == 0) {
|
||||
gSaveContext.inventory.dungeonItems[10] |= 1;
|
||||
}
|
||||
|
||||
HIGH_SCORE(HS_POE_POINTS) = 1000 - (100 * GetRandoSettingValue(RSK_BIG_POE_COUNT));
|
||||
HIGH_SCORE(HS_POE_POINTS) = 1000 - (100 * Randomizer_GetSettingValue(RSK_BIG_POE_COUNT));
|
||||
|
||||
if(GetRandoSettingValue(RSK_SKIP_EPONA_RACE)) {
|
||||
if(Randomizer_GetSettingValue(RSK_SKIP_EPONA_RACE)) {
|
||||
gSaveContext.eventChkInf[1] |= (1 << 8);
|
||||
}
|
||||
|
||||
@@ -839,7 +839,7 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
gSaveContext.infTable[25] |= 0x20;
|
||||
|
||||
// fast gerudo fortress
|
||||
if (GetRandoSettingValue(RSK_GERUDO_FORTRESS) == 1 || GetRandoSettingValue(RSK_GERUDO_FORTRESS) == 2) {
|
||||
if (Randomizer_GetSettingValue(RSK_GERUDO_FORTRESS) == 1 || Randomizer_GetSettingValue(RSK_GERUDO_FORTRESS) == 2) {
|
||||
gSaveContext.eventChkInf[9] |= 2;
|
||||
gSaveContext.eventChkInf[9] |= 4;
|
||||
gSaveContext.eventChkInf[9] |= 8;
|
||||
@@ -858,14 +858,14 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
}
|
||||
|
||||
// open gerudo fortress
|
||||
if (GetRandoSettingValue(RSK_GERUDO_FORTRESS) == 2) {
|
||||
if (Randomizer_GetSettingValue(RSK_GERUDO_FORTRESS) == 2) {
|
||||
gSaveContext.eventChkInf[9] |= 1;
|
||||
gSaveContext.sceneFlags[12].swch |= (1 << 0x01);
|
||||
gSaveContext.sceneFlags[12].swch |= (1 << 0x05);
|
||||
gSaveContext.sceneFlags[12].swch |= (1 << 0x11);
|
||||
gSaveContext.sceneFlags[12].collect |= (1 << 0x0C);
|
||||
|
||||
if (!GetRandoSettingValue(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) {
|
||||
if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) {
|
||||
GiveLinkGerudoCard();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
|
||||
#include "scenes/indoors/yousei_izumi_yoko/yousei_izumi_yoko_scene.h"
|
||||
#include "scenes/indoors/daiyousei_izumi/daiyousei_izumi_scene.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_25)
|
||||
|
||||
@@ -69,7 +70,7 @@ const ActorInit Bg_Dy_Yoseizo_InitVars = {
|
||||
|
||||
void GivePlayerRandoRewardGreatFairy(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
GetItemID getItemId = GetRandomizedItemId(GI_NONE, this->actor.id, this->fountainType + 1, globalCtx->sceneNum);
|
||||
GetItemID getItemId = Randomizer_GetRandomizedItemId(GI_NONE, this->actor.id, this->fountainType + 1, globalCtx->sceneNum);
|
||||
|
||||
if (this->actor.parent == GET_PLAYER(globalCtx) && !Flags_GetTreasure(globalCtx, this->fountainType + 1) &&
|
||||
!Player_InBlockingCsMode(globalCtx, GET_PLAYER(globalCtx))) {
|
||||
@@ -960,6 +961,7 @@ void BgDyYoseizo_ParticleInit(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelo
|
||||
particle->pitch = 0.0f;
|
||||
particle->yaw = Rand_CenteredFloat(30000.0f);
|
||||
particle->roll = 0.0f;
|
||||
particle->epoch++;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1039,6 +1041,8 @@ void BgDyYoseizo_ParticleDraw(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < 200; i++, particle++) {
|
||||
FrameInterpolation_RecordOpenChild(particle, particle->epoch);
|
||||
|
||||
if (particle->alive == 1) {
|
||||
if (phi_s3 == 0) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGreatFairyParticleAppearDL));
|
||||
@@ -1060,6 +1064,8 @@ void BgDyYoseizo_ParticleDraw(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGreatFairyParticleAliveDL));
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
|
||||
@@ -24,7 +24,8 @@ typedef struct {
|
||||
/* 0x36 */ f32 pitch;
|
||||
/* 0x36 */ f32 yaw;
|
||||
/* 0x40 */ f32 roll;
|
||||
} BgDyYoseizoParticle; // size = 0x44
|
||||
/* 0x44 */ u32 epoch;
|
||||
} BgDyYoseizoParticle; // size = 0x48
|
||||
|
||||
typedef struct BgDyYoseizo {
|
||||
/* 0x0000 */ Actor actor;
|
||||
|
||||
@@ -46,7 +46,7 @@ void BgGateShutter_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->somePos.z = thisx->world.pos.z;
|
||||
if (((gSaveContext.infTable[7] & 0x40) ||
|
||||
(!gSaveContext.n64ddFlag && (gSaveContext.eventChkInf[4] & 0x20)) ||
|
||||
(gSaveContext.n64ddFlag && GetRandoSettingValue(RSK_KAK_GATE))) &&
|
||||
(gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_KAK_GATE))) &&
|
||||
(globalCtx->sceneNum == SCENE_SPOT01)) {
|
||||
thisx->world.pos.x = -89.0f;
|
||||
thisx->world.pos.z = -1375.0f;
|
||||
|
||||
@@ -50,7 +50,7 @@ void BgGjyoBridge_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, thisx, colHeader);
|
||||
|
||||
int bridge = GetRandoSettingValue(RSK_RAINBOW_BRIDGE);
|
||||
int bridge = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE);
|
||||
if (gSaveContext.eventChkInf[4] & 0x2000 || (gSaveContext.n64ddFlag && bridge == 0)) {
|
||||
this->actionFunc = func_808787A4;
|
||||
} else {
|
||||
@@ -176,12 +176,12 @@ void BgGjyoBridge_TriggerCutscene(BgGjyoBridge* this, GlobalContext* globalCtx)
|
||||
LaunchBridgeCutscene(this, globalCtx);
|
||||
}
|
||||
} else {
|
||||
int bridge = GetRandoSettingValue(RSK_RAINBOW_BRIDGE);
|
||||
int bridgeStoneCount = GetRandoSettingValue(RSK_RAINBOW_BRIDGE_STONE_COUNT);
|
||||
int bridgeMedallionCount = GetRandoSettingValue(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT);
|
||||
int bridgeRewardCount = GetRandoSettingValue(RSK_RAINBOW_BRIDGE_REWARD_COUNT);
|
||||
int bridgeDungeonCount = GetRandoSettingValue(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT);
|
||||
int bridgeTokenCount = GetRandoSettingValue(RSK_RAINBOW_BRIDGE_TOKEN_COUNT);
|
||||
int bridge = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE);
|
||||
int bridgeStoneCount = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE_STONE_COUNT);
|
||||
int bridgeMedallionCount = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT);
|
||||
int bridgeRewardCount = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE_REWARD_COUNT);
|
||||
int bridgeDungeonCount = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT);
|
||||
int bridgeTokenCount = Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE_TOKEN_COUNT);
|
||||
|
||||
if (CheckPlayerPosition(player, globalCtx)) {
|
||||
switch (bridge) {
|
||||
|
||||
@@ -34,6 +34,7 @@ void BgHakaGate_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHakaGate_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHakaGate_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHakaGate_Draw(Actor* this, GlobalContext* globalCtx);
|
||||
void BgHakaGate_Reset(void);
|
||||
|
||||
void BgHakaGate_DoNothing(BgHakaGate* this, GlobalContext* globalCtx);
|
||||
void BgHakaGate_StatueInactive(BgHakaGate* this, GlobalContext* globalCtx);
|
||||
@@ -62,7 +63,7 @@ const ActorInit Bg_Haka_Gate_InitVars = {
|
||||
(ActorFunc)BgHakaGate_Destroy,
|
||||
(ActorFunc)BgHakaGate_Update,
|
||||
(ActorFunc)BgHakaGate_Draw,
|
||||
NULL,
|
||||
(ActorResetFunc)BgHakaGate_Reset,
|
||||
};
|
||||
|
||||
static InitChainEntry sInitChain[] = {
|
||||
@@ -378,3 +379,7 @@ void BgHakaGate_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
BgHakaGate_DrawFlame(this, globalCtx);
|
||||
}
|
||||
}
|
||||
|
||||
void BgHakaGate_Reset(void) {
|
||||
sStatueRotY = 0;
|
||||
}
|
||||
|
||||
@@ -228,8 +228,8 @@ void func_8087FFC0(BgHakaTrap* this, GlobalContext* globalCtx) {
|
||||
this->colliderCylinder.dim.pos.z = this->dyna.actor.world.pos.z + sp28.x * sine + sp28.z * cosine;
|
||||
}
|
||||
|
||||
static UNK_TYPE D_80881018 = 0;
|
||||
void func_808801B8(BgHakaTrap* this, GlobalContext* globalCtx) {
|
||||
static UNK_TYPE D_80881018 = 0;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
if ((D_80880F30 == 0) && (!Player_InCsMode(globalCtx))) {
|
||||
@@ -553,4 +553,5 @@ void BgHakaTrap_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
void BgHakaTrap_Reset(void) {
|
||||
D_80880F30 = 0;
|
||||
D_80881014 = 0;
|
||||
D_80881018 = 0;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "z_bg_jya_megami.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
|
||||
#include "objects/object_jya_obj/object_jya_obj.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS 0
|
||||
|
||||
@@ -217,6 +218,7 @@ void BgJyaMegami_SetupExplode(BgJyaMegami* this) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->pieces); i++) {
|
||||
Math_Vec3f_Copy(&this->pieces[i].pos, &this->dyna.actor.world.pos);
|
||||
this->pieces[i].vel.x = sPiecesInit[i].velX;
|
||||
this->pieces[i].epoch++;
|
||||
}
|
||||
this->explosionTimer = 0;
|
||||
}
|
||||
@@ -326,6 +328,9 @@ void BgJyaMegami_DrawExplode(BgJyaMegami* this, GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->pieces); i++) {
|
||||
piece = &this->pieces[i];
|
||||
|
||||
FrameInterpolation_RecordOpenChild(piece, piece->epoch);
|
||||
|
||||
Matrix_Translate(piece->pos.x + sPiecesInit[i].unk_00.x, piece->pos.y + sPiecesInit[i].unk_00.y,
|
||||
piece->pos.z + sPiecesInit[i].unk_00.z, MTXMODE_NEW);
|
||||
Matrix_RotateY(piece->rotVelY * (M_PI / 0x8000), MTXMODE_APPLY);
|
||||
@@ -337,6 +342,8 @@ void BgJyaMegami_DrawExplode(BgJyaMegami* this, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, sDLists[i]);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -13,7 +13,8 @@ typedef struct {
|
||||
/* 0x0C */ Vec3f vel;
|
||||
/* 0x18 */ s16 rotVelX;
|
||||
/* 0x1A */ s16 rotVelY;
|
||||
} BgJyaMegamiPiece; // size = 0x1C
|
||||
/* 0x1C */ u32 epoch;
|
||||
} BgJyaMegamiPiece; // size = 0x20
|
||||
|
||||
typedef struct BgJyaMegami {
|
||||
/* 0x0000 */ DynaPolyActor dyna;
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "z_bg_spot00_hanebasi.h"
|
||||
#include "objects/object_spot00_objects/object_spot00_objects.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS ACTOR_FLAG_4
|
||||
|
||||
@@ -260,6 +261,8 @@ void BgSpot00Hanebasi_DrawTorches(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
f32 angle;
|
||||
s32 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -276,6 +279,8 @@ void BgSpot00Hanebasi_DrawTorches(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Hanebasi Torch", epoch + i * 25);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0,
|
||||
((globalCtx->gameplayFrames + i) * -20) & 0x1FF, 32, 128));
|
||||
@@ -287,6 +292,8 @@ void BgSpot00Hanebasi_DrawTorches(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "objects/object_kingdodongo/object_kingdodongo.h"
|
||||
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
|
||||
#include "scenes/dungeons/ddan_boss/ddan_boss_room_1.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
@@ -150,6 +151,7 @@ void func_808C17C8(GlobalContext* globalCtx, Vec3f* arg1, Vec3f* arg2, Vec3f* ar
|
||||
|
||||
for (i = 0; i < arg5; i++, eff++) {
|
||||
if (eff->unk_24 == 0) {
|
||||
eff->epoch++;
|
||||
eff->unk_24 = 1;
|
||||
eff->unk_00 = *arg1;
|
||||
eff->unk_0C = *arg2;
|
||||
@@ -1700,6 +1702,7 @@ void BossDodongo_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPInvalidateTexCache(POLY_XLU_DISP++, 0);
|
||||
|
||||
for (i = 0; i < 80; i++, eff++) {
|
||||
FrameInterpolation_RecordOpenChild(eff, eff->epoch);
|
||||
if (eff->unk_24 == 1) {
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
|
||||
@@ -1716,6 +1719,7 @@ void BossDodongo_DrawEffects(GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_kingdodongo_DL_009DD0);
|
||||
}
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
|
||||
@@ -17,7 +17,8 @@ typedef struct {
|
||||
/* 0x26 */ Color_RGB8 color;
|
||||
/* 0x2A */ s16 alpha;
|
||||
/* 0x2C */ f32 unk_2C;
|
||||
} BossDodongoEffect; // Size = 0x30
|
||||
/* 0x30 */ u32 epoch;
|
||||
} BossDodongoEffect; // Size = 0x34
|
||||
|
||||
typedef struct BossDodongo {
|
||||
/* 0x0000 */ Actor actor;
|
||||
|
||||
@@ -1835,6 +1835,8 @@ void BossFd_DrawBody(GlobalContext* globalCtx, BossFd* this) {
|
||||
s16 i;
|
||||
f32 temp_float;
|
||||
Mtx* tempMat = Graph_Alloc(globalCtx->state.gfxCtx, 18 * sizeof(Mtx));
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
if (this->skinSegments != 0) {
|
||||
@@ -1876,6 +1878,8 @@ void BossFd_DrawBody(GlobalContext* globalCtx, BossFd* this) {
|
||||
|
||||
Matrix_Push();
|
||||
for (i = 0; i < 18; i++, tempMat++) {
|
||||
FrameInterpolation_RecordOpenChild(tempMat, epoch + i * 25);
|
||||
|
||||
segIndex = (this->work[BFD_LEAD_BODY_SEG] + sBodyIndex[i + 1]) % 100;
|
||||
Matrix_Translate(this->bodySegsPos[segIndex].x, this->bodySegsPos[segIndex].y, this->bodySegsPos[segIndex].z,
|
||||
MTXMODE_NEW);
|
||||
@@ -1938,6 +1942,8 @@ void BossFd_DrawBody(GlobalContext* globalCtx, BossFd* this) {
|
||||
if (i > 0) {
|
||||
Collider_UpdateSpheres(i + 1, &this->collider);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
Matrix_Pop();
|
||||
osSyncPrintf("BH\n");
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "overlays/actors/ovl_Boss_Fd/z_boss_fd.h"
|
||||
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
|
||||
#include "vt.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
@@ -1146,6 +1147,8 @@ void BossFd2_UpdateMane(BossFd2* this, GlobalContext* globalCtx, Vec3f* head, Ve
|
||||
}
|
||||
|
||||
for (i = 0; i < 9; i++) {
|
||||
FrameInterpolation_RecordOpenChild(this, this->epoch + i * 25);
|
||||
|
||||
Matrix_Translate((pos + i)->x, (pos + i)->y, (pos + i)->z, MTXMODE_NEW);
|
||||
Matrix_RotateY((rot + i)->y, MTXMODE_APPLY);
|
||||
Matrix_RotateX((rot + i)->x, MTXMODE_APPLY);
|
||||
@@ -1155,6 +1158,8 @@ void BossFd2_UpdateMane(BossFd2* this, GlobalContext* globalCtx, Vec3f* head, Ve
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gHoleVolvagiaManeModelDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
Matrix_Pop();
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -87,6 +87,7 @@ typedef struct BossFd2 {
|
||||
/* 0x1394 */ BossFd2Cam camData;
|
||||
/* 0x141C */ ColliderJntSph collider;
|
||||
/* 0x143C */ ColliderJntSphElement elements[9];
|
||||
} BossFd2; // size = 0x167C
|
||||
/* 0x167C */ u32 epoch;
|
||||
} BossFd2; // size = 0x1680
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1504,7 +1504,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, GlobalContext* globalCtx)
|
||||
|
||||
if (this->csTimer == 180) {
|
||||
globalCtx->sceneLoadFlag = 0x14;
|
||||
if (gSaveContext.n64ddFlag && GetRandoSettingValue(RSK_SKIP_TOWER_ESCAPE)) {
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SKIP_TOWER_ESCAPE)) {
|
||||
Flags_SetEventChkInf(0xC7);
|
||||
globalCtx->nextEntranceIndex = 0x517;
|
||||
}
|
||||
@@ -3356,6 +3356,8 @@ void BossGanon_DrawShock(BossGanon* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
|
||||
s16 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
@@ -3369,6 +3371,8 @@ void BossGanon_DrawShock(BossGanon* this, GlobalContext* globalCtx) {
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(player->bodyPartsPos); i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganondorf Shock 0", epoch + i * 25);
|
||||
|
||||
Matrix_Translate(player->bodyPartsPos[i].x, player->bodyPartsPos[i].y, player->bodyPartsPos[i].z,
|
||||
MTXMODE_NEW);
|
||||
Matrix_ReplaceRotation(&globalCtx->billboardMtxF);
|
||||
@@ -3377,9 +3381,13 @@ void BossGanon_DrawShock(BossGanon* this, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
} else {
|
||||
for (i = 1; i < 15; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganondorf Shock 1", epoch + i * 25);
|
||||
|
||||
Matrix_Translate(this->unk_2EC[i].x, this->unk_2EC[i].y, this->unk_2EC[i].z, MTXMODE_NEW);
|
||||
Matrix_ReplaceRotation(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale(this->unk_49C[i], this->unk_49C[i], this->unk_49C[i], MTXMODE_APPLY);
|
||||
@@ -3401,6 +3409,8 @@ void BossGanon_DrawShock(BossGanon* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3443,9 +3453,9 @@ void BossGanon_DrawHandLightBall(BossGanon* this, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gDorfLightCoreDL);
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
void BossGanon_DrawBigMagicCharge(BossGanon* this, GlobalContext* globalCtx) {
|
||||
@@ -3453,6 +3463,8 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, GlobalContext* globalCtx) {
|
||||
f32 yRot;
|
||||
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
|
||||
s16 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
@@ -3513,6 +3525,8 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, GlobalContext* globalCtx) {
|
||||
yRot = BINANG_TO_RAD(this->actor.yawTowardsPlayer);
|
||||
|
||||
for (i = 0; i < this->unk_1AC; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganondorf Big Magic", epoch + i * 25);
|
||||
|
||||
f32 xzRot = (BossGanon_RandZeroOne() - 0.5f) * M_PI * 1.5f;
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (s8)this->unk_294[i]);
|
||||
@@ -3527,10 +3541,12 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gDorfLightRayTriDL);
|
||||
|
||||
Matrix_Pop();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
void BossGanon_DrawTriforce(BossGanon* this, GlobalContext* globalCtx) {
|
||||
@@ -4142,6 +4158,8 @@ void BossGanon_LightBall_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s16 i;
|
||||
f32 alpha;
|
||||
s32 pad;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -4166,6 +4184,8 @@ void BossGanon_LightBall_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
if (this->unk_1A8 == 1) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganondorf Light Ball 0", epoch + i * 25);
|
||||
|
||||
Matrix_Push();
|
||||
Matrix_RotateY(i * (M_PI / 8), MTXMODE_APPLY);
|
||||
Matrix_RotateZ(this->fwork[GDF_FWORK_0], MTXMODE_APPLY);
|
||||
@@ -4174,6 +4194,8 @@ void BossGanon_LightBall_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
|
||||
Matrix_Pop();
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
} else if (this->unk_1A8 == 0) {
|
||||
Matrix_ReplaceRotation(&globalCtx->billboardMtxF);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "objects/object_ganon2/object_ganon2.h"
|
||||
#include "objects/object_ganon_anime3/object_ganon_anime3.h"
|
||||
#include "objects/object_geff/object_geff.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
@@ -2463,6 +2464,8 @@ void func_80904340(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
f32 angle;
|
||||
f32 sin;
|
||||
f32 cos;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
Matrix_Push();
|
||||
@@ -2485,6 +2488,7 @@ void func_80904340(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
rand = BossGanon2_RandZeroOne();
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganon 80904340", epoch + i * 25);
|
||||
angle = (i * (2 * M_PI / 5)) + (rand * M_PI);
|
||||
sin = 5000.0f * sinf(angle);
|
||||
cos = 5000.0f * cosf(angle);
|
||||
@@ -2500,6 +2504,7 @@ void func_80904340(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(ovl_Boss_Ganon2_DL_00D798));
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2632,6 +2637,8 @@ void BossGanon2_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLis
|
||||
void func_80904D88(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
s16 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -2647,6 +2654,8 @@ void func_80904D88(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, ovl_Boss_Ganon2_DL_00B308);
|
||||
|
||||
for (i = 0; i < 15; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganon 80904D88", epoch + i * 25);
|
||||
|
||||
Matrix_Translate(this->unk_234[i].x, this->unk_234[i].y, this->unk_234[i].z, MTXMODE_NEW);
|
||||
Matrix_ReplaceRotation(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale(this->unk_30C, this->unk_30C, this->unk_30C, MTXMODE_APPLY);
|
||||
@@ -2654,6 +2663,8 @@ void func_80904D88(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, ovl_Boss_Ganon2_DL_00B378);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2690,6 +2701,8 @@ void func_80904FC8(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
void func_8090523C(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
Player* player;
|
||||
f32 phi_f20;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -2703,6 +2716,8 @@ void func_8090523C(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, ovl_Boss_Ganon2_DL_00B308);
|
||||
|
||||
for (i = 0; i < 11; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Ganon 8090523C", epoch + i * 25);
|
||||
|
||||
Matrix_Mult(&player->mf_9E0, MTXMODE_NEW);
|
||||
Matrix_Translate((i * 250.0f) + 900.0f, 350.0f, 0.0f, MTXMODE_APPLY);
|
||||
|
||||
@@ -2718,6 +2733,8 @@ void func_8090523C(BossGanon2* this, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(ovl_Boss_Ganon2_DL_00B378));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2916,6 +2933,8 @@ void func_809060E8(GlobalContext* globalCtx) {
|
||||
BossGanon2Effect* effect;
|
||||
s16 i;
|
||||
BossGanon2Effect* effects;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
effects = effect = globalCtx->specialEffects;
|
||||
|
||||
@@ -2925,6 +2944,8 @@ void func_809060E8(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
if (effect->type == 1) {
|
||||
FrameInterpolation_RecordOpenChild("Ganon 809060E8 0", epoch + i * 25);
|
||||
|
||||
Vec3f spA0;
|
||||
f32 temp_f0;
|
||||
f32 angle;
|
||||
@@ -2958,6 +2979,8 @@ void func_809060E8(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, ovl_Boss_Ganon2_DL_00F188);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2965,6 +2988,8 @@ void func_809060E8(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sBossGanon2Particles); i++, effect++) {
|
||||
if (effect->type == 2) {
|
||||
FrameInterpolation_RecordOpenChild("Ganon 809060E8 1", epoch + i * 25);
|
||||
|
||||
if (!usingObjectGEff) {
|
||||
BossGanon2_SetObjectSegment(NULL, globalCtx, OBJECT_GEFF, true);
|
||||
usingObjectGEff++;
|
||||
@@ -2977,6 +3002,8 @@ void func_809060E8(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gGanonRubbleDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ void BossMo_UpdateCore(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BossMo_UpdateTent(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BossMo_DrawCore(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BossMo_DrawTent(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BossMo_Reset(void);
|
||||
|
||||
void BossMo_UpdateEffects(BossMo* this, GlobalContext* globalCtx);
|
||||
void BossMo_DrawEffects(BossMoEffect* effect, GlobalContext* globalCtx);
|
||||
@@ -131,7 +132,7 @@ const ActorInit Boss_Mo_InitVars = {
|
||||
(ActorFunc)BossMo_Destroy,
|
||||
(ActorFunc)BossMo_UpdateTent,
|
||||
(ActorFunc)BossMo_DrawTent,
|
||||
NULL,
|
||||
(ActorResetFunc)BossMo_Reset,
|
||||
};
|
||||
|
||||
static BossMo* sMorphaCore = NULL;
|
||||
@@ -347,6 +348,7 @@ void BossMo_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
globalCtx->specialEffects = sEffects;
|
||||
for (i = 0; i < ARRAY_COUNT(sEffects); i++) {
|
||||
sEffects[i].type = MO_FX_NONE;
|
||||
sEffects[i].epoch++;
|
||||
}
|
||||
this->actor.world.pos.x = 200.0f;
|
||||
this->actor.world.pos.y = MO_WATER_LEVEL(globalCtx) + 50.0f;
|
||||
@@ -929,7 +931,7 @@ void BossMo_Tentacle(BossMo* this, GlobalContext* globalCtx) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||
Math_ApproachF(&this->baseAlpha, 0.0, 1.0f, 5.0f);
|
||||
for (indS1 = 0; indS1 < 40; indS1++) {
|
||||
if (sMorphaTent2->tentSpawnPos) {}
|
||||
if (sMorphaTent2 && sMorphaTent2->tentSpawnPos) {}
|
||||
indT5 = Rand_ZeroFloat(20.9f);
|
||||
indS0 = sTentSpawnIndex[indT5];
|
||||
spFC.x = 0;
|
||||
@@ -2441,6 +2443,8 @@ void BossMo_DrawTentacle(BossMo* this, GlobalContext* globalCtx) {
|
||||
f32 phi_f20;
|
||||
f32 phi_f22;
|
||||
Vec3f sp110;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -2461,6 +2465,8 @@ void BossMo_DrawTentacle(BossMo* this, GlobalContext* globalCtx) {
|
||||
BossMo_InitRand(1, 29100, 9786);
|
||||
|
||||
for (i = 0; i < 41; i++, matrix++) {
|
||||
FrameInterpolation_RecordOpenChild("Morpha Tentacle", epoch + i * 25);
|
||||
|
||||
s32 pad;
|
||||
s32 pad2;
|
||||
|
||||
@@ -2558,6 +2564,8 @@ void BossMo_DrawTentacle(BossMo* this, GlobalContext* globalCtx) {
|
||||
if ((i < 38) && ((i & 1) == 1)) {
|
||||
BossMo_UpdateTentColliders(this, i / 2, &this->tentCollider, &this->tentPos[i]);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
Matrix_Pop();
|
||||
@@ -3604,4 +3612,4 @@ void BossMo_Reset(void) {
|
||||
sBossGanonSeed1 = 0;
|
||||
sBossGanonSeed2 = 0;
|
||||
sBossGanonSeed3 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "overlays/actors/ovl_Bg_Sst_Floor/z_bg_sst_floor.h"
|
||||
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_10)
|
||||
|
||||
@@ -2705,6 +2706,8 @@ s32 BossSst_OverrideHandTrailDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx**
|
||||
|
||||
void BossSst_DrawHand(Actor* thisx, GlobalContext* globalCtx) {
|
||||
BossSst* this = (BossSst*)thisx;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -2738,6 +2741,8 @@ void BossSst_DrawHand(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < end; i++) {
|
||||
if (Math3D_Vec3fDistSq(&trail2->world.pos, &trail->world.pos) > 900.0f) {
|
||||
FrameInterpolation_RecordOpenChild(trail, 0);
|
||||
|
||||
Matrix_SetTranslateRotateYXZ(trail->world.pos.x, trail->world.pos.y, trail->world.pos.z,
|
||||
&trail->world.rot);
|
||||
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
|
||||
@@ -2749,6 +2754,8 @@ void BossSst_DrawHand(Actor* thisx, GlobalContext* globalCtx) {
|
||||
POLY_XLU_DISP = SkelAnime_DrawFlex(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable,
|
||||
this->skelAnime.dListCount, BossSst_OverrideHandTrailDraw, NULL,
|
||||
trail, POLY_XLU_DISP);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
idx = (idx + 5) % 7;
|
||||
trail2 = trail;
|
||||
@@ -2955,6 +2962,8 @@ void BossSst_SpawnHeadShadow(BossSst* this) {
|
||||
shadow->scale = 1450;
|
||||
shadow->alpha = 254;
|
||||
shadow->status = 65;
|
||||
|
||||
shadow->epoch++;
|
||||
}
|
||||
|
||||
this->effects[3].status = -1;
|
||||
@@ -2968,6 +2977,7 @@ void BossSst_SpawnHandShadow(BossSst* this) {
|
||||
this->effects[0].scale = 2300;
|
||||
this->effects[0].alpha = 254;
|
||||
this->effects[0].status = 5;
|
||||
this->effects[0].epoch++;
|
||||
this->effects[1].status = -1;
|
||||
}
|
||||
|
||||
@@ -2981,6 +2991,7 @@ void BossSst_SpawnShockwave(BossSst* this) {
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
BossSstEffect* shockwave = &this->effects[i];
|
||||
shockwave->epoch++;
|
||||
|
||||
Math_Vec3f_Copy(&shockwave->pos, &this->actor.world.pos);
|
||||
shockwave->move = (i + 9) * 2;
|
||||
@@ -3035,6 +3046,8 @@ void BossSst_SpawnIceCrystal(BossSst* this, s32 index) {
|
||||
if ((index % 2) == 0) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_PL_FREEZE_S);
|
||||
}
|
||||
|
||||
ice->epoch++;
|
||||
}
|
||||
|
||||
void BossSst_SpawnIceShard(BossSst* this) {
|
||||
@@ -3050,6 +3063,7 @@ void BossSst_SpawnIceShard(BossSst* this) {
|
||||
|
||||
for (i = 0; i < 18; i++) {
|
||||
BossSstEffect* ice = &this->effects[i];
|
||||
ice->epoch++;
|
||||
|
||||
Math_Vec3f_Copy(&ice->pos, &spawnPos);
|
||||
ice->status = 1;
|
||||
@@ -3165,6 +3179,8 @@ void BossSst_DrawEffect(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < 18; i++) {
|
||||
effect = &this->effects[i];
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
if (effect->move) {
|
||||
func_8003435C(&effect->pos, globalCtx);
|
||||
if (this->effects[0].status != 0) {
|
||||
@@ -3182,6 +3198,8 @@ void BossSst_DrawEffect(Actor* thisx, GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gBongoIceShardDL);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
} else if (this->effectMode == BONGO_SHOCKWAVE) {
|
||||
f32 scaleY = 0.005f;
|
||||
@@ -3193,6 +3211,7 @@ void BossSst_DrawEffect(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < 3; i++, scaleY -= 0.001f) {
|
||||
effect = &this->effects[i];
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
if (effect->move != 0) {
|
||||
Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
|
||||
@@ -3205,6 +3224,8 @@ void BossSst_DrawEffect(Actor* thisx, GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffFireCircleDL);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
} else if (this->effectMode == BONGO_SHADOW) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x80, 10, 10, 80, 0);
|
||||
@@ -3212,12 +3233,16 @@ void BossSst_DrawEffect(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
effect = &this->effects[0];
|
||||
while (effect->status != -1) {
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(effect->scale * 0.001f, 1.0f, effect->scale * 0.001f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sShadowDList);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
effect++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,8 @@ typedef struct {
|
||||
/* 0x0020 */ s16 move;
|
||||
/* 0x0022 */ s16 status;
|
||||
/* 0x0024 */ u8 alpha;
|
||||
} BossSstEffect; // size = 0x28
|
||||
/* 0x0028 */ u32 epoch;
|
||||
} BossSstEffect; // size = 0x2C
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ PosRot world;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "objects/object_tw/object_tw.h"
|
||||
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
@@ -467,6 +468,7 @@ void BossTw_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTwEffects); i++) {
|
||||
sTwEffects[i].type = TWEFF_NONE;
|
||||
sTwEffects[i].epoch++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3327,6 +3329,8 @@ void func_80942180(BossTw* this, GlobalContext* globalCtx) {
|
||||
void func_809426F0(BossTw* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
s16 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -3360,6 +3364,8 @@ void func_809426F0(BossTw* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Twinrova 809426F0", epoch + i * 25);
|
||||
|
||||
Matrix_Push();
|
||||
Matrix_Translate(0.0f, 0.0f, 5000.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateZ(((i * M_PI) * 2.0f * 0.125f) + this->flameRotation, MTXMODE_APPLY);
|
||||
@@ -3373,6 +3379,8 @@ void func_809426F0(BossTw* this, GlobalContext* globalCtx) {
|
||||
G_MTX_LOAD | G_MTX_MODELVIEW | G_MTX_NOPUSH);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A430));
|
||||
Matrix_Pop();
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
@@ -4410,6 +4418,8 @@ void BossTw_BlastDraw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
f32 scaleFactor;
|
||||
s16 tailIdx;
|
||||
s16 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -4420,6 +4430,8 @@ void BossTw_BlastDraw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 200, 20, 0, (s8)this->workf[TAIL_ALPHA]);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 215, 255, 128);
|
||||
for (i = 9; i >= 0; i--) {
|
||||
FrameInterpolation_RecordOpenChild("Twinrova Fire Blast", epoch + i * 25);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 8,
|
||||
Gfx_TwoTexScroll(
|
||||
globalCtx->state.gfxCtx, 0, ((this->work[CS_TIMER_1] * 3) + (i * 10)) & 0x7F,
|
||||
@@ -4434,6 +4446,8 @@ void BossTw_BlastDraw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A430));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4444,6 +4458,8 @@ void BossTw_BlastDraw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (s8)this->workf[TAIL_ALPHA]);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A998));
|
||||
for (i = 9; i >= 0; i--) {
|
||||
FrameInterpolation_RecordOpenChild("Twinrova Ice Blast", epoch + i * 25);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 8,
|
||||
Gfx_TwoTexScroll(
|
||||
globalCtx->state.gfxCtx, 0, ((this->work[CS_TIMER_1] * 3) + (i * 0xA)) & 0x7F,
|
||||
@@ -4458,6 +4474,8 @@ void BossTw_BlastDraw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01AB00));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4474,6 +4492,8 @@ void BossTw_DrawDeathBall(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
f32 scaleFactor;
|
||||
s16 tailIdx;
|
||||
s16 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -4484,6 +4504,8 @@ void BossTw_DrawDeathBall(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 215, 255, 128);
|
||||
|
||||
for (i = 9; i >= 0; i--) {
|
||||
FrameInterpolation_RecordOpenChild("Twinrova Death Ball 0", epoch + i * 25);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 8,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, (((this->work[CS_TIMER_1] * 3) + (i * 0xA))) & 0x7F,
|
||||
(u8)((-this->work[CS_TIMER_1] * 0xF) + (i * 50)), 0x20, 0x40, 1, 0, 0, 0x20,
|
||||
@@ -4498,12 +4520,16 @@ void BossTw_DrawDeathBall(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A430));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
} else {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (s8)this->workf[TAIL_ALPHA]);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A998));
|
||||
|
||||
for (i = 9; i >= 0; i--) {
|
||||
FrameInterpolation_RecordOpenChild("Twinrova Death Ball 1", epoch + i * 25);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 8,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, (((this->work[CS_TIMER_1] * 3) + (i * 0xA))) & 0x7F,
|
||||
(u8)((-this->work[CS_TIMER_1] * 0xF) + (i * 50)), 0x20, 0x40, 1, 0, 0, 0x20,
|
||||
@@ -4518,6 +4544,8 @@ void BossTw_DrawDeathBall(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01AB00));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4883,6 +4911,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTwEffects); i++) {
|
||||
if (currentEffect->type == 1) {
|
||||
FrameInterpolation_RecordOpenChild(currentEffect, currentEffect->epoch);
|
||||
|
||||
if (sp18F == 0) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_tw_DL_01A528);
|
||||
sp18F++;
|
||||
@@ -4896,8 +4926,9 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_tw_DL_01A5A8);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
currentEffect++;
|
||||
}
|
||||
|
||||
@@ -4906,6 +4937,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTwEffects); i++) {
|
||||
if (currentEffect->type == 3) {
|
||||
FrameInterpolation_RecordOpenChild(currentEffect, currentEffect->epoch);
|
||||
|
||||
if (sp18F == 0) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A998));
|
||||
sp18F++;
|
||||
@@ -4921,6 +4954,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01AB00));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
currentEffect++;
|
||||
}
|
||||
@@ -4930,6 +4965,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTwEffects); i++) {
|
||||
if (currentEffect->type == 2) {
|
||||
FrameInterpolation_RecordOpenChild(currentEffect, currentEffect->epoch);
|
||||
|
||||
if (sp18F == 0) {
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 215, 255, 128);
|
||||
@@ -4946,6 +4983,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A430));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
currentEffect++;
|
||||
@@ -4956,6 +4995,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTwEffects); i++) {
|
||||
if (currentEffect->type == 4) {
|
||||
FrameInterpolation_RecordOpenChild(currentEffect, currentEffect->epoch);
|
||||
|
||||
if (sp18F == 0) {
|
||||
sp18F++;
|
||||
}
|
||||
@@ -4991,6 +5032,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_SURF2);
|
||||
gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BACK | G_FOG);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A790));
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
currentEffect++;
|
||||
@@ -5004,6 +5047,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
Vec3f off;
|
||||
|
||||
if (currentEffect->type == TWEFF_PLYR_FRZ) {
|
||||
FrameInterpolation_RecordOpenChild(currentEffect, currentEffect->epoch);
|
||||
|
||||
if (sp18F == 0) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01AA50));
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, 255);
|
||||
@@ -5037,6 +5082,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01AB00));
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
currentEffect++;
|
||||
@@ -5047,6 +5094,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTwEffects); i++) {
|
||||
if (currentEffect->type >= 6) {
|
||||
FrameInterpolation_RecordOpenChild(currentEffect, currentEffect->epoch);
|
||||
|
||||
if (currentEffect->work[EFF_ARGS] == 0) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, currentEffect->alpha);
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A998));
|
||||
@@ -5070,6 +5119,8 @@ void BossTw_DrawEffects(GlobalContext* globalCtx) {
|
||||
} else {
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_tw_DL_01A430));
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
currentEffect++;
|
||||
|
||||
@@ -43,6 +43,7 @@ typedef struct {
|
||||
/* 0x002E */ s16 work[EFF_WORK_MAX];
|
||||
/* 0x0034 */ f32 workf[EFF_FWORK_MAX];
|
||||
/* 0x0044 */ Actor* target;
|
||||
u32 epoch;
|
||||
} BossTwEffect;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -4006,6 +4006,8 @@ void BossVa_DrawDoor(GlobalContext* globalCtx, s16 scale) {
|
||||
f32 yScale;
|
||||
f32 segAngle = 0.0f;
|
||||
s32 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -4023,6 +4025,8 @@ void BossVa_DrawDoor(GlobalContext* globalCtx, s16 scale) {
|
||||
Matrix_Get(&doorMtx);
|
||||
|
||||
for (i = 0; i < 8; i++, segAngle -= M_PI / 4) {
|
||||
FrameInterpolation_RecordOpenChild("Barinade Door", epoch + i * 25);
|
||||
|
||||
Matrix_Put(&doorMtx);
|
||||
Matrix_RotateZ(segAngle, MTXMODE_APPLY);
|
||||
Matrix_Translate(0.0f, doorPieceLength[i] * yScale, 0.0f, MTXMODE_APPLY);
|
||||
@@ -4030,6 +4034,8 @@ void BossVa_DrawDoor(GlobalContext* globalCtx, s16 scale) {
|
||||
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, doorPieceDispList[i]);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "objects/object_demo_6k/object_demo_6k.h"
|
||||
#include "objects/object_gnd_magic/object_gnd_magic.h"
|
||||
#include "overlays/actors/ovl_Eff_Dust/z_eff_dust.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS ACTOR_FLAG_4
|
||||
|
||||
@@ -563,9 +564,10 @@ void func_80967FFC(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Demo6K* this = (Demo6K*)thisx;
|
||||
s32 pad;
|
||||
u16 timer1 = this->timer1;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
Matrix_RotateX(-M_PI / 2, MTXMODE_APPLY);
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
@@ -584,6 +586,8 @@ void func_80967FFC(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Matrix_RotateZ(-M_PI / 2, MTXMODE_APPLY);
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Demo6K 80967FFC", epoch + i * 25);
|
||||
|
||||
Matrix_RotateZ(M_PI / 3, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
@@ -591,6 +595,8 @@ void func_80967FFC(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, colors[i][0].r, colors[i][0].g, colors[i][0].b, 255);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, colors[i][1].r, colors[i][1].g, colors[i][1].b, 255);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_demo_6k_DL_0022B0);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
// required to avoid optimizing out i
|
||||
@@ -689,6 +695,8 @@ void func_809688C4(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
u32 frames = globalCtx->state.frames;
|
||||
s32 i;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
if ((i = (globalCtx->csCtx.state != CS_STATE_IDLE) && (globalCtx->csCtx.npcActions[1] != NULL)) &&
|
||||
(globalCtx->csCtx.npcActions[1]->action != 1)) {
|
||||
@@ -699,6 +707,8 @@ void func_809688C4(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
Matrix_RotateY((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(globalCtx)) + 0x8000) * (M_PI / 0x8000), MTXMODE_APPLY);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Demo6K 809688C4", epoch + i * 25);
|
||||
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, sEnvColors[this->unk_274[i]].r, sEnvColors[this->unk_274[i]].g,
|
||||
sEnvColors[this->unk_274[i]].b, 255);
|
||||
@@ -712,6 +722,8 @@ void func_809688C4(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
|
||||
Matrix_Pop();
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
|
||||
|
||||
@@ -899,12 +899,12 @@ void func_80986BF8(DemoIm* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void GivePlayerRandoRewardImpa(Actor* impa, GlobalContext* globalCtx, RandomizerCheck check) {
|
||||
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_ZELDAS_LULLABY);
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_ZELDAS_LULLABY);
|
||||
|
||||
if (impa->parent != NULL && impa->parent->id == GET_PLAYER(globalCtx)->actor.id &&
|
||||
!Flags_GetTreasure(globalCtx, 0x1F)) {
|
||||
Flags_SetTreasure(globalCtx, 0x1F);
|
||||
} else if (!Flags_GetTreasure(globalCtx, 0x1F) && !GetRandoSettingValue(RSK_SKIP_CHILD_ZELDA)) {
|
||||
} else if (!Flags_GetTreasure(globalCtx, 0x1F) && !Randomizer_GetSettingValue(RSK_SKIP_CHILD_ZELDA)) {
|
||||
func_8002F434(impa, globalCtx, getItemId, 75.0f, 50.0f);
|
||||
} else if (!Player_InBlockingCsMode(globalCtx, GET_PLAYER(globalCtx))) {
|
||||
gSaveContext.eventChkInf[5] |= 0x200;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "objects/object_efc_star_field/object_efc_star_field.h"
|
||||
#include "objects/object_toki_objects/object_toki_objects.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
@@ -521,6 +522,8 @@ void DemoKankyo_DrawRain(Actor* thisx, GlobalContext* globalCtx) {
|
||||
f32 translateY;
|
||||
f32 translateZ;
|
||||
s16 j;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -594,6 +597,8 @@ void DemoKankyo_DrawRain(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Matrix_Scale(sRainScale * 0.001f, sRainScale * 0.001f, sRainScale * 0.001f, MTXMODE_APPLY);
|
||||
|
||||
for (j = 0; j < 5; j++) {
|
||||
FrameInterpolation_RecordOpenChild("Kankyo Rain", epoch + i * j * 25);
|
||||
|
||||
s32 pad1;
|
||||
|
||||
if (globalCtx->sceneNum != SCENE_TOKINOMA) {
|
||||
@@ -623,6 +628,8 @@ void DemoKankyo_DrawRain(Actor* thisx, GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_efc_star_field_DL_000080);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
@@ -656,10 +663,14 @@ void DemoKankyo_DrawClouds(Actor* thisx, GlobalContext* globalCtx) {
|
||||
f32 dx;
|
||||
f32 dy;
|
||||
f32 dz;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Kankyo Clouds", epoch + i * 25);
|
||||
|
||||
dx = -(Math_SinS(this->unk_150[i].unk_20 - 0x8000) * 120.0f) * (30.0f + (i / 30.0f) * 10.0f);
|
||||
dy = Math_CosS(this->unk_150[i].unk_20 - 0x8000) * 5.0f + 1200.0f;
|
||||
dz = (Math_CosS(this->unk_150[i].unk_20 - 0x8000) * 120.0f) * (30.0f + (i / 30.0f) * 10.0f);
|
||||
@@ -681,6 +692,8 @@ void DemoKankyo_DrawClouds(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, SEG_ADDR(1, 0), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffDustDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
@@ -771,6 +784,8 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, GlobalContext* globalCtx) {
|
||||
f32 translateZ;
|
||||
PosRot posRot;
|
||||
u8 linkAge = gSaveContext.linkAge;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -778,6 +793,8 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->sparkleCounter += 2;
|
||||
}
|
||||
for (i = this->sparkleCounter - 1; i >= 0; i--) {
|
||||
FrameInterpolation_RecordOpenChild("Kankyo Warp Sparkles", epoch + i * 25);
|
||||
|
||||
temp_f22 = 1.0f - (i / (f32)this->sparkleCounter);
|
||||
|
||||
switch (this->unk_150[i].unk_22) {
|
||||
@@ -891,6 +908,8 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, disp);
|
||||
this->unk_150[i].unk_24 += 0x190;
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
@@ -914,6 +933,8 @@ void DemoKankyo_DrawSparkles(Actor* thisx, GlobalContext* globalCtx) {
|
||||
f32 scale;
|
||||
s16 i;
|
||||
PosRot posRot;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -922,6 +943,8 @@ void DemoKankyo_DrawSparkles(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
for (i = this->sparkleCounter - 1; i >= 0; i--) {
|
||||
FrameInterpolation_RecordOpenChild("Kankyo Sparkles", epoch + i * 25);
|
||||
|
||||
temp_f20 = 1.0f - (i / (f32)this->sparkleCounter);
|
||||
|
||||
switch (this->unk_150[i].unk_22) {
|
||||
@@ -993,6 +1016,8 @@ void DemoKankyo_DrawSparkles(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
|
||||
this->unk_150[i].unk_24 += 0x190;
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
@@ -128,7 +128,7 @@ void DemoKekkai_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->collider2.dim.yShift = 300;
|
||||
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
int trialsToComplete = GetRandoSettingValue(RSK_TRIAL_COUNT);
|
||||
int trialsToComplete = Randomizer_GetSettingValue(RSK_TRIAL_COUNT);
|
||||
if (trialsToComplete <= TrialsDoneCount()) {
|
||||
Actor_Kill(thisx);
|
||||
return;
|
||||
|
||||
@@ -462,7 +462,7 @@ s32 DoorWarp1_PlayerInRange(DoorWarp1* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void GivePlayerRandoReward(DoorWarp1* this, Player* player, GlobalContext* globalCtx, u8 ruto, u8 adult) {
|
||||
GetItemID getItemId = GetRandomizedItemId(GI_NONE, this->actor.id, this->actor.params, globalCtx->sceneNum);
|
||||
GetItemID getItemId = Randomizer_GetRandomizedItemId(GI_NONE, this->actor.id, this->actor.params, globalCtx->sceneNum);
|
||||
|
||||
if (this->actor.parent != NULL && this->actor.parent->id == GET_PLAYER(globalCtx)->actor.id &&
|
||||
!Flags_GetTreasure(globalCtx, 0x1F)) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "z_efc_erupc.h"
|
||||
#include "objects/object_efc_erupc/object_efc_erupc.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
@@ -167,6 +168,8 @@ void EfcErupc_DrawParticles(EfcErupcParticles* particles, GlobalContext* globalC
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
for (i = 0; i < EFC_ERUPC_NUM_PARTICLES; i++, particles++) {
|
||||
FrameInterpolation_RecordOpenChild(particles, particles->epoch);
|
||||
|
||||
if (particles->isActive) {
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_efc_erupc_DL_002760);
|
||||
@@ -181,7 +184,10 @@ void EfcErupc_DrawParticles(EfcErupcParticles* particles, GlobalContext* globalC
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_efc_erupc_DL_0027D8);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
@@ -249,5 +255,6 @@ void EfcErupc_InitParticles(EfcErupcParticles* particles) {
|
||||
|
||||
for (i = 0; i < EFC_ERUPC_NUM_PARTICLES; i++, particles++) {
|
||||
particles->isActive = false;
|
||||
particles->epoch++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,8 @@ typedef struct {
|
||||
/* 0x30 */ char unk_2C[4];
|
||||
/* 0x34 */ f32 scale;
|
||||
/* 0x38 */ char unk_34[8];
|
||||
} EfcErupcParticles; // size 0x3C
|
||||
/* 0x3C */ u32 epoch;
|
||||
} EfcErupcParticles; // size 0x40
|
||||
|
||||
#define EFC_ERUPC_NUM_PARTICLES 100
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "z_eff_dust.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
@@ -268,6 +269,8 @@ void EffDust_DrawFunc_8099E4F4(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
f32* distanceTraveled;
|
||||
s32 i;
|
||||
f32 aux;
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
@@ -283,6 +286,8 @@ void EffDust_DrawFunc_8099E4F4(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, sEmptyDL);
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Dust 8099E4F4", epoch + i * 25);
|
||||
|
||||
if (*distanceTraveled < 1.0f) {
|
||||
aux = 1.0f - (*distanceTraveled * *distanceTraveled);
|
||||
Matrix_Translate(this->actor.world.pos.x + (initialPositions->x * ((this->dx * aux) + (1.0f - this->dx))),
|
||||
@@ -298,6 +303,8 @@ void EffDust_DrawFunc_8099E4F4(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gEffSparklesDL));
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
|
||||
initialPositions++;
|
||||
distanceTraveled++;
|
||||
}
|
||||
@@ -314,6 +321,8 @@ void EffDust_DrawFunc_8099E784(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
s32 i;
|
||||
f32 aux;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
static u32 epoch = 0;
|
||||
epoch++;
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
@@ -333,6 +342,8 @@ void EffDust_DrawFunc_8099E784(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, sEmptyDL);
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
FrameInterpolation_RecordOpenChild("Dust 8099E784", epoch + i * 25);
|
||||
|
||||
if (*distanceTraveled < 1.0f) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, *distanceTraveled * 255);
|
||||
|
||||
@@ -357,6 +368,8 @@ void EffDust_DrawFunc_8099E784(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gEffSparklesDL));
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
|
||||
initialPositions++;
|
||||
distanceTraveled++;
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ void func_809B0558(EnAni* this, GlobalContext* globalCtx) {
|
||||
gSaveContext.itemGetInf[1] |= 0x20;
|
||||
} else {
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
s32 getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_MAN_ON_ROOF, GI_HEART_PIECE);
|
||||
s32 getItemId = Randomizer_GetItemIdFromKnownCheck(RC_KAK_MAN_ON_ROOF, GI_HEART_PIECE);
|
||||
func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 200.0f);
|
||||
} else {
|
||||
func_8002F434(&this->actor, globalCtx, GI_HEART_PIECE, 10000.0f, 200.0f);
|
||||
@@ -141,7 +141,7 @@ void func_809B05F0(EnAni* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
s32 getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_MAN_ON_ROOF, GI_HEART_PIECE);
|
||||
s32 getItemId = Randomizer_GetItemIdFromKnownCheck(RC_KAK_MAN_ON_ROOF, GI_HEART_PIECE);
|
||||
func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 200.0f);
|
||||
} else {
|
||||
func_8002F434(&this->actor, globalCtx, GI_HEART_PIECE, 10000.0f, 200.0f);
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "z_en_anubice_fire.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "objects/object_anubice/object_anubice.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS ACTOR_FLAG_4
|
||||
|
||||
@@ -62,6 +63,7 @@ void EnAnubiceFire_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->unk_15A = 30;
|
||||
this->unk_154 = 2.0f;
|
||||
this->scale = 0.0f;
|
||||
this->epoch++;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
this->unk_160[i] = this->actor.world.pos;
|
||||
@@ -230,6 +232,8 @@ void EnAnubiceFire_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
Matrix_Push();
|
||||
for (i = this->unk_15E; i < 6; ++i) {
|
||||
FrameInterpolation_RecordOpenChild(this, this->epoch + i * 25);
|
||||
|
||||
f32 scale = this->actor.scale.x - (i * 0.2f);
|
||||
|
||||
if (scale < 0.0f) {
|
||||
@@ -248,6 +252,8 @@ void EnAnubiceFire_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gAnubiceFireAttackDL);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
|
||||
if (this->scale < 0.1f) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ typedef struct EnAnubiceFire {
|
||||
/* 0x015E */ s16 unk_15E;
|
||||
/* 0x0178 */ Vec3f unk_160[6];
|
||||
/* 0x01A8 */ ColliderCylinder cylinder;
|
||||
} EnAnubiceFire; // size = 0x01F4
|
||||
/* 0x01F4 */ u32 epoch;
|
||||
} EnAnubiceFire; // size = 0x01F8
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "z_en_ba.h"
|
||||
#include "objects/object_bxa/object_bxa.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4)
|
||||
|
||||
@@ -107,6 +108,7 @@ void EnBa_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->actor.targetMode = 4;
|
||||
this->upperParams = (thisx->params >> 8) & 0xFF;
|
||||
thisx->params &= 0xFF;
|
||||
this->epoch++;
|
||||
|
||||
if (this->actor.params < EN_BA_DEAD_BLOB) {
|
||||
if (Flags_GetSwitch(globalCtx, this->upperParams)) {
|
||||
@@ -489,6 +491,8 @@ void EnBa_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 16, 16, 1, 0,
|
||||
(globalCtx->gameplayFrames * -10) % 128, 32, 32));
|
||||
for (i = 0; i < 14; i++, mtx++) {
|
||||
FrameInterpolation_RecordOpenChild(this, this->epoch + i * 25);
|
||||
|
||||
Matrix_Translate(this->unk158[i].x, this->unk158[i].y, this->unk158[i].z, MTXMODE_NEW);
|
||||
Matrix_RotateZYX(this->unk2A8[i].x, this->unk2A8[i].y, this->unk2A8[i].z, MTXMODE_APPLY);
|
||||
Matrix_Scale(this->unk200[i].x, this->unk200[i].y, this->unk200[i].z, MTXMODE_APPLY);
|
||||
@@ -504,6 +508,8 @@ void EnBa_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
}
|
||||
MATRIX_TOMTX(mtx);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
Matrix_Pop();
|
||||
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx),
|
||||
|
||||
@@ -32,6 +32,7 @@ typedef struct EnBa {
|
||||
/* 0x031C */ s16 unk31C;
|
||||
/* 0x0320 */ ColliderJntSph collider;
|
||||
/* 0x0340 */ ColliderJntSphElement colliderItems[2];
|
||||
} EnBa; // size = 0x03C0
|
||||
/* 0x03C0 */ u32 epoch;
|
||||
} EnBa; // size = 0x03C4
|
||||
|
||||
#endif
|
||||
|
||||
@@ -186,14 +186,14 @@ void EnBomBowlPit_GivePrize(EnBomBowlPit* this, GlobalContext* globalCtx) {
|
||||
switch (this->prizeIndex) {
|
||||
case EXITEM_BOMB_BAG_BOWLING:
|
||||
this->getItemId =
|
||||
GetRandomizedItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20);
|
||||
Randomizer_GetItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20);
|
||||
break;
|
||||
case EXITEM_HEART_PIECE_BOWLING:
|
||||
this->getItemId =
|
||||
GetRandomizedItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, GI_HEART_PIECE);
|
||||
Randomizer_GetItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, GI_HEART_PIECE);
|
||||
break;
|
||||
case EXITEM_BOMBCHUS_BOWLING:
|
||||
this->getItemId = GetRandomizedItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10);
|
||||
this->getItemId = Randomizer_GetItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -421,7 +421,7 @@ void EnBox_WaitOpen(EnBox* this, GlobalContext* globalCtx) {
|
||||
Flags_SetTreasure(globalCtx, this->dyna.actor.params & 0x1F);
|
||||
|
||||
// treasure chest game rando
|
||||
if (GetRandoSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
if (gSaveContext.n64ddFlag && globalCtx->sceneNum == 16 && (this->dyna.actor.params & 0x60) != 0x20) {
|
||||
if((this->dyna.actor.params & 0xF) < 2) {
|
||||
Flags_SetCollectible(globalCtx, 0x1B);
|
||||
@@ -445,10 +445,10 @@ void EnBox_WaitOpen(EnBox* this, GlobalContext* globalCtx) {
|
||||
func_8002DBD0(&this->dyna.actor, &sp4C, &player->actor.world.pos);
|
||||
if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f &&
|
||||
Player_IsFacingActor(&this->dyna.actor, 0x3000, globalCtx)) {
|
||||
int32_t item = GetRandomizedItemId(this->dyna.actor.params >> 5 & 0x7F, this->dyna.actor.id, this->dyna.actor.params, globalCtx->sceneNum);
|
||||
int32_t item = Randomizer_GetRandomizedItemId(this->dyna.actor.params >> 5 & 0x7F, this->dyna.actor.id, this->dyna.actor.params, globalCtx->sceneNum);
|
||||
|
||||
// RANDOTODO treasure chest game rando
|
||||
if (GetRandoSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
if (gSaveContext.n64ddFlag && globalCtx->sceneNum == 16 && (this->dyna.actor.params & 0x60) != 0x20) {
|
||||
if((this->dyna.actor.params & 0xF) < 2) {
|
||||
if(Flags_GetCollectible(globalCtx, 0x1B)) {
|
||||
@@ -590,7 +590,7 @@ void EnBox_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (((!gSaveContext.n64ddFlag && ((this->dyna.actor.params >> 5 & 0x7F) == 0x7C)) ||
|
||||
(gSaveContext.n64ddFlag && GetRandomizedItemId(this->dyna.actor.params >> 5 & 0x7F,
|
||||
(gSaveContext.n64ddFlag && Randomizer_GetRandomizedItemId(this->dyna.actor.params >> 5 & 0x7F,
|
||||
this->dyna.actor.id, this->dyna.actor.params,
|
||||
globalCtx->sceneNum) == GI_ICE_TRAP)) &&
|
||||
this->actionFunc == EnBox_Open && this->skelanime.curFrame > 45 &&
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "z_en_bx.h"
|
||||
#include "objects/object_bxa/object_bxa.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS ACTOR_FLAG_4
|
||||
|
||||
@@ -103,6 +104,7 @@ void EnBx_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
thisx->params &= 0xFF;
|
||||
this->epoch++;
|
||||
}
|
||||
|
||||
void EnBx_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
@@ -235,10 +237,14 @@ void EnBx_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++, mtx++) {
|
||||
FrameInterpolation_RecordOpenChild(this, this->epoch + i * 25);
|
||||
|
||||
Matrix_Translate(this->unk_154[i].x, this->unk_154[i].y, this->unk_154[i].z, MTXMODE_NEW);
|
||||
Matrix_RotateZYX(this->unk_1B4[i].x, this->unk_1B4[i].y, this->unk_1B4[i].z, MTXMODE_APPLY);
|
||||
Matrix_Scale(this->unk_184[i].x, this->unk_184[i].y, this->unk_184[i].z, MTXMODE_APPLY);
|
||||
MATRIX_TOMTX(mtx);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_bxa_DL_0022F0);
|
||||
|
||||
@@ -16,6 +16,7 @@ typedef struct EnBx {
|
||||
/* 0x01B4 */ Vec3s unk_1B4[4];
|
||||
/* 0x01CC */ ColliderCylinder collider;
|
||||
/* 0x0218 */ ColliderQuad colliderQuad;
|
||||
} EnBx; // size = 0x0298
|
||||
/* 0x0298 */ u32 epoch;
|
||||
} EnBx; // size = 0x029C
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
void EnClearTag_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
@@ -278,6 +280,7 @@ void EnClearTag_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
globalCtx->specialEffects = &sClearTagEffects[0];
|
||||
for (i = 0; i < CLEAR_TAG_EFFECT_MAX_COUNT; i++) {
|
||||
sClearTagEffects[i].type = CLEAR_TAG_EFFECT_AVAILABLE;
|
||||
sClearTagEffects[i].epoch++;
|
||||
}
|
||||
this->drawMode = CLEAR_TAG_DRAW_MODE_ALL;
|
||||
}
|
||||
@@ -902,6 +905,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
|
||||
// Draw all Debris effects.
|
||||
for (i = 0; i < CLEAR_TAG_EFFECT_MAX_COUNT; i++, effect++) {
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
if (effect->type == CLEAR_TAG_EFFECT_DEBRIS) {
|
||||
// Apply the debris effect material if it has not already been applied.
|
||||
if (!isMaterialApplied) {
|
||||
@@ -918,6 +923,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gArwingDebrisEffectDL);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
|
||||
// Draw all ground flash effects.
|
||||
@@ -925,6 +932,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
isMaterialApplied = false;
|
||||
for (i = 0; i < CLEAR_TAG_EFFECT_MAX_COUNT; i++, effect++) {
|
||||
if (effect->type == CLEAR_TAG_EFFECT_FLASH) {
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
// Apply the flash ground effect material if it has not already been applied.
|
||||
if (!isMaterialApplied) {
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
@@ -941,6 +950,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gArwingFlashEffectGroundDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -949,6 +960,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
isMaterialApplied = false;
|
||||
for (i = 0; i < CLEAR_TAG_EFFECT_MAX_COUNT; i++, effect++) {
|
||||
if (effect->type == CLEAR_TAG_EFFECT_SMOKE) {
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
// Apply the smoke effect material if it has not already been applied.
|
||||
if (!isMaterialApplied) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gArwingFireEffectMaterialDL);
|
||||
@@ -970,6 +983,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gArwingFireEffectDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -978,6 +993,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
isMaterialApplied = false;
|
||||
for (i = 0; i < CLEAR_TAG_EFFECT_MAX_COUNT; i++, effect++) {
|
||||
if (effect->type == CLEAR_TAG_EFFECT_FIRE) {
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
// Apply the fire effect material if it has not already been applied.
|
||||
if (!isMaterialApplied) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gArwingFireEffectMaterialDL);
|
||||
@@ -996,6 +1013,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gArwingFireEffectDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1004,6 +1023,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
isMaterialApplied = false;
|
||||
for (i = 0; i < CLEAR_TAG_EFFECT_MAX_COUNT; i++, effect++) {
|
||||
if (effect->type == CLEAR_TAG_EFFECT_FLASH) {
|
||||
FrameInterpolation_RecordOpenChild(effect, effect->epoch);
|
||||
|
||||
// Apply the flash billboard effect material if it has not already been applied.
|
||||
if (!isMaterialApplied) {
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
@@ -1019,6 +1040,8 @@ void EnClearTag_DrawEffects(GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gArwingFlashEffectDL);
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,8 @@ typedef struct EnClearTagEffect {
|
||||
/* 0x0058 */ f32 rotationX;
|
||||
/* 0x005C */ f32 floorHeight;
|
||||
/* 0x0060 */ Vec3f floorTangent;
|
||||
} EnClearTagEffect; // size = 0x6C
|
||||
/* 0x006C */ u32 epoch;
|
||||
} EnClearTagEffect; // size = 0x70
|
||||
|
||||
#define CLEAR_TAG_EFFECT_MAX_COUNT 100
|
||||
|
||||
|
||||
@@ -453,7 +453,7 @@ void func_809EEA00(EnDivingGame* this, GlobalContext* globalCtx) {
|
||||
if ((this->unk_292 == Message_GetState(&globalCtx->msgCtx) && Message_ShouldAdvance(globalCtx))) {
|
||||
Message_CloseTextbox(globalCtx);
|
||||
this->actor.parent = NULL;
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f);
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? Randomizer_GetItemIdFromKnownCheck(RC_ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f);
|
||||
this->actionFunc = func_809EEA90;
|
||||
}
|
||||
}
|
||||
@@ -463,7 +463,7 @@ void func_809EEA90(EnDivingGame* this, GlobalContext* globalCtx) {
|
||||
if (Actor_HasParent(&this->actor, globalCtx)) {
|
||||
this->actionFunc = func_809EEAF8;
|
||||
} else {
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f);
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? Randomizer_GetItemIdFromKnownCheck(RC_ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -371,7 +371,7 @@ void EnDns_Talk(EnDns* this, GlobalContext* globalCtx) {
|
||||
void func_809EFDD0(EnDns* this, GlobalContext* globalCtx) {
|
||||
if (this->actor.params == 0x9) {
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
func_8002F434(&this->actor, globalCtx, GetRandomizedItemId(GI_STICK_UPGRADE_30, this->actor.id, this->actor.params, globalCtx->sceneNum), 130.0f, 100.0f);
|
||||
func_8002F434(&this->actor, globalCtx, Randomizer_GetRandomizedItemId(GI_STICK_UPGRADE_30, this->actor.id, this->actor.params, globalCtx->sceneNum), 130.0f, 100.0f);
|
||||
} else if (CUR_UPG_VALUE(UPG_STICKS) < 2) {
|
||||
func_8002F434(&this->actor, globalCtx, GI_STICK_UPGRADE_20, 130.0f, 100.0f);
|
||||
} else {
|
||||
@@ -379,14 +379,14 @@ void func_809EFDD0(EnDns* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
} else if (this->actor.params == 0xA) {
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
func_8002F434(&this->actor, globalCtx, GetRandomizedItemId(GI_NUT_UPGRADE_40, this->actor.id, this->actor.params, globalCtx->sceneNum), 130.0f, 100.0f);
|
||||
func_8002F434(&this->actor, globalCtx, Randomizer_GetRandomizedItemId(GI_NUT_UPGRADE_40, this->actor.id, this->actor.params, globalCtx->sceneNum), 130.0f, 100.0f);
|
||||
} else if (CUR_UPG_VALUE(UPG_NUTS) < 2) {
|
||||
func_8002F434(&this->actor, globalCtx, GI_NUT_UPGRADE_30, 130.0f, 100.0f);
|
||||
} else {
|
||||
func_8002F434(&this->actor, globalCtx, GI_NUT_UPGRADE_40, 130.0f, 100.0f);
|
||||
}
|
||||
} else {
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemId(this->dnsItemEntry->getItemId, this->actor.id, this->actor.params, globalCtx->sceneNum) : this->dnsItemEntry->getItemId, 130.0f, 100.0f);
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? Randomizer_GetRandomizedItemId(this->dnsItemEntry->getItemId, this->actor.id, this->actor.params, globalCtx->sceneNum) : this->dnsItemEntry->getItemId, 130.0f, 100.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -139,13 +139,13 @@ void EnDntDemo_Judge(EnDntDemo* this, GlobalContext* globalCtx) {
|
||||
switch (Player_GetMask(globalCtx)) {
|
||||
case PLAYER_MASK_SKULL:
|
||||
if (!Flags_GetTreasure(globalCtx, 0x1F)) {
|
||||
GiveItemWithoutActor(globalCtx, GetRandomizedItemIdFromKnownCheck(RC_DEKU_THEATER_SKULL_MASK, GI_STICK_UPGRADE_30));
|
||||
GiveItemWithoutActor(globalCtx, Randomizer_GetItemIdFromKnownCheck(RC_DEKU_THEATER_SKULL_MASK, GI_STICK_UPGRADE_30));
|
||||
Flags_SetTreasure(globalCtx, 0x1F);
|
||||
}
|
||||
break;
|
||||
case PLAYER_MASK_TRUTH:
|
||||
if (!Flags_GetTreasure(globalCtx, 0x1E)) {
|
||||
GiveItemWithoutActor(globalCtx, GetRandomizedItemIdFromKnownCheck(RC_DEKU_THEATER_MASK_OF_TRUTH, GI_NUT_UPGRADE_40));
|
||||
GiveItemWithoutActor(globalCtx, Randomizer_GetItemIdFromKnownCheck(RC_DEKU_THEATER_MASK_OF_TRUTH, GI_NUT_UPGRADE_40));
|
||||
Flags_SetTreasure(globalCtx, 0x1E);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -548,7 +548,7 @@ void func_809FEC70(EnDu* this, GlobalContext* globalCtx) {
|
||||
EnDu_SetupAction(this, func_809FECE4);
|
||||
} else {
|
||||
f32 xzRange = this->actor.xzDistToPlayer + 1.0f;
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_GC_DARUNIAS_JOY, GI_BRACELET) : GI_BRACELET, xzRange, fabsf(this->actor.yDistToPlayer) + 1.0f);
|
||||
func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? Randomizer_GetItemIdFromKnownCheck(RC_GC_DARUNIAS_JOY, GI_BRACELET) : GI_BRACELET, xzRange, fabsf(this->actor.yDistToPlayer) + 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.h"
|
||||
#include "vt.h"
|
||||
#include "objects/object_efc_star_field/object_efc_star_field.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
|
||||
|
||||
@@ -303,6 +304,7 @@ void EnEncount2_ParticleInit(EnEncount2* this, Vec3f* particlePos, f32 scale) {
|
||||
particle->moveDirection.y = -20.0f;
|
||||
particle->moveDirection.z = Rand_CenteredFloat(20.0f);
|
||||
particle->isAlive = 1;
|
||||
particle->epoch++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -354,6 +356,8 @@ void EnEncount2_ParticleDraw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[objBankIndex].segment);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->particles); particle++, i++) {
|
||||
FrameInterpolation_RecordOpenChild(particle, particle->epoch);
|
||||
|
||||
if (particle->isAlive) {
|
||||
Matrix_Translate(particle->pos.x, particle->pos.y, particle->pos.z, MTXMODE_NEW);
|
||||
Matrix_RotateX(particle->rot.x * (M_PI / 180.0f), MTXMODE_APPLY);
|
||||
@@ -366,6 +370,8 @@ void EnEncount2_ParticleDraw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_efc_star_field_DL_000DE0);
|
||||
}
|
||||
|
||||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@ typedef struct {
|
||||
/* 0x0010 */ u8 isAlive;
|
||||
/* 0x0014 */ Vec3f moveDirection;
|
||||
/* 0x0020 */ Vec3f rot;
|
||||
} EnEncount2Particle; // size = 0x2C
|
||||
/* 0x002C */ u32 epoch;
|
||||
} EnEncount2Particle; // size = 0x30
|
||||
|
||||
typedef struct EnEncount2 {
|
||||
/* 0x0000 */ Actor actor;
|
||||
|
||||
@@ -138,8 +138,8 @@ void EnExItem_WaitForObject(EnExItem* this, GlobalContext* globalCtx) {
|
||||
case EXITEM_BOMB_BAG_BOWLING:
|
||||
this->unk_17C = func_8002EBCC;
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
this->giDrawId = GetItemModelFromId(
|
||||
GetRandomizedItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20));
|
||||
this->giDrawId = Randomizer_GetItemModelFromId(
|
||||
Randomizer_GetItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20));
|
||||
} else {
|
||||
this->giDrawId = GID_BOMB_BAG_30;
|
||||
}
|
||||
@@ -173,8 +173,8 @@ void EnExItem_WaitForObject(EnExItem* this, GlobalContext* globalCtx) {
|
||||
case EXITEM_BOMBCHUS_BOWLING:
|
||||
this->unk_17C = func_8002EBCC;
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
this->giDrawId = GetItemModelFromId(
|
||||
GetRandomizedItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10));
|
||||
this->giDrawId = Randomizer_GetItemModelFromId(
|
||||
Randomizer_GetItemIdFromKnownCheck(RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10));
|
||||
} else {
|
||||
this->giDrawId = GID_BOMBCHU;
|
||||
}
|
||||
@@ -229,7 +229,7 @@ void EnExItem_WaitForObject(EnExItem* this, GlobalContext* globalCtx) {
|
||||
this->scale = 0.5f;
|
||||
this->unkFloat = 0.5f;
|
||||
this->actor.velocity.y = 10.0f;
|
||||
if (!gSaveContext.n64ddFlag || !GetRandoSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
if (!gSaveContext.n64ddFlag || !Randomizer_GetSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
||||
switch (this->type) {
|
||||
case EXITEM_GREEN_RUPEE_CHEST:
|
||||
this->giDrawId = GID_RUPEE_GREEN;
|
||||
@@ -404,7 +404,7 @@ void EnExItem_TargetPrizeApproach(EnExItem* this, GlobalContext* globalCtx) {
|
||||
this->actor.parent = NULL;
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
GET_PLAYER(globalCtx)->stateFlags1 &= ~(PLAYER_STATE1_10 | PLAYER_STATE1_11);
|
||||
getItemId = GetRandomizedItemIdFromKnownCheck(RC_LW_TARGET_IN_WOODS, GI_BULLET_BAG_50);
|
||||
getItemId = Randomizer_GetItemIdFromKnownCheck(RC_LW_TARGET_IN_WOODS, GI_BULLET_BAG_50);
|
||||
} else {
|
||||
if (CUR_UPG_VALUE(UPG_BULLET_BAG) == 1) {
|
||||
getItemId = GI_BULLET_BAG_40;
|
||||
@@ -424,7 +424,7 @@ void EnExItem_TargetPrizeGive(EnExItem* this, GlobalContext* globalCtx) {
|
||||
this->actionFunc = EnExItem_TargetPrizeFinish;
|
||||
} else {
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
getItemId = GetRandomizedItemIdFromKnownCheck(RC_LW_TARGET_IN_WOODS, GI_BULLET_BAG_50);
|
||||
getItemId = Randomizer_GetItemIdFromKnownCheck(RC_LW_TARGET_IN_WOODS, GI_BULLET_BAG_50);
|
||||
} else {
|
||||
getItemId = (CUR_UPG_VALUE(UPG_BULLET_BAG) == 2) ? GI_BULLET_BAG_50 : GI_BULLET_BAG_40;
|
||||
}
|
||||
@@ -510,12 +510,12 @@ void EnExItem_DrawItems(EnExItem* this, GlobalContext* globalCtx) {
|
||||
switch (this->type) {
|
||||
case EXITEM_BOMB_BAG_BOWLING:
|
||||
case EXITEM_BOMB_BAG_COUNTER:
|
||||
randoGetItemId = GetRandomizedItemIdFromKnownCheck(
|
||||
randoGetItemId = Randomizer_GetItemIdFromKnownCheck(
|
||||
RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, GI_BOMB_BAG_20);
|
||||
break;
|
||||
case EXITEM_BOMBCHUS_BOWLING:
|
||||
case EXITEM_BOMBCHUS_COUNTER:
|
||||
randoGetItemId = GetRandomizedItemIdFromKnownCheck(
|
||||
randoGetItemId = Randomizer_GetItemIdFromKnownCheck(
|
||||
RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, GI_BOMBCHUS_10);
|
||||
break;
|
||||
}
|
||||
@@ -532,12 +532,12 @@ void EnExItem_DrawHeartPiece(EnExItem* this, GlobalContext* globalCtx) {
|
||||
func_8002ED80(&this->actor, globalCtx, 0);
|
||||
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
s32 randoGetItemId = GetRandomizedItemIdFromKnownCheck(
|
||||
s32 randoGetItemId = Randomizer_GetItemIdFromKnownCheck(
|
||||
RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, GI_HEART_PIECE);
|
||||
if (randoGetItemId >= GI_MINUET_OF_FOREST && randoGetItemId <= GI_DOUBLE_DEFENSE) {
|
||||
EnItem00_CustomItemsParticles(&this->actor, globalCtx, randoGetItemId);
|
||||
}
|
||||
GetItem_Draw(globalCtx, GetItemModelFromId(randoGetItemId));
|
||||
GetItem_Draw(globalCtx, Randomizer_GetItemModelFromId(randoGetItemId));
|
||||
} else {
|
||||
GetItem_Draw(globalCtx, GID_HEART_PIECE);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user