mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-20 13:23:45 -07:00
Merge branch 'develop' of github.com:Malkierian/Shipwright into lus-bump-mpq
This commit is contained in:
commit
519103434f
56 changed files with 10192 additions and 546 deletions
20
.github/workflows/generate-builds.yml
vendored
20
.github/workflows/generate-builds.yml
vendored
|
@ -62,16 +62,16 @@ jobs:
|
||||||
cmake ..
|
cmake ..
|
||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
- name: Generate soh.otr
|
- name: Generate soh.o2r
|
||||||
run: |
|
run: |
|
||||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||||
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
|
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
|
||||||
cmake --build build-cmake --config Release --target GenerateSohOtr -j3
|
cmake --build build-cmake --config Release --target GenerateSohOtr -j3
|
||||||
- name: Upload soh.otr
|
- name: Upload soh.o2r
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: soh.otr
|
name: soh.o2r
|
||||||
path: soh.otr
|
path: soh.o2r
|
||||||
retention-days: 3
|
retention-days: 3
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
|
@ -122,10 +122,10 @@ jobs:
|
||||||
brew uninstall --ignore-dependencies libpng
|
brew uninstall --ignore-dependencies libpng
|
||||||
sudo port install $(cat .github/workflows/macports-deps.txt)
|
sudo port install $(cat .github/workflows/macports-deps.txt)
|
||||||
brew install ninja
|
brew install ninja
|
||||||
- name: Download soh.otr
|
- name: Download soh.o2r
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: soh.otr
|
name: soh.o2r
|
||||||
path: build-cmake/soh
|
path: build-cmake/soh
|
||||||
- name: Build SoH
|
- name: Build SoH
|
||||||
run: |
|
run: |
|
||||||
|
@ -233,10 +233,10 @@ jobs:
|
||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
|
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
|
||||||
- name: Download soh.otr
|
- name: Download soh.o2r
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: soh.otr
|
name: soh.o2r
|
||||||
path: build-cmake/soh
|
path: build-cmake/soh
|
||||||
- name: Build SoH
|
- name: Build SoH
|
||||||
run: |
|
run: |
|
||||||
|
@ -298,10 +298,10 @@ jobs:
|
||||||
path: vcpkg
|
path: vcpkg
|
||||||
- name: Configure Developer Command Prompt
|
- name: Configure Developer Command Prompt
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
- name: Download soh.otr
|
- name: Download soh.o2r
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: soh.otr
|
name: soh.o2r
|
||||||
path: build-windows/soh
|
path: build-windows/soh
|
||||||
- name: Build SoH
|
- name: Build SoH
|
||||||
env:
|
env:
|
||||||
|
|
2
.github/workflows/pr-artifacts.yml
vendored
2
.github/workflows/pr-artifacts.yml
vendored
|
@ -48,7 +48,7 @@ jobs:
|
||||||
});
|
});
|
||||||
|
|
||||||
return allArtifacts.data.artifacts.reduce((acc, item) => {
|
return allArtifacts.data.artifacts.reduce((acc, item) => {
|
||||||
if (item.name === "soh.otr") return acc;
|
if (item.name === "soh.o2r") return acc;
|
||||||
acc += `
|
acc += `
|
||||||
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
|
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
|
||||||
return acc;
|
return acc;
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -412,6 +412,7 @@ ReleaseObj/*
|
||||||
.tags
|
.tags
|
||||||
tags
|
tags
|
||||||
*.otr
|
*.otr
|
||||||
|
*.o2r
|
||||||
*.sav
|
*.sav
|
||||||
shipofharkinian.ini
|
shipofharkinian.ini
|
||||||
shipofharkinian.json
|
shipofharkinian.json
|
||||||
|
|
|
@ -178,24 +178,15 @@ set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scri
|
||||||
set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png")
|
set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png")
|
||||||
|
|
||||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
install(PROGRAMS "${CMAKE_BINARY_DIR}/linux/soh.sh" DESTINATION . COMPONENT appimage)
|
install(FILES "${CMAKE_BINARY_DIR}/soh/soh.o2r" DESTINATION . COMPONENT ship)
|
||||||
install(FILES "${CMAKE_BINARY_DIR}/soh/soh.otr" DESTINATION . COMPONENT ship)
|
|
||||||
install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor)
|
install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT extractor)
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets COMPONENT extractor)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT extractor)
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml COMPONENT extractor)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT extractor)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
|
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT ship)
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/ COMPONENT ship)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT ship)
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml COMPONENT ship)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT ship)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT ship)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT ship)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT ship)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
find_package(Python3 COMPONENTS Interpreter)
|
||||||
|
@ -203,42 +194,42 @@ find_package(Python3 COMPONENTS Interpreter)
|
||||||
# Target to generate OTRs
|
# Target to generate OTRs
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
ExtractAssets
|
ExtractAssets
|
||||||
COMMAND ${CMAKE_COMMAND} -E rm -f oot.otr oot-mq.otr soh.otr
|
COMMAND ${CMAKE_COMMAND} -E rm -f oot.o2r oot-mq.o2r soh.o2r
|
||||||
|
|
||||||
# copy LUS default shaders into assets/custom
|
# copy LUS default shaders into assets/custom
|
||||||
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||||
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../soh/assets/xml --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root assets/xml --custom-otr-file soh.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
||||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
|
||||||
COMMENT "Running asset extraction..."
|
COMMENT "Running asset extraction..."
|
||||||
DEPENDS ZAPD
|
DEPENDS ZAPD
|
||||||
BYPRODUCTS oot.otr ${CMAKE_SOURCE_DIR}/oot.otr oot-mq.otr ${CMAKE_SOURCE_DIR}/oot-mq.otr ${CMAKE_SOURCE_DIR}/soh.otr
|
BYPRODUCTS oot.o2r ${CMAKE_SOURCE_DIR}/oot.o2r oot-mq.o2r ${CMAKE_SOURCE_DIR}/oot-mq.o2r ${CMAKE_SOURCE_DIR}/soh.o2r
|
||||||
)
|
)
|
||||||
|
|
||||||
# Target to generate headers
|
# Target to generate headers
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
ExtractAssetHeaders
|
ExtractAssetHeaders
|
||||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../soh/assets/xml --gen-headers
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root assets/xml --gen-headers
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
|
||||||
COMMENT "Generating asset headers..."
|
COMMENT "Generating asset headers..."
|
||||||
DEPENDS ZAPD
|
DEPENDS ZAPD
|
||||||
)
|
)
|
||||||
|
|
||||||
# Target to generate only soh.otr
|
# Target to generate only soh.o2r
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
GenerateSohOtr
|
GenerateSohOtr
|
||||||
COMMAND ${CMAKE_COMMAND} -E rm -f soh.otr
|
COMMAND ${CMAKE_COMMAND} -E rm -f soh.o2r
|
||||||
|
|
||||||
# copy LUS default shaders into assets/custom
|
# copy LUS default shaders into assets/custom
|
||||||
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||||
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file soh.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
||||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLYSOHOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLYSOHOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
|
||||||
COMMENT "Generating soh.otr..."
|
COMMENT "Generating soh.o2r..."
|
||||||
DEPENDS ZAPD
|
DEPENDS ZAPD
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -271,22 +262,12 @@ add_custom_target(CreateOSXIcons
|
||||||
)
|
)
|
||||||
add_dependencies(soh CreateOSXIcons)
|
add_dependencies(soh CreateOSXIcons)
|
||||||
|
|
||||||
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets/extractor)
|
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets)
|
||||||
|
|
||||||
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
|
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
|
||||||
|
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor)
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls)
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml)
|
||||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
|
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
|
|
||||||
|
|
||||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/assets
|
|
||||||
DESTINATION .
|
|
||||||
PATTERN ZAPD.out
|
|
||||||
PERMISSIONS ${PROGRAM_PERMISSIONS_EXECUTE}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Rename the installed soh binary to drop the macos suffix
|
# Rename the installed soh binary to drop the macos suffix
|
||||||
INSTALL(CODE "FILE(RENAME \${CMAKE_INSTALL_PREFIX}/../MacOS/soh-macos \${CMAKE_INSTALL_PREFIX}/../MacOS/soh)")
|
INSTALL(CODE "FILE(RENAME \${CMAKE_INSTALL_PREFIX}/../MacOS/soh-macos \${CMAKE_INSTALL_PREFIX}/../MacOS/soh)")
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 41052efcdf8df8e67517cc93da8975fcd4e14af9
|
Subproject commit 461ab19a36cde807591543397e136cae19aa6e7c
|
2
ZAPDTR
2
ZAPDTR
|
@ -1 +1 @@
|
||||||
Subproject commit 2aeababbfb81b00d34673406453e8e8e2deaa27b
|
Subproject commit 684f21a475dcfeee89938ae1f4afc42768a3e7ef
|
|
@ -1,37 +1,37 @@
|
||||||
message(STATUS "Copying otr files...")
|
message(STATUS "Copying otr files...")
|
||||||
|
|
||||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot.otr)
|
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot.o2r)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${SOURCE_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${SOURCE_DIR})
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${BINARY_DIR}/soh/)
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${BINARY_DIR}/soh/)
|
||||||
message(STATUS "Copied oot.otr")
|
message(STATUS "Copied oot.o2r")
|
||||||
endif()
|
endif()
|
||||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot-mq.otr)
|
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot-mq.o2r)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.otr ${SOURCE_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${SOURCE_DIR})
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.otr ${BINARY_DIR}/soh/)
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${BINARY_DIR}/soh/)
|
||||||
message(STATUS "Copied oot-mq.otr")
|
message(STATUS "Copied oot-mq.o2r")
|
||||||
endif()
|
endif()
|
||||||
if(EXISTS ${SOURCE_DIR}/OTRExporter/soh.otr)
|
if(EXISTS ${SOURCE_DIR}/soh/soh.o2r)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.otr ${SOURCE_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${SOURCE_DIR})
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.otr ${BINARY_DIR}/soh/)
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${BINARY_DIR}/soh/)
|
||||||
message(STATUS "Copied soh.otr")
|
message(STATUS "Copied soh.o2r")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Additionally for Windows, copy the otrs to the target dir, side by side with soh.exe
|
# Additionally for Windows, copy the otrs to the target dir, side by side with soh.exe
|
||||||
if(SYSTEM_NAME MATCHES "Windows")
|
if(SYSTEM_NAME MATCHES "Windows")
|
||||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot.otr)
|
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot.o2r)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${TARGET_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${TARGET_DIR})
|
||||||
endif()
|
endif()
|
||||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot-mq.otr)
|
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot-mq.o2r)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.otr ${TARGET_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${TARGET_DIR})
|
||||||
endif()
|
endif()
|
||||||
if(EXISTS ${SOURCE_DIR}/OTRExporter/soh.otr)
|
if(EXISTS ${SOURCE_DIR}/soh/soh.o2r)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.otr ${TARGET_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${TARGET_DIR})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT ONLYSOHOTR AND (NOT EXISTS ${SOURCE_DIR}/oot.otr AND NOT EXISTS ${SOURCE_DIR}/oot-mq.otr))
|
if(NOT ONLYSOHOTR AND (NOT EXISTS ${SOURCE_DIR}/oot.o2r AND NOT EXISTS ${SOURCE_DIR}/oot-mq.o2r))
|
||||||
message(FATAL_ERROR "Failed to copy. No OTR files found.")
|
message(FATAL_ERROR "Failed to copy. No OTR files found.")
|
||||||
endif()
|
endif()
|
||||||
if(NOT EXISTS ${SOURCE_DIR}/soh.otr)
|
if(NOT EXISTS ${SOURCE_DIR}/soh.o2r)
|
||||||
message(FATAL_ERROR "Failed to copy. No soh OTR found.")
|
message(FATAL_ERROR "Failed to copy. No soh OTR found.")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Version=1.0
|
Version=1.0
|
||||||
Name=SOH
|
Name=SOH
|
||||||
Exec=soh.sh
|
Exec=soh.elf
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Icon=sohIcon
|
Icon=sohIcon
|
||||||
Type=Application
|
Type=Application
|
||||||
|
|
|
@ -1,338 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
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)
|
|
||||||
|
|
||||||
if [ -z ${SHIP_HOME+x} ]; then
|
|
||||||
export SHIP_HOME=$PWD
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z ${SHIP_BIN_DIR+x} ]; then
|
|
||||||
export SHIP_BIN_DIR="$HERE/usr/bin"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -e "$SHIP_HOME"/mods ]]; then
|
|
||||||
mkdir -p "$SHIP_HOME"/mods
|
|
||||||
touch "$SHIP_HOME"/mods/custom_otr_files_go_here.txt
|
|
||||||
fi
|
|
||||||
|
|
||||||
while [[ (! -e "$SHIP_HOME"/oot.otr) || (! -e "$SHIP_HOME"/oot-mq.otr) ]]; do
|
|
||||||
for romfile in "$SHIP_HOME"/*.*64
|
|
||||||
do
|
|
||||||
if [[ -e "$romfile" ]] || [[ -L "$romfile" ]]; then
|
|
||||||
export ASSETDIR="$(mktemp -d /tmp/assets-XXXXX)"
|
|
||||||
ln -s "$SHIP_BIN_DIR"/{assets,soh.elf,ZAPD} "$ASSETDIR"
|
|
||||||
export OLDPWD="$PWD"
|
|
||||||
mkdir -p "$ASSETDIR"/tmp
|
|
||||||
if [[ -e "$romfile" ]]; then
|
|
||||||
ln -s "$romfile" "$ASSETDIR"/tmp/rom.z64
|
|
||||||
else
|
|
||||||
ORIG_ROM_PATH=$(readlink "$romfile")
|
|
||||||
ln -s "$ORIG_ROM_PATH" "$ASSETDIR"/tmp/rom.z64
|
|
||||||
fi
|
|
||||||
cd "$ASSETDIR"
|
|
||||||
ROMHASH=$(sha1sum -b "$ASSETDIR"/tmp/rom.z64 | awk '{ print $1 }')
|
|
||||||
|
|
||||||
# Remap v64 and n64 hashes to their z64 hash equivalent
|
|
||||||
# ZAPD will handle converting the data into z64 format
|
|
||||||
case "$ROMHASH" in
|
|
||||||
a9059b56e761c9034fbe02fe4c24985aaa835dac) # v64
|
|
||||||
ROMHASH=cee6bc3c2a634b41728f2af8da54d9bf8cc14099
|
|
||||||
;;
|
|
||||||
24708102dc504d3f375a37f4ae4e149c167dc515) # n64
|
|
||||||
ROMHASH=cee6bc3c2a634b41728f2af8da54d9bf8cc14099
|
|
||||||
;;
|
|
||||||
580dd0bd1b6d2c51cc20a764eece84dba558964c) # v64
|
|
||||||
ROMHASH=0227d7c0074f2d0ac935631990da8ec5914597b4
|
|
||||||
;;
|
|
||||||
d6342c59007e57c1194661ec6880b2f078403f4e) # n64
|
|
||||||
ROMHASH=0227d7c0074f2d0ac935631990da8ec5914597b4
|
|
||||||
;;
|
|
||||||
d0bdc2eb320668b4ba6893b9aefe4040a73123ff) # v64
|
|
||||||
ROMHASH=328a1f1beba30ce5e178f031662019eb32c5f3b5
|
|
||||||
;;
|
|
||||||
4946ab250f6ac9b32d76b21f309ebb8ebc8103d2) # n64
|
|
||||||
ROMHASH=328a1f1beba30ce5e178f031662019eb32c5f3b5
|
|
||||||
;;
|
|
||||||
663c34f1b2c05a09e5beffe4d0dcd440f7d49dc7) # v64
|
|
||||||
ROMHASH=cfbb98d392e4a9d39da8285d10cbef3974c2f012
|
|
||||||
;;
|
|
||||||
24c73d378b0620a380ce5ef9f2b186c6c157a68b) # n64
|
|
||||||
ROMHASH=cfbb98d392e4a9d39da8285d10cbef3974c2f012
|
|
||||||
;;
|
|
||||||
8ebf2e29313f44f2d49e5b4191971d09919e8e48) # v64
|
|
||||||
ROMHASH=f46239439f59a2a594ef83cf68ef65043b1bffe2
|
|
||||||
;;
|
|
||||||
4264bf7b875737b8fae77d52322a5099d051fc11) # n64
|
|
||||||
ROMHASH=f46239439f59a2a594ef83cf68ef65043b1bffe2
|
|
||||||
;;
|
|
||||||
973bc6fe56010a8d646166a1182a81b4f13b8cf9) # v64
|
|
||||||
ROMHASH=50bebedad9e0f10746a52b07239e47fa6c284d03
|
|
||||||
;;
|
|
||||||
d327752c46edc70ff3668b9514083dbbee08927c) # v64
|
|
||||||
ROMHASH=50bebedad9e0f10746a52b07239e47fa6c284d03
|
|
||||||
;;
|
|
||||||
ecdeb1747560834e079c22243febea7f6f26ba3b) # v64
|
|
||||||
ROMHASH=079b855b943d6ad8bd1eb026c0ed169ecbdac7da
|
|
||||||
;;
|
|
||||||
f19f8662ec7abee29484a272a6fda53e39efe0f1) # n64
|
|
||||||
ROMHASH=079b855b943d6ad8bd1eb026c0ed169ecbdac7da
|
|
||||||
;;
|
|
||||||
ab519ce04a33818ce2c39b3c514a751d807a494a) # v64
|
|
||||||
ROMHASH=cfecfdc58d650e71a200c81f033de4e6d617a9f6
|
|
||||||
;;
|
|
||||||
c19a34f7646305e1755249fca2071e178bd7cd00) # n64
|
|
||||||
ROMHASH=cfecfdc58d650e71a200c81f033de4e6d617a9f6
|
|
||||||
;;
|
|
||||||
25e8ae79ea0839ca5c984473f7460d8040c36f9c) # v64
|
|
||||||
ROMHASH=517bd9714c73cb96c21e7c2ef640d7b55186102f
|
|
||||||
;;
|
|
||||||
166c02770d67fcc3954c443eb400a6a3573d3fc0) # n64
|
|
||||||
ROMHASH=517bd9714c73cb96c21e7c2ef640d7b55186102f
|
|
||||||
;;
|
|
||||||
79a4f053d34018e59279e6d4b83c7daccd985c87) # v64
|
|
||||||
ROMHASH=ad69c91157f6705e8ab06c79fe08aad47bb57ba7
|
|
||||||
;;
|
|
||||||
82fafee9c6ac7946739282958364ce606077ac65) # n64
|
|
||||||
ROMHASH=ad69c91157f6705e8ab06c79fe08aad47bb57ba7
|
|
||||||
;;
|
|
||||||
18cd0eb65914a21d8fa08dfe71c29d865e9d728a) # v64
|
|
||||||
ROMHASH=d3ecb253776cd847a5aa63d859d8c89a2f37b364
|
|
||||||
;;
|
|
||||||
07940d5609e04b7caac63570731e01189129212e) # n64
|
|
||||||
ROMHASH=d3ecb253776cd847a5aa63d859d8c89a2f37b364
|
|
||||||
;;
|
|
||||||
3ac86253e0c0d55486d212e647350c1527b9c92d) # v64
|
|
||||||
ROMHASH=41b3bdc48d98c48529219919015a1af22f5057c2
|
|
||||||
;;
|
|
||||||
70bf30a9980026e615a1ae8d2735a773cf9fcc94) # n64
|
|
||||||
ROMHASH=41b3bdc48d98c48529219919015a1af22f5057c2
|
|
||||||
;;
|
|
||||||
f9e2b6840b9103e9707ea390089a7b6943592a98) # v64
|
|
||||||
ROMHASH=c892bbda3993e66bd0d56a10ecd30b1ee612210f
|
|
||||||
;;
|
|
||||||
2fae1601aa7ae8d3e03ba3f4dcdfca3a36002ac5) # n64
|
|
||||||
ROMHASH=c892bbda3993e66bd0d56a10ecd30b1ee612210f
|
|
||||||
;;
|
|
||||||
1181034d5f9533f53ebe8e1c781badbee115f5aa) # v64
|
|
||||||
ROMHASH=dbfc81f655187dc6fefd93fa6798face770d579d
|
|
||||||
;;
|
|
||||||
07477067943abe8d0c50285eb4a6cb9ece99e79b) # n64
|
|
||||||
ROMHASH=dbfc81f655187dc6fefd93fa6798face770d579d
|
|
||||||
;;
|
|
||||||
2d8fb7140a9c5d11ce614561e5a36ffef0c17540) # v64
|
|
||||||
ROMHASH=fa5f5942b27480d60243c2d52c0e93e26b9e6b86
|
|
||||||
;;
|
|
||||||
d90bbe422ac728ac54ac6a2c9fec942f7ff04df9) # n64
|
|
||||||
ROMHASH=fa5f5942b27480d60243c2d52c0e93e26b9e6b86
|
|
||||||
;;
|
|
||||||
44c75962911e13bdfdc31b35e0b8e3be6a6a49ab) # v64
|
|
||||||
b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b
|
|
||||||
;;
|
|
||||||
5d47025581060af5ba19e6719c25fea7398e87cf) # n64
|
|
||||||
b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b
|
|
||||||
;;
|
|
||||||
e1d070ad7b017de9f992b362164dcd9d7f820f7e) # v64
|
|
||||||
8b5d13aac69bfbf989861cfdc50b1d840945fc1d
|
|
||||||
;;
|
|
||||||
a8c04cd5aa94a6a32198f36ff2069d43342d18a8) # n64
|
|
||||||
8b5d13aac69bfbf989861cfdc50b1d840945fc1d
|
|
||||||
;;
|
|
||||||
245410280d152f28d5b1c0c0fc37f384db0020cd) # v64
|
|
||||||
0769c84615422d60f16925cd859593cdfa597f84
|
|
||||||
;;
|
|
||||||
fbdc9e444807f9b881e3432cedf66f38746b81d8) # n64
|
|
||||||
0769c84615422d60f16925cd859593cdfa597f84
|
|
||||||
;;
|
|
||||||
b6d33d6bf5d6700c64b6a873ab8b06ff039619bc) # v64
|
|
||||||
2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73
|
|
||||||
;;
|
|
||||||
2c7113d20044f93c82ec888c19aa09ea7797396d) # n64
|
|
||||||
2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73
|
|
||||||
;;
|
|
||||||
06c3c098f0e14ed61811dfaf0e8e4519d7d7a826) # v64
|
|
||||||
dd14e143c4275861fe93ea79d0c02e36ae8c6c2f
|
|
||||||
;;
|
|
||||||
bb3f85bfaad9ae7a20afbf618fc9fe126c8c1b4f) # n64
|
|
||||||
dd14e143c4275861fe93ea79d0c02e36ae8c6c2f
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$ROMHASH" in
|
|
||||||
cee6bc3c2a634b41728f2af8da54d9bf8cc14099)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=GC_NMQ_D
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
0227d7c0074f2d0ac935631990da8ec5914597b4)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=GC_NMQ_PAL_F
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
328a1f1beba30ce5e178f031662019eb32c5f3b5)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=N64_PAL_10
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
cfbb98d392e4a9d39da8285d10cbef3974c2f012)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=N64_PAL_11
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
ad69c91157f6705e8ab06c79fe08aad47bb57ba7|c892bbda3993e66bd0d56a10ecd30b1ee612210f)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=N64_NTSC_10
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
d3ecb253776cd847a5aa63d859d8c89a2f37b364|dbfc81f655187dc6fefd93fa6798face770d579d)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=N64_NTSC_11
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
41b3bdc48d98c48529219919015a1af22f5057c2|fa5f5942b27480d60243c2d52c0e93e26b9e6b86)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=N64_NTSC_12
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
f46239439f59a2a594ef83cf68ef65043b1bffe2)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_PAL_F
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
50bebedad9e0f10746a52b07239e47fa6c284d03)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_D
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
079b855b943d6ad8bd1eb026c0ed169ecbdac7da)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_D
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
cfecfdc58d650e71a200c81f033de4e6d617a9f6)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_D
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
517bd9714c73cb96c21e7c2ef640d7b55186102f)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_D
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=GC_NMQ_NTSC_U
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
8b5d13aac69bfbf989861cfdc50b1d840945fc1d)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_NTSC_U
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
0769c84615422d60f16925cd859593cdfa597f84)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=GC_NMQ_NTSC_J
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
|
|
||||||
ROM=GC_NMQ_NTSC_J_CE
|
|
||||||
OTRNAME="oot.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
dd14e143c4275861fe93ea79d0c02e36ae8c6c2f)
|
|
||||||
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
|
|
||||||
ROM=GC_MQ_NTSC_J
|
|
||||||
OTRNAME="oot-mq.otr"
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "\n$romfile - $ROMHASH rom hash does not match\n"
|
|
||||||
continue;;
|
|
||||||
esac
|
|
||||||
if [[ ! -e "$SHIP_HOME"/"$OTRNAME" ]]; then
|
|
||||||
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 --otrfile "${OTRNAME}" --portVer "@CMAKE_PROJECT_VERSION@" > /dev/null 2>&1
|
|
||||||
cp "$ASSETDIR"/"$OTRNAME" "$SHIP_HOME"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [[ (! -e "$SHIP_HOME"/oot.otr) && (! -e "$SHIP_HOME"/oot-mq.otr) ]]; then
|
|
||||||
if [ -n "$ZENITY" ]; then
|
|
||||||
zenity --error --timeout=5 --text="Place ROM in $SHIP_HOME" --title="Missing ROM file" --width=500 --width=200
|
|
||||||
else
|
|
||||||
echo -e "\nPlace ROM in this folder\n"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [[ (! -e "$SHIP_HOME"/oot.otr) && (! -e "$SHIP_HOME"/oot-mq.otr) ]]; then
|
|
||||||
if [ -n "$ZENITY" ]; then
|
|
||||||
zenity --error --timeout=10 --text="No valid ROMs were provided, No OTR was generated." --title="Incorrect ROM file" --width=500 --width=200
|
|
||||||
else
|
|
||||||
echo "No valid roms provided, no OTR was generated."
|
|
||||||
fi
|
|
||||||
rm -r "$ASSETDIR"
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
(cd "$SHIP_BIN_DIR"; ./soh.elf)
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
rm -r "$ASSETDIR"
|
|
||||||
done
|
|
||||||
(cd "$SHIP_BIN_DIR"; ./soh.elf)
|
|
||||||
exit
|
|
|
@ -138,6 +138,8 @@ endforeach()
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
set_source_files_properties(soh/OTRGlobals.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
set_source_files_properties(soh/OTRGlobals.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||||
set_source_files_properties(soh/Enhancements/tts/tts.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
set_source_files_properties(soh/Enhancements/tts/tts.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||||
|
set_source_files_properties(soh/Enhancements/custom-message/CustomMessageManager.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||||
|
set_source_files_properties(soh/Enhancements/custom-message/CustomMessageManager.h PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# handle Network removals
|
# handle Network removals
|
||||||
|
@ -592,21 +594,22 @@ endif()
|
||||||
# Pre build events
|
# Pre build events
|
||||||
################################################################################
|
################################################################################
|
||||||
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
set(VS_COPY_ASSETS_CMD ${CMAKE_COMMAND} -E copy_directory_if_different $<TARGET_FILE_DIR:soh>/assets ${CMAKE_BINARY_DIR}/soh/assets)
|
add_custom_command(
|
||||||
|
TARGET ${PROJECT_NAME}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor ${CMAKE_BINARY_DIR}/soh/assets
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml ${CMAKE_BINARY_DIR}/soh/assets/xml
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET ${PROJECT_NAME}
|
TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMENT "Copying asset xmls..."
|
COMMENT "Copying asset xmls..."
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets/extractor
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/extractor/xmls
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/xml
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists $<TARGET_FILE_DIR:soh>/assets/extractor/filelists
|
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/symbols
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
# COMMAND ${VS_COPY_ASSETS_CMD}
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
|
||||||
COMMAND ${VS_COPY_ASSETS_CMD}
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
################################################################################
|
################################################################################
|
||||||
|
@ -692,11 +695,7 @@ endif()
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
INSTALL(FILES $<TARGET_PDB_FILE:soh> DESTINATION ./debug COMPONENT ship)
|
INSTALL(FILES $<TARGET_PDB_FILE:soh> DESTINATION ./debug COMPONENT ship)
|
||||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.otr DESTINATION . COMPONENT ship)
|
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.o2r DESTINATION . COMPONENT ship)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/appimage/soh.sh.in ${CMAKE_BINARY_DIR}/linux/soh.sh @ONLY)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_program(CURL NAMES curl DOC "Path to the curl program. Used to download files.")
|
find_program(CURL NAMES curl DOC "Path to the curl program. Used to download files.")
|
||||||
|
@ -706,7 +705,7 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
||||||
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/macosx/Info.plist.in ${CMAKE_BINARY_DIR}/macosx/Info.plist @ONLY)
|
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/macosx/Info.plist.in ${CMAKE_BINARY_DIR}/macosx/Info.plist @ONLY)
|
||||||
INSTALL(TARGETS soh DESTINATION ../MacOS COMPONENT ship)
|
INSTALL(TARGETS soh DESTINATION ../MacOS COMPONENT ship)
|
||||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION ../MacOS COMPONENT ship)
|
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION ../MacOS COMPONENT ship)
|
||||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.otr DESTINATION ../Resources COMPONENT ship)
|
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.o2r DESTINATION ../Resources COMPONENT ship)
|
||||||
elseif(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "NintendoSwitch|CafeOS")
|
elseif(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "NintendoSwitch|CafeOS")
|
||||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION . COMPONENT ship)
|
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION . COMPONENT ship)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_MQ_D/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_MQ_D/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_MQ_NTSC_J/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_MQ_NTSC_J/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_MQ_NTSC_U/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_MQ_NTSC_U/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_MQ_PAL_F/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_MQ_PAL_F/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_NMQ_D/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_NMQ_D/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_NMQ_NTSC_J/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_NMQ_NTSC_J/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_NMQ_NTSC_J_CE/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_NMQ_NTSC_J_CE/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_NMQ_NTSC_U/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_NMQ_NTSC_U/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/GC_NMQ_PAL_F/"/>
|
<ExternalXMLFolder Path="assets/xml/GC_NMQ_PAL_F/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/N64_NTSC_10/"/>
|
<ExternalXMLFolder Path="assets/xml/N64_NTSC_10/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/N64_NTSC_11/"/>
|
<ExternalXMLFolder Path="assets/xml/N64_NTSC_11/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/N64_NTSC_12/"/>
|
<ExternalXMLFolder Path="assets/xml/N64_NTSC_12/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/N64_PAL_10/"/>
|
<ExternalXMLFolder Path="assets/xml/N64_PAL_10/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
<SymbolMap File="symbols/SymbolMap_OoTMqDbg.txt"/>
|
||||||
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
<ActorList File="symbols/ActorList_OoTMqDbg.txt"/>
|
||||||
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
<ObjectList File="symbols/ObjectList_OoTMqDbg.txt"/>
|
||||||
<ExternalXMLFolder Path="assets/extractor/xmls/N64_PAL_11/"/>
|
<ExternalXMLFolder Path="assets/xml/N64_PAL_11/"/>
|
||||||
<TexturePool File="TexturePool.xml"/>
|
<TexturePool File="TexturePool.xml"/>
|
||||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
1532
soh/assets/extractor/filelists/dbg.txt
Normal file
1532
soh/assets/extractor/filelists/dbg.txt
Normal file
File diff suppressed because it is too large
Load diff
1509
soh/assets/extractor/filelists/gamecube.txt
Normal file
1509
soh/assets/extractor/filelists/gamecube.txt
Normal file
File diff suppressed because it is too large
Load diff
1510
soh/assets/extractor/filelists/gamecube_pal.txt
Normal file
1510
soh/assets/extractor/filelists/gamecube_pal.txt
Normal file
File diff suppressed because it is too large
Load diff
1510
soh/assets/extractor/filelists/ntsc_12_oot.txt
Normal file
1510
soh/assets/extractor/filelists/ntsc_12_oot.txt
Normal file
File diff suppressed because it is too large
Load diff
1510
soh/assets/extractor/filelists/ntsc_oot.txt
Normal file
1510
soh/assets/extractor/filelists/ntsc_oot.txt
Normal file
File diff suppressed because it is too large
Load diff
1511
soh/assets/extractor/filelists/pal_oot.txt
Normal file
1511
soh/assets/extractor/filelists/pal_oot.txt
Normal file
File diff suppressed because it is too large
Load diff
472
soh/assets/extractor/symbols/ActorList_OoTMqDbg.txt
Normal file
472
soh/assets/extractor/symbols/ActorList_OoTMqDbg.txt
Normal file
|
@ -0,0 +1,472 @@
|
||||||
|
ACTOR_PLAYER
|
||||||
|
ACTOR_UNSET_1
|
||||||
|
ACTOR_EN_TEST
|
||||||
|
ACTOR_UNSET_3
|
||||||
|
ACTOR_EN_GIRLA
|
||||||
|
ACTOR_UNSET_5
|
||||||
|
ACTOR_UNSET_6
|
||||||
|
ACTOR_EN_PART
|
||||||
|
ACTOR_EN_LIGHT
|
||||||
|
ACTOR_EN_DOOR
|
||||||
|
ACTOR_EN_BOX
|
||||||
|
ACTOR_BG_DY_YOSEIZO
|
||||||
|
ACTOR_BG_HIDAN_FIREWALL
|
||||||
|
ACTOR_EN_POH
|
||||||
|
ACTOR_EN_OKUTA
|
||||||
|
ACTOR_BG_YDAN_SP
|
||||||
|
ACTOR_EN_BOM
|
||||||
|
ACTOR_EN_WALLMAS
|
||||||
|
ACTOR_EN_DODONGO
|
||||||
|
ACTOR_EN_FIREFLY
|
||||||
|
ACTOR_EN_HORSE
|
||||||
|
ACTOR_EN_ITEM00
|
||||||
|
ACTOR_EN_ARROW
|
||||||
|
ACTOR_UNSET_17
|
||||||
|
ACTOR_EN_ELF
|
||||||
|
ACTOR_EN_NIW
|
||||||
|
ACTOR_UNSET_1A
|
||||||
|
ACTOR_EN_TITE
|
||||||
|
ACTOR_EN_REEBA
|
||||||
|
ACTOR_EN_PEEHAT
|
||||||
|
ACTOR_EN_BUTTE
|
||||||
|
ACTOR_UNSET_1F
|
||||||
|
ACTOR_EN_INSECT
|
||||||
|
ACTOR_EN_FISH
|
||||||
|
ACTOR_UNSET_22
|
||||||
|
ACTOR_EN_HOLL
|
||||||
|
ACTOR_EN_SCENE_CHANGE
|
||||||
|
ACTOR_EN_ZF
|
||||||
|
ACTOR_EN_HATA
|
||||||
|
ACTOR_BOSS_DODONGO
|
||||||
|
ACTOR_BOSS_GOMA
|
||||||
|
ACTOR_EN_ZL1
|
||||||
|
ACTOR_EN_VIEWER
|
||||||
|
ACTOR_EN_GOMA
|
||||||
|
ACTOR_BG_PUSHBOX
|
||||||
|
ACTOR_EN_BUBBLE
|
||||||
|
ACTOR_DOOR_SHUTTER
|
||||||
|
ACTOR_EN_DODOJR
|
||||||
|
ACTOR_EN_BDFIRE
|
||||||
|
ACTOR_UNSET_31
|
||||||
|
ACTOR_EN_BOOM
|
||||||
|
ACTOR_EN_TORCH2
|
||||||
|
ACTOR_EN_BILI
|
||||||
|
ACTOR_EN_TP
|
||||||
|
ACTOR_UNSET_36
|
||||||
|
ACTOR_EN_ST
|
||||||
|
ACTOR_EN_BW
|
||||||
|
ACTOR_EN_A_OBJ
|
||||||
|
ACTOR_EN_EIYER
|
||||||
|
ACTOR_EN_RIVER_SOUND
|
||||||
|
ACTOR_EN_HORSE_NORMAL
|
||||||
|
ACTOR_EN_OSSAN
|
||||||
|
ACTOR_BG_TREEMOUTH
|
||||||
|
ACTOR_BG_DODOAGO
|
||||||
|
ACTOR_BG_HIDAN_DALM
|
||||||
|
ACTOR_BG_HIDAN_HROCK
|
||||||
|
ACTOR_EN_HORSE_GANON
|
||||||
|
ACTOR_BG_HIDAN_ROCK
|
||||||
|
ACTOR_BG_HIDAN_RSEKIZOU
|
||||||
|
ACTOR_BG_HIDAN_SEKIZOU
|
||||||
|
ACTOR_BG_HIDAN_SIMA
|
||||||
|
ACTOR_BG_HIDAN_SYOKU
|
||||||
|
ACTOR_EN_XC
|
||||||
|
ACTOR_BG_HIDAN_CURTAIN
|
||||||
|
ACTOR_BG_SPOT00_HANEBASI
|
||||||
|
ACTOR_EN_MB
|
||||||
|
ACTOR_EN_BOMBF
|
||||||
|
ACTOR_EN_ZL2
|
||||||
|
ACTOR_BG_HIDAN_FSLIFT
|
||||||
|
ACTOR_EN_OE2
|
||||||
|
ACTOR_BG_YDAN_HASI
|
||||||
|
ACTOR_BG_YDAN_MARUTA
|
||||||
|
ACTOR_BOSS_GANONDROF
|
||||||
|
ACTOR_UNSET_53
|
||||||
|
ACTOR_EN_AM
|
||||||
|
ACTOR_EN_DEKUBABA
|
||||||
|
ACTOR_EN_M_FIRE1
|
||||||
|
ACTOR_EN_M_THUNDER
|
||||||
|
ACTOR_BG_DDAN_JD
|
||||||
|
ACTOR_BG_BREAKWALL
|
||||||
|
ACTOR_EN_JJ
|
||||||
|
ACTOR_EN_HORSE_ZELDA
|
||||||
|
ACTOR_BG_DDAN_KD
|
||||||
|
ACTOR_DOOR_WARP1
|
||||||
|
ACTOR_OBJ_SYOKUDAI
|
||||||
|
ACTOR_ITEM_B_HEART
|
||||||
|
ACTOR_EN_DEKUNUTS
|
||||||
|
ACTOR_BG_MENKURI_KAITEN
|
||||||
|
ACTOR_BG_MENKURI_EYE
|
||||||
|
ACTOR_EN_VALI
|
||||||
|
ACTOR_BG_MIZU_MOVEBG
|
||||||
|
ACTOR_BG_MIZU_WATER
|
||||||
|
ACTOR_ARMS_HOOK
|
||||||
|
ACTOR_EN_FHG
|
||||||
|
ACTOR_BG_MORI_HINERI
|
||||||
|
ACTOR_EN_BB
|
||||||
|
ACTOR_BG_TOKI_HIKARI
|
||||||
|
ACTOR_EN_YUKABYUN
|
||||||
|
ACTOR_BG_TOKI_SWD
|
||||||
|
ACTOR_EN_FHG_FIRE
|
||||||
|
ACTOR_BG_MJIN
|
||||||
|
ACTOR_BG_HIDAN_KOUSI
|
||||||
|
ACTOR_DOOR_TOKI
|
||||||
|
ACTOR_BG_HIDAN_HAMSTEP
|
||||||
|
ACTOR_EN_BIRD
|
||||||
|
ACTOR_UNSET_73
|
||||||
|
ACTOR_UNSET_74
|
||||||
|
ACTOR_UNSET_75
|
||||||
|
ACTOR_UNSET_76
|
||||||
|
ACTOR_EN_WOOD02
|
||||||
|
ACTOR_UNSET_78
|
||||||
|
ACTOR_UNSET_79
|
||||||
|
ACTOR_UNSET_7A
|
||||||
|
ACTOR_UNSET_7B
|
||||||
|
ACTOR_EN_LIGHTBOX
|
||||||
|
ACTOR_EN_PU_BOX
|
||||||
|
ACTOR_UNSET_7E
|
||||||
|
ACTOR_UNSET_7F
|
||||||
|
ACTOR_EN_TRAP
|
||||||
|
ACTOR_EN_AROW_TRAP
|
||||||
|
ACTOR_EN_VASE
|
||||||
|
ACTOR_UNSET_83
|
||||||
|
ACTOR_EN_TA
|
||||||
|
ACTOR_EN_TK
|
||||||
|
ACTOR_BG_MORI_BIGST
|
||||||
|
ACTOR_BG_MORI_ELEVATOR
|
||||||
|
ACTOR_BG_MORI_KAITENKABE
|
||||||
|
ACTOR_BG_MORI_RAKKATENJO
|
||||||
|
ACTOR_EN_VM
|
||||||
|
ACTOR_DEMO_EFFECT
|
||||||
|
ACTOR_DEMO_KANKYO
|
||||||
|
ACTOR_BG_HIDAN_FWBIG
|
||||||
|
ACTOR_EN_FLOORMAS
|
||||||
|
ACTOR_EN_HEISHI1
|
||||||
|
ACTOR_EN_RD
|
||||||
|
ACTOR_EN_PO_SISTERS
|
||||||
|
ACTOR_BG_HEAVY_BLOCK
|
||||||
|
ACTOR_BG_PO_EVENT
|
||||||
|
ACTOR_OBJ_MURE
|
||||||
|
ACTOR_EN_SW
|
||||||
|
ACTOR_BOSS_FD
|
||||||
|
ACTOR_OBJECT_KANKYO
|
||||||
|
ACTOR_EN_DU
|
||||||
|
ACTOR_EN_FD
|
||||||
|
ACTOR_EN_HORSE_LINK_CHILD
|
||||||
|
ACTOR_DOOR_ANA
|
||||||
|
ACTOR_BG_SPOT02_OBJECTS
|
||||||
|
ACTOR_BG_HAKA
|
||||||
|
ACTOR_MAGIC_WIND
|
||||||
|
ACTOR_MAGIC_FIRE
|
||||||
|
ACTOR_UNSET_A0
|
||||||
|
ACTOR_EN_RU1
|
||||||
|
ACTOR_BOSS_FD2
|
||||||
|
ACTOR_EN_FD_FIRE
|
||||||
|
ACTOR_EN_DH
|
||||||
|
ACTOR_EN_DHA
|
||||||
|
ACTOR_EN_RL
|
||||||
|
ACTOR_EN_ENCOUNT1
|
||||||
|
ACTOR_DEMO_DU
|
||||||
|
ACTOR_DEMO_IM
|
||||||
|
ACTOR_DEMO_TRE_LGT
|
||||||
|
ACTOR_EN_FW
|
||||||
|
ACTOR_BG_VB_SIMA
|
||||||
|
ACTOR_EN_VB_BALL
|
||||||
|
ACTOR_BG_HAKA_MEGANE
|
||||||
|
ACTOR_BG_HAKA_MEGANEBG
|
||||||
|
ACTOR_BG_HAKA_SHIP
|
||||||
|
ACTOR_BG_HAKA_SGAMI
|
||||||
|
ACTOR_UNSET_B2
|
||||||
|
ACTOR_EN_HEISHI2
|
||||||
|
ACTOR_EN_ENCOUNT2
|
||||||
|
ACTOR_EN_FIRE_ROCK
|
||||||
|
ACTOR_EN_BROB
|
||||||
|
ACTOR_MIR_RAY
|
||||||
|
ACTOR_BG_SPOT09_OBJ
|
||||||
|
ACTOR_BG_SPOT18_OBJ
|
||||||
|
ACTOR_BOSS_VA
|
||||||
|
ACTOR_BG_HAKA_TUBO
|
||||||
|
ACTOR_BG_HAKA_TRAP
|
||||||
|
ACTOR_BG_HAKA_HUTA
|
||||||
|
ACTOR_BG_HAKA_ZOU
|
||||||
|
ACTOR_BG_SPOT17_FUNEN
|
||||||
|
ACTOR_EN_SYATEKI_ITM
|
||||||
|
ACTOR_EN_SYATEKI_MAN
|
||||||
|
ACTOR_EN_TANA
|
||||||
|
ACTOR_EN_NB
|
||||||
|
ACTOR_BOSS_MO
|
||||||
|
ACTOR_EN_SB
|
||||||
|
ACTOR_EN_BIGOKUTA
|
||||||
|
ACTOR_EN_KAREBABA
|
||||||
|
ACTOR_BG_BDAN_OBJECTS
|
||||||
|
ACTOR_DEMO_SA
|
||||||
|
ACTOR_DEMO_GO
|
||||||
|
ACTOR_EN_IN
|
||||||
|
ACTOR_EN_TR
|
||||||
|
ACTOR_BG_SPOT16_BOMBSTONE
|
||||||
|
ACTOR_UNSET_CE
|
||||||
|
ACTOR_BG_HIDAN_KOWARERUKABE
|
||||||
|
ACTOR_BG_BOMBWALL
|
||||||
|
ACTOR_BG_SPOT08_ICEBLOCK
|
||||||
|
ACTOR_EN_RU2
|
||||||
|
ACTOR_OBJ_DEKUJR
|
||||||
|
ACTOR_BG_MIZU_UZU
|
||||||
|
ACTOR_BG_SPOT06_OBJECTS
|
||||||
|
ACTOR_BG_ICE_OBJECTS
|
||||||
|
ACTOR_BG_HAKA_WATER
|
||||||
|
ACTOR_UNSET_D8
|
||||||
|
ACTOR_EN_MA2
|
||||||
|
ACTOR_EN_BOM_CHU
|
||||||
|
ACTOR_EN_HORSE_GAME_CHECK
|
||||||
|
ACTOR_BOSS_TW
|
||||||
|
ACTOR_EN_RR
|
||||||
|
ACTOR_EN_BA
|
||||||
|
ACTOR_EN_BX
|
||||||
|
ACTOR_EN_ANUBICE
|
||||||
|
ACTOR_EN_ANUBICE_FIRE
|
||||||
|
ACTOR_BG_MORI_HASHIGO
|
||||||
|
ACTOR_BG_MORI_HASHIRA4
|
||||||
|
ACTOR_BG_MORI_IDOMIZU
|
||||||
|
ACTOR_BG_SPOT16_DOUGHNUT
|
||||||
|
ACTOR_BG_BDAN_SWITCH
|
||||||
|
ACTOR_EN_MA1
|
||||||
|
ACTOR_BOSS_GANON
|
||||||
|
ACTOR_BOSS_SST
|
||||||
|
ACTOR_UNSET_EA
|
||||||
|
ACTOR_UNSET_EB
|
||||||
|
ACTOR_EN_NY
|
||||||
|
ACTOR_EN_FR
|
||||||
|
ACTOR_ITEM_SHIELD
|
||||||
|
ACTOR_BG_ICE_SHELTER
|
||||||
|
ACTOR_EN_ICE_HONO
|
||||||
|
ACTOR_ITEM_OCARINA
|
||||||
|
ACTOR_UNSET_F2
|
||||||
|
ACTOR_UNSET_F3
|
||||||
|
ACTOR_MAGIC_DARK
|
||||||
|
ACTOR_DEMO_6K
|
||||||
|
ACTOR_EN_ANUBICE_TAG
|
||||||
|
ACTOR_BG_HAKA_GATE
|
||||||
|
ACTOR_BG_SPOT15_SAKU
|
||||||
|
ACTOR_BG_JYA_GOROIWA
|
||||||
|
ACTOR_BG_JYA_ZURERUKABE
|
||||||
|
ACTOR_UNSET_FB
|
||||||
|
ACTOR_BG_JYA_COBRA
|
||||||
|
ACTOR_BG_JYA_KANAAMI
|
||||||
|
ACTOR_FISHING
|
||||||
|
ACTOR_OBJ_OSHIHIKI
|
||||||
|
ACTOR_BG_GATE_SHUTTER
|
||||||
|
ACTOR_EFF_DUST
|
||||||
|
ACTOR_BG_SPOT01_FUSYA
|
||||||
|
ACTOR_BG_SPOT01_IDOHASHIRA
|
||||||
|
ACTOR_BG_SPOT01_IDOMIZU
|
||||||
|
ACTOR_BG_PO_SYOKUDAI
|
||||||
|
ACTOR_BG_GANON_OTYUKA
|
||||||
|
ACTOR_BG_SPOT15_RRBOX
|
||||||
|
ACTOR_BG_UMAJUMP
|
||||||
|
ACTOR_UNSET_109
|
||||||
|
ACTOR_ARROW_FIRE
|
||||||
|
ACTOR_ARROW_ICE
|
||||||
|
ACTOR_ARROW_LIGHT
|
||||||
|
ACTOR_UNSET_10D
|
||||||
|
ACTOR_UNSET_10E
|
||||||
|
ACTOR_ITEM_ETCETERA
|
||||||
|
ACTOR_OBJ_KIBAKO
|
||||||
|
ACTOR_OBJ_TSUBO
|
||||||
|
ACTOR_EN_WONDER_ITEM
|
||||||
|
ACTOR_EN_IK
|
||||||
|
ACTOR_DEMO_IK
|
||||||
|
ACTOR_EN_SKJ
|
||||||
|
ACTOR_EN_SKJNEEDLE
|
||||||
|
ACTOR_EN_G_SWITCH
|
||||||
|
ACTOR_DEMO_EXT
|
||||||
|
ACTOR_DEMO_SHD
|
||||||
|
ACTOR_EN_DNS
|
||||||
|
ACTOR_ELF_MSG
|
||||||
|
ACTOR_EN_HONOTRAP
|
||||||
|
ACTOR_EN_TUBO_TRAP
|
||||||
|
ACTOR_OBJ_ICE_POLY
|
||||||
|
ACTOR_BG_SPOT03_TAKI
|
||||||
|
ACTOR_BG_SPOT07_TAKI
|
||||||
|
ACTOR_EN_FZ
|
||||||
|
ACTOR_EN_PO_RELAY
|
||||||
|
ACTOR_BG_RELAY_OBJECTS
|
||||||
|
ACTOR_EN_DIVING_GAME
|
||||||
|
ACTOR_EN_KUSA
|
||||||
|
ACTOR_OBJ_BEAN
|
||||||
|
ACTOR_OBJ_BOMBIWA
|
||||||
|
ACTOR_UNSET_128
|
||||||
|
ACTOR_UNSET_129
|
||||||
|
ACTOR_OBJ_SWITCH
|
||||||
|
ACTOR_OBJ_ELEVATOR
|
||||||
|
ACTOR_OBJ_LIFT
|
||||||
|
ACTOR_OBJ_HSBLOCK
|
||||||
|
ACTOR_EN_OKARINA_TAG
|
||||||
|
ACTOR_EN_YABUSAME_MARK
|
||||||
|
ACTOR_EN_GOROIWA
|
||||||
|
ACTOR_EN_EX_RUPPY
|
||||||
|
ACTOR_EN_TORYO
|
||||||
|
ACTOR_EN_DAIKU
|
||||||
|
ACTOR_UNSET_134
|
||||||
|
ACTOR_EN_NWC
|
||||||
|
ACTOR_EN_BLKOBJ
|
||||||
|
ACTOR_ITEM_INBOX
|
||||||
|
ACTOR_EN_GE1
|
||||||
|
ACTOR_OBJ_BLOCKSTOP
|
||||||
|
ACTOR_EN_SDA
|
||||||
|
ACTOR_EN_CLEAR_TAG
|
||||||
|
ACTOR_EN_NIW_LADY
|
||||||
|
ACTOR_EN_GM
|
||||||
|
ACTOR_EN_MS
|
||||||
|
ACTOR_EN_HS
|
||||||
|
ACTOR_BG_INGATE
|
||||||
|
ACTOR_EN_KANBAN
|
||||||
|
ACTOR_EN_HEISHI3
|
||||||
|
ACTOR_EN_SYATEKI_NIW
|
||||||
|
ACTOR_EN_ATTACK_NIW
|
||||||
|
ACTOR_BG_SPOT01_IDOSOKO
|
||||||
|
ACTOR_EN_SA
|
||||||
|
ACTOR_EN_WONDER_TALK
|
||||||
|
ACTOR_BG_GJYO_BRIDGE
|
||||||
|
ACTOR_EN_DS
|
||||||
|
ACTOR_EN_MK
|
||||||
|
ACTOR_EN_BOM_BOWL_MAN
|
||||||
|
ACTOR_EN_BOM_BOWL_PIT
|
||||||
|
ACTOR_EN_OWL
|
||||||
|
ACTOR_EN_ISHI
|
||||||
|
ACTOR_OBJ_HANA
|
||||||
|
ACTOR_OBJ_LIGHTSWITCH
|
||||||
|
ACTOR_OBJ_MURE2
|
||||||
|
ACTOR_EN_GO
|
||||||
|
ACTOR_EN_FU
|
||||||
|
ACTOR_UNSET_154
|
||||||
|
ACTOR_EN_CHANGER
|
||||||
|
ACTOR_BG_JYA_MEGAMI
|
||||||
|
ACTOR_BG_JYA_LIFT
|
||||||
|
ACTOR_BG_JYA_BIGMIRROR
|
||||||
|
ACTOR_BG_JYA_BOMBCHUIWA
|
||||||
|
ACTOR_BG_JYA_AMISHUTTER
|
||||||
|
ACTOR_BG_JYA_BOMBIWA
|
||||||
|
ACTOR_BG_SPOT18_BASKET
|
||||||
|
ACTOR_UNSET_15D
|
||||||
|
ACTOR_EN_GANON_ORGAN
|
||||||
|
ACTOR_EN_SIOFUKI
|
||||||
|
ACTOR_EN_STREAM
|
||||||
|
ACTOR_UNSET_161
|
||||||
|
ACTOR_EN_MM
|
||||||
|
ACTOR_EN_KO
|
||||||
|
ACTOR_EN_KZ
|
||||||
|
ACTOR_EN_WEATHER_TAG
|
||||||
|
ACTOR_BG_SST_FLOOR
|
||||||
|
ACTOR_EN_ANI
|
||||||
|
ACTOR_EN_EX_ITEM
|
||||||
|
ACTOR_BG_JYA_IRONOBJ
|
||||||
|
ACTOR_EN_JS
|
||||||
|
ACTOR_EN_JSJUTAN
|
||||||
|
ACTOR_EN_CS
|
||||||
|
ACTOR_EN_MD
|
||||||
|
ACTOR_EN_HY
|
||||||
|
ACTOR_EN_GANON_MANT
|
||||||
|
ACTOR_EN_OKARINA_EFFECT
|
||||||
|
ACTOR_EN_MAG
|
||||||
|
ACTOR_DOOR_GERUDO
|
||||||
|
ACTOR_ELF_MSG2
|
||||||
|
ACTOR_DEMO_GT
|
||||||
|
ACTOR_EN_PO_FIELD
|
||||||
|
ACTOR_EFC_ERUPC
|
||||||
|
ACTOR_BG_ZG
|
||||||
|
ACTOR_EN_HEISHI4
|
||||||
|
ACTOR_EN_ZL3
|
||||||
|
ACTOR_BOSS_GANON2
|
||||||
|
ACTOR_EN_KAKASI
|
||||||
|
ACTOR_EN_TAKARA_MAN
|
||||||
|
ACTOR_OBJ_MAKEOSHIHIKI
|
||||||
|
ACTOR_OCEFF_SPOT
|
||||||
|
ACTOR_END_TITLE
|
||||||
|
ACTOR_UNSET_180
|
||||||
|
ACTOR_EN_TORCH
|
||||||
|
ACTOR_DEMO_EC
|
||||||
|
ACTOR_SHOT_SUN
|
||||||
|
ACTOR_EN_DY_EXTRA
|
||||||
|
ACTOR_EN_WONDER_TALK2
|
||||||
|
ACTOR_EN_GE2
|
||||||
|
ACTOR_OBJ_ROOMTIMER
|
||||||
|
ACTOR_EN_SSH
|
||||||
|
ACTOR_EN_STH
|
||||||
|
ACTOR_OCEFF_WIPE
|
||||||
|
ACTOR_OCEFF_STORM
|
||||||
|
ACTOR_EN_WEIYER
|
||||||
|
ACTOR_BG_SPOT05_SOKO
|
||||||
|
ACTOR_BG_JYA_1FLIFT
|
||||||
|
ACTOR_BG_JYA_HAHENIRON
|
||||||
|
ACTOR_BG_SPOT12_GATE
|
||||||
|
ACTOR_BG_SPOT12_SAKU
|
||||||
|
ACTOR_EN_HINTNUTS
|
||||||
|
ACTOR_EN_NUTSBALL
|
||||||
|
ACTOR_BG_SPOT00_BREAK
|
||||||
|
ACTOR_EN_SHOPNUTS
|
||||||
|
ACTOR_EN_IT
|
||||||
|
ACTOR_EN_GELDB
|
||||||
|
ACTOR_OCEFF_WIPE2
|
||||||
|
ACTOR_OCEFF_WIPE3
|
||||||
|
ACTOR_EN_NIW_GIRL
|
||||||
|
ACTOR_EN_DOG
|
||||||
|
ACTOR_EN_SI
|
||||||
|
ACTOR_BG_SPOT01_OBJECTS2
|
||||||
|
ACTOR_OBJ_COMB
|
||||||
|
ACTOR_BG_SPOT11_BAKUDANKABE
|
||||||
|
ACTOR_OBJ_KIBAKO2
|
||||||
|
ACTOR_EN_DNT_DEMO
|
||||||
|
ACTOR_EN_DNT_JIJI
|
||||||
|
ACTOR_EN_DNT_NOMAL
|
||||||
|
ACTOR_EN_GUEST
|
||||||
|
ACTOR_BG_BOM_GUARD
|
||||||
|
ACTOR_EN_HS2
|
||||||
|
ACTOR_DEMO_KEKKAI
|
||||||
|
ACTOR_BG_SPOT08_BAKUDANKABE
|
||||||
|
ACTOR_BG_SPOT17_BAKUDANKABE
|
||||||
|
ACTOR_UNSET_1AA
|
||||||
|
ACTOR_OBJ_MURE3
|
||||||
|
ACTOR_EN_TG
|
||||||
|
ACTOR_EN_MU
|
||||||
|
ACTOR_EN_GO2
|
||||||
|
ACTOR_EN_WF
|
||||||
|
ACTOR_EN_SKB
|
||||||
|
ACTOR_DEMO_GJ
|
||||||
|
ACTOR_DEMO_GEFF
|
||||||
|
ACTOR_BG_GND_FIREMEIRO
|
||||||
|
ACTOR_BG_GND_DARKMEIRO
|
||||||
|
ACTOR_BG_GND_SOULMEIRO
|
||||||
|
ACTOR_BG_GND_NISEKABE
|
||||||
|
ACTOR_BG_GND_ICEBLOCK
|
||||||
|
ACTOR_EN_GB
|
||||||
|
ACTOR_EN_GS
|
||||||
|
ACTOR_BG_MIZU_BWALL
|
||||||
|
ACTOR_BG_MIZU_SHUTTER
|
||||||
|
ACTOR_EN_DAIKU_KAKARIKO
|
||||||
|
ACTOR_BG_BOWL_WALL
|
||||||
|
ACTOR_EN_WALL_TUBO
|
||||||
|
ACTOR_EN_PO_DESERT
|
||||||
|
ACTOR_EN_CROW
|
||||||
|
ACTOR_DOOR_KILLER
|
||||||
|
ACTOR_BG_SPOT11_OASIS
|
||||||
|
ACTOR_BG_SPOT18_FUTA
|
||||||
|
ACTOR_BG_SPOT18_SHUTTER
|
||||||
|
ACTOR_EN_MA3
|
||||||
|
ACTOR_EN_COW
|
||||||
|
ACTOR_BG_ICE_TURARA
|
||||||
|
ACTOR_BG_ICE_SHUTTER
|
||||||
|
ACTOR_EN_KAKASI2
|
||||||
|
ACTOR_EN_KAKASI3
|
||||||
|
ACTOR_OCEFF_WIPE4
|
||||||
|
ACTOR_EN_EG
|
||||||
|
ACTOR_BG_MENKURI_NISEKABE
|
||||||
|
ACTOR_EN_ZO
|
||||||
|
ACTOR_OBJ_MAKEKINSUTA
|
||||||
|
ACTOR_EN_GE3
|
||||||
|
ACTOR_OBJ_TIMEBLOCK
|
||||||
|
ACTOR_OBJ_HAMISHI
|
||||||
|
ACTOR_EN_ZL4
|
||||||
|
ACTOR_EN_MM2
|
||||||
|
ACTOR_BG_JYA_BLOCK
|
||||||
|
ACTOR_OBJ_WARP2BLOCK
|
||||||
|
ACTOR_ID_MAX
|
402
soh/assets/extractor/symbols/ObjectList_OoTMqDbg.txt
Normal file
402
soh/assets/extractor/symbols/ObjectList_OoTMqDbg.txt
Normal file
|
@ -0,0 +1,402 @@
|
||||||
|
OBJECT_INVALID
|
||||||
|
OBJECT_GAMEPLAY_KEEP
|
||||||
|
OBJECT_GAMEPLAY_FIELD_KEEP
|
||||||
|
OBJECT_GAMEPLAY_DANGEON_KEEP
|
||||||
|
OBJECT_UNSET_4
|
||||||
|
OBJECT_UNSET_5
|
||||||
|
OBJECT_HUMAN
|
||||||
|
OBJECT_OKUTA
|
||||||
|
OBJECT_CROW
|
||||||
|
OBJECT_POH
|
||||||
|
OBJECT_DY_OBJ
|
||||||
|
OBJECT_WALLMASTER
|
||||||
|
OBJECT_DODONGO
|
||||||
|
OBJECT_FIREFLY
|
||||||
|
OBJECT_BOX
|
||||||
|
OBJECT_FIRE
|
||||||
|
OBJECT_UNSET_10
|
||||||
|
OBJECT_UNSET_11
|
||||||
|
OBJECT_BUBBLE
|
||||||
|
OBJECT_NIW
|
||||||
|
OBJECT_LINK_BOY
|
||||||
|
OBJECT_LINK_CHILD
|
||||||
|
OBJECT_TITE
|
||||||
|
OBJECT_REEBA
|
||||||
|
OBJECT_PEEHAT
|
||||||
|
OBJECT_KINGDODONGO
|
||||||
|
OBJECT_HORSE
|
||||||
|
OBJECT_ZF
|
||||||
|
OBJECT_GOMA
|
||||||
|
OBJECT_ZL1
|
||||||
|
OBJECT_GOL
|
||||||
|
OBJECT_DODOJR
|
||||||
|
OBJECT_TORCH2
|
||||||
|
OBJECT_BL
|
||||||
|
OBJECT_TP
|
||||||
|
OBJECT_OA1
|
||||||
|
OBJECT_ST
|
||||||
|
OBJECT_BW
|
||||||
|
OBJECT_EI
|
||||||
|
OBJECT_HORSE_NORMAL
|
||||||
|
OBJECT_OB1
|
||||||
|
OBJECT_O_ANIME
|
||||||
|
OBJECT_SPOT04_OBJECTS
|
||||||
|
OBJECT_DDAN_OBJECTS
|
||||||
|
OBJECT_HIDAN_OBJECTS
|
||||||
|
OBJECT_HORSE_GANON
|
||||||
|
OBJECT_OA2
|
||||||
|
OBJECT_SPOT00_OBJECTS
|
||||||
|
OBJECT_MB
|
||||||
|
OBJECT_BOMBF
|
||||||
|
OBJECT_SK2
|
||||||
|
OBJECT_OE1
|
||||||
|
OBJECT_OE_ANIME
|
||||||
|
OBJECT_OE2
|
||||||
|
OBJECT_YDAN_OBJECTS
|
||||||
|
OBJECT_GND
|
||||||
|
OBJECT_AM
|
||||||
|
OBJECT_DEKUBABA
|
||||||
|
OBJECT_UNSET_3A
|
||||||
|
OBJECT_OA3
|
||||||
|
OBJECT_OA4
|
||||||
|
OBJECT_OA5
|
||||||
|
OBJECT_OA6
|
||||||
|
OBJECT_OA7
|
||||||
|
OBJECT_JJ
|
||||||
|
OBJECT_OA8
|
||||||
|
OBJECT_OA9
|
||||||
|
OBJECT_OB2
|
||||||
|
OBJECT_OB3
|
||||||
|
OBJECT_OB4
|
||||||
|
OBJECT_HORSE_ZELDA
|
||||||
|
OBJECT_OPENING_DEMO1
|
||||||
|
OBJECT_WARP1
|
||||||
|
OBJECT_B_HEART
|
||||||
|
OBJECT_DEKUNUTS
|
||||||
|
OBJECT_OE3
|
||||||
|
OBJECT_OE4
|
||||||
|
OBJECT_MENKURI_OBJECTS
|
||||||
|
OBJECT_OE5
|
||||||
|
OBJECT_OE6
|
||||||
|
OBJECT_OE7
|
||||||
|
OBJECT_OE8
|
||||||
|
OBJECT_OE9
|
||||||
|
OBJECT_OE10
|
||||||
|
OBJECT_OE11
|
||||||
|
OBJECT_OE12
|
||||||
|
OBJECT_VALI
|
||||||
|
OBJECT_OA10
|
||||||
|
OBJECT_OA11
|
||||||
|
OBJECT_MIZU_OBJECTS
|
||||||
|
OBJECT_FHG
|
||||||
|
OBJECT_OSSAN
|
||||||
|
OBJECT_MORI_HINERI1
|
||||||
|
OBJECT_BB
|
||||||
|
OBJECT_TOKI_OBJECTS
|
||||||
|
OBJECT_YUKABYUN
|
||||||
|
OBJECT_ZL2
|
||||||
|
OBJECT_MJIN
|
||||||
|
OBJECT_MJIN_FLASH
|
||||||
|
OBJECT_MJIN_DARK
|
||||||
|
OBJECT_MJIN_FLAME
|
||||||
|
OBJECT_MJIN_ICE
|
||||||
|
OBJECT_MJIN_SOUL
|
||||||
|
OBJECT_MJIN_WIND
|
||||||
|
OBJECT_MJIN_OKA
|
||||||
|
OBJECT_HAKA_OBJECTS
|
||||||
|
OBJECT_SPOT06_OBJECTS
|
||||||
|
OBJECT_ICE_OBJECTS
|
||||||
|
OBJECT_RELAY_OBJECTS
|
||||||
|
OBJECT_PO_FIELD
|
||||||
|
OBJECT_PO_COMPOSER
|
||||||
|
OBJECT_MORI_HINERI1A
|
||||||
|
OBJECT_MORI_HINERI2
|
||||||
|
OBJECT_MORI_HINERI2A
|
||||||
|
OBJECT_MORI_OBJECTS
|
||||||
|
OBJECT_MORI_TEX
|
||||||
|
OBJECT_SPOT08_OBJ
|
||||||
|
OBJECT_WARP2
|
||||||
|
OBJECT_HATA
|
||||||
|
OBJECT_BIRD
|
||||||
|
OBJECT_UNSET_78
|
||||||
|
OBJECT_UNSET_79
|
||||||
|
OBJECT_UNSET_7A
|
||||||
|
OBJECT_UNSET_7B
|
||||||
|
OBJECT_WOOD02
|
||||||
|
OBJECT_UNSET_7D
|
||||||
|
OBJECT_UNSET_7E
|
||||||
|
OBJECT_UNSET_7F
|
||||||
|
OBJECT_UNSET_80
|
||||||
|
OBJECT_LIGHTBOX
|
||||||
|
OBJECT_PU_BOX
|
||||||
|
OBJECT_UNSET_83
|
||||||
|
OBJECT_UNSET_84
|
||||||
|
OBJECT_TRAP
|
||||||
|
OBJECT_VASE
|
||||||
|
OBJECT_IM
|
||||||
|
OBJECT_TA
|
||||||
|
OBJECT_TK
|
||||||
|
OBJECT_XC
|
||||||
|
OBJECT_VM
|
||||||
|
OBJECT_BV
|
||||||
|
OBJECT_HAKACH_OBJECTS
|
||||||
|
OBJECT_EFC_CRYSTAL_LIGHT
|
||||||
|
OBJECT_EFC_FIRE_BALL
|
||||||
|
OBJECT_EFC_FLASH
|
||||||
|
OBJECT_EFC_LGT_SHOWER
|
||||||
|
OBJECT_EFC_STAR_FIELD
|
||||||
|
OBJECT_GOD_LGT
|
||||||
|
OBJECT_LIGHT_RING
|
||||||
|
OBJECT_TRIFORCE_SPOT
|
||||||
|
OBJECT_BDAN_OBJECTS
|
||||||
|
OBJECT_SD
|
||||||
|
OBJECT_RD
|
||||||
|
OBJECT_PO_SISTERS
|
||||||
|
OBJECT_HEAVY_OBJECT
|
||||||
|
OBJECT_GNDD
|
||||||
|
OBJECT_FD
|
||||||
|
OBJECT_DU
|
||||||
|
OBJECT_FW
|
||||||
|
OBJECT_MEDAL
|
||||||
|
OBJECT_HORSE_LINK_CHILD
|
||||||
|
OBJECT_SPOT02_OBJECTS
|
||||||
|
OBJECT_HAKA
|
||||||
|
OBJECT_RU1
|
||||||
|
OBJECT_SYOKUDAI
|
||||||
|
OBJECT_FD2
|
||||||
|
OBJECT_DH
|
||||||
|
OBJECT_RL
|
||||||
|
OBJECT_EFC_TW
|
||||||
|
OBJECT_DEMO_TRE_LGT
|
||||||
|
OBJECT_GI_KEY
|
||||||
|
OBJECT_MIR_RAY
|
||||||
|
OBJECT_BROB
|
||||||
|
OBJECT_GI_JEWEL
|
||||||
|
OBJECT_SPOT09_OBJ
|
||||||
|
OBJECT_SPOT18_OBJ
|
||||||
|
OBJECT_BDOOR
|
||||||
|
OBJECT_SPOT17_OBJ
|
||||||
|
OBJECT_SHOP_DUNGEN
|
||||||
|
OBJECT_NB
|
||||||
|
OBJECT_MO
|
||||||
|
OBJECT_SB
|
||||||
|
OBJECT_GI_MELODY
|
||||||
|
OBJECT_GI_HEART
|
||||||
|
OBJECT_GI_COMPASS
|
||||||
|
OBJECT_GI_BOSSKEY
|
||||||
|
OBJECT_GI_MEDAL
|
||||||
|
OBJECT_GI_NUTS
|
||||||
|
OBJECT_SA
|
||||||
|
OBJECT_GI_HEARTS
|
||||||
|
OBJECT_GI_ARROWCASE
|
||||||
|
OBJECT_GI_BOMBPOUCH
|
||||||
|
OBJECT_IN
|
||||||
|
OBJECT_TR
|
||||||
|
OBJECT_SPOT16_OBJ
|
||||||
|
OBJECT_OE1S
|
||||||
|
OBJECT_OE4S
|
||||||
|
OBJECT_OS_ANIME
|
||||||
|
OBJECT_GI_BOTTLE
|
||||||
|
OBJECT_GI_STICK
|
||||||
|
OBJECT_GI_MAP
|
||||||
|
OBJECT_OF1D_MAP
|
||||||
|
OBJECT_RU2
|
||||||
|
OBJECT_GI_SHIELD_1
|
||||||
|
OBJECT_DEKUJR
|
||||||
|
OBJECT_GI_MAGICPOT
|
||||||
|
OBJECT_GI_BOMB_1
|
||||||
|
OBJECT_OF1S
|
||||||
|
OBJECT_MA2
|
||||||
|
OBJECT_GI_PURSE
|
||||||
|
OBJECT_HNI
|
||||||
|
OBJECT_TW
|
||||||
|
OBJECT_RR
|
||||||
|
OBJECT_BXA
|
||||||
|
OBJECT_ANUBICE
|
||||||
|
OBJECT_GI_GERUDO
|
||||||
|
OBJECT_GI_ARROW
|
||||||
|
OBJECT_GI_BOMB_2
|
||||||
|
OBJECT_GI_EGG
|
||||||
|
OBJECT_GI_SCALE
|
||||||
|
OBJECT_GI_SHIELD_2
|
||||||
|
OBJECT_GI_HOOKSHOT
|
||||||
|
OBJECT_GI_OCARINA
|
||||||
|
OBJECT_GI_MILK
|
||||||
|
OBJECT_MA1
|
||||||
|
OBJECT_GANON
|
||||||
|
OBJECT_SST
|
||||||
|
OBJECT_NY_UNUSED
|
||||||
|
OBJECT_UNSET_E4
|
||||||
|
OBJECT_NY
|
||||||
|
OBJECT_FR
|
||||||
|
OBJECT_GI_PACHINKO
|
||||||
|
OBJECT_GI_BOOMERANG
|
||||||
|
OBJECT_GI_BOW
|
||||||
|
OBJECT_GI_GLASSES
|
||||||
|
OBJECT_GI_LIQUID
|
||||||
|
OBJECT_ANI
|
||||||
|
OBJECT_DEMO_6K
|
||||||
|
OBJECT_GI_SHIELD_3
|
||||||
|
OBJECT_GI_LETTER
|
||||||
|
OBJECT_SPOT15_OBJ
|
||||||
|
OBJECT_JYA_OBJ
|
||||||
|
OBJECT_GI_CLOTHES
|
||||||
|
OBJECT_GI_BEAN
|
||||||
|
OBJECT_GI_FISH
|
||||||
|
OBJECT_GI_SAW
|
||||||
|
OBJECT_GI_HAMMER
|
||||||
|
OBJECT_GI_GRASS
|
||||||
|
OBJECT_GI_LONGSWORD
|
||||||
|
OBJECT_SPOT01_OBJECTS
|
||||||
|
OBJECT_MD_UNUSED
|
||||||
|
OBJECT_MD
|
||||||
|
OBJECT_KM1
|
||||||
|
OBJECT_KW1
|
||||||
|
OBJECT_ZO
|
||||||
|
OBJECT_KZ
|
||||||
|
OBJECT_UMAJUMP
|
||||||
|
OBJECT_MASTERKOKIRI
|
||||||
|
OBJECT_MASTERKOKIRIHEAD
|
||||||
|
OBJECT_MASTERGOLON
|
||||||
|
OBJECT_MASTERZOORA
|
||||||
|
OBJECT_AOB
|
||||||
|
OBJECT_IK
|
||||||
|
OBJECT_AHG
|
||||||
|
OBJECT_CNE
|
||||||
|
OBJECT_GI_NIWATORI
|
||||||
|
OBJECT_SKJ
|
||||||
|
OBJECT_GI_BOTTLE_LETTER
|
||||||
|
OBJECT_BJI
|
||||||
|
OBJECT_BBA
|
||||||
|
OBJECT_GI_OCARINA_0
|
||||||
|
OBJECT_DS
|
||||||
|
OBJECT_ANE
|
||||||
|
OBJECT_BOJ
|
||||||
|
OBJECT_SPOT03_OBJECT
|
||||||
|
OBJECT_SPOT07_OBJECT
|
||||||
|
OBJECT_FZ
|
||||||
|
OBJECT_BOB
|
||||||
|
OBJECT_GE1
|
||||||
|
OBJECT_YABUSAME_POINT
|
||||||
|
OBJECT_GI_BOOTS_2
|
||||||
|
OBJECT_GI_SEED
|
||||||
|
OBJECT_GND_MAGIC
|
||||||
|
OBJECT_D_ELEVATOR
|
||||||
|
OBJECT_D_HSBLOCK
|
||||||
|
OBJECT_D_LIFT
|
||||||
|
OBJECT_MAMENOKI
|
||||||
|
OBJECT_GOROIWA
|
||||||
|
OBJECT_UNSET_120
|
||||||
|
OBJECT_TORYO
|
||||||
|
OBJECT_DAIKU
|
||||||
|
OBJECT_UNSET_123
|
||||||
|
OBJECT_NWC
|
||||||
|
OBJECT_BLKOBJ
|
||||||
|
OBJECT_GM
|
||||||
|
OBJECT_MS
|
||||||
|
OBJECT_HS
|
||||||
|
OBJECT_INGATE
|
||||||
|
OBJECT_LIGHTSWITCH
|
||||||
|
OBJECT_KUSA
|
||||||
|
OBJECT_TSUBO
|
||||||
|
OBJECT_GI_GLOVES
|
||||||
|
OBJECT_GI_COIN
|
||||||
|
OBJECT_KANBAN
|
||||||
|
OBJECT_GJYO_OBJECTS
|
||||||
|
OBJECT_OWL
|
||||||
|
OBJECT_MK
|
||||||
|
OBJECT_FU
|
||||||
|
OBJECT_GI_KI_TAN_MASK
|
||||||
|
OBJECT_GI_REDEAD_MASK
|
||||||
|
OBJECT_GI_SKJ_MASK
|
||||||
|
OBJECT_GI_RABIT_MASK
|
||||||
|
OBJECT_GI_TRUTH_MASK
|
||||||
|
OBJECT_GANON_OBJECTS
|
||||||
|
OBJECT_SIOFUKI
|
||||||
|
OBJECT_STREAM
|
||||||
|
OBJECT_MM
|
||||||
|
OBJECT_FA
|
||||||
|
OBJECT_OS
|
||||||
|
OBJECT_GI_EYE_LOTION
|
||||||
|
OBJECT_GI_POWDER
|
||||||
|
OBJECT_GI_MUSHROOM
|
||||||
|
OBJECT_GI_TICKETSTONE
|
||||||
|
OBJECT_GI_BROKENSWORD
|
||||||
|
OBJECT_JS
|
||||||
|
OBJECT_CS
|
||||||
|
OBJECT_GI_PRESCRIPTION
|
||||||
|
OBJECT_GI_BRACELET
|
||||||
|
OBJECT_GI_SOLDOUT
|
||||||
|
OBJECT_GI_FROG
|
||||||
|
OBJECT_MAG
|
||||||
|
OBJECT_DOOR_GERUDO
|
||||||
|
OBJECT_GT
|
||||||
|
OBJECT_EFC_ERUPC
|
||||||
|
OBJECT_ZL2_ANIME1
|
||||||
|
OBJECT_ZL2_ANIME2
|
||||||
|
OBJECT_GI_GOLONMASK
|
||||||
|
OBJECT_GI_ZORAMASK
|
||||||
|
OBJECT_GI_GERUDOMASK
|
||||||
|
OBJECT_GANON2
|
||||||
|
OBJECT_KA
|
||||||
|
OBJECT_TS
|
||||||
|
OBJECT_ZG
|
||||||
|
OBJECT_GI_HOVERBOOTS
|
||||||
|
OBJECT_GI_M_ARROW
|
||||||
|
OBJECT_DS2
|
||||||
|
OBJECT_EC
|
||||||
|
OBJECT_FISH
|
||||||
|
OBJECT_GI_SUTARU
|
||||||
|
OBJECT_GI_GODDESS
|
||||||
|
OBJECT_SSH
|
||||||
|
OBJECT_BIGOKUTA
|
||||||
|
OBJECT_BG
|
||||||
|
OBJECT_SPOT05_OBJECTS
|
||||||
|
OBJECT_SPOT12_OBJ
|
||||||
|
OBJECT_BOMBIWA
|
||||||
|
OBJECT_HINTNUTS
|
||||||
|
OBJECT_RS
|
||||||
|
OBJECT_SPOT00_BREAK
|
||||||
|
OBJECT_GLA
|
||||||
|
OBJECT_SHOPNUTS
|
||||||
|
OBJECT_GELDB
|
||||||
|
OBJECT_GR
|
||||||
|
OBJECT_DOG
|
||||||
|
OBJECT_JYA_IRON
|
||||||
|
OBJECT_JYA_DOOR
|
||||||
|
OBJECT_UNSET_16E
|
||||||
|
OBJECT_SPOT11_OBJ
|
||||||
|
OBJECT_KIBAKO2
|
||||||
|
OBJECT_DNS
|
||||||
|
OBJECT_DNK
|
||||||
|
OBJECT_GI_FIRE
|
||||||
|
OBJECT_GI_INSECT
|
||||||
|
OBJECT_GI_BUTTERFLY
|
||||||
|
OBJECT_GI_GHOST
|
||||||
|
OBJECT_GI_SOUL
|
||||||
|
OBJECT_BOWL
|
||||||
|
OBJECT_DEMO_KEKKAI
|
||||||
|
OBJECT_EFC_DOUGHNUT
|
||||||
|
OBJECT_GI_DEKUPOUCH
|
||||||
|
OBJECT_GANON_ANIME1
|
||||||
|
OBJECT_GANON_ANIME2
|
||||||
|
OBJECT_GANON_ANIME3
|
||||||
|
OBJECT_GI_RUPY
|
||||||
|
OBJECT_SPOT01_MATOYA
|
||||||
|
OBJECT_SPOT01_MATOYAB
|
||||||
|
OBJECT_MU
|
||||||
|
OBJECT_WF
|
||||||
|
OBJECT_SKB
|
||||||
|
OBJECT_GJ
|
||||||
|
OBJECT_GEFF
|
||||||
|
OBJECT_HAKA_DOOR
|
||||||
|
OBJECT_GS
|
||||||
|
OBJECT_PS
|
||||||
|
OBJECT_BWALL
|
||||||
|
OBJECT_COW
|
||||||
|
OBJECT_COB
|
||||||
|
OBJECT_GI_SWORD_1
|
||||||
|
OBJECT_DOOR_KILLER
|
||||||
|
OBJECT_OUKE_HAKA
|
||||||
|
OBJECT_TIMEBLOCK
|
||||||
|
OBJECT_ZL4
|
1
soh/assets/extractor/symbols/SymbolMap_OoTMqDbg.txt
Normal file
1
soh/assets/extractor/symbols/SymbolMap_OoTMqDbg.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
8012DB20 gMtxClear
|
20
soh/soh/Enhancements/cosmetics/TimeFlowFileSelect.cpp
Normal file
20
soh/soh/Enhancements/cosmetics/TimeFlowFileSelect.cpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
|
||||||
|
extern "C" SaveContext gSaveContext;
|
||||||
|
|
||||||
|
static constexpr int32_t CVAR_TIMEFLOWFILESELECT_DEFAULT = 0;
|
||||||
|
#define CVAR_TIMEFLOWFILESELECT_NAME CVAR_ENHANCEMENT("TimeFlowFileSelect")
|
||||||
|
#define CVAR_TIMEFLOWFILESELECT_VALUE CVarGetInteger(CVAR_TIMEFLOWFILESELECT_NAME, CVAR_TIMEFLOWFILESELECT_DEFAULT)
|
||||||
|
|
||||||
|
void OnFileChooseMainTimeFlowFileSelect(void* gameState) {
|
||||||
|
gSaveContext.skyboxTime += 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterTimeFlowFileSelect() {
|
||||||
|
COND_HOOK(OnFileChooseMain, CVAR_TIMEFLOWFILESELECT_VALUE, OnFileChooseMainTimeFlowFileSelect);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc_TimeFlowFileSelect(RegisterTimeFlowFileSelect, { CVAR_TIMEFLOWFILESELECT_NAME });
|
|
@ -154,9 +154,9 @@ class CustomMessage {
|
||||||
void InsertNumber(uint8_t num);
|
void InsertNumber(uint8_t num);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A € sign at the end of an item name signals that it is plural.
|
* @brief A € sign at the end of an item name signals that it is plural.
|
||||||
* If a hint text has |singular|plural| forms specified, the unused one get's deleted.
|
* If a hint text has |singular|plural| forms specified, the unused one get's deleted.
|
||||||
* If no € sign is present, the singular form is used.
|
* If no € sign is present, the singular form is used.
|
||||||
*/
|
*/
|
||||||
void SetSingularPlural();
|
void SetSingularPlural();
|
||||||
|
|
||||||
|
|
|
@ -541,7 +541,7 @@ void Rando::StaticData::RegisterPotLocations() {
|
||||||
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(421, -174), "MQ Outer Lobby Pot", RHT_POT_BOTTOM_OF_THE_WELL, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT));
|
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(421, -174), "MQ Outer Lobby Pot", RHT_POT_BOTTOM_OF_THE_WELL, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT));
|
||||||
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(288, -1240), "MQ East Inner Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1));
|
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(288, -1240), "MQ East Inner Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1));
|
||||||
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(438, -1234), "MQ East Inner Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2));
|
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(438, -1234), "MQ East Inner Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2));
|
||||||
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(443, -1114), "MQ East Inner Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3));
|
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(444, -1114), "MQ East Inner Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3));
|
||||||
locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-357, 957), "MQ Entrance Pot 1", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1));
|
locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-357, 957), "MQ Entrance Pot 1", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1));
|
||||||
locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(356, 959), "MQ Entrance Pot 2", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2));
|
locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(356, 959), "MQ Entrance Pot 2", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2));
|
||||||
locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(187, -1449), "MQ Before Mini Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1));
|
locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(187, -1449), "MQ Before Mini Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1));
|
||||||
|
|
|
@ -266,8 +266,8 @@ void SetAllEntrancesData() {
|
||||||
{ EntranceType::Dungeon, RR_FOREST_TEMPLE_ENTRYWAY, RR_SACRED_FOREST_MEADOW, ENTR_SACRED_FOREST_MEADOW_OUTSIDE_TEMPLE } },
|
{ EntranceType::Dungeon, RR_FOREST_TEMPLE_ENTRYWAY, RR_SACRED_FOREST_MEADOW, ENTR_SACRED_FOREST_MEADOW_OUTSIDE_TEMPLE } },
|
||||||
{ { EntranceType::Dungeon, RR_DMC_CENTRAL_LOCAL, RR_FIRE_TEMPLE_ENTRYWAY, ENTR_FIRE_TEMPLE_ENTRANCE },
|
{ { EntranceType::Dungeon, RR_DMC_CENTRAL_LOCAL, RR_FIRE_TEMPLE_ENTRYWAY, ENTR_FIRE_TEMPLE_ENTRANCE },
|
||||||
{ EntranceType::Dungeon, RR_FIRE_TEMPLE_ENTRYWAY, RR_DMC_CENTRAL_LOCAL, ENTR_DEATH_MOUNTAIN_CRATER_OUTSIDE_TEMPLE } },
|
{ EntranceType::Dungeon, RR_FIRE_TEMPLE_ENTRYWAY, RR_DMC_CENTRAL_LOCAL, ENTR_DEATH_MOUNTAIN_CRATER_OUTSIDE_TEMPLE } },
|
||||||
{ { EntranceType::Dungeon, RR_LAKE_HYLIA, RR_WATER_TEMPLE_ENTRYWAY, ENTR_WATER_TEMPLE_ENTRANCE },
|
{ { EntranceType::Dungeon, RR_LH_FROM_WATER_TEMPLE, RR_WATER_TEMPLE_ENTRYWAY, ENTR_WATER_TEMPLE_ENTRANCE },
|
||||||
{ EntranceType::Dungeon, RR_WATER_TEMPLE_ENTRYWAY, RR_LAKE_HYLIA, ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE } },
|
{ EntranceType::Dungeon, RR_WATER_TEMPLE_ENTRYWAY, RR_LH_FROM_WATER_TEMPLE, ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE } },
|
||||||
{ { EntranceType::Dungeon, RR_DESERT_COLOSSUS, RR_SPIRIT_TEMPLE_ENTRYWAY, ENTR_SPIRIT_TEMPLE_ENTRANCE },
|
{ { EntranceType::Dungeon, RR_DESERT_COLOSSUS, RR_SPIRIT_TEMPLE_ENTRYWAY, ENTR_SPIRIT_TEMPLE_ENTRANCE },
|
||||||
{ EntranceType::Dungeon, RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE } },
|
{ EntranceType::Dungeon, RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE } },
|
||||||
{ { EntranceType::Dungeon, RR_GRAVEYARD_WARP_PAD_REGION, RR_SHADOW_TEMPLE_ENTRYWAY, ENTR_SHADOW_TEMPLE_ENTRANCE },
|
{ { EntranceType::Dungeon, RR_GRAVEYARD_WARP_PAD_REGION, RR_SHADOW_TEMPLE_ENTRYWAY, ENTR_SHADOW_TEMPLE_ENTRANCE },
|
||||||
|
@ -454,8 +454,8 @@ void SetAllEntrancesData() {
|
||||||
{ EntranceType::Overworld, RR_LW_FOREST_EXIT, RR_KOKIRI_FOREST, ENTR_KOKIRI_FOREST_UPPER_EXIT } },
|
{ EntranceType::Overworld, RR_LW_FOREST_EXIT, RR_KOKIRI_FOREST, ENTR_KOKIRI_FOREST_UPPER_EXIT } },
|
||||||
{ { EntranceType::Overworld, RR_THE_LOST_WOODS, RR_GC_WOODS_WARP, ENTR_GORON_CITY_TUNNEL_SHORTCUT },
|
{ { EntranceType::Overworld, RR_THE_LOST_WOODS, RR_GC_WOODS_WARP, ENTR_GORON_CITY_TUNNEL_SHORTCUT },
|
||||||
{ EntranceType::Overworld, RR_GC_WOODS_WARP, RR_THE_LOST_WOODS, ENTR_LOST_WOODS_TUNNEL_SHORTCUT } },
|
{ EntranceType::Overworld, RR_GC_WOODS_WARP, RR_THE_LOST_WOODS, ENTR_LOST_WOODS_TUNNEL_SHORTCUT } },
|
||||||
{ { EntranceType::Overworld, RR_THE_LOST_WOODS, RR_ZORAS_RIVER, ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT },
|
{ { EntranceType::Overworld, RR_THE_LOST_WOODS, RR_ZR_FROM_SHORTCUT, ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT },
|
||||||
{ EntranceType::Overworld, RR_ZORAS_RIVER, RR_THE_LOST_WOODS, ENTR_LOST_WOODS_UNDERWATER_SHORTCUT } },
|
{ EntranceType::Overworld, RR_ZR_FROM_SHORTCUT, RR_THE_LOST_WOODS, ENTR_LOST_WOODS_UNDERWATER_SHORTCUT } },
|
||||||
{ { EntranceType::Overworld, RR_LW_BEYOND_MIDO, RR_SFM_ENTRYWAY, ENTR_SACRED_FOREST_MEADOW_SOUTH_EXIT },
|
{ { EntranceType::Overworld, RR_LW_BEYOND_MIDO, RR_SFM_ENTRYWAY, ENTR_SACRED_FOREST_MEADOW_SOUTH_EXIT },
|
||||||
{ EntranceType::Overworld, RR_SFM_ENTRYWAY, RR_LW_BEYOND_MIDO, ENTR_LOST_WOODS_NORTH_EXIT } },
|
{ EntranceType::Overworld, RR_SFM_ENTRYWAY, RR_LW_BEYOND_MIDO, ENTR_LOST_WOODS_NORTH_EXIT } },
|
||||||
{ { EntranceType::Overworld, RR_LW_BRIDGE, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_WOODED_EXIT },
|
{ { EntranceType::Overworld, RR_LW_BRIDGE, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_WOODED_EXIT },
|
||||||
|
@ -472,8 +472,8 @@ void SetAllEntrancesData() {
|
||||||
{ EntranceType::Overworld, RR_ZR_FRONT, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_RIVER_EXIT } },
|
{ EntranceType::Overworld, RR_ZR_FRONT, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_RIVER_EXIT } },
|
||||||
{ { EntranceType::Overworld, RR_HYRULE_FIELD, RR_LON_LON_RANCH, ENTR_LON_LON_RANCH_ENTRANCE },
|
{ { EntranceType::Overworld, RR_HYRULE_FIELD, RR_LON_LON_RANCH, ENTR_LON_LON_RANCH_ENTRANCE },
|
||||||
{ EntranceType::Overworld, RR_LON_LON_RANCH, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_CENTER_EXIT } },
|
{ EntranceType::Overworld, RR_LON_LON_RANCH, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_CENTER_EXIT } },
|
||||||
{ { EntranceType::Overworld, RR_LAKE_HYLIA, RR_ZORAS_DOMAIN, ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT },
|
{ { EntranceType::Overworld, RR_LH_FROM_SHORTCUT, RR_ZORAS_DOMAIN, ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT },
|
||||||
{ EntranceType::Overworld, RR_ZORAS_DOMAIN, RR_LAKE_HYLIA, ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT } },
|
{ EntranceType::Overworld, RR_ZORAS_DOMAIN, RR_LH_FROM_SHORTCUT, ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT } },
|
||||||
{ { EntranceType::Overworld, RR_GV_FORTRESS_SIDE, RR_GERUDO_FORTRESS, ENTR_GERUDOS_FORTRESS_EAST_EXIT },
|
{ { EntranceType::Overworld, RR_GV_FORTRESS_SIDE, RR_GERUDO_FORTRESS, ENTR_GERUDOS_FORTRESS_EAST_EXIT },
|
||||||
{ EntranceType::Overworld, RR_GERUDO_FORTRESS, RR_GV_FORTRESS_SIDE, ENTR_GERUDO_VALLEY_WEST_EXIT } },
|
{ EntranceType::Overworld, RR_GERUDO_FORTRESS, RR_GV_FORTRESS_SIDE, ENTR_GERUDO_VALLEY_WEST_EXIT } },
|
||||||
{ { EntranceType::Overworld, RR_GF_OUTSIDE_GATE, RR_WASTELAND_NEAR_FORTRESS, ENTR_HAUNTED_WASTELAND_EAST_EXIT },
|
{ { EntranceType::Overworld, RR_GF_OUTSIDE_GATE, RR_WASTELAND_NEAR_FORTRESS, ENTR_HAUNTED_WASTELAND_EAST_EXIT },
|
||||||
|
@ -1501,7 +1501,7 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
||||||
{ EntranceNameByRegions(RR_FIRE_TEMPLE_BOSS_ROOM, RR_FIRE_TEMPLE_BOSS_ENTRYWAY),
|
{ EntranceNameByRegions(RR_FIRE_TEMPLE_BOSS_ROOM, RR_FIRE_TEMPLE_BOSS_ENTRYWAY),
|
||||||
GetEntrance(RR_FIRE_TEMPLE_ENTRYWAY, RR_DMC_CENTRAL_LOCAL) },
|
GetEntrance(RR_FIRE_TEMPLE_ENTRYWAY, RR_DMC_CENTRAL_LOCAL) },
|
||||||
{ EntranceNameByRegions(RR_WATER_TEMPLE_BOSS_ROOM, RR_WATER_TEMPLE_BOSS_ENTRYWAY),
|
{ EntranceNameByRegions(RR_WATER_TEMPLE_BOSS_ROOM, RR_WATER_TEMPLE_BOSS_ENTRYWAY),
|
||||||
GetEntrance(RR_WATER_TEMPLE_ENTRYWAY, RR_LAKE_HYLIA) },
|
GetEntrance(RR_WATER_TEMPLE_ENTRYWAY, RR_LH_FROM_WATER_TEMPLE) },
|
||||||
{ EntranceNameByRegions(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY),
|
{ EntranceNameByRegions(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY),
|
||||||
GetEntrance(RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE) },
|
GetEntrance(RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE) },
|
||||||
{ EntranceNameByRegions(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY),
|
{ EntranceNameByRegions(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY),
|
||||||
|
@ -1521,7 +1521,7 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
||||||
GetEntrance(RR_FOREST_TEMPLE_BOSS_ROOM, RR_SACRED_FOREST_MEADOW) },
|
GetEntrance(RR_FOREST_TEMPLE_BOSS_ROOM, RR_SACRED_FOREST_MEADOW) },
|
||||||
{ EntranceNameByRegions(RR_FIRE_TEMPLE_ENTRYWAY, RR_DMC_CENTRAL_LOCAL),
|
{ EntranceNameByRegions(RR_FIRE_TEMPLE_ENTRYWAY, RR_DMC_CENTRAL_LOCAL),
|
||||||
GetEntrance(RR_FIRE_TEMPLE_BOSS_ROOM, RR_DMC_CENTRAL_LOCAL) },
|
GetEntrance(RR_FIRE_TEMPLE_BOSS_ROOM, RR_DMC_CENTRAL_LOCAL) },
|
||||||
{ EntranceNameByRegions(RR_WATER_TEMPLE_ENTRYWAY, RR_LAKE_HYLIA),
|
{ EntranceNameByRegions(RR_WATER_TEMPLE_ENTRYWAY, RR_LH_FROM_WATER_TEMPLE),
|
||||||
GetEntrance(RR_WATER_TEMPLE_BOSS_ROOM, RR_LAKE_HYLIA) },
|
GetEntrance(RR_WATER_TEMPLE_BOSS_ROOM, RR_LAKE_HYLIA) },
|
||||||
{ EntranceNameByRegions(RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE),
|
{ EntranceNameByRegions(RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE),
|
||||||
GetEntrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_DESERT_COLOSSUS) },
|
GetEntrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_DESERT_COLOSSUS) },
|
||||||
|
|
|
@ -258,6 +258,7 @@ std::set<RandomizerArea> CalculateAreas(SceneID scene) {
|
||||||
case SCENE_INSIDE_GANONS_CASTLE_COLLAPSE:
|
case SCENE_INSIDE_GANONS_CASTLE_COLLAPSE:
|
||||||
case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR:
|
case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR:
|
||||||
case SCENE_GANON_BOSS:
|
case SCENE_GANON_BOSS:
|
||||||
|
case SCENE_ID_MAX:
|
||||||
return {};
|
return {};
|
||||||
case SCENE_CHAMBER_OF_THE_SAGES:
|
case SCENE_CHAMBER_OF_THE_SAGES:
|
||||||
case SCENE_CUTSCENE_MAP:
|
case SCENE_CUTSCENE_MAP:
|
||||||
|
@ -270,7 +271,6 @@ std::set<RandomizerArea> CalculateAreas(SceneID scene) {
|
||||||
case SCENE_HAIRAL_NIWA2:
|
case SCENE_HAIRAL_NIWA2:
|
||||||
case SCENE_SASATEST:
|
case SCENE_SASATEST:
|
||||||
case SCENE_TESTROOM:
|
case SCENE_TESTROOM:
|
||||||
case SCENE_ID_MAX:
|
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -25,8 +25,8 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, logic->HasExplosives()),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, logic->HasExplosives()),
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, logic->LoweredWaterInsideBotw),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, logic->LoweredWaterInsideBotw || logic->CanOpenUnderwaterChest()),
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, logic->LoweredWaterInsideBotw),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, logic->LoweredWaterInsideBotw || logic->CanOpenUnderwaterChest()),
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, (logic->CanBreakPots() && logic->LoweredWaterInsideBotw) || logic->CanUse(RG_BOOMERANG)),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, (logic->CanBreakPots() && logic->LoweredWaterInsideBotw) || logic->CanUse(RG_BOOMERANG)),
|
||||||
|
|
|
@ -117,7 +117,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
areaTable[RR_DODONGOS_CAVERN_STAIRS_LOWER] = Region("Dodongos Cavern Stairs Lower", SCENE_DODONGOS_CAVERN, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_STAIRS_LOWER] = Region("Dodongos Cavern Stairs Lower", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));}),
|
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, []{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, []{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER] = Region("Dodongos Cavern MQ Stairs Lower", SCENE_DODONGOS_CAVERN, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER] = Region("Dodongos Cavern MQ Stairs Lower", SCENE_DODONGOS_CAVERN, {
|
||||||
//Events
|
//Events
|
||||||
//EventAccess(&logic->CanClimbDCStairs, []{return logic->HasExplosives || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));}),
|
//EventAccess(&logic->CanClimbDCStairs, []{return logic->HasExplosives || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()),
|
||||||
|
@ -317,7 +317,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||||
//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick
|
//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));});}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));});}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();});}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_STICKS));}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_STICKS) || ctx->GetTrickOption(RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH))) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@ void RegionTable_Init_ForestTemple() {
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_SEWER] = Region("Forest Temple Sewer", SCENE_FOREST_TEMPLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_SEWER] = Region("Forest Temple Sewer", SCENE_FOREST_TEMPLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FOREST_TEMPLE_WELL_CHEST, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)),
|
LOCATION(RC_FOREST_TEMPLE_WELL_CHEST, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanOpenUnderwaterChest() && logic->WaterTimer() >= 8)),
|
||||||
LOCATION(RC_FOREST_TEMPLE_WELL_WEST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
LOCATION(RC_FOREST_TEMPLE_WELL_WEST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
||||||
LOCATION(RC_FOREST_TEMPLE_WELL_EAST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
LOCATION(RC_FOREST_TEMPLE_WELL_EAST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
||||||
}, {
|
}, {
|
||||||
|
@ -444,7 +444,7 @@ void RegionTable_Init_ForestTemple() {
|
||||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_WELL_CHEST, logic->CanHitEyeTargets()),
|
LOCATION(RC_FOREST_TEMPLE_MQ_WELL_CHEST, logic->CanHitEyeTargets() || (logic->CanOpenUnderwaterChest() && logic->WaterTimer() >= 8)),
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||||
//implies logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)
|
//implies logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_WELL, logic->CanHitEyeTargets() || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))),
|
LOCATION(RC_FOREST_TEMPLE_MQ_GS_WELL, logic->CanHitEyeTargets() || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))),
|
||||||
|
|
|
@ -173,7 +173,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WIHTOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));});}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WITHOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM] = Region("Gerudo Training Ground MQ Stalfos Room", SCENE_GERUDO_TRAINING_GROUND, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM] = Region("Gerudo Training Ground MQ Stalfos Room", SCENE_GERUDO_TRAINING_GROUND, {
|
||||||
|
@ -287,7 +287,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER] = Region("Gerudo Training Ground MQ Underwater", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER] = Region("Gerudo Training Ground MQ Underwater", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy
|
//it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage()),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}),
|
||||||
|
|
|
@ -351,7 +351,7 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST] = Region("Spirit Temple MQ Statue Room East", SCENE_SPIRIT_TEMPLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST] = Region("Spirit Temple MQ Statue Room East", SCENE_SPIRIT_TEMPLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, logic->CanUse(RG_HOOKSHOT) & logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
|
|
@ -11,7 +11,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsVanilla();}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsVanilla();}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsMQ();}),
|
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsMQ();}),
|
||||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
Entrance(RR_LH_FROM_WATER_TEMPLE, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
#pragma region Vanilla
|
#pragma region Vanilla
|
||||||
|
@ -379,8 +379,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, logic->MQWaterLevel(WL_HIGH) && logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)),
|
LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, logic->MQWaterLevel(WL_HIGH) && logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)),
|
||||||
//easy to get at WL_HIGH with the hook-the-underwater-chest glitch
|
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, (logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_HOOKSHOT)) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && logic->CanOpenUnderwaterChest())),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_HOOKSHOT)),
|
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -7,7 +7,7 @@ void RegionTable_Init_HyruleField() {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", SCENE_HYRULE_FIELD, {
|
areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", SCENE_HYRULE_FIELD, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}),
|
EventAccess(&logic->BigPoeKill, []{return logic->HasBottle() && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_EPONA) || ctx->GetTrickOption(RT_HF_BIG_POE_WITHOUT_EPONA));}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)),
|
LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)),
|
||||||
|
|
|
@ -441,6 +441,10 @@ bool Logic::CanOpenOverworldDoor(RandomizerGet key) {
|
||||||
return HasItem(key);
|
return HasItem(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Logic::CanOpenUnderwaterChest() {
|
||||||
|
return ctx->GetTrickOption(RT_OPEN_UNDERWATER_CHEST) && CanUse(RG_IRON_BOOTS) && CanUse(RG_HOOKSHOT);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t GetDifficultyValueFromString(Rando::Option& glitchOption) {
|
uint8_t GetDifficultyValueFromString(Rando::Option& glitchOption) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -732,7 +736,8 @@ bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
|
||||||
(CanUse(RG_NUTS) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || HookshotOrBoomerang());
|
(CanUse(RG_NUTS) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || HookshotOrBoomerang());
|
||||||
case RE_KING_DODONGO:
|
case RE_KING_DODONGO:
|
||||||
return HasBossSoul(RG_KING_DODONGO_SOUL) && CanJumpslash() &&
|
return HasBossSoul(RG_KING_DODONGO_SOUL) && CanJumpslash() &&
|
||||||
(CanUse(RG_BOMB_BAG) || HasItem(RG_GORONS_BRACELET));
|
(CanUse(RG_BOMB_BAG) || HasItem(RG_GORONS_BRACELET) ||
|
||||||
|
(ctx->GetTrickOption(RT_DC_DODONGO_CHU) && IsAdult && CanUse(RG_BOMBCHU_5)));
|
||||||
case RE_BARINADE:
|
case RE_BARINADE:
|
||||||
return HasBossSoul(RG_BARINADE_SOUL) && CanUse(RG_BOOMERANG) && CanJumpslashExceptHammer();
|
return HasBossSoul(RG_BARINADE_SOUL) && CanUse(RG_BOOMERANG) && CanJumpslashExceptHammer();
|
||||||
case RE_PHANTOM_GANON:
|
case RE_PHANTOM_GANON:
|
||||||
|
@ -741,7 +746,10 @@ bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
|
||||||
case RE_VOLVAGIA:
|
case RE_VOLVAGIA:
|
||||||
return HasBossSoul(RG_VOLVAGIA_SOUL) && CanUse(RG_MEGATON_HAMMER);
|
return HasBossSoul(RG_VOLVAGIA_SOUL) && CanUse(RG_MEGATON_HAMMER);
|
||||||
case RE_MORPHA:
|
case RE_MORPHA:
|
||||||
return HasBossSoul(RG_MORPHA_SOUL) && CanUse(RG_HOOKSHOT) && (CanUseSword() || CanUse(RG_MEGATON_HAMMER));
|
return HasBossSoul(RG_MORPHA_SOUL) &&
|
||||||
|
(CanUse(RG_HOOKSHOT) ||
|
||||||
|
(ctx->GetTrickOption(RT_WATER_MORPHA_WITHOUT_HOOKSHOT) && HasItem(RG_BRONZE_SCALE))) &&
|
||||||
|
(CanUseSword() || CanUse(RG_MEGATON_HAMMER));
|
||||||
case RE_BONGO_BONGO:
|
case RE_BONGO_BONGO:
|
||||||
return HasBossSoul(RG_BONGO_BONGO_SOUL) &&
|
return HasBossSoul(RG_BONGO_BONGO_SOUL) &&
|
||||||
(CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) && CanUseSword() &&
|
(CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) && CanUseSword() &&
|
||||||
|
|
|
@ -189,6 +189,7 @@ class Logic {
|
||||||
bool CanOpenOverworldDoor(RandomizerGet itemName);
|
bool CanOpenOverworldDoor(RandomizerGet itemName);
|
||||||
bool SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmount);
|
bool SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmount);
|
||||||
bool SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless, uint8_t requiredAmountGlitched);
|
bool SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless, uint8_t requiredAmountGlitched);
|
||||||
|
bool CanOpenUnderwaterChest();
|
||||||
bool CanDoGlitch(GlitchType glitch);
|
bool CanDoGlitch(GlitchType glitch);
|
||||||
bool CanEquipSwap(RandomizerGet itemName);
|
bool CanEquipSwap(RandomizerGet itemName);
|
||||||
bool CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance = ED_CLOSE, bool wallOrFloor = true,
|
bool CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance = ED_CLOSE, bool wallOrFloor = true,
|
||||||
|
|
|
@ -4137,7 +4137,7 @@ void RandomizerSettingsWindow::DrawElement() {
|
||||||
{ Rando::Tricks::Tag::NOVICE, true }, { Rando::Tricks::Tag::INTERMEDIATE, true },
|
{ Rando::Tricks::Tag::NOVICE, true }, { Rando::Tricks::Tag::INTERMEDIATE, true },
|
||||||
{ Rando::Tricks::Tag::ADVANCED, true }, { Rando::Tricks::Tag::EXPERT, true },
|
{ Rando::Tricks::Tag::ADVANCED, true }, { Rando::Tricks::Tag::EXPERT, true },
|
||||||
{ Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true },
|
{ Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true },
|
||||||
//{ Rando::Tricks::Tag::GLITCH, false },
|
{ Rando::Tricks::Tag::GLITCH, false },
|
||||||
};
|
};
|
||||||
static ImGuiTextFilter trickSearch;
|
static ImGuiTextFilter trickSearch;
|
||||||
UIWidgets::PushStyleInput(THEME_COLOR);
|
UIWidgets::PushStyleInput(THEME_COLOR);
|
||||||
|
|
|
@ -3506,11 +3506,13 @@ typedef enum {
|
||||||
RT_HOVER_BOOST_SIMPLE,
|
RT_HOVER_BOOST_SIMPLE,
|
||||||
RT_BOMBCHU_BEEHIVES,
|
RT_BOMBCHU_BEEHIVES,
|
||||||
RT_BLUE_FIRE_MUD_WALLS,
|
RT_BLUE_FIRE_MUD_WALLS,
|
||||||
|
RT_OPEN_UNDERWATER_CHEST,
|
||||||
RT_KF_ADULT_GS, // -- location tricks
|
RT_KF_ADULT_GS, // -- location tricks
|
||||||
RT_LW_BRIDGE,
|
RT_LW_BRIDGE,
|
||||||
RT_LW_MIDO_BACKFLIP,
|
RT_LW_MIDO_BACKFLIP,
|
||||||
RT_LW_GS_BEAN,
|
RT_LW_GS_BEAN,
|
||||||
RT_HC_STORMS_GS,
|
RT_HC_STORMS_GS,
|
||||||
|
RT_HF_BIG_POE_WITHOUT_EPONA,
|
||||||
RT_KAK_MAN_ON_ROOF,
|
RT_KAK_MAN_ON_ROOF,
|
||||||
RT_KAK_TOWER_GS,
|
RT_KAK_TOWER_GS,
|
||||||
RT_KAK_ADULT_WINDMILL_POH,
|
RT_KAK_ADULT_WINDMILL_POH,
|
||||||
|
@ -3565,14 +3567,16 @@ typedef enum {
|
||||||
RT_DEKU_MQ_LOG,
|
RT_DEKU_MQ_LOG,
|
||||||
RT_DC_SCARECROW_GS,
|
RT_DC_SCARECROW_GS,
|
||||||
RT_DC_VINES_GS,
|
RT_DC_VINES_GS,
|
||||||
RT_DC_STAIRCASE,
|
RT_DC_STAIRS_WITH_BOW,
|
||||||
RT_DC_SLINGSHOT_SKIP,
|
RT_DC_SLINGSHOT_SKIP,
|
||||||
RT_DC_SCRUB_ROOM,
|
RT_DC_SCRUB_ROOM,
|
||||||
RT_DC_JUMP,
|
RT_DC_JUMP,
|
||||||
RT_DC_HAMMER_FLOOR,
|
RT_DC_HAMMER_FLOOR,
|
||||||
|
RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH,
|
||||||
RT_DC_MQ_CHILD_BOMBS,
|
RT_DC_MQ_CHILD_BOMBS,
|
||||||
RT_DC_MQ_CHILD_EYES,
|
RT_DC_MQ_CHILD_EYES,
|
||||||
RT_DC_MQ_ADULT_EYES,
|
RT_DC_MQ_ADULT_EYES,
|
||||||
|
RT_DC_DODONGO_CHU,
|
||||||
RT_JABU_ALCOVE_JUMP_DIVE,
|
RT_JABU_ALCOVE_JUMP_DIVE,
|
||||||
RT_JABU_BOSS_HOVER,
|
RT_JABU_BOSS_HOVER,
|
||||||
RT_JABU_NEAR_BOSS_RANGED,
|
RT_JABU_NEAR_BOSS_RANGED,
|
||||||
|
@ -3628,6 +3632,7 @@ typedef enum {
|
||||||
RT_WATER_CHILD_DRAGON,
|
RT_WATER_CHILD_DRAGON,
|
||||||
RT_WATER_MQ_CENTRAL_PILLAR,
|
RT_WATER_MQ_CENTRAL_PILLAR,
|
||||||
RT_WATER_MQ_LOCKED_GS,
|
RT_WATER_MQ_LOCKED_GS,
|
||||||
|
RT_WATER_MORPHA_WITHOUT_HOOKSHOT,
|
||||||
RT_LENS_SHADOW,
|
RT_LENS_SHADOW,
|
||||||
RT_LENS_SHADOW_PLATFORM,
|
RT_LENS_SHADOW_PLATFORM,
|
||||||
RT_LENS_BONGO,
|
RT_LENS_BONGO,
|
||||||
|
@ -3666,7 +3671,7 @@ typedef enum {
|
||||||
RT_GTG_FAKE_WALL,
|
RT_GTG_FAKE_WALL,
|
||||||
RT_LENS_GTG_MQ,
|
RT_LENS_GTG_MQ,
|
||||||
RT_GTG_MQ_WITH_HOOKSHOT,
|
RT_GTG_MQ_WITH_HOOKSHOT,
|
||||||
RT_GTG_MQ_WIHTOUT_HOOKSHOT,
|
RT_GTG_MQ_WITHOUT_HOOKSHOT,
|
||||||
RT_LENS_GANON,
|
RT_LENS_GANON,
|
||||||
RT_GANON_SPIRIT_TRIAL_HOOKSHOT,
|
RT_GANON_SPIRIT_TRIAL_HOOKSHOT,
|
||||||
RT_LENS_GANON_MQ,
|
RT_LENS_GANON_MQ,
|
||||||
|
|
|
@ -403,6 +403,9 @@ void Settings::CreateOptions() {
|
||||||
"apply to MQ Dead Hand bomb flowers.\nUsing blue fire on bombflower to stop rolling goron also requires "
|
"apply to MQ Dead Hand bomb flowers.\nUsing blue fire on bombflower to stop rolling goron also requires "
|
||||||
"\"Stop Link the Goron with Din's Fire\".\nUsing blue fire arrows to break floor in King Dodongo's "
|
"\"Stop Link the Goron with Din's Fire\".\nUsing blue fire arrows to break floor in King Dodongo's "
|
||||||
"chamber also requires \"Dodongo\'s Cavern Smash the Boss Lobby Floor\".");
|
"chamber also requires \"Dodongo\'s Cavern Smash the Boss Lobby Floor\".");
|
||||||
|
OPT_TRICK(RT_OPEN_UNDERWATER_CHEST, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE, Tricks::Tag::GLITCH },
|
||||||
|
"Open Underwater Chests",
|
||||||
|
"Underwater chests can be opened by wearing iron boots and hookshotting the chest.");
|
||||||
OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE },
|
||||||
"Adult Kokiri Forest GS with Hover Boots",
|
"Adult Kokiri Forest GS with Hover Boots",
|
||||||
"Can be obtained without Hookshot by using the Hover Boots off of one of the roots.");
|
"Can be obtained without Hookshot by using the Hover Boots off of one of the roots.");
|
||||||
|
@ -412,7 +415,8 @@ void Settings::CreateOptions() {
|
||||||
"Hover Boots, or Bean.");
|
"Hover Boots, or Bean.");
|
||||||
OPT_TRICK(RT_LW_MIDO_BACKFLIP, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_LW_MIDO_BACKFLIP, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::NOVICE },
|
||||||
"Backflip over Mido as Adult", "With a specific position and angle, you can backflip over Mido.");
|
"Backflip over Mido as Adult", "With a specific position and angle, you can backflip over Mido.");
|
||||||
OPT_TRICK(RT_LOST_WOOD_NAVI_DIVE, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::NOVICE }, "Lost Woods Navi dive",
|
OPT_TRICK(RT_LOST_WOOD_NAVI_DIVE, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::NOVICE, Tricks::Tag::GLITCH },
|
||||||
|
"Lost Woods Navi dive",
|
||||||
"You need Deku Sticks or Kokiri Sword to dive with Navi for entering Zora's River.");
|
"You need Deku Sticks or Kokiri Sword to dive with Navi for entering Zora's River.");
|
||||||
OPT_TRICK(RT_LW_GS_BEAN, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::INTERMEDIATE },
|
OPT_TRICK(RT_LW_GS_BEAN, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::INTERMEDIATE },
|
||||||
"Lost Woods Adult GS without Bean",
|
"Lost Woods Adult GS without Bean",
|
||||||
|
@ -422,6 +426,9 @@ void Settings::CreateOptions() {
|
||||||
"Hyrule Castle Storms Grotto GS with Just Boomerang",
|
"Hyrule Castle Storms Grotto GS with Just Boomerang",
|
||||||
"With precise throws, the Boomerang alone can kill the Skulltula and collect the token, without first "
|
"With precise throws, the Boomerang alone can kill the Skulltula and collect the token, without first "
|
||||||
"needing to blow up the wall.");
|
"needing to blow up the wall.");
|
||||||
|
OPT_TRICK(RT_HF_BIG_POE_WITHOUT_EPONA, RCQUEST_BOTH, RA_HYRULE_FIELD, { Tricks::Tag::NOVICE },
|
||||||
|
"Big Poe without Epona",
|
||||||
|
"Big Poes have a chance of appearing without Epona, you can shoot them quickly with only bow.");
|
||||||
OPT_TRICK(RT_KAK_MAN_ON_ROOF, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_KAK_MAN_ON_ROOF, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::NOVICE },
|
||||||
"Man on Roof without Hookshot",
|
"Man on Roof without Hookshot",
|
||||||
"Can be reached by side-hopping off the watchtower as either age, or by jumping onto the potion shop's "
|
"Can be reached by side-hopping off the watchtower as either age, or by jumping onto the potion shop's "
|
||||||
|
@ -554,7 +561,7 @@ void Settings::CreateOptions() {
|
||||||
"A precise jump slash can kill the Skulltula and recoil back onto the top of the frozen waterfall. To "
|
"A precise jump slash can kill the Skulltula and recoil back onto the top of the frozen waterfall. To "
|
||||||
"kill it, the logic normally guarantees one of Hookshot, Bow, or Magic.");
|
"kill it, the logic normally guarantees one of Hookshot, Bow, or Magic.");
|
||||||
OPT_TRICK(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES, RCQUEST_BOTH, RA_ZORAS_FOUNTAIN, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES, RCQUEST_BOTH, RA_ZORAS_FOUNTAIN, { Tricks::Tag::NOVICE },
|
||||||
"Zora\'s Fountain Great Fairy Without Explosives",
|
"Zora\'s Fountain Great Fairy without Explosives",
|
||||||
"It's possible to use silver gauntlets to pick up the silver rock and hammer to break the rock below it, "
|
"It's possible to use silver gauntlets to pick up the silver rock and hammer to break the rock below it, "
|
||||||
"allowing you to ledge grab the edge of the hole and get past the breakable wall (hammer can't break the "
|
"allowing you to ledge grab the edge of the hole and get past the breakable wall (hammer can't break the "
|
||||||
"wall itself).");
|
"wall itself).");
|
||||||
|
@ -639,8 +646,8 @@ void Settings::CreateOptions() {
|
||||||
"Dodongo\'s Cavern Vines GS from Below with Longshot",
|
"Dodongo\'s Cavern Vines GS from Below with Longshot",
|
||||||
"The vines upon which this Skulltula rests are one-sided collision. You can use the Longshot to get it "
|
"The vines upon which this Skulltula rests are one-sided collision. You can use the Longshot to get it "
|
||||||
"from below, by shooting it through the vines, bypassing the need to lower the staircase.");
|
"from below, by shooting it through the vines, bypassing the need to lower the staircase.");
|
||||||
OPT_TRICK(RT_DC_STAIRCASE, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_DC_STAIRS_WITH_BOW, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE },
|
||||||
"Dodongo\'s Cavern Staircase with Bow",
|
"Dodongo\'s Cavern Stairs with Bow",
|
||||||
"The Bow can be used to knock down the stairs with two well-timed shots.");
|
"The Bow can be used to knock down the stairs with two well-timed shots.");
|
||||||
OPT_TRICK(RT_DC_SLINGSHOT_SKIP, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::EXPERT },
|
OPT_TRICK(RT_DC_SLINGSHOT_SKIP, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::EXPERT },
|
||||||
"Dodongo\'s Cavern Child Slingshot Skips",
|
"Dodongo\'s Cavern Child Slingshot Skips",
|
||||||
|
@ -659,6 +666,12 @@ void Settings::CreateOptions() {
|
||||||
"The bombable floor before King Dodongo can be destroyed with Hammer if hit in the very center. This is "
|
"The bombable floor before King Dodongo can be destroyed with Hammer if hit in the very center. This is "
|
||||||
"only relevant with Shuffle Boss Entrances or if Dodongo's Cavern is MQ and either variant of "
|
"only relevant with Shuffle Boss Entrances or if Dodongo's Cavern is MQ and either variant of "
|
||||||
"\"Dodongo's Cavern MQ Light the Eyes with Strength\" is on.");
|
"\"Dodongo's Cavern MQ Light the Eyes with Strength\" is on.");
|
||||||
|
OPT_TRICK(RT_DC_DODONGO_CHU, RCQUEST_BOTH, RA_DODONGOS_CAVERN, { Tricks::Tag::ADVANCED },
|
||||||
|
"Dodongo\'s Cavern Dodongo without Bombchus",
|
||||||
|
"With precise timing you can feed King Dodongo a bombchu during a backflip");
|
||||||
|
OPT_TRICK(RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH, RCQUEST_MQ, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE },
|
||||||
|
"Dodongo\'s Cavern MQ Stairs With Only Strength",
|
||||||
|
"Taking a bomb from the back can be used to lower stairs without using stick to drop bomb from wall.");
|
||||||
OPT_TRICK(RT_DC_MQ_CHILD_BOMBS, RCQUEST_MQ, RA_DODONGOS_CAVERN, { Tricks::Tag::ADVANCED },
|
OPT_TRICK(RT_DC_MQ_CHILD_BOMBS, RCQUEST_MQ, RA_DODONGOS_CAVERN, { Tricks::Tag::ADVANCED },
|
||||||
"Dodongo\'s Cavern MQ Early Bomb Bag Area as Child",
|
"Dodongo\'s Cavern MQ Early Bomb Bag Area as Child",
|
||||||
"With a precise jump slash from above, you can reach the Bomb Bag area as only child without needing a "
|
"With a precise jump slash from above, you can reach the Bomb Bag area as only child without needing a "
|
||||||
|
@ -709,8 +722,8 @@ void Settings::CreateOptions() {
|
||||||
OPT_TRICK(RT_LENS_BOTW, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_LENS_BOTW, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
|
||||||
"Bottom of the Well without Lens of Truth",
|
"Bottom of the Well without Lens of Truth",
|
||||||
"Removes the requirements for the Lens of Truth in Bottom of the Well.");
|
"Removes the requirements for the Lens of Truth in Bottom of the Well.");
|
||||||
OPT_TRICK(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL,
|
||||||
"Bottom of the Well Navi dive",
|
{ Tricks::Tag::NOVICE, Tricks::Tag::GLITCH }, "Bottom of the Well Navi dive",
|
||||||
"You need Deku Sticks or Kokiri Sword to dive with Navi for entering Bottom of the Well.");
|
"You need Deku Sticks or Kokiri Sword to dive with Navi for entering Bottom of the Well.");
|
||||||
OPT_TRICK(RT_BOTW_CHILD_DEADHAND, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_BOTW_CHILD_DEADHAND, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
|
||||||
"Child Dead Hand without Kokiri Sword", "Requires 9 sticks or 5 jump slashes.");
|
"Child Dead Hand without Kokiri Sword", "Requires 9 sticks or 5 jump slashes.");
|
||||||
|
@ -937,6 +950,8 @@ void Settings::CreateOptions() {
|
||||||
"Water Temple MQ North Basement GS without Small Key",
|
"Water Temple MQ North Basement GS without Small Key",
|
||||||
"There is an invisible Hookshot target that can be used to get over the gate that blocks you from going to "
|
"There is an invisible Hookshot target that can be used to get over the gate that blocks you from going to "
|
||||||
"this Skulltula early, skipping a small key as well as needing Hovers or Scarecrow to reach the locked door.");
|
"this Skulltula early, skipping a small key as well as needing Hovers or Scarecrow to reach the locked door.");
|
||||||
|
OPT_TRICK(RT_WATER_MORPHA_WITHOUT_HOOKSHOT, RCQUEST_BOTH, RA_WATER_TEMPLE, { Tricks::Tag::EXTREME },
|
||||||
|
"Water Temple Morpha without Hookshot", "It is possible to slash at Morpha without hookshot.");
|
||||||
OPT_TRICK(RT_LENS_SHADOW, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_LENS_SHADOW, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE },
|
||||||
"Shadow Temple Stationary Objects without Lens of Truth",
|
"Shadow Temple Stationary Objects without Lens of Truth",
|
||||||
"Removes the requirements for the Lens of Truth in Shadow Temple for most areas in the dungeon except "
|
"Removes the requirements for the Lens of Truth in Shadow Temple for most areas in the dungeon except "
|
||||||
|
@ -1099,7 +1114,7 @@ void Settings::CreateOptions() {
|
||||||
"Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot",
|
"Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot",
|
||||||
"The highest Silver Rupee can be obtained by hookshooting the target and then immediately jump slashing "
|
"The highest Silver Rupee can be obtained by hookshooting the target and then immediately jump slashing "
|
||||||
"toward the Rupee.");
|
"toward the Rupee.");
|
||||||
OPT_TRICK(RT_GTG_MQ_WIHTOUT_HOOKSHOT, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::INTERMEDIATE },
|
OPT_TRICK(RT_GTG_MQ_WITHOUT_HOOKSHOT, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::INTERMEDIATE },
|
||||||
"Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot",
|
"Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot",
|
||||||
"After collecting the rest of the Silver Rupees in the room, you can reach the final Silver Rupee on the "
|
"After collecting the rest of the Silver Rupees in the room, you can reach the final Silver Rupee on the "
|
||||||
"ceiling by being pulled up into it after getting grabbed by the Wallmaster. The Wallmaster will not "
|
"ceiling by being pulled up into it after getting grabbed by the Wallmaster. The Wallmaster will not "
|
||||||
|
|
|
@ -607,15 +607,16 @@ std::string Extractor::Mkdtemp() {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int zapd_main(int argc, char** argv);
|
extern "C" int zapd_main(int argc, char** argv);
|
||||||
|
static void MessageboxWorker();
|
||||||
|
|
||||||
bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
||||||
constexpr int argc = 18;
|
constexpr int argc = 22;
|
||||||
char xmlPath[1024];
|
char xmlPath[1024];
|
||||||
char confPath[1024];
|
char confPath[1024];
|
||||||
char portVersion[18]; // 5 digits for int16_max (x3) + separators + terminator
|
char portVersion[18]; // 5 digits for int16_max (x3) + separators + terminator
|
||||||
std::array<const char*, argc> argv;
|
std::array<const char*, argc> argv;
|
||||||
const char* version = GetZapdVerStr();
|
const char* version = GetZapdVerStr();
|
||||||
const char* otrFile = IsMasterQuest() ? "oot-mq.otr" : "oot.otr";
|
const char* otrFile = IsMasterQuest() ? "oot-mq.o2r" : "oot.o2r";
|
||||||
|
|
||||||
std::string romPath = std::filesystem::absolute(mCurrentRomPath).string();
|
std::string romPath = std::filesystem::absolute(mCurrentRomPath).string();
|
||||||
installPath = std::filesystem::absolute(installPath).string();
|
installPath = std::filesystem::absolute(installPath).string();
|
||||||
|
@ -632,8 +633,8 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
||||||
|
|
||||||
std::filesystem::current_path(tempdir);
|
std::filesystem::current_path(tempdir);
|
||||||
|
|
||||||
snprintf(xmlPath, 1024, "assets/extractor/xmls/%s", version);
|
snprintf(xmlPath, 1024, "assets/xml/%s", version);
|
||||||
snprintf(confPath, 1024, "assets/extractor/Config_%s.xml", version);
|
snprintf(confPath, 1024, "assets/Config_%s.xml", version);
|
||||||
snprintf(portVersion, 18, "%d.%d.%d", gBuildVersionMajor, gBuildVersionMinor, gBuildVersionPatch);
|
snprintf(portVersion, 18, "%d.%d.%d", gBuildVersionMajor, gBuildVersionMinor, gBuildVersionPatch);
|
||||||
|
|
||||||
argv[0] = "ZAPD";
|
argv[0] = "ZAPD";
|
||||||
|
@ -643,9 +644,9 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
||||||
argv[4] = "-b";
|
argv[4] = "-b";
|
||||||
argv[5] = romPath.c_str();
|
argv[5] = romPath.c_str();
|
||||||
argv[6] = "-fl";
|
argv[6] = "-fl";
|
||||||
argv[7] = "assets/extractor/filelists";
|
argv[7] = "assets/filelists";
|
||||||
argv[8] = "-gsf";
|
argv[8] = "-gsf";
|
||||||
argv[9] = "1";
|
argv[9] = "0";
|
||||||
argv[10] = "-rconf";
|
argv[10] = "-rconf";
|
||||||
argv[11] = confPath;
|
argv[11] = confPath;
|
||||||
argv[12] = "-se";
|
argv[12] = "-se";
|
||||||
|
@ -654,6 +655,10 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
||||||
argv[15] = otrFile;
|
argv[15] = otrFile;
|
||||||
argv[16] = "--portVer";
|
argv[16] = "--portVer";
|
||||||
argv[17] = portVersion;
|
argv[17] = portVersion;
|
||||||
|
argv[18] = "-o";
|
||||||
|
argv[19] = "placeholder";
|
||||||
|
argv[20] = "-osf";
|
||||||
|
argv[21] = "placeholder";
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Grab a handle to the command window.
|
// Grab a handle to the command window.
|
||||||
|
@ -665,10 +670,8 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
||||||
SetWindowPos(cmdWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
SetWindowPos(cmdWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
||||||
#else
|
#else
|
||||||
// Show extraction in background message until linux/mac can have visual progress
|
// Show extraction in background message until linux/mac can have visual progress
|
||||||
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Extracting",
|
std::thread mbThread(MessageboxWorker);
|
||||||
"Extraction will now begin in the background.\n\nPlease be patient for the process to "
|
mbThread.detach();
|
||||||
"finish. Do not close the main program.",
|
|
||||||
nullptr);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
zapd_main(argc, (char**)argv.data());
|
zapd_main(argc, (char**)argv.data());
|
||||||
|
@ -684,5 +687,12 @@ bool Extractor::CallZapd(std::string installPath, std::string exportdir) {
|
||||||
std::filesystem::current_path(curdir);
|
std::filesystem::current_path(curdir);
|
||||||
std::filesystem::remove_all(tempdir);
|
std::filesystem::remove_all(tempdir);
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MessageboxWorker() {
|
||||||
|
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Extracting",
|
||||||
|
"Extraction will now begin in the background.\n\nPlease be patient for the process to "
|
||||||
|
"finish. Do not close the main program.",
|
||||||
|
nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,16 +261,22 @@ const char* constCameraStrings[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
OTRGlobals::OTRGlobals() {
|
OTRGlobals::OTRGlobals() {
|
||||||
|
context = Ship::Context::CreateUninitializedInstance("Ship of Harkinian", appShortName, "shipofharkinian.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
void OTRGlobals::Initialize() {
|
||||||
std::vector<std::string> OTRFiles;
|
std::vector<std::string> OTRFiles;
|
||||||
std::string mqPath = Ship::Context::LocateFileAcrossAppDirs("oot-mq.otr", appShortName);
|
std::string mqPath = Ship::Context::LocateFileAcrossAppDirs("oot-mq.o2r", appShortName);
|
||||||
if (std::filesystem::exists(mqPath)) {
|
if (std::filesystem::exists(mqPath)) {
|
||||||
OTRFiles.push_back(mqPath);
|
OTRFiles.push_back(mqPath);
|
||||||
}
|
}
|
||||||
std::string ootPath = Ship::Context::LocateFileAcrossAppDirs("oot.otr", appShortName);
|
std::string ootPath = Ship::Context::LocateFileAcrossAppDirs("oot.o2r", appShortName);
|
||||||
if (std::filesystem::exists(ootPath)) {
|
if (std::filesystem::exists(ootPath)) {
|
||||||
OTRFiles.push_back(ootPath);
|
OTRFiles.push_back(ootPath);
|
||||||
}
|
}
|
||||||
std::string sohOtrPath = Ship::Context::LocateFileAcrossAppDirs("soh.otr");
|
|
||||||
|
std::string sohOtrPath = Ship::Context::LocateFileAcrossAppDirs("soh.o2r");
|
||||||
|
|
||||||
if (std::filesystem::exists(sohOtrPath)) {
|
if (std::filesystem::exists(sohOtrPath)) {
|
||||||
OTRFiles.push_back(sohOtrPath);
|
OTRFiles.push_back(sohOtrPath);
|
||||||
}
|
}
|
||||||
|
@ -300,8 +306,6 @@ OTRGlobals::OTRGlobals() {
|
||||||
OOT_NTSC_JP_GC, OOT_NTSC_US_GC, OOT_PAL_GC, OOT_PAL_GC_DBG1, OOT_PAL_GC_DBG2,
|
OOT_NTSC_JP_GC, OOT_NTSC_US_GC, OOT_PAL_GC, OOT_PAL_GC_DBG1, OOT_PAL_GC_DBG2,
|
||||||
};
|
};
|
||||||
|
|
||||||
context = Ship::Context::CreateUninitializedInstance("Ship of Harkinian", appShortName, "shipofharkinian.json");
|
|
||||||
|
|
||||||
context->InitLogging();
|
context->InitLogging();
|
||||||
context->InitGfxDebugger();
|
context->InitGfxDebugger();
|
||||||
context->InitConfiguration();
|
context->InitConfiguration();
|
||||||
|
@ -942,7 +946,7 @@ OTRVersion ReadPortVersionFromOTR(std::string otrPath) {
|
||||||
OTRVersion version = {};
|
OTRVersion version = {};
|
||||||
|
|
||||||
// Use a temporary archive instance to load the otr and read the version file
|
// Use a temporary archive instance to load the otr and read the version file
|
||||||
auto archive = std::make_shared<Ship::OtrArchive>(otrPath);
|
auto archive = std::make_shared<Ship::O2rArchive>(otrPath);
|
||||||
if (archive->Open()) {
|
if (archive->Open()) {
|
||||||
auto t = archive->LoadFile("portVersion");
|
auto t = archive->LoadFile("portVersion");
|
||||||
if (t != nullptr && t->IsLoaded) {
|
if (t != nullptr && t->IsLoaded) {
|
||||||
|
@ -960,7 +964,7 @@ OTRVersion ReadPortVersionFromOTR(std::string otrPath) {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that a soh.otr exists and matches the version of soh running
|
// Check that a soh.o2r exists and matches the version of soh running
|
||||||
// Otherwise show a message and exit
|
// Otherwise show a message and exit
|
||||||
void CheckSoHOTRVersion(std::string otrPath) {
|
void CheckSoHOTRVersion(std::string otrPath) {
|
||||||
std::string msg;
|
std::string msg;
|
||||||
|
@ -969,20 +973,20 @@ void CheckSoHOTRVersion(std::string otrPath) {
|
||||||
msg = "\x1b[4;2HPlease re-extract it from the download."
|
msg = "\x1b[4;2HPlease re-extract it from the download."
|
||||||
"\x1b[6;2HPress the Home button to exit...";
|
"\x1b[6;2HPress the Home button to exit...";
|
||||||
#elif defined(__WIIU__)
|
#elif defined(__WIIU__)
|
||||||
msg = "Please extract the soh.otr from the Ship of Harkinian download\nto your folder.\n\nPress and hold the power "
|
msg = "Please extract the soh.o2r from the Ship of Harkinian download\nto your folder.\n\nPress and hold the power "
|
||||||
"button to shutdown...";
|
"button to shutdown...";
|
||||||
#else
|
#else
|
||||||
msg = "Please extract the soh.otr from the Ship of Harkinian download to your folder.\n\nExiting...";
|
msg = "Please extract the soh.o2r from the Ship of Harkinian download to your folder.\n\nExiting...";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!std::filesystem::exists(otrPath)) {
|
if (!std::filesystem::exists(otrPath)) {
|
||||||
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
||||||
Extractor::ShowErrorBox("soh.otr file is missing", msg.c_str());
|
Extractor::ShowErrorBox("soh.o2r file is missing", msg.c_str());
|
||||||
exit(1);
|
exit(1);
|
||||||
#elif defined(__SWITCH__)
|
#elif defined(__SWITCH__)
|
||||||
Ship::Switch::PrintErrorMessageToScreen(("\x1b[2;2HYou are missing the soh.otr file." + msg).c_str());
|
Ship::Switch::PrintErrorMessageToScreen(("\x1b[2;2HYou are missing the soh.o2r file." + msg).c_str());
|
||||||
#elif defined(__WIIU__)
|
#elif defined(__WIIU__)
|
||||||
OSFatal(("You are missing the soh.otr file\n\n" + msg).c_str());
|
OSFatal(("You are missing the soh.o2r file\n\n" + msg).c_str());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,12 +995,12 @@ void CheckSoHOTRVersion(std::string otrPath) {
|
||||||
if (otrVersion.major != gBuildVersionMajor || otrVersion.minor != gBuildVersionMinor ||
|
if (otrVersion.major != gBuildVersionMajor || otrVersion.minor != gBuildVersionMinor ||
|
||||||
otrVersion.patch != gBuildVersionPatch) {
|
otrVersion.patch != gBuildVersionPatch) {
|
||||||
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
||||||
Extractor::ShowErrorBox("soh.otr file version does not match", msg.c_str());
|
Extractor::ShowErrorBox("soh.o2r file version does not match", msg.c_str());
|
||||||
exit(1);
|
exit(1);
|
||||||
#elif defined(__SWITCH__)
|
#elif defined(__SWITCH__)
|
||||||
Ship::Switch::PrintErrorMessageToScreen(("\x1b[2;2HYou have an old soh.otr file." + msg).c_str());
|
Ship::Switch::PrintErrorMessageToScreen(("\x1b[2;2HYou have an old soh.o2r file." + msg).c_str());
|
||||||
#elif defined(__WIIU__)
|
#elif defined(__WIIU__)
|
||||||
OSFatal(("You have an old soh.otr file\n\n" + msg).c_str());
|
OSFatal(("You have an old soh.o2r file\n\n" + msg).c_str());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1037,10 +1041,10 @@ void DetectOTRVersion(std::string fileName, bool isMQ) {
|
||||||
|
|
||||||
if (Extractor::ShowYesNoBox("Old OTR File Found", msgBuf) == IDYES) {
|
if (Extractor::ShowYesNoBox("Old OTR File Found", msgBuf) == IDYES) {
|
||||||
std::string installPath = Ship::Context::GetAppBundlePath();
|
std::string installPath = Ship::Context::GetAppBundlePath();
|
||||||
if (!std::filesystem::exists(installPath + "/assets/extractor")) {
|
if (!std::filesystem::exists(installPath + "/assets")) {
|
||||||
Extractor::ShowErrorBox(
|
Extractor::ShowErrorBox(
|
||||||
"Extractor assets not found",
|
"Extractor assets not found",
|
||||||
"Unable to regenerate. Missing assets/extractor folder needed to generate OTR file.\n\nExiting...");
|
"Unable to regenerate. Missing assets/ folder needed to generate OTR file.\n\nExiting...");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1100,7 +1104,7 @@ void CheckAndCreateModFolder() {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void InitOTR() {
|
extern "C" void InitOTR() {
|
||||||
|
OTRGlobals::Instance = new OTRGlobals();
|
||||||
#ifdef __SWITCH__
|
#ifdef __SWITCH__
|
||||||
Ship::Switch::Init(Ship::PreInitPhase);
|
Ship::Switch::Init(Ship::PreInitPhase);
|
||||||
#elif defined(__WIIU__)
|
#elif defined(__WIIU__)
|
||||||
|
@ -1154,18 +1158,18 @@ extern "C" void InitOTR() {
|
||||||
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
||||||
CheckAndCreateModFolder();
|
CheckAndCreateModFolder();
|
||||||
#endif
|
#endif
|
||||||
|
const bool ootO2RExists =
|
||||||
|
std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("oot-mq.o2r", appShortName)) ||
|
||||||
|
std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("oot.o2r", appShortName));
|
||||||
|
|
||||||
CheckSoHOTRVersion(Ship::Context::LocateFileAcrossAppDirs("soh.otr"));
|
if (!ootO2RExists) {
|
||||||
|
|
||||||
if (!std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("oot-mq.otr", appShortName)) &&
|
|
||||||
!std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("oot.otr", appShortName))) {
|
|
||||||
|
|
||||||
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
#if not defined(__SWITCH__) && not defined(__WIIU__)
|
||||||
std::string installPath = Ship::Context::GetAppBundlePath();
|
std::string installPath = Ship::Context::GetAppBundlePath();
|
||||||
if (!std::filesystem::exists(installPath + "/assets/extractor")) {
|
if (!std::filesystem::exists(installPath + "/assets")) {
|
||||||
Extractor::ShowErrorBox(
|
Extractor::ShowErrorBox(
|
||||||
"Extractor assets not found",
|
"Extractor assets not found",
|
||||||
"No OTR files found. Missing assets/extractor folder needed to generate OTR file.\n\nExiting...");
|
"No OTR files found. Missing assets/ folder needed to generate OTR file.\n\nExiting...");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1204,10 +1208,10 @@ extern "C" void InitOTR() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DetectOTRVersion("oot.otr", false);
|
DetectOTRVersion("oot.o2r", false);
|
||||||
DetectOTRVersion("oot-mq.otr", true);
|
DetectOTRVersion("oot-mq.o2r", true);
|
||||||
|
|
||||||
OTRGlobals::Instance = new OTRGlobals();
|
OTRGlobals::Instance->Initialize();
|
||||||
CustomMessageManager::Instance = new CustomMessageManager();
|
CustomMessageManager::Instance = new CustomMessageManager();
|
||||||
ItemTableManager::Instance = new ItemTableManager();
|
ItemTableManager::Instance = new ItemTableManager();
|
||||||
GameInteractor::Instance = new GameInteractor();
|
GameInteractor::Instance = new GameInteractor();
|
||||||
|
|
|
@ -71,7 +71,7 @@ class OTRGlobals {
|
||||||
~OTRGlobals();
|
~OTRGlobals();
|
||||||
|
|
||||||
void ScaleImGui();
|
void ScaleImGui();
|
||||||
|
void Initialize();
|
||||||
bool HasMasterQuest();
|
bool HasMasterQuest();
|
||||||
bool HasOriginal();
|
bool HasOriginal();
|
||||||
uint32_t GetInterpolationFPS();
|
uint32_t GetInterpolationFPS();
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#include "soh/resource/importer/AnimationFactory.h"
|
#include "soh/resource/importer/AnimationFactory.h"
|
||||||
#include "soh/resource/type/Animation.h"
|
#include "soh/resource/type/Animation.h"
|
||||||
|
#include "ResourceManager.h"
|
||||||
#include "spdlog/spdlog.h"
|
#include "spdlog/spdlog.h"
|
||||||
|
#include "Context.h"
|
||||||
|
|
||||||
namespace SOH {
|
namespace SOH {
|
||||||
std::shared_ptr<Ship::IResource>
|
std::shared_ptr<Ship::IResource>
|
||||||
|
@ -80,7 +82,11 @@ ResourceFactoryBinaryAnimationV0::ReadResource(std::shared_ptr<Ship::File> file,
|
||||||
animation->animationData.linkAnimationHeader.common.frameCount = reader->ReadInt16();
|
animation->animationData.linkAnimationHeader.common.frameCount = reader->ReadInt16();
|
||||||
|
|
||||||
// Read the segment pointer (always 32 bit, doesn't adjust for system pointer size)
|
// Read the segment pointer (always 32 bit, doesn't adjust for system pointer size)
|
||||||
animation->animationData.linkAnimationHeader.segment = (void*)reader->ReadUInt32();
|
std::string path = reader->ReadString();
|
||||||
|
const auto animData = std::static_pointer_cast<Animation>(
|
||||||
|
Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(path.c_str()));
|
||||||
|
|
||||||
|
animation->animationData.linkAnimationHeader.segment = animData->GetPointer();
|
||||||
} else if (animType == AnimationType::Legacy) {
|
} else if (animType == AnimationType::Legacy) {
|
||||||
SPDLOG_DEBUG("BEYTAH ANIMATION?!");
|
SPDLOG_DEBUG("BEYTAH ANIMATION?!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -894,33 +894,15 @@ void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animati
|
||||||
if (ResourceMgr_OTRSigCheck(animation) != 0)
|
if (ResourceMgr_OTRSigCheck(animation) != 0)
|
||||||
animation = ResourceMgr_LoadAnimByName(animation);
|
animation = ResourceMgr_LoadAnimByName(animation);
|
||||||
|
|
||||||
LinkAnimationHeader* linkAnimHeader = SEGMENTED_TO_VIRTUAL(animation);
|
|
||||||
Vec3s* ram = frameTable;
|
Vec3s* ram = frameTable;
|
||||||
|
|
||||||
osCreateMesgQueue(&entry->data.load.msgQueue, &entry->data.load.msg, 1);
|
s16* animData = animation->segment;
|
||||||
|
// SOH [Port] sometimes a HESS can set a negative frame value from a negative playback speed. When converted to
|
||||||
char animPath[2048];
|
// a signed value this will cause a crash due to copying way much data.
|
||||||
|
if (frame < 0) {
|
||||||
snprintf(animPath, sizeof(animPath), "misc/link_animetion/gPlayerAnimData_%06X",
|
frame = 0;
|
||||||
(((uintptr_t)linkAnimHeader->segment - 0x07000000)));
|
}
|
||||||
|
|
||||||
// printf("Streaming %s, seg = %08X\n", animPath, linkAnimHeader->segment);
|
|
||||||
|
|
||||||
s16* animData = ResourceMgr_LoadPlayerAnimByName(animPath);
|
|
||||||
|
|
||||||
memcpy(ram, (uintptr_t)animData + (((sizeof(Vec3s) * limbCount + 2) * frame)), sizeof(Vec3s) * limbCount + 2);
|
memcpy(ram, (uintptr_t)animData + (((sizeof(Vec3s) * limbCount + 2) * frame)), sizeof(Vec3s) * limbCount + 2);
|
||||||
|
|
||||||
/*u32* ramPtr = (u32*)ram;
|
|
||||||
|
|
||||||
for (int i = 0; i < 1024; i++)
|
|
||||||
{
|
|
||||||
ramPtr[i] = i * 7;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// DmaMgr_SendRequest2(&entry->data.load.req, ram,
|
|
||||||
// LINK_ANIMATION_OFFSET(linkAnimHeader->segment, ((sizeof(Vec3s) * limbCount + 2) * frame)),
|
|
||||||
// sizeof(Vec3s) * limbCount + 2, 0, &entry->data.load.msgQueue, NULL, __FILE__,
|
|
||||||
//__LINE__);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3597,10 +3597,6 @@ void FileChoose_Main(GameState* thisx) {
|
||||||
sWindowContentColors[0][2] = 255;
|
sWindowContentColors[0][2] = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 0) != 0) {
|
|
||||||
gSaveContext.skyboxTime += 0x10;
|
|
||||||
}
|
|
||||||
|
|
||||||
OPEN_DISPS(this->state.gfxCtx);
|
OPEN_DISPS(this->state.gfxCtx);
|
||||||
|
|
||||||
this->n64ddFlag = 0;
|
this->n64ddFlag = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue