mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-22 17:32:19 -05:00
Merge pull request #431 from HarbourMasters/zelda64
Ship of Harkinian 64 bit compilation
This commit is contained in:
commit
d5db4a86bd
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,7 +7,6 @@ __pycache__/
|
||||
.vscode/
|
||||
.vs/
|
||||
.idea/
|
||||
CMakeLists.txt
|
||||
cmake-build-debug
|
||||
venv/
|
||||
|
||||
|
7
Jenkinsfile
vendored
7
Jenkinsfile
vendored
@ -17,7 +17,7 @@ pipeline {
|
||||
MSBUILD='C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Msbuild\\Current\\Bin\\msbuild.exe'
|
||||
CONFIG='Release'
|
||||
OTRPLATFORM='x64'
|
||||
PLATFORM='x86'
|
||||
PLATFORM='x64'
|
||||
ZIP='C:\\Program Files\\7-Zip\\7z.exe'
|
||||
PYTHON='C:\\Users\\jenkins\\AppData\\Local\\Programs\\Python\\Python310\\python.exe'
|
||||
CMAKE='C:\\Program Files\\CMake\\bin\\cmake.exe'
|
||||
@ -57,7 +57,7 @@ pipeline {
|
||||
|
||||
cd "..\\..\\"
|
||||
|
||||
move "soh\\Release\\soh.exe" ".\\"
|
||||
move "soh\\x64\\Release\\soh.exe" ".\\"
|
||||
move "OTRGui\\build\\assets" ".\\"
|
||||
move ".\\OTRExporter\\x64\\Release\\ZAPD.exe" ".\\assets\\extractor\\"
|
||||
move ".\\OTRGui\\build\\Release\\OTRGui.exe" ".\\"
|
||||
@ -106,7 +106,6 @@ pipeline {
|
||||
mv ZAPDTR/ZAPD.out build/assets/extractor/
|
||||
mv README.md build/readme.txt
|
||||
cd build
|
||||
|
||||
7z a soh-linux.7z soh.elf OTRGui assets readme.txt
|
||||
mv soh-linux.7z ../
|
||||
|
||||
@ -124,4 +123,4 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -31,7 +31,7 @@ void OTRExporter_Audio::WriteSampleEntryReference(ZAudio* audio, SampleEntry* en
|
||||
void OTRExporter_Audio::WriteSampleEntry(SampleEntry* entry, BinaryWriter* writer)
|
||||
{
|
||||
WriteHeader(nullptr, "", writer, Ship::ResourceType::AudioSample, Ship::Version::Rachael);
|
||||
|
||||
|
||||
writer->Write(entry->codec);
|
||||
writer->Write(entry->medium);
|
||||
writer->Write(entry->unk_bit26);
|
||||
@ -182,7 +182,7 @@ void OTRExporter_Audio::Save(ZResource* res, const fs::path& outPath, BinaryWrit
|
||||
seqWriter.Write((uint8_t)audio->sequenceTable[i].medium);
|
||||
seqWriter.Write((uint8_t)audio->sequenceTable[i].cachePolicy);
|
||||
seqWriter.Write((uint32_t)audio->fontIndices[i].size());
|
||||
|
||||
|
||||
for (size_t k = 0; k < audio->fontIndices[i].size(); k++)
|
||||
seqWriter.Write((uint8_t)audio->fontIndices[i][k]);
|
||||
|
||||
|
@ -12,7 +12,8 @@ LTO ?= 0
|
||||
WARN := -Wall -Wextra -Werror \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-unused-function \
|
||||
-Wno-unused-variable
|
||||
-Wno-unused-variable \
|
||||
-Wno-error=multichar
|
||||
|
||||
|
||||
CXXFLAGS := $(WARN) -std=c++17
|
||||
|
395
StormLib/CMakeLists.txt
Normal file
395
StormLib/CMakeLists.txt
Normal file
@ -0,0 +1,395 @@
|
||||
project(StormLib)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
set(LIBRARY_NAME storm)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include(CMakeDependentOption)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Compile shared libraries" OFF)
|
||||
option(STORM_SKIP_INSTALL "Skip installing files" OFF)
|
||||
option(STORM_BUILD_TESTS
|
||||
"Compile StormLib test application" OFF
|
||||
# "BUILD_TESTING" OFF # Stay coherent with CTest variables
|
||||
)
|
||||
|
||||
set(SRC_FILES
|
||||
src/adpcm/adpcm.cpp
|
||||
src/huffman/huff.cpp
|
||||
src/jenkins/lookup3.c
|
||||
src/lzma/C/LzFind.c
|
||||
src/lzma/C/LzmaDec.c
|
||||
src/lzma/C/LzmaEnc.c
|
||||
src/pklib/explode.c
|
||||
src/pklib/implode.c
|
||||
src/sparse/sparse.cpp
|
||||
src/FileStream.cpp
|
||||
src/SBaseCommon.cpp
|
||||
src/SBaseDumpData.cpp
|
||||
src/SBaseFileTable.cpp
|
||||
src/SBaseSubTypes.cpp
|
||||
src/SCompression.cpp
|
||||
src/SFileAddFile.cpp
|
||||
src/SFileAttributes.cpp
|
||||
src/SFileCompactArchive.cpp
|
||||
src/SFileCreateArchive.cpp
|
||||
src/SFileExtractFile.cpp
|
||||
src/SFileFindFile.cpp
|
||||
src/SFileGetFileInfo.cpp
|
||||
src/SFileListFile.cpp
|
||||
src/SFileOpenArchive.cpp
|
||||
src/SFileOpenFileEx.cpp
|
||||
src/SFilePatchArchives.cpp
|
||||
src/SFileReadFile.cpp
|
||||
src/SFileVerify.cpp
|
||||
src/libtomcrypt/src/pk/rsa/rsa_verify_simple.c
|
||||
src/libtomcrypt/src/misc/crypt_libc.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
# This file is used to create a DLL on windows
|
||||
# Use BUILD_SHARED_LIBS to create StormLib.dll
|
||||
set(STORM_DEF_FILES
|
||||
src/DllMain.def
|
||||
)
|
||||
endif()
|
||||
|
||||
set(TOMCRYPT_FILES
|
||||
src/libtomcrypt/src/hashes/hash_memory.c
|
||||
src/libtomcrypt/src/hashes/md5.c
|
||||
src/libtomcrypt/src/hashes/sha1.c
|
||||
src/libtomcrypt/src/math/ltm_desc.c
|
||||
src/libtomcrypt/src/math/multi.c
|
||||
src/libtomcrypt/src/math/rand_prime.c
|
||||
src/libtomcrypt/src/misc/base64_decode.c
|
||||
src/libtomcrypt/src/misc/crypt_argchk.c
|
||||
src/libtomcrypt/src/misc/crypt_find_hash.c
|
||||
src/libtomcrypt/src/misc/crypt_find_prng.c
|
||||
src/libtomcrypt/src/misc/crypt_hash_descriptor.c
|
||||
src/libtomcrypt/src/misc/crypt_hash_is_valid.c
|
||||
src/libtomcrypt/src/misc/crypt_ltc_mp_descriptor.c
|
||||
src/libtomcrypt/src/misc/crypt_prng_descriptor.c
|
||||
src/libtomcrypt/src/misc/crypt_prng_is_valid.c
|
||||
src/libtomcrypt/src/misc/crypt_register_hash.c
|
||||
src/libtomcrypt/src/misc/crypt_register_prng.c
|
||||
src/libtomcrypt/src/misc/zeromem.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_bit_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_boolean.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_choice.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_ia5_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_integer.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_object_identifier.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_octet_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_printable_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_sequence_ex.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_sequence_flexi.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_sequence_multi.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_short_integer.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_utctime.c
|
||||
src/libtomcrypt/src/pk/asn1/der_decode_utf8_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_bit_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_boolean.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_ia5_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_integer.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_object_identifier.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_octet_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_printable_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_sequence_ex.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_sequence_multi.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_set.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_setof.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_short_integer.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_utctime.c
|
||||
src/libtomcrypt/src/pk/asn1/der_encode_utf8_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_bit_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_boolean.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_ia5_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_integer.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_object_identifier.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_octet_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_printable_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_sequence.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_utctime.c
|
||||
src/libtomcrypt/src/pk/asn1/der_sequence_free.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_utf8_string.c
|
||||
src/libtomcrypt/src/pk/asn1/der_length_short_integer.c
|
||||
src/libtomcrypt/src/pk/ecc/ltc_ecc_map.c
|
||||
src/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c
|
||||
src/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c
|
||||
src/libtomcrypt/src/pk/ecc/ltc_ecc_points.c
|
||||
src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c
|
||||
src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c
|
||||
src/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c
|
||||
src/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c
|
||||
src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c
|
||||
src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c
|
||||
src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c
|
||||
src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c
|
||||
src/libtomcrypt/src/pk/rsa/rsa_exptmod.c
|
||||
src/libtomcrypt/src/pk/rsa/rsa_free.c
|
||||
src/libtomcrypt/src/pk/rsa/rsa_import.c
|
||||
src/libtomcrypt/src/pk/rsa/rsa_make_key.c
|
||||
src/libtomcrypt/src/pk/rsa/rsa_sign_hash.c
|
||||
src/libtomcrypt/src/pk/rsa/rsa_verify_hash.c
|
||||
)
|
||||
|
||||
set(TOMMATH_FILES
|
||||
src/libtommath/bncore.c
|
||||
src/libtommath/bn_fast_mp_invmod.c
|
||||
src/libtommath/bn_fast_mp_montgomery_reduce.c
|
||||
src/libtommath/bn_fast_s_mp_mul_digs.c
|
||||
src/libtommath/bn_fast_s_mp_mul_high_digs.c
|
||||
src/libtommath/bn_fast_s_mp_sqr.c
|
||||
src/libtommath/bn_mp_2expt.c
|
||||
src/libtommath/bn_mp_abs.c
|
||||
src/libtommath/bn_mp_add.c
|
||||
src/libtommath/bn_mp_addmod.c
|
||||
src/libtommath/bn_mp_add_d.c
|
||||
src/libtommath/bn_mp_and.c
|
||||
src/libtommath/bn_mp_clamp.c
|
||||
src/libtommath/bn_mp_clear.c
|
||||
src/libtommath/bn_mp_clear_multi.c
|
||||
src/libtommath/bn_mp_cmp.c
|
||||
src/libtommath/bn_mp_cmp_d.c
|
||||
src/libtommath/bn_mp_cmp_mag.c
|
||||
src/libtommath/bn_mp_cnt_lsb.c
|
||||
src/libtommath/bn_mp_copy.c
|
||||
src/libtommath/bn_mp_count_bits.c
|
||||
src/libtommath/bn_mp_div.c
|
||||
src/libtommath/bn_mp_div_2.c
|
||||
src/libtommath/bn_mp_div_2d.c
|
||||
src/libtommath/bn_mp_div_3.c
|
||||
src/libtommath/bn_mp_div_d.c
|
||||
src/libtommath/bn_mp_dr_is_modulus.c
|
||||
src/libtommath/bn_mp_dr_reduce.c
|
||||
src/libtommath/bn_mp_dr_setup.c
|
||||
src/libtommath/bn_mp_exch.c
|
||||
src/libtommath/bn_mp_exptmod.c
|
||||
src/libtommath/bn_mp_exptmod_fast.c
|
||||
src/libtommath/bn_mp_expt_d.c
|
||||
src/libtommath/bn_mp_exteuclid.c
|
||||
src/libtommath/bn_mp_fread.c
|
||||
src/libtommath/bn_mp_fwrite.c
|
||||
src/libtommath/bn_mp_gcd.c
|
||||
src/libtommath/bn_mp_get_int.c
|
||||
src/libtommath/bn_mp_grow.c
|
||||
src/libtommath/bn_mp_init.c
|
||||
src/libtommath/bn_mp_init_copy.c
|
||||
src/libtommath/bn_mp_init_multi.c
|
||||
src/libtommath/bn_mp_init_set.c
|
||||
src/libtommath/bn_mp_init_set_int.c
|
||||
src/libtommath/bn_mp_init_size.c
|
||||
src/libtommath/bn_mp_invmod.c
|
||||
src/libtommath/bn_mp_invmod_slow.c
|
||||
src/libtommath/bn_mp_is_square.c
|
||||
src/libtommath/bn_mp_jacobi.c
|
||||
src/libtommath/bn_mp_karatsuba_mul.c
|
||||
src/libtommath/bn_mp_karatsuba_sqr.c
|
||||
src/libtommath/bn_mp_lcm.c
|
||||
src/libtommath/bn_mp_lshd.c
|
||||
src/libtommath/bn_mp_mod.c
|
||||
src/libtommath/bn_mp_mod_2d.c
|
||||
src/libtommath/bn_mp_mod_d.c
|
||||
src/libtommath/bn_mp_montgomery_calc_normalization.c
|
||||
src/libtommath/bn_mp_montgomery_reduce.c
|
||||
src/libtommath/bn_mp_montgomery_setup.c
|
||||
src/libtommath/bn_mp_mul.c
|
||||
src/libtommath/bn_mp_mulmod.c
|
||||
src/libtommath/bn_mp_mul_2.c
|
||||
src/libtommath/bn_mp_mul_2d.c
|
||||
src/libtommath/bn_mp_mul_d.c
|
||||
src/libtommath/bn_mp_neg.c
|
||||
src/libtommath/bn_mp_n_root.c
|
||||
src/libtommath/bn_mp_or.c
|
||||
src/libtommath/bn_mp_prime_fermat.c
|
||||
src/libtommath/bn_mp_prime_is_divisible.c
|
||||
src/libtommath/bn_mp_prime_is_prime.c
|
||||
src/libtommath/bn_mp_prime_miller_rabin.c
|
||||
src/libtommath/bn_mp_prime_next_prime.c
|
||||
src/libtommath/bn_mp_prime_rabin_miller_trials.c
|
||||
src/libtommath/bn_mp_prime_random_ex.c
|
||||
src/libtommath/bn_mp_radix_size.c
|
||||
src/libtommath/bn_mp_radix_smap.c
|
||||
src/libtommath/bn_mp_rand.c
|
||||
src/libtommath/bn_mp_read_radix.c
|
||||
src/libtommath/bn_mp_read_signed_bin.c
|
||||
src/libtommath/bn_mp_read_unsigned_bin.c
|
||||
src/libtommath/bn_mp_reduce.c
|
||||
src/libtommath/bn_mp_reduce_2k.c
|
||||
src/libtommath/bn_mp_reduce_2k_l.c
|
||||
src/libtommath/bn_mp_reduce_2k_setup.c
|
||||
src/libtommath/bn_mp_reduce_2k_setup_l.c
|
||||
src/libtommath/bn_mp_reduce_is_2k.c
|
||||
src/libtommath/bn_mp_reduce_is_2k_l.c
|
||||
src/libtommath/bn_mp_reduce_setup.c
|
||||
src/libtommath/bn_mp_rshd.c
|
||||
src/libtommath/bn_mp_set.c
|
||||
src/libtommath/bn_mp_set_int.c
|
||||
src/libtommath/bn_mp_shrink.c
|
||||
src/libtommath/bn_mp_signed_bin_size.c
|
||||
src/libtommath/bn_mp_sqr.c
|
||||
src/libtommath/bn_mp_sqrmod.c
|
||||
src/libtommath/bn_mp_sqrt.c
|
||||
src/libtommath/bn_mp_sub.c
|
||||
src/libtommath/bn_mp_submod.c
|
||||
src/libtommath/bn_mp_sub_d.c
|
||||
src/libtommath/bn_mp_toom_mul.c
|
||||
src/libtommath/bn_mp_toom_sqr.c
|
||||
src/libtommath/bn_mp_toradix.c
|
||||
src/libtommath/bn_mp_toradix_n.c
|
||||
src/libtommath/bn_mp_to_signed_bin.c
|
||||
src/libtommath/bn_mp_to_signed_bin_n.c
|
||||
src/libtommath/bn_mp_to_unsigned_bin.c
|
||||
src/libtommath/bn_mp_to_unsigned_bin_n.c
|
||||
src/libtommath/bn_mp_unsigned_bin_size.c
|
||||
src/libtommath/bn_mp_xor.c
|
||||
src/libtommath/bn_mp_zero.c
|
||||
src/libtommath/bn_prime_tab.c
|
||||
src/libtommath/bn_reverse.c
|
||||
src/libtommath/bn_s_mp_add.c
|
||||
src/libtommath/bn_s_mp_exptmod.c
|
||||
src/libtommath/bn_s_mp_mul_digs.c
|
||||
src/libtommath/bn_s_mp_mul_high_digs.c
|
||||
src/libtommath/bn_s_mp_sqr.c
|
||||
src/libtommath/bn_s_mp_sub.c
|
||||
)
|
||||
|
||||
set(BZIP2_FILES
|
||||
src/bzip2/blocksort.c
|
||||
src/bzip2/bzlib.c
|
||||
src/bzip2/compress.c
|
||||
src/bzip2/crctable.c
|
||||
src/bzip2/decompress.c
|
||||
src/bzip2/huffman.c
|
||||
src/bzip2/randtable.c
|
||||
)
|
||||
|
||||
set(ZLIB_FILES
|
||||
src/zlib/adler32.c
|
||||
src/zlib/compress.c
|
||||
src/zlib/crc32.c
|
||||
src/zlib/deflate.c
|
||||
src/zlib/inffast.c
|
||||
src/zlib/inflate.c
|
||||
src/zlib/inftrees.c
|
||||
src/zlib/trees.c
|
||||
src/zlib/zutil.c
|
||||
)
|
||||
|
||||
set(TEST_SRC_FILES
|
||||
test/StormTest.cpp
|
||||
)
|
||||
|
||||
add_definitions(-D_7ZIP_ST -DBZ_STRICT_ANSI)
|
||||
set(LINK_LIBS)
|
||||
|
||||
find_package(ZLIB)
|
||||
if (ZLIB_FOUND)
|
||||
set(LINK_LIBS ${LINK_LIBS} ZLIB::ZLIB)
|
||||
add_definitions(-D__SYS_ZLIB)
|
||||
else()
|
||||
set(SRC_FILES ${SRC_FILES} ${ZLIB_FILES})
|
||||
endif()
|
||||
|
||||
find_package(BZip2)
|
||||
if (BZIP2_FOUND)
|
||||
set(LINK_LIBS ${LINK_LIBS} BZip2::BZip2)
|
||||
add_definitions(-D__SYS_BZLIB)
|
||||
else()
|
||||
set(SRC_FILES ${SRC_FILES} ${BZIP2_FILES})
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
set(SRC_ADDITIONAL_FILES ${TOMCRYPT_FILES} ${TOMMATH_FILES})
|
||||
set(LINK_LIBS ${LINK_LIBS} wininet)
|
||||
else()
|
||||
option(WITH_LIBTOMCRYPT "Use system LibTomCrypt library" OFF)
|
||||
if(WITH_LIBTOMCRYPT)
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(PC_LIBTOMCRYPT libtomcrypt REQUIRED)
|
||||
find_path(LIBTOMCRYPT_INCLUDE_DIR NAMES tomcrypt.h HINTS ${PC_LIBTOMCRYPT_INCLUDE_DIRS} REQUIRED)
|
||||
find_library(LIBTOMCRYPT_LIBRARY NAMES tomcrypt HINTS ${PC_LIBTOMCRYPT_LIBRARY_DIRS} REQUIRED)
|
||||
set(LINK_LIBS ${LINK_LIBS} ${LIBTOMCRYPT_LIBRARY})
|
||||
include_directories(${LIBTOMCRYPT_INCLUDE_DIR})
|
||||
else()
|
||||
set(SRC_ADDITIONAL_FILES ${TOMCRYPT_FILES} ${TOMMATH_FILES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
|
||||
message(STATUS "Using FreeBSD port")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DO_LARGEFILE=0 -Dstat64=stat -Dlstat64=lstat -Dlseek64=lseek -Doff64_t=off_t -Dfstat64=fstat -Dftruncate64=ftruncate")
|
||||
endif()
|
||||
|
||||
add_library(${LIBRARY_NAME} ${LIB_TYPE} ${SRC_FILES} ${SRC_ADDITIONAL_FILES} ${STORM_DEF_FILES})
|
||||
if(WIN32)
|
||||
set_target_properties(${LIBRARY_NAME} PROPERTIES OUTPUT_NAME "StormLib")
|
||||
endif()
|
||||
|
||||
target_link_libraries(${LIBRARY_NAME} ${LINK_LIBS})
|
||||
target_compile_definitions(${LIBRARY_NAME} INTERFACE STORMLIB_NO_AUTO_LINK) #CMake will take care of the linking
|
||||
target_include_directories(${LIBRARY_NAME} PUBLIC src/)
|
||||
set_target_properties(${LIBRARY_NAME} PROPERTIES PUBLIC_HEADER "src/StormLib.h;src/StormPort.h")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
message(STATUS "Linking against dependent libraries dynamically")
|
||||
|
||||
if(APPLE)
|
||||
set_target_properties(${LIBRARY_NAME} PROPERTIES FRAMEWORK true)
|
||||
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS "-framework Carbon")
|
||||
endif()
|
||||
if(UNIX)
|
||||
SET(VERSION_MAJOR "9")
|
||||
SET(VERSION_MINOR "22")
|
||||
SET(VERSION_PATCH "0")
|
||||
SET(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
||||
set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION "${VERSION_STRING}")
|
||||
set_target_properties(${LIBRARY_NAME} PROPERTIES SOVERSION "${VERSION_MAJOR}")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Linking against dependent libraries statically")
|
||||
endif()
|
||||
|
||||
if (NOT STORM_SKIP_INSTALL)
|
||||
install(TARGETS ${LIBRARY_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib
|
||||
FRAMEWORK DESTINATION /Library/Frameworks
|
||||
PUBLIC_HEADER DESTINATION include
|
||||
INCLUDES DESTINATION include)
|
||||
|
||||
#CPack configurtion
|
||||
SET(CPACK_GENERATOR "DEB" "RPM")
|
||||
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MPQ manipulation library")
|
||||
SET(CPACK_PACKAGE_VENDOR "Ladislav Zezula")
|
||||
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
|
||||
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
|
||||
SET(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}")
|
||||
|
||||
#DEB configuration
|
||||
SET(CPACK_DEBIAN_PACKAGE_SECTION "libs")
|
||||
SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://www.zezula.net/en/mpq/stormlib.html")
|
||||
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "imbacen@gmail.com")
|
||||
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
|
||||
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "zlib1g,bzip2")
|
||||
|
||||
#RPM configuration
|
||||
SET(CPACK_RPM_PACKAGE_RELEASE 1)
|
||||
SET(CPACK_RPM_PACKAGE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
||||
SET(CPACK_RPM_PACKAGE_GROUP "${PROJECT_NAME}")
|
||||
SET(CPACK_RPM_PACKAGE_URL "http://www.zezula.net/en/mpq/stormlib.html")
|
||||
SET(CPACK_RPM_PACKAGE_REQUIRES "zlib,bzip2")
|
||||
|
||||
INCLUDE(CPack)
|
||||
endif()
|
||||
|
||||
if(STORM_BUILD_TESTS)
|
||||
add_executable(StormLib_test ${TEST_SRC_FILES})
|
||||
target_link_libraries(StormLib_test ${LIBRARY_NAME})
|
||||
install(TARGETS StormLib_test RUNTIME DESTINATION bin)
|
||||
endif()
|
@ -959,7 +959,7 @@ ULONGLONG FindFreeMpqSpace(TMPQArchive * ha)
|
||||
|
||||
//static TFileEntry* furthestFile = nullptr;
|
||||
//TFileEntry* startEntry = furthestFile == nullptr ? ha->pFileTable : furthestFile;
|
||||
|
||||
|
||||
TFileEntry* startEntry = (ha->useFreeSpaceOptimization && ha->lastFreeSpaceEntry != nullptr) ? ha->lastFreeSpaceEntry : ha->pFileTable;
|
||||
|
||||
// Parse the entire block table
|
||||
|
@ -45,7 +45,7 @@ endif
|
||||
# CXXFLAGS += -DTEXTURE_DEBUG
|
||||
|
||||
LDFLAGS := -lm -ldl -lpng \
|
||||
-L../external -L../libultraship -lz -lbz2 -pthread -lpulse -lultraship -lstorm -lSDL2 -lGLEW -lGL -lX11
|
||||
-L../StormLib/build -L../libultraship -lz -lbz2 -pthread -lpulse -lultraship -lstorm -lSDL2 -lGLEW -lGL -lX11
|
||||
|
||||
# Use LLD if available. Set LLD=0 to not use it
|
||||
ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0)
|
||||
@ -103,6 +103,7 @@ clean:
|
||||
$(MAKE) -C lib/libgfxd clean
|
||||
$(MAKE) -C ZAPDUtils clean
|
||||
$(MAKE) -C ExporterTest clean
|
||||
rm -rf ../StormLib/build
|
||||
|
||||
rebuild: clean all
|
||||
|
||||
@ -121,6 +122,11 @@ build/%.o: %.cpp
|
||||
lib/libgfxd/libgfxd.a:
|
||||
$(MAKE) -C lib/libgfxd
|
||||
|
||||
.PHONY: StormLib
|
||||
StormLib:
|
||||
LDFLAGS="" cmake -B ../StormLib/build -S ../StormLib
|
||||
LDFLAGS="" cmake --build ../StormLib/build
|
||||
|
||||
.PHONY: ExporterTest
|
||||
ExporterTest:
|
||||
$(MAKE) -C ExporterTest
|
||||
@ -131,5 +137,5 @@ ZAPDUtils:
|
||||
|
||||
|
||||
# Linking
|
||||
ZAPD.out: $(O_FILES) lib/libgfxd/libgfxd.a ExporterTest ZAPDUtils
|
||||
$(CXX) $(CXXFLAGS) $(O_FILES) lib/libgfxd/libgfxd.a ZAPDUtils/ZAPDUtils.a $(EXPORTERS) $(LDFLAGS) $(OUTPUT_OPTION)
|
||||
ZAPD.out: $(O_FILES) lib/libgfxd/libgfxd.a ExporterTest ZAPDUtils StormLib
|
||||
$(CXX) $(CXXFLAGS) $(O_FILES) lib/libgfxd/libgfxd.a ZAPDUtils/ZAPDUtils.a ../StormLib/build/libstorm.a $(EXPORTERS) $(LDFLAGS) $(OUTPUT_OPTION)
|
||||
|
@ -188,7 +188,7 @@ SampleEntry* ZAudio::ParseSampleEntry(std::vector<uint8_t> audioBank,
|
||||
}
|
||||
else
|
||||
{
|
||||
return samples[sampleOffset];
|
||||
return samples[sampleOffset];
|
||||
}
|
||||
}
|
||||
|
||||
@ -338,7 +338,7 @@ void ZAudio::ParseRawData()
|
||||
"Audioseq");
|
||||
|
||||
// TABLE PARSING
|
||||
|
||||
|
||||
// MQ DBG ROM
|
||||
//int gSoundFontTableOffset = 0x138270;
|
||||
//int gSequenceTableOffset = 0x1386A0;
|
||||
|
@ -68,7 +68,7 @@ ZRom::ZRom(std::string romPath)
|
||||
romData = File::ReadAllBytes(romPath);
|
||||
|
||||
version.crc = BitConverter::ToInt32BE(romData, 0x10);
|
||||
|
||||
|
||||
switch (version.crc)
|
||||
{
|
||||
case OOT_NTSC_10:
|
||||
|
@ -41,7 +41,7 @@
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
@ -136,7 +136,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<LanguageStandard_C>Default</LanguageStandard_C>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
</ClCompile>
|
||||
|
@ -18,8 +18,11 @@ WARN := -Wall -Wextra -Werror \
|
||||
-Wno-narrowing \
|
||||
-Wno-missing-field-initializers
|
||||
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -DENABLE_OPENGL -DSPDLOG_ACTIVE_LEVEL=0 -m32
|
||||
CFLAGS := $(WARN) -std=c99 -D_GNU_SOURCE -DENABLE_OPENGL -DSPDLOG_ACTIVE_LEVEL=0 -m32
|
||||
CWARN :=
|
||||
CXXWARN := -Wno-deprecated-enum-enum-conversion
|
||||
|
||||
CXXFLAGS := $(WARN) $(CXXWARN) -std=c++20 -D_GNU_SOURCE -DENABLE_OPENGL -DSPDLOG_ACTIVE_LEVEL=0
|
||||
CFLAGS := $(WARN) $(CWARN) -std=c99 -D_GNU_SOURCE -DENABLE_OPENGL -DSPDLOG_ACTIVE_LEVEL=0
|
||||
CPPFLAGS := -MMD
|
||||
|
||||
ifneq ($(DEBUG),0)
|
||||
@ -40,10 +43,10 @@ endif
|
||||
SRC_DIRS := $(shell find -type d -not -path "*build*")
|
||||
|
||||
CXX_FILES := \
|
||||
$(shell find libultraship/Factories -name *.cpp) \
|
||||
$(shell find libultraship/Lib/Fast3D -name *.cpp) \
|
||||
$(shell find libultraship -maxdepth 1 -name *.cpp) \
|
||||
$(shell find libultraship/Lib/ImGui -maxdepth 1 -name *.cpp) \
|
||||
$(shell find libultraship/Factories -name "*.cpp") \
|
||||
$(shell find libultraship/Lib/Fast3D -name "*.cpp") \
|
||||
$(shell find libultraship -maxdepth 1 -name "*.cpp") \
|
||||
$(shell find libultraship/Lib/ImGui -maxdepth 1 -name "*.cpp") \
|
||||
libultraship/Lib/ImGui/backends/imgui_impl_opengl3.cpp \
|
||||
libultraship/Lib/ImGui/backends/imgui_impl_sdl.cpp \
|
||||
libultraship/Lib/StrHash64.cpp \
|
||||
@ -53,7 +56,7 @@ C_FILES := \
|
||||
libultraship/mixer.c \
|
||||
libultraship/Lib/stb/stb_impl.c
|
||||
|
||||
FMT_FILES := $(shell find libultraship/ -type f \( -name *.cpp -o -name *.h \) -a -not -path "libultraship/Lib/*")
|
||||
FMT_FILES := $(shell find libultraship/ -type f \( -name "*.cpp" -o -name "*.h" \) -a -not -path "libultraship/Lib/*")
|
||||
|
||||
O_FILES := \
|
||||
$(CXX_FILES:%.cpp=build/%.o) \
|
||||
|
@ -37,7 +37,7 @@ namespace Ship
|
||||
entry->unk_bit25 = reader->ReadByte();
|
||||
|
||||
int dataSize = reader->ReadInt32();
|
||||
|
||||
|
||||
for (int i = 0; i < dataSize; i++)
|
||||
entry->data.push_back(reader->ReadUByte());
|
||||
|
||||
@ -84,7 +84,7 @@ namespace Ship
|
||||
drum.loaded = reader->ReadUByte();
|
||||
|
||||
drum.env = ReadEnvelopeData(reader);
|
||||
|
||||
|
||||
bool hasSample = reader->ReadByte();
|
||||
drum.sampleFileName = reader->ReadString();
|
||||
drum.tuning = reader->ReadSingle();
|
||||
@ -103,7 +103,7 @@ namespace Ship
|
||||
entry.releaseRate = reader->ReadUByte();
|
||||
|
||||
entry.env = ReadEnvelopeData(reader);
|
||||
|
||||
|
||||
{
|
||||
bool hasSFEntry = reader->ReadByte();
|
||||
|
||||
@ -184,4 +184,4 @@ namespace Ship
|
||||
|
||||
ResourceFile::ParseFileBinary(reader, res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ namespace Ship
|
||||
public:
|
||||
void ParseFileBinary(BinaryReader* reader, Resource* res) override;
|
||||
};
|
||||
|
||||
|
||||
class AudioV2 : public ResourceFile
|
||||
{
|
||||
public:
|
||||
@ -128,4 +128,4 @@ namespace Ship
|
||||
{
|
||||
public:
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -11,5 +11,6 @@ namespace Ship {
|
||||
virtual int Buffered(void) = 0;
|
||||
virtual int GetDesiredBuffered(void) = 0;
|
||||
virtual void Play(const uint8_t* buf, uint32_t len) = 0;
|
||||
constexpr int GetSampleRate() const { return 44100; }
|
||||
};
|
||||
}
|
||||
|
@ -16,16 +16,40 @@ namespace Ship
|
||||
{
|
||||
uint64_t data = reader->ReadUInt64();
|
||||
|
||||
dl->instructions.push_back(data);
|
||||
|
||||
uint8_t opcode = data >> 24;
|
||||
if (sizeof(uintptr_t) < 8){
|
||||
dl->instructions.push_back(data);
|
||||
|
||||
// These are 128-bit commands, so read an extra 64 bits...
|
||||
if (opcode == G_SETTIMG_OTR || opcode == G_DL_OTR || opcode == G_VTX_OTR || opcode == G_BRANCH_Z_OTR || opcode == G_MARKER || opcode == G_MTX_OTR)
|
||||
dl->instructions.push_back(reader->ReadUInt64());
|
||||
uint8_t opcode = data >> 24;
|
||||
|
||||
if (opcode == G_ENDDL)
|
||||
break;
|
||||
// These are 128-bit commands, so read an extra 64 bits...
|
||||
if (opcode == G_SETTIMG_OTR || opcode == G_DL_OTR || opcode == G_VTX_OTR || opcode == G_BRANCH_Z_OTR || opcode == G_MARKER || opcode == G_MTX_OTR)
|
||||
dl->instructions.push_back(reader->ReadUInt64());
|
||||
|
||||
if (opcode == G_ENDDL)
|
||||
break;
|
||||
} else {
|
||||
uint32_t w0 = (uint32_t)data;
|
||||
uint32_t w1 = (uint32_t)(data >> 32);
|
||||
|
||||
dl->instructions.push_back(w0);
|
||||
dl->instructions.push_back(w1);
|
||||
|
||||
uint8_t opcode = (uint8_t)(w0 >> 24);
|
||||
|
||||
if (opcode == G_SETTIMG_OTR || opcode == G_DL_OTR || opcode == G_VTX_OTR || opcode == G_BRANCH_Z_OTR || opcode == G_MARKER || opcode == G_MTX_OTR)
|
||||
{
|
||||
data = reader->ReadUInt64();
|
||||
|
||||
w0 = (uint32_t)data;
|
||||
w1 = (uint32_t)(data >> 32);
|
||||
|
||||
dl->instructions.push_back(w0);
|
||||
dl->instructions.push_back(w1);
|
||||
}
|
||||
|
||||
if (opcode == G_ENDDL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -29,9 +29,9 @@ namespace Ship
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
reader->ReadByte();
|
||||
|
||||
|
||||
// OTRTODO: Setup the binaryreader to use the resource's endianess
|
||||
|
||||
|
||||
ResourceType resourceType = (ResourceType)reader->ReadUInt32();
|
||||
Resource* result = nullptr;
|
||||
|
||||
|
@ -1637,13 +1637,17 @@ typedef struct {
|
||||
* Generic Gfx Packet
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned int w0;
|
||||
unsigned int w1;
|
||||
uintptr_t w0;
|
||||
uintptr_t w1;
|
||||
|
||||
//unsigned long long w0;
|
||||
//unsigned long long w1;
|
||||
} Gwords;
|
||||
|
||||
#ifdef __cplusplus
|
||||
static_assert(sizeof(Gwords) == 2 * sizeof(void*), "Display list size is bad");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This union is the fundamental type of the display list.
|
||||
* It is, by law, exactly 64 bits in size.
|
||||
@ -1684,12 +1688,12 @@ _DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
\
|
||||
_g->words.w0 = _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24); \
|
||||
_g->words.w1 = (unsigned int)(s); \
|
||||
_g->words.w1 = (uintptr_t)(s); \
|
||||
})
|
||||
|
||||
#define gsDma0p(c, s, l) \
|
||||
{ \
|
||||
_SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (unsigned int)(s) \
|
||||
_SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (uintptr_t)(s) \
|
||||
}
|
||||
|
||||
#define gDma1p(pkt, c, s, l, p) \
|
||||
@ -1698,14 +1702,14 @@ _DW({ \
|
||||
\
|
||||
_g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \
|
||||
_SHIFTL((l), 0, 16)); \
|
||||
_g->words.w1 = (unsigned int)(s); \
|
||||
_g->words.w1 = (uintptr_t)(s); \
|
||||
})
|
||||
|
||||
#define gsDma1p(c, s, l, p) \
|
||||
{ \
|
||||
(_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \
|
||||
_SHIFTL((l), 0, 16)), \
|
||||
(unsigned int)(s) \
|
||||
(uintptr_t)(s) \
|
||||
}
|
||||
|
||||
#define gDma2p(pkt, c, adrs, len, idx, ofs) \
|
||||
@ -1713,13 +1717,13 @@ _DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \
|
||||
_SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \
|
||||
_g->words.w1 = (unsigned int)(adrs); \
|
||||
_g->words.w1 = (uintptr_t)(adrs); \
|
||||
})
|
||||
#define gsDma2p(c, adrs, len, idx, ofs) \
|
||||
{ \
|
||||
(_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \
|
||||
_SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)), \
|
||||
(unsigned int)(adrs) \
|
||||
(uintptr_t)(adrs) \
|
||||
}
|
||||
|
||||
#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0)
|
||||
@ -1750,12 +1754,12 @@ _DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = \
|
||||
_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \
|
||||
_g->words.w1 = (unsigned int)(v); \
|
||||
_g->words.w1 = (uintptr_t)(v); \
|
||||
})
|
||||
# define gsSPVertex(v, n, v0) \
|
||||
{ \
|
||||
(_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \
|
||||
(unsigned int)(v) \
|
||||
(uintptr_t)(v) \
|
||||
}
|
||||
#elif (defined(F3DEX_GBI)||defined(F3DLP_GBI))
|
||||
/*
|
||||
@ -1820,12 +1824,12 @@ _DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
\
|
||||
_g->words.w0 = _SHIFTL((c), 24, 8); \
|
||||
_g->words.w1 = (unsigned int)(p0); \
|
||||
_g->words.w1 = (uintptr_t)(p0); \
|
||||
})
|
||||
|
||||
#define gsImmp1(c, p0) \
|
||||
{ \
|
||||
_SHIFTL((c), 24, 8), (unsigned int)(p0) \
|
||||
_SHIFTL((c), 24, 8), (uintptr_t)(p0) \
|
||||
}
|
||||
|
||||
#define gImmp2(pkt, c, p0, p1) \
|
||||
@ -1862,13 +1866,13 @@ _DW({ \
|
||||
\
|
||||
_g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \
|
||||
_SHIFTL((p1), 0, 8)); \
|
||||
_g->words.w1 = (unsigned int) (dat); \
|
||||
_g->words.w1 = (uintptr_t) (dat); \
|
||||
})
|
||||
|
||||
#define gsImmp21(c, p0, p1, dat) \
|
||||
{ \
|
||||
_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\
|
||||
(unsigned int) (dat) \
|
||||
(uintptr_t) (dat) \
|
||||
}
|
||||
|
||||
#ifdef F3DEX_GBI_2
|
||||
@ -2308,7 +2312,7 @@ _DW({ \
|
||||
_DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
|
||||
_g->words.w1 = (unsigned int)(dl); \
|
||||
_g->words.w1 = (uintptr_t)(dl); \
|
||||
_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \
|
||||
_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \
|
||||
@ -2317,7 +2321,7 @@ _DW({ \
|
||||
|
||||
#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \
|
||||
{ _SHIFTL(G_RDPHALF_1,24,8), \
|
||||
(unsigned int)(dl), }, \
|
||||
(uintptr_t)(dl), }, \
|
||||
{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
|
||||
G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), }
|
||||
|
||||
@ -2337,18 +2341,18 @@ _DW({ \
|
||||
_DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
|
||||
_g->words.w1 = (unsigned int)(dl); \
|
||||
_g->words.w1 = (uintptr_t)(dl); \
|
||||
_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \
|
||||
_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \
|
||||
_g->words.w1 = (unsigned int)(zval); \
|
||||
_g->words.w1 = (uintptr_t)(zval); \
|
||||
})
|
||||
|
||||
#define gsSPBranchLessZraw(dl, vtx, zval) \
|
||||
{ _SHIFTL(G_RDPHALF_1,24,8), \
|
||||
(unsigned int)(dl), }, \
|
||||
(uintptr_t)(dl), }, \
|
||||
{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
|
||||
(unsigned int)(zval), }
|
||||
(uintptr_t)(zval), }
|
||||
|
||||
/*
|
||||
* gSPLoadUcode RSP loads specified ucode.
|
||||
@ -2360,19 +2364,19 @@ _DW({ \
|
||||
_DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
|
||||
_g->words.w1 = (unsigned int)(uc_dstart); \
|
||||
_g->words.w1 = (uintptr_t)(uc_dstart); \
|
||||
_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \
|
||||
_SHIFTL((int)(uc_dsize)-1,0,16)); \
|
||||
_g->words.w1 = (unsigned int)(uc_start); \
|
||||
_g->words.w1 = (uintptr_t)(uc_start); \
|
||||
})
|
||||
|
||||
#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \
|
||||
{ _SHIFTL(G_RDPHALF_1,24,8), \
|
||||
(unsigned int)(uc_dstart), }, \
|
||||
(uintptr_t)(uc_dstart), }, \
|
||||
{ _SHIFTL(G_LOAD_UCODE,24,8)| \
|
||||
_SHIFTL((int)(uc_dsize)-1,0,16), \
|
||||
(unsigned int)(uc_start), }
|
||||
(uintptr_t)(uc_start), }
|
||||
|
||||
#define gSPLoadUcode(pkt, uc_start, uc_dstart) \
|
||||
gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
|
||||
@ -2396,14 +2400,14 @@ _DW({ \
|
||||
Gfx *_g = (Gfx *)(pkt); \
|
||||
_g->words.w0 = _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \
|
||||
_SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12); \
|
||||
_g->words.w1 = (unsigned int)(dram); \
|
||||
_g->words.w1 = (uintptr_t)(dram); \
|
||||
})
|
||||
|
||||
#define gsSPDma_io(flag, dmem, dram, size) \
|
||||
{ \
|
||||
_SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \
|
||||
_SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12), \
|
||||
(unsigned int)(dram) \
|
||||
(uintptr_t)(dram) \
|
||||
}
|
||||
|
||||
#define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size))
|
||||
@ -3018,14 +3022,14 @@ _DW({ \
|
||||
\
|
||||
_g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \
|
||||
_SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \
|
||||
_g->words.w1 = (unsigned int)(i); \
|
||||
_g->words.w1 = (uintptr_t)(i); \
|
||||
})
|
||||
|
||||
#define gsSetImage(cmd, fmt, siz, width, i) \
|
||||
{ \
|
||||
_SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \
|
||||
_SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \
|
||||
(unsigned int)(i) \
|
||||
(uintptr_t)(i) \
|
||||
}
|
||||
|
||||
#define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i)
|
||||
|
@ -6,7 +6,23 @@
|
||||
#define OS_MESG_NOBLOCK 0
|
||||
#define OS_MESG_BLOCK 1
|
||||
|
||||
typedef void* OSMesg;
|
||||
typedef union {
|
||||
u8 data8;
|
||||
u16 data16;
|
||||
u32 data32;
|
||||
void* ptr;
|
||||
} OSMesg;
|
||||
|
||||
#define OS_MESG_8(x) ((OSMesg) { .data8 = (x) })
|
||||
#define OS_MESG_16(x) ((OSMesg) { .data16 = (x) })
|
||||
#define OS_MESG_32(x) ((OSMesg) { .data32 = (x) })
|
||||
#define OS_MESG_PTR(x) ((OSMesg) { .ptr = (x) })
|
||||
|
||||
#define osSendMesg8(queue, msg, flag) osSendMesg(queue, OS_MESG_8(msg), flag)
|
||||
#define osSendMesg16(queue, msg, flag) osSendMesg(queue, OS_MESG_16(msg), flag)
|
||||
#define osSendMesg32(queue, msg, flag) osSendMesg(queue, OS_MESG_32(msg), flag)
|
||||
#define osSendMesgPtr(queue, msg, flag) osSendMesg(queue, OS_MESG_PTR(msg), flag)
|
||||
|
||||
typedef u32 OSEvent;
|
||||
|
||||
#define OS_NUM_EVENTS 15
|
||||
|
@ -1586,7 +1586,7 @@ static void gfx_sp_movemem(uint8_t index, uint8_t offset, const void* data) {
|
||||
}
|
||||
}
|
||||
|
||||
static void gfx_sp_moveword(uint8_t index, uint16_t offset, uint32_t data) {
|
||||
static void gfx_sp_moveword(uint8_t index, uint16_t offset, uintptr_t data) {
|
||||
switch (index) {
|
||||
case G_MW_NUMLIGHT:
|
||||
#ifdef F3DEX_GBI_2
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <stdint.h>
|
||||
#include <unordered_map>
|
||||
#include <list>
|
||||
#include <cstddef>
|
||||
|
||||
#include "U64/PR/ultra64/types.h"
|
||||
|
||||
|
Binary file not shown.
4826
libultraship/libultraship/Lib/dr_libs/mp3.h
Normal file
4826
libultraship/libultraship/Lib/dr_libs/mp3.h
Normal file
File diff suppressed because it is too large
Load Diff
8418
libultraship/libultraship/Lib/dr_libs/wav.h
Normal file
8418
libultraship/libultraship/Lib/dr_libs/wav.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -74,7 +74,7 @@ namespace Ship
|
||||
// Create stream
|
||||
pa_sample_spec ss;
|
||||
ss.format = PA_SAMPLE_S16LE;
|
||||
ss.rate = 32000;
|
||||
ss.rate = this->GetSampleRate();
|
||||
ss.channels = 2;
|
||||
|
||||
pa_buffer_attr attr;
|
||||
@ -149,8 +149,7 @@ namespace Ship
|
||||
|
||||
int PulseAudioPlayer::GetDesiredBuffered()
|
||||
{
|
||||
// return 1100;
|
||||
return 1680;
|
||||
return 2480;
|
||||
}
|
||||
|
||||
void PulseAudioPlayer::Play(const uint8_t* buff, uint32_t len)
|
||||
|
@ -49,7 +49,7 @@ namespace Ship
|
||||
{
|
||||
auto res = (Ship::DisplayList*)resShared.get();
|
||||
|
||||
Gfx* gfx = (Gfx*)&res->instructions[patches[i].index];
|
||||
Gfx* gfx = &((Gfx*)res->instructions.data())[patches[i].index];
|
||||
gfx->words.w1 = patches[i].origData;
|
||||
}
|
||||
}
|
||||
|
@ -2,40 +2,40 @@
|
||||
#include "spdlog/spdlog.h"
|
||||
|
||||
namespace Ship {
|
||||
bool SDLAudioPlayer::Init(void) {
|
||||
if (SDL_Init(SDL_INIT_AUDIO) != 0) {
|
||||
SPDLOG_ERROR("SDL init error: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
SDL_AudioSpec want, have;
|
||||
SDL_zero(want);
|
||||
want.freq = 32000;
|
||||
want.format = AUDIO_S16;
|
||||
want.channels = 2;
|
||||
want.samples = 1024;
|
||||
want.callback = NULL;
|
||||
Device = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
|
||||
if (Device == 0) {
|
||||
SPDLOG_ERROR("SDL_OpenAudio error: {}", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
SDL_PauseAudioDevice(Device, 0);
|
||||
return true;
|
||||
}
|
||||
bool SDLAudioPlayer::Init(void) {
|
||||
if (SDL_Init(SDL_INIT_AUDIO) != 0) {
|
||||
SPDLOG_ERROR("SDL init error: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
SDL_AudioSpec want, have;
|
||||
SDL_zero(want);
|
||||
want.freq = this->GetSampleRate();
|
||||
want.format = AUDIO_S16;
|
||||
want.channels = 2;
|
||||
want.samples = 1024;
|
||||
want.callback = NULL;
|
||||
Device = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
|
||||
if (Device == 0) {
|
||||
SPDLOG_ERROR("SDL_OpenAudio error: {}", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
SDL_PauseAudioDevice(Device, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
int SDLAudioPlayer::Buffered(void) {
|
||||
// 4 is sizeof(int16_t) * num_channels (2 for stereo)
|
||||
return SDL_GetQueuedAudioSize(Device) / 4;
|
||||
}
|
||||
int SDLAudioPlayer::Buffered(void) {
|
||||
// 4 is sizeof(int16_t) * num_channels (2 for stereo)
|
||||
return SDL_GetQueuedAudioSize(Device) / 4;
|
||||
}
|
||||
|
||||
int SDLAudioPlayer::GetDesiredBuffered(void) {
|
||||
return 2480;
|
||||
}
|
||||
int SDLAudioPlayer::GetDesiredBuffered(void) {
|
||||
return 2480;
|
||||
}
|
||||
|
||||
void SDLAudioPlayer::Play(const uint8_t* Buffer, uint32_t BufferLen) {
|
||||
if (Buffered() < 6000) {
|
||||
// Don't fill the audio buffer too much in case this happens
|
||||
SDL_QueueAudio(Device, Buffer, BufferLen);
|
||||
}
|
||||
}
|
||||
}
|
||||
void SDLAudioPlayer::Play(const uint8_t* Buffer, uint32_t BufferLen) {
|
||||
if (Buffered() < 6000) {
|
||||
// Don't fill the audio buffer too much in case this happens
|
||||
SDL_QueueAudio(Device, Buffer, BufferLen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,8 +30,8 @@ namespace Ship {
|
||||
WAVEFORMATEX desired;
|
||||
desired.wFormatTag = WAVE_FORMAT_PCM;
|
||||
desired.nChannels = 2;
|
||||
desired.nSamplesPerSec = 44100;
|
||||
desired.nAvgBytesPerSec = 44100 * 2 * 2;
|
||||
desired.nSamplesPerSec = this->GetSampleRate();
|
||||
desired.nAvgBytesPerSec = desired.nSamplesPerSec * 2 * 2;
|
||||
desired.nBlockAlign = 4;
|
||||
desired.wBitsPerSample = 16;
|
||||
desired.cbSize = 0;
|
||||
@ -171,4 +171,4 @@ namespace Ship {
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -319,7 +319,7 @@ namespace Ship {
|
||||
GlobalCtx2::GetInstance()->GetWindow()->ToggleFullscreen();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// OTRTODO: Rig with Kirito's console?
|
||||
//if (dwScancode == Ship::stoi(Conf["KEYBOARD SHORTCUTS"]["KEY_CONSOLE"])) {
|
||||
|
@ -204,12 +204,13 @@
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>SPDLOG_ACTIVE_LEVEL=0;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;ENABLE_DX11;ENABLE_OPENGL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>SPDLOG_ACTIVE_LEVEL=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;ENABLE_OPENGL;ENABLE_DX11;%(PreprocessorDefinitions)GLEW_STATIC </PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
@ -238,7 +239,7 @@
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>SPDLOG_ACTIVE_LEVEL=0;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;ENABLE_OPENGL;ENABLE_DX11;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>SPDLOG_ACTIVE_LEVEL=0;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;ENABLE_OPENGL;ENABLE_DX11;%(PreprocessorDefinitions)GLEW_STATIC</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<LanguageStandard_C>stdc11</LanguageStandard_C>
|
||||
@ -351,6 +352,8 @@
|
||||
<ClInclude Include="GameOverlay.h" />
|
||||
<ClInclude Include="GameSettings.h" />
|
||||
<ClInclude Include="GameVersions.h" />
|
||||
<ClInclude Include="Lib\dr_libs\mp3.h" />
|
||||
<ClInclude Include="Lib\dr_libs\wav.h" />
|
||||
<ClInclude Include="Lib\ImGui\backends\imgui_impl_dx11.h" />
|
||||
<ClInclude Include="Lib\ImGui\backends\imgui_impl_win32.h" />
|
||||
<ClInclude Include="Lib\stb\stb_image_write.h" />
|
||||
|
@ -91,6 +91,9 @@
|
||||
<Filter Include="Source Files\CustomImpl\Overlay">
|
||||
<UniqueIdentifier>{3285ab8a-06d8-4dac-9af9-efb2a9723ab1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\Lib\dr_libs">
|
||||
<UniqueIdentifier>{db6e02cc-fc4c-4138-8219-1d281ad93ec2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Factories\MaterialFactory.cpp">
|
||||
@ -650,5 +653,11 @@
|
||||
<ClInclude Include="Factories\AudioFactory.h">
|
||||
<Filter>Header Files\Resources\Factories</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Lib\dr_libs\mp3.h">
|
||||
<Filter>Source Files\Lib\dr_libs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Lib\dr_libs\wav.h">
|
||||
<Filter>Source Files\Lib\dr_libs</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
26
soh/Makefile
26
soh/Makefile
@ -7,6 +7,7 @@ ZAPD := ../ZAPDTR/ZAPD.out
|
||||
|
||||
LIBULTRASHIP := ../libultraship/libultraship.a
|
||||
ZAPDUTILS := ../ZAPDTR/ZAPDUtils/ZAPDUtils.a
|
||||
LIBSTORM := ../StormLib/build/libstorm.a
|
||||
|
||||
ASAN ?= 0
|
||||
DEBUG ?= 1
|
||||
@ -16,11 +17,11 @@ LTO ?= 0
|
||||
WARN := \
|
||||
-Wno-return-type \
|
||||
-funsigned-char \
|
||||
-m32 -mhard-float -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-strict-aliasing -fno-inline-functions -fno-inline-small-functions -fno-toplevel-reorder -ffreestanding -fwrapv \
|
||||
-mhard-float -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-strict-aliasing -fno-inline-functions -fno-inline-small-functions -fno-toplevel-reorder -ffreestanding -fwrapv \
|
||||
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -fpermissive -no-pie -nostdlib -march=i386 -msse2 -mfpmath=sse
|
||||
CFLAGS := $(WARN) -std=c99 -D_GNU_SOURCE -no-pie -nostdlib -march=i386 -msse2 -mfpmath=sse
|
||||
LDFLAGS := -m32
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -fpermissive -no-pie -nostdlib -msse2 -mfpmath=sse
|
||||
CFLAGS := $(WARN) -std=c99 -D_GNU_SOURCE -no-pie -nostdlib -msse2 -mfpmath=sse
|
||||
LDFLAGS :=
|
||||
CPPFLAGS := -MMD
|
||||
|
||||
ifneq ($(DEBUG),0)
|
||||
@ -30,11 +31,13 @@ endif
|
||||
|
||||
ifneq ($(ASAN),0)
|
||||
CXXFLAGS += -fsanitize=address
|
||||
CFLAGS += -fsanitize=address
|
||||
LDFLAGS += -fsanitize=address
|
||||
endif
|
||||
|
||||
ifneq ($(LTO),0)
|
||||
CXXFLAGS += -flto
|
||||
CFLAGS += -flto
|
||||
LDFLAGS += -flto
|
||||
endif
|
||||
|
||||
@ -54,12 +57,12 @@ INC_DIRS := $(addprefix -I, \
|
||||
)
|
||||
|
||||
LDDIRS := $(addprefix -L, \
|
||||
../external \
|
||||
../libultraship/ \
|
||||
)
|
||||
|
||||
LDLIBS := \
|
||||
$(ZAPDUTILS) \
|
||||
$(LIBSTORM) \
|
||||
$(addprefix -l, \
|
||||
X11 \
|
||||
dl \
|
||||
@ -70,7 +73,6 @@ LDLIBS := \
|
||||
SDL2 \
|
||||
GL \
|
||||
GLEW \
|
||||
storm \
|
||||
pulse\
|
||||
ultraship \
|
||||
) \
|
||||
@ -87,14 +89,14 @@ TEXTURE_FILES_OUT := $(foreach f,$(TEXTURE_FILES_PNG:.png=.inc.c),build/$f) \
|
||||
$(foreach f,$(TEXTURE_FILES_JPG:.jpg=.jpg.inc.c),build/$f) \
|
||||
|
||||
CXX_FILES := \
|
||||
$(shell find soh -type f -name *.cpp)
|
||||
$(shell find soh -type f -name "*.cpp")
|
||||
|
||||
C_FILES := \
|
||||
$(shell find soh -type f -name *.c) \
|
||||
$(shell find src/boot -type f -name *.c) \
|
||||
$(shell find src/buffers -type f -name *.c) \
|
||||
$(shell find src/code -type f -name *.c) \
|
||||
$(shell find src/overlays -type f -name *.c) \
|
||||
$(shell find soh -type f -name "*.c") \
|
||||
$(shell find src/boot -type f -name "*.c") \
|
||||
$(shell find src/buffers -type f -name "*.c") \
|
||||
$(shell find src/code -type f -name "*.c") \
|
||||
$(shell find src/overlays -type f -name "*.c") \
|
||||
src/libultra/gu/coss.c \
|
||||
src/libultra/gu/guLookAt.c \
|
||||
src/libultra/gu/guLookAtHilite.c \
|
||||
|
@ -1433,7 +1433,7 @@
|
||||
<Offset Version="MQDebug" At="0"/>
|
||||
</Sample>
|
||||
</Samples>
|
||||
|
||||
|
||||
<Samples Bank="3">
|
||||
<Sample Name="Low Rumbling">
|
||||
<Offset Version="MQDebug" At="0"/>
|
||||
@ -1515,9 +1515,9 @@
|
||||
</Samples>
|
||||
|
||||
|
||||
<Soundfont Name="02_Ambient_Sounds" Index="2"/>
|
||||
<Soundfont Name="37_Unused_Deku_Tree" Index="37" OverrideSampleBank="2"/>
|
||||
<Soundfont Name="04_Deku_Tree" Index="4"/>
|
||||
<Soundfont Name="02_Ambient_Sounds" Index="2"/>
|
||||
<Soundfont Name="37_Unused_Deku_Tree" Index="37" OverrideSampleBank="2"/>
|
||||
<Soundfont Name="04_Deku_Tree" Index="4"/>
|
||||
<Soundfont Name="11_Dodongos_Cavern" Index="11"/>
|
||||
<Soundfont Name="33_Ending_1" Index="33"/>
|
||||
<Soundfont Name="34_Ending_2" Index="34"/>
|
||||
@ -1553,8 +1553,6 @@
|
||||
<Soundfont Name="18_Warp_Songs" Index="18"/>
|
||||
<Soundfont Name="25_Water_Temple" Index="25"/>
|
||||
<Soundfont Name="21_Zoras_Domain" Index="21"/>
|
||||
|
||||
|
||||
</Audio>
|
||||
</File>
|
||||
</Root>
|
||||
|
@ -113,8 +113,6 @@
|
||||
<Sequence Name="108_Timed_Minigame"/>
|
||||
<Sequence Name="109_Cutscene_Effects"/>
|
||||
</Sequences>
|
||||
|
||||
|
||||
<Samples Bank="0">
|
||||
<Sample Name="Bird Chirp 1">
|
||||
<Offset Version="MQDebug" At="0"/>
|
||||
|
@ -1900,7 +1900,7 @@ void AudioHeap_AllocPoolInit(AudioAllocPool* pool, void* mem, size_t size);
|
||||
void AudioHeap_PersistentCacheClear(AudioPersistentCache* persistent);
|
||||
void AudioHeap_TemporaryCacheClear(AudioTemporaryCache* temporary);
|
||||
void AudioHeap_PopCache(s32 tableType);
|
||||
void AudioHeap_InitMainPools(ptrdiff_t sizeForAudioInitPool);
|
||||
void AudioHeap_InitMainPools(size_t sizeForAudioInitPool);
|
||||
void* AudioHeap_AllocCached(s32 tableType, ptrdiff_t size, s32 cache, s32 id);
|
||||
void* AudioHeap_SearchCaches(s32 tableType, s32 arg1, s32 id);
|
||||
void* AudioHeap_SearchRegularCaches(s32 tableType, s32 cache, s32 id);
|
||||
@ -1912,7 +1912,7 @@ void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size);
|
||||
void* AudioHeap_AllocSampleCache(size_t size, s32 fontId, void* sampleAddr, s8 medium, s32 cache);
|
||||
void AudioHeap_ApplySampleBankCache(s32 sampleBankId);
|
||||
void AudioLoad_DecreaseSampleDmaTtls(void);
|
||||
void* AudioLoad_DmaSampleData(u32 devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium);
|
||||
uintptr_t AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium);
|
||||
void AudioLoad_InitSampleDmaBuffers(s32 arg0);
|
||||
s32 AudioLoad_IsFontLoadComplete(s32 fontId);
|
||||
s32 AudioLoad_IsSeqLoadComplete(s32 seqId);
|
||||
@ -1929,7 +1929,7 @@ s32 AudioLoad_SyncInitSeqPlayer(s32 playerIdx, s32 seqId, s32 arg2);
|
||||
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIdx, s32 seqId, s32 arg2);
|
||||
void AudioLoad_ProcessLoads(s32 resetStatus);
|
||||
void AudioLoad_SetDmaHandler(DmaHandler callback);
|
||||
void AudioLoad_Init(void* heap, u32 heapSize);
|
||||
void AudioLoad_Init(void* heap, size_t heapSize);
|
||||
void AudioLoad_InitSlowLoads(void);
|
||||
s32 AudioLoad_SlowLoadSample(s32 arg0, s32 arg1, s8* arg2);
|
||||
s32 AudioLoad_SlowLoadSeq(s32 playerIdx, u8* ramAddr, s8* arg2);
|
||||
@ -2167,10 +2167,10 @@ f32 Math_FAtanF(f32 x);
|
||||
f32 Math_FAtan2F(f32 y, f32 x);
|
||||
f32 Math_FAsinF(f32 x);
|
||||
f32 Math_FAcosF(f32 x);
|
||||
f32 ceilf(f32 x);
|
||||
/*f32 ceilf(f32 x);
|
||||
f32 truncf(f32 x);
|
||||
f32 roundf(f32 x);
|
||||
f32 nearbyintf(f32 x);
|
||||
f32 nearbyintf(f32 x);*/
|
||||
void SystemArena_CheckPointer(void* ptr, size_t size, const char* name, const char* action);
|
||||
void* SystemArena_Malloc(size_t size);
|
||||
void* SystemArena_MallocDebug(size_t size, const char* file, s32 line);
|
||||
|
@ -30,8 +30,11 @@
|
||||
#include "ichain.h"
|
||||
#include "regs.h"
|
||||
|
||||
//#define AUDIO_HEAP_SIZE 0x38000
|
||||
#define AUDIO_HEAP_SIZE 0x3800000 // The original audio heap size was too small. The heap would exceed capacity and corrupt everything in its path.
|
||||
#if defined(_WIN64) || defined(__x86_64__) || defined(__arm64__)
|
||||
#define _SOH64
|
||||
#endif
|
||||
|
||||
#define AUDIO_HEAP_SIZE 0x3800000
|
||||
#define SYSTEM_HEAP_SIZE (1024 * 1024 * 4)
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -537,9 +540,9 @@ typedef enum {
|
||||
/* 4 */ TEXT_STATE_CHOICE,
|
||||
/* 5 */ TEXT_STATE_EVENT,
|
||||
/* 6 */ TEXT_STATE_DONE,
|
||||
/* 7 */ TEXT_STATE_SONG_DEMO_DONE,
|
||||
/* 8 */ TEXT_STATE_8,
|
||||
/* 9 */ TEXT_STATE_9,
|
||||
/* 7 */ TEXT_STATE_SONG_DEMO_DONE,
|
||||
/* 8 */ TEXT_STATE_8,
|
||||
/* 9 */ TEXT_STATE_9,
|
||||
/* 10 */ TEXT_STATE_AWAITING_NEXT
|
||||
} TextState;
|
||||
|
||||
|
@ -112,8 +112,8 @@ typedef struct {
|
||||
} AdsrEnvelope; // size = 0x4
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u32 start;
|
||||
/* 0x04 */ u32 end;
|
||||
/* 0x00 */ uintptr_t start;
|
||||
/* 0x04 */ uintptr_t end;
|
||||
/* 0x08 */ u32 count;
|
||||
/* 0x0C */ char unk_0C[0x4];
|
||||
/* 0x10 */ s16 state[16]; // only exists if count != 0. 8-byte aligned
|
||||
@ -150,7 +150,7 @@ typedef struct {
|
||||
/* 0x04 */ union {
|
||||
u32 tuningAsU32;
|
||||
f32 tuning;// frequency scale factor
|
||||
};
|
||||
};
|
||||
} SoundFontSound; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
@ -696,7 +696,7 @@ typedef struct {
|
||||
};
|
||||
};
|
||||
union {
|
||||
void* data;
|
||||
u32 data;
|
||||
f32 asFloat;
|
||||
s32 asInt;
|
||||
struct {
|
||||
@ -720,10 +720,10 @@ typedef struct {
|
||||
/* 0x01 */ s8 delay;
|
||||
/* 0x02 */ s8 medium;
|
||||
/* 0x04 */ u8* ramAddr;
|
||||
/* 0x08 */ u32 curDevAddr;
|
||||
/* 0x08 */ u8* curDevAddr;
|
||||
/* 0x0C */ u8* curRamAddr;
|
||||
/* 0x10 */ u32 bytesRemaining;
|
||||
/* 0x14 */ u32 chunkSize;
|
||||
/* 0x10 */ size_t bytesRemaining;
|
||||
/* 0x14 */ size_t chunkSize;
|
||||
/* 0x18 */ s32 unkMediumParam;
|
||||
/* 0x1C */ u32 retMsg;
|
||||
/* 0x20 */ OSMesgQueue* retQueue;
|
||||
@ -737,7 +737,7 @@ typedef struct {
|
||||
/* 0x01 */ u8 seqOrFontId;
|
||||
/* 0x02 */ u16 instId;
|
||||
/* 0x04 */ s32 unkMediumParam;
|
||||
/* 0x08 */ s32 curDevAddr;
|
||||
/* 0x08 */ u8* curDevAddr;
|
||||
/* 0x0C */ u8* curRamAddr;
|
||||
/* 0x10 */ u8* ramAddr;
|
||||
/* 0x14 */ s32 status;
|
||||
@ -886,7 +886,7 @@ typedef struct {
|
||||
/* 0x351C */ s32 audioResetFadeOutFramesLeft;
|
||||
/* 0x3520 */ f32* unk_3520;
|
||||
/* 0x3524 */ u8* audioHeap;
|
||||
/* 0x3528 */ u32 audioHeapSize;
|
||||
/* 0x3528 */ size_t audioHeapSize;
|
||||
/* 0x352C */ Note* notes;
|
||||
/* 0x3530 */ SequencePlayer seqPlayers[4];
|
||||
/* 0x3AB0 */ SequenceLayer sequenceLayers[64];
|
||||
@ -924,9 +924,9 @@ typedef struct {
|
||||
} NoteSubAttributes; // size = 0x18
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u32 heapSize;
|
||||
/* 0x04 */ u32 initPoolSize;
|
||||
/* 0x08 */ u32 permanentPoolSize;
|
||||
/* 0x00 */ size_t heapSize;
|
||||
/* 0x04 */ size_t initPoolSize;
|
||||
/* 0x08 */ size_t permanentPoolSize;
|
||||
} AudioContextInitSizes; // size = 0xC
|
||||
|
||||
typedef struct {
|
||||
|
@ -55,7 +55,7 @@ typedef enum {
|
||||
/* 0x1E */ CAM_SET_CRAWLSPACE, // Used in all crawlspaces "RAIL3"
|
||||
/* 0x1F */ CAM_SET_START0, // Data is given in Temple of Time, but no surface uses it
|
||||
/* 0x20 */ CAM_SET_START1, // Scene/room door transitions that snap the camera to a fixed location (example: ganon's towers doors climbing up)
|
||||
/* 0x21 */ CAM_SET_FREE0, // Full manual control is given over the camera
|
||||
/* 0x21 */ CAM_SET_FREE0, // Full manual control is given over the camera
|
||||
/* 0x22 */ CAM_SET_FREE2, // Various OnePoint Cutscenes, 10 total (example: falling chest)
|
||||
/* 0x23 */ CAM_SET_PIVOT_CORNER, // Inside the carpenter jail cells from theives hideout "CIRCLE4"
|
||||
/* 0x24 */ CAM_SET_PIVOT_WATER_SURFACE, // Player diving from the surface of the water to underwater "CIRCLE5"
|
||||
@ -391,7 +391,7 @@ typedef struct {
|
||||
{ groundAtLerpStepScale, CAM_DATA_GROUND_AT_LERP_STEP_SCALE }
|
||||
|
||||
typedef struct {
|
||||
|
||||
|
||||
/* 0x00 */ SwingAnimation swing;
|
||||
/* 0x1C */ f32 unk_1C;
|
||||
/* 0x20 */ VecSph unk_20;
|
||||
@ -403,7 +403,7 @@ typedef struct {
|
||||
/* 0x08 */ f32 distMax;
|
||||
/* 0x0C */ f32 yawUpateRateTarget;
|
||||
/* 0x10 */ f32 maxYawUpdate;
|
||||
/* 0x14 */ f32 unk_14; // never used.
|
||||
/* 0x14 */ f32 unk_14; // never used.
|
||||
/* 0x18 */ f32 atLERPScaleMax;
|
||||
/* 0x1C */ s16 interfaceFlags;
|
||||
/* 0x20 */ Jump1Anim anim;
|
||||
@ -954,7 +954,7 @@ typedef struct {
|
||||
* 0x2: Add atTargetInit to view's lookAt
|
||||
* if initFlags & 0x6060: use world for focus point
|
||||
* 0x3: Add atTargetInit to camera's at
|
||||
* 0x4: Don't update targets?
|
||||
* 0x4: Don't update targets?
|
||||
* 0x8: flag to use atTagetInit as f32 pitch, yaw, r
|
||||
* 0x10: ? unused
|
||||
* 0x20: focus on player
|
||||
@ -1033,7 +1033,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
/* 0x0 */ s16 interfaceFlags;
|
||||
/* 0x2 */ s16 unk_02;
|
||||
/* 0x4 */ Demo6Anim anim;
|
||||
/* 0x4 */ Demo6Anim anim;
|
||||
} Demo6; // size = 0x14
|
||||
|
||||
typedef struct {
|
||||
@ -1157,7 +1157,7 @@ typedef struct {
|
||||
} CamColChk; // size = 0x28
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ char paramData[0x50];
|
||||
/* 0x000 */ char paramData[0x14 * sizeof(void*)];
|
||||
/* 0x050 */ Vec3f at;
|
||||
/* 0x05C */ Vec3f eye;
|
||||
/* 0x068 */ Vec3f up;
|
||||
|
@ -46,6 +46,7 @@
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
@ -53,6 +54,7 @@
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<EnableASAN>false</EnableASAN>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
@ -85,13 +87,15 @@
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>$(ProjectDir)assets;$(ProjectDir)build;$(ProjectDir)include;$(ProjectDir)src;$(ProjectDir);$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\spdlog\include;$(ProjectDir)..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64\PR;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(OutDir);$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\SDL\lib\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLEW\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLFW;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(ProjectDir)assets;$(ProjectDir)build;$(ProjectDir)include;$(ProjectDir)src;$(ProjectDir);$(ProjectDir)..\libultraship\libultraship\Lib\libjpeg\include;$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\spdlog\include;$(ProjectDir)..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64\PR;$(ProjectDir)..\libultraship\libultraship\Lib\SDL;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(OutDir);$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\SDL\lib\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLEW\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLFW;$(ProjectDir)..\StormLib\bin\StormLib\x64\DebugUS\;$(LibraryPath)</LibraryPath>
|
||||
<IntDir>$(Platform)\$(Configuration)Obj\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>$(ProjectDir)assets;$(ProjectDir)build;$(ProjectDir)include;$(ProjectDir)src;$(ProjectDir);$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\spdlog\include;$(ProjectDir)..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64\PR;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(OutDir);$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\SDL\lib\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLEW\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLFW;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(ProjectDir)assets;$(ProjectDir)build;$(ProjectDir)include;$(ProjectDir)src;$(ProjectDir);$(ProjectDir)..\libultraship\libultraship\Lib\libjpeg\include;$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\spdlog\include;$(ProjectDir)..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64;$(ProjectDir)..\libultraship\libultraship\Lib\Fast3D\U64\PR;$(ProjectDir)..\libultraship\libultraship\Lib\SDL;$(ProjectDir)..\libultraship\libultraship\Lib\dr_libs;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(OutDir);$(ProjectDir)..\libultraship\libultraship;$(ProjectDir)..\libultraship\libultraship\Lib\SDL\lib\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLEW\x64;$(ProjectDir)..\libultraship\libultraship\Lib\GLFW;$(ProjectDir)..\StormLib\bin\StormLib\x64\ReleaseUS\;$(LibraryPath)</LibraryPath>
|
||||
<IntDir>$(Platform)\$(Configuration)Obj\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
@ -102,12 +106,12 @@
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<BasicRuntimeChecks>StackFrameRuntimeCheck</BasicRuntimeChecks>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glfw3dll.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<StackReserveSize>8777216</StackReserveSize>
|
||||
<GenerateMapFile>true</GenerateMapFile>
|
||||
<MapExports>true</MapExports>
|
||||
@ -131,7 +135,7 @@
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glfw3dll.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -144,32 +148,34 @@
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glfw3dll.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<IgnoreSpecificDefaultLibraries>
|
||||
</IgnoreSpecificDefaultLibraries>
|
||||
<AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>INCLUDE_GAME_PRINTF;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)GLEW_STATIC </PreprocessorDefinitions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>INCLUDE_GAME_PRINTF;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)GLEW_STATIC </PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>libultraship.lib;ZAPDUtils.lib;opengl32.lib;glu32.lib;SDL2.lib;SDL2main.lib;glew32s.lib;winmm.lib;imm32.lib;version.lib;setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
|
@ -3786,6 +3786,11 @@
|
||||
<ItemGroup>
|
||||
<Image Include="SHIPOFHARKINIAN.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Resource.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="include\macro.inc" />
|
||||
</ItemGroup>
|
||||
|
@ -19,4 +19,8 @@
|
||||
<PropertyGroup>
|
||||
<ShowAllFiles>false</ShowAllFiles>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LocalDebuggerWorkingDirectory>$(TargetDir)</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
</Project>
|
@ -27,6 +27,10 @@
|
||||
#include <Cutscene.h>
|
||||
#include <Texture.h>
|
||||
#include "Lib/stb/stb_image.h"
|
||||
#define DRMP3_IMPLEMENTATION
|
||||
#include "Lib/dr_libs/mp3.h"
|
||||
#define DRWAV_IMPLEMENTATION
|
||||
#include "Lib/dr_libs/wav.h"
|
||||
#include "AudioPlayer.h"
|
||||
#include "Enhancements/debugconsole.h"
|
||||
#include "Enhancements/debugger/debugger.h"
|
||||
@ -53,6 +57,11 @@ OTRGlobals::OTRGlobals() {
|
||||
OTRGlobals::~OTRGlobals() {
|
||||
}
|
||||
|
||||
struct ExtensionEntry {
|
||||
std::string path;
|
||||
std::string ext;
|
||||
};
|
||||
|
||||
extern uintptr_t clearMtx;
|
||||
extern "C" Mtx gMtxClear;
|
||||
extern "C" MtxF gMtxFClear;
|
||||
@ -63,14 +72,28 @@ extern "C" int AudioPlayer_Buffered(void);
|
||||
extern "C" int AudioPlayer_GetDesiredBuffered(void);
|
||||
extern "C" void ResourceMgr_CacheDirectory(const char* resName);
|
||||
extern "C" SequenceData ResourceMgr_LoadSeqByName(const char* path);
|
||||
std::unordered_map<std::string, ExtensionEntry> ExtensionCache;
|
||||
|
||||
// C->C++ Bridge
|
||||
extern "C" void OTRAudio_Init()
|
||||
extern "C" void OTRAudio_Init()
|
||||
{
|
||||
// Precache all our samples, sequences, etc...
|
||||
ResourceMgr_CacheDirectory("audio");
|
||||
}
|
||||
|
||||
extern "C" void OTRExtScanner() {
|
||||
auto lst = *OTRGlobals::Instance->context->GetResourceManager()->ListFiles("*.*").get();
|
||||
|
||||
for (auto& rPath : lst) {
|
||||
std::vector<std::string> raw = StringHelper::Split(rPath, ".");
|
||||
std::string ext = raw[raw.size() - 1];
|
||||
std::string nPath = rPath.substr(0, rPath.size() - (ext.size() + 1));
|
||||
replace(nPath.begin(), nPath.end(), '\\', '/');
|
||||
|
||||
ExtensionCache[nPath] = { rPath, ext };
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void InitOTR() {
|
||||
OTRGlobals::Instance = new OTRGlobals();
|
||||
SaveManager::Instance = new SaveManager();
|
||||
@ -88,6 +111,7 @@ extern "C" void InitOTR() {
|
||||
OTRAudio_Init();
|
||||
DebugConsole_Init();
|
||||
Debug_Init();
|
||||
OTRExtScanner();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
@ -336,13 +360,12 @@ extern "C" char** ResourceMgr_ListFiles(const char* searchMask, int* resultSize)
|
||||
auto lst = OTRGlobals::Instance->context->GetResourceManager()->ListFiles(searchMask);
|
||||
char** result = (char**)malloc(lst->size() * sizeof(char*));
|
||||
|
||||
for (int i = 0; i < lst->size(); i++) {
|
||||
for (size_t i = 0; i < lst->size(); i++) {
|
||||
char* str = (char*)malloc(lst.get()[0][i].size() + 1);
|
||||
memcpy(str, lst.get()[0][i].data(), lst.get()[0][i].size());
|
||||
str[lst.get()[0][i].size()] = '\0';
|
||||
result[i] = str;
|
||||
}
|
||||
|
||||
*resultSize = lst->size();
|
||||
|
||||
return result;
|
||||
@ -459,7 +482,7 @@ extern "C" char* ResourceMgr_LoadArrayByNameAsVec3s(const char* path) {
|
||||
{
|
||||
Vec3s* data = (Vec3s*)malloc(sizeof(Vec3s) * res->scalars.size());
|
||||
|
||||
for (int i = 0; i < res->scalars.size(); i += 3) {
|
||||
for (size_t i = 0; i < res->scalars.size(); i += 3) {
|
||||
data[(i / 3)].x = res->scalars[i + 0].s16;
|
||||
data[(i / 3)].y = res->scalars[i + 1].s16;
|
||||
data[(i / 3)].z = res->scalars[i + 2].s16;
|
||||
@ -491,7 +514,7 @@ extern "C" CollisionHeader* ResourceMgr_LoadColByName(const char* path)
|
||||
colHeader->vtxList = (Vec3s*)malloc(sizeof(Vec3s) * colRes->vertices.size());
|
||||
colHeader->numVertices = colRes->vertices.size();
|
||||
|
||||
for (int i = 0; i < colRes->vertices.size(); i++)
|
||||
for (size_t i = 0; i < colRes->vertices.size(); i++)
|
||||
{
|
||||
colHeader->vtxList[i].x = colRes->vertices[i].x;
|
||||
colHeader->vtxList[i].y = colRes->vertices[i].y;
|
||||
@ -501,7 +524,7 @@ extern "C" CollisionHeader* ResourceMgr_LoadColByName(const char* path)
|
||||
colHeader->polyList = (CollisionPoly*)malloc(sizeof(CollisionPoly) * colRes->polygons.size());
|
||||
colHeader->numPolygons = colRes->polygons.size();
|
||||
|
||||
for (int i = 0; i < colRes->polygons.size(); i++)
|
||||
for (size_t i = 0; i < colRes->polygons.size(); i++)
|
||||
{
|
||||
colHeader->polyList[i].type = colRes->polygons[i].type;
|
||||
colHeader->polyList[i].flags_vIA = colRes->polygons[i].vtxA;
|
||||
@ -515,7 +538,7 @@ extern "C" CollisionHeader* ResourceMgr_LoadColByName(const char* path)
|
||||
|
||||
colHeader->surfaceTypeList = (SurfaceType*)malloc(colRes->polygonTypes.size() * sizeof(SurfaceType));
|
||||
|
||||
for (int i = 0; i < colRes->polygonTypes.size(); i++)
|
||||
for (size_t i = 0; i < colRes->polygonTypes.size(); i++)
|
||||
{
|
||||
colHeader->surfaceTypeList[i].data[0] = colRes->polygonTypes[i] >> 32;
|
||||
colHeader->surfaceTypeList[i].data[1] = colRes->polygonTypes[i] & 0xFFFFFFFF;
|
||||
@ -523,7 +546,7 @@ extern "C" CollisionHeader* ResourceMgr_LoadColByName(const char* path)
|
||||
|
||||
colHeader->cameraDataList = (CamData*)malloc(sizeof(CamData) * colRes->camData->entries.size());
|
||||
|
||||
for (int i = 0; i < colRes->camData->entries.size(); i++)
|
||||
for (size_t i = 0; i < colRes->camData->entries.size(); i++)
|
||||
{
|
||||
colHeader->cameraDataList[i].cameraSType = colRes->camData->entries[i]->cameraSType;
|
||||
colHeader->cameraDataList[i].numCameras = colRes->camData->entries[i]->numData;
|
||||
@ -571,7 +594,7 @@ extern "C" Vtx* ResourceMgr_LoadVtxByName(const char* path)
|
||||
return (Vtx*)res->vertices.data();
|
||||
}
|
||||
|
||||
extern "C" SequenceData ResourceMgr_LoadSeqByName(const char* path)
|
||||
extern "C" SequenceData ResourceMgr_LoadSeqByName(const char* path)
|
||||
{
|
||||
auto file = std::static_pointer_cast<Ship::AudioSequence>(OTRGlobals::Instance->context->GetResourceManager()
|
||||
->LoadResource(path));
|
||||
@ -593,7 +616,63 @@ extern "C" SequenceData ResourceMgr_LoadSeqByName(const char* path)
|
||||
|
||||
std::map<std::string, SoundFontSample*> cachedCustomSFs;
|
||||
|
||||
extern "C" SoundFontSample* ResourceMgr_LoadAudioSample(const char* path)
|
||||
extern "C" SoundFontSample* ReadCustomSample(const char* path) {
|
||||
|
||||
if (!ExtensionCache.contains(path))
|
||||
return nullptr;
|
||||
|
||||
ExtensionEntry entry = ExtensionCache[path];
|
||||
|
||||
auto sampleRaw = OTRGlobals::Instance->context->GetResourceManager()->LoadFile(entry.path);
|
||||
uint32_t* strem = (uint32_t*)sampleRaw->buffer.get();
|
||||
uint8_t* strem2 = (uint8_t*)strem;
|
||||
|
||||
SoundFontSample* sampleC = new SoundFontSample;
|
||||
|
||||
if (entry.ext == "wav") {
|
||||
drwav_uint32 channels;
|
||||
drwav_uint32 sampleRate;
|
||||
drwav_uint64 totalPcm;
|
||||
drmp3_int16* pcmData =
|
||||
drwav_open_memory_and_read_pcm_frames_s16(strem2, sampleRaw->dwBufferSize, &channels, &sampleRate, &totalPcm, NULL);
|
||||
sampleC->size = totalPcm;
|
||||
sampleC->sampleAddr = (uint8_t*)pcmData;
|
||||
sampleC->codec = CODEC_S16;
|
||||
|
||||
sampleC->loop = new AdpcmLoop;
|
||||
sampleC->loop->start = 0;
|
||||
sampleC->loop->end = sampleC->size - 1;
|
||||
sampleC->loop->count = 0;
|
||||
sampleC->sampleRateMagicValue = 'RIFF';
|
||||
sampleC->sampleRate = sampleRate;
|
||||
|
||||
cachedCustomSFs[path] = sampleC;
|
||||
return sampleC;
|
||||
} else if (entry.ext == "mp3") {
|
||||
drmp3_config mp3Info;
|
||||
drmp3_uint64 totalPcm;
|
||||
drmp3_int16* pcmData =
|
||||
drmp3_open_memory_and_read_pcm_frames_s16(strem2, sampleRaw->dwBufferSize, &mp3Info, &totalPcm, NULL);
|
||||
|
||||
sampleC->size = totalPcm * mp3Info.channels * sizeof(short);
|
||||
sampleC->sampleAddr = (uint8_t*)pcmData;
|
||||
sampleC->codec = CODEC_S16;
|
||||
|
||||
sampleC->loop = new AdpcmLoop;
|
||||
sampleC->loop->start = 0;
|
||||
sampleC->loop->end = sampleC->size;
|
||||
sampleC->loop->count = 0;
|
||||
sampleC->sampleRateMagicValue = 'RIFF';
|
||||
sampleC->sampleRate = mp3Info.sampleRate;
|
||||
|
||||
cachedCustomSFs[path] = sampleC;
|
||||
return sampleC;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
extern "C" SoundFontSample* ResourceMgr_LoadAudioSample(const char* path)
|
||||
{
|
||||
if (std::string(path) == "")
|
||||
return nullptr;
|
||||
@ -601,56 +680,25 @@ extern "C" SoundFontSample* ResourceMgr_LoadAudioSample(const char* path)
|
||||
if (cachedCustomSFs.find(path) != cachedCustomSFs.end())
|
||||
return cachedCustomSFs[path];
|
||||
|
||||
// Check if our file is actually a wav...
|
||||
auto sampleRaw = OTRGlobals::Instance->context->GetResourceManager()->LoadFile(path);
|
||||
uint32_t* strem = (uint32_t*)sampleRaw->buffer.get();
|
||||
uint8_t* strem2 = (uint8_t*)strem;
|
||||
SoundFontSample* cSample = ReadCustomSample(path);
|
||||
|
||||
if (strem2[0] == 'R' && strem2[1] == 'I' && strem2[2] == 'F' && strem2[3] == 'F')
|
||||
{
|
||||
SoundFontSample* sampleC = (SoundFontSample*)malloc(sizeof(SoundFontSample));
|
||||
|
||||
*strem++; // RIFF
|
||||
*strem++; // size
|
||||
*strem++; // WAVE
|
||||
|
||||
*strem++; // fmt
|
||||
int fmtChunkSize = *strem++;
|
||||
*strem++; // wFormatTag + wChannels
|
||||
int32_t sampleRate = *strem++; // dwSamplesPerSec
|
||||
// OTRTODO: Make sure wav format is what the audio driver wants!
|
||||
|
||||
strem = (uint32_t*)&strem2[0x0C + fmtChunkSize + 8 + 4];
|
||||
sampleC->size = *strem++;
|
||||
sampleC->sampleAddr = (uint8_t*)strem;
|
||||
sampleC->codec = CODEC_S16;
|
||||
|
||||
// OTRTODO: Grab loop data from wav
|
||||
sampleC->loop = (AdpcmLoop*)malloc(sizeof(AdpcmLoop));
|
||||
sampleC->loop->start = 0;
|
||||
sampleC->loop->end = sampleC->size / 2; // OTRTODO: This calculation is probably incorrect... Sometimes it goes past the sample, sometimes it stops too early...
|
||||
sampleC->loop->count = 0;
|
||||
sampleC->sampleRateMagicValue = 'RIFF';
|
||||
sampleC->sampleRate = sampleRate;
|
||||
|
||||
cachedCustomSFs[path] = sampleC;
|
||||
return sampleC;
|
||||
}
|
||||
if (cSample != nullptr)
|
||||
return cSample;
|
||||
|
||||
auto sample = std::static_pointer_cast<Ship::AudioSample>(
|
||||
OTRGlobals::Instance->context->GetResourceManager()->LoadResource(path));
|
||||
|
||||
|
||||
if (sample == nullptr)
|
||||
return NULL;
|
||||
|
||||
if (sample->cachedGameAsset != nullptr)
|
||||
if (sample->cachedGameAsset != nullptr)
|
||||
{
|
||||
SoundFontSample* sampleC = (SoundFontSample*)sample->cachedGameAsset;
|
||||
return (SoundFontSample*)sample->cachedGameAsset;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
SoundFontSample* sampleC = (SoundFontSample*)malloc(sizeof(SoundFontSample));
|
||||
SoundFontSample* sampleC = new SoundFontSample;
|
||||
|
||||
sampleC->sampleAddr = sample->data.data();
|
||||
|
||||
@ -660,14 +708,14 @@ extern "C" SoundFontSample* ResourceMgr_LoadAudioSample(const char* path)
|
||||
sampleC->unk_bit26 = sample->unk_bit26;
|
||||
sampleC->unk_bit25 = sample->unk_bit25;
|
||||
|
||||
sampleC->book = (AdpcmBook*)malloc(sizeof(AdpcmBook) + (sample->book.books.size() * sizeof(int16_t)));
|
||||
sampleC->book = new AdpcmBook[sample->book.books.size() * sizeof(int16_t)];
|
||||
sampleC->book->npredictors = sample->book.npredictors;
|
||||
sampleC->book->order = sample->book.order;
|
||||
|
||||
for (int i = 0; i < sample->book.books.size(); i++)
|
||||
for (size_t i = 0; i < sample->book.books.size(); i++)
|
||||
sampleC->book->book[i] = sample->book.books[i];
|
||||
|
||||
sampleC->loop = (AdpcmLoop*)malloc(sizeof(AdpcmLoop));
|
||||
sampleC->loop = new AdpcmLoop;
|
||||
sampleC->loop->start = sample->loop.start;
|
||||
sampleC->loop->end = sample->loop.end;
|
||||
sampleC->loop->count = sample->loop.count;
|
||||
@ -675,7 +723,7 @@ extern "C" SoundFontSample* ResourceMgr_LoadAudioSample(const char* path)
|
||||
for (int i = 0; i < 16; i++)
|
||||
sampleC->loop->state[i] = 0;
|
||||
|
||||
for (int i = 0; i < sample->loop.states.size(); i++)
|
||||
for (size_t i = 0; i < sample->loop.states.size(); i++)
|
||||
sampleC->loop->state[i] = sample->loop.states[i];
|
||||
|
||||
sample->cachedGameAsset = sampleC;
|
||||
@ -690,11 +738,11 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
if (soundFont == nullptr)
|
||||
return NULL;
|
||||
|
||||
if (soundFont->cachedGameAsset != nullptr)
|
||||
if (soundFont->cachedGameAsset != nullptr)
|
||||
{
|
||||
return (SoundFont*)soundFont->cachedGameAsset;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
SoundFont* soundFontC = (SoundFont*)malloc(sizeof(SoundFont));
|
||||
|
||||
@ -707,7 +755,7 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
|
||||
soundFontC->drums = (Drum**)malloc(sizeof(Drum*) * soundFont->drums.size());
|
||||
|
||||
for (int i = 0; i < soundFont->drums.size(); i++)
|
||||
for (size_t i = 0; i < soundFont->drums.size(); i++)
|
||||
{
|
||||
Drum* drum = (Drum*)malloc(sizeof(Drum));
|
||||
|
||||
@ -721,7 +769,7 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
{
|
||||
drum->envelope = (AdsrEnvelope*)malloc(sizeof(AdsrEnvelope) * soundFont->drums[i].env.size());
|
||||
|
||||
for (int k = 0; k < soundFont->drums[i].env.size(); k++)
|
||||
for (size_t k = 0; k < soundFont->drums[i].env.size(); k++)
|
||||
{
|
||||
drum->envelope[k].delay = BOMSWAP16(soundFont->drums[i].env[k]->delay);
|
||||
drum->envelope[k].arg = BOMSWAP16(soundFont->drums[i].env[k]->arg);
|
||||
@ -736,9 +784,9 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
|
||||
soundFontC->instruments = (Instrument**)malloc(sizeof(Instrument*) * soundFont->instruments.size());
|
||||
|
||||
for (int i = 0; i < soundFont->instruments.size(); i++) {
|
||||
for (size_t i = 0; i < soundFont->instruments.size(); i++) {
|
||||
|
||||
if (soundFont->instruments[i].isValidEntry)
|
||||
if (soundFont->instruments[i].isValidEntry)
|
||||
{
|
||||
Instrument* inst = (Instrument*)malloc(sizeof(Instrument));
|
||||
|
||||
@ -749,17 +797,17 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
|
||||
if (soundFont->instruments[i].env.size() == 0)
|
||||
inst->envelope = NULL;
|
||||
else
|
||||
else
|
||||
{
|
||||
inst->envelope = (AdsrEnvelope*)malloc(sizeof(AdsrEnvelope) * soundFont->instruments[i].env.size());
|
||||
|
||||
for (int k = 0; k < soundFont->instruments[i].env.size(); k++)
|
||||
|
||||
for (int k = 0; k < soundFont->instruments[i].env.size(); k++)
|
||||
{
|
||||
inst->envelope[k].delay = BOMSWAP16(soundFont->instruments[i].env[k]->delay);
|
||||
inst->envelope[k].arg = BOMSWAP16(soundFont->instruments[i].env[k]->arg);
|
||||
}
|
||||
}
|
||||
if (soundFont->instruments[i].lowNotesSound != nullptr)
|
||||
if (soundFont->instruments[i].lowNotesSound != nullptr)
|
||||
{
|
||||
inst->lowNotesSound.sample =
|
||||
ResourceMgr_LoadAudioSample(soundFont->instruments[i].lowNotesSound->sampleFileName.c_str());
|
||||
@ -789,7 +837,8 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
}
|
||||
|
||||
soundFontC->instruments[i] = inst;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
soundFontC->instruments[i] = nullptr;
|
||||
}
|
||||
@ -797,7 +846,7 @@ extern "C" SoundFont* ResourceMgr_LoadAudioSoundFont(const char* path) {
|
||||
|
||||
soundFontC->soundEffects = (SoundFontSound*)malloc(sizeof(SoundFontSound) * soundFont->soundEffects.size());
|
||||
|
||||
for (int i = 0; i < soundFont->soundEffects.size(); i++)
|
||||
for (size_t i = 0; i < soundFont->soundEffects.size(); i++)
|
||||
{
|
||||
soundFontC->soundEffects[i].sample = ResourceMgr_LoadAudioSample(soundFont->soundEffects[i]->sampleFileName.c_str());
|
||||
soundFontC->soundEffects[i].tuning = soundFont->soundEffects[i]->tuning;
|
||||
@ -812,10 +861,12 @@ extern "C" int ResourceMgr_OTRSigCheck(char* imgData)
|
||||
{
|
||||
uintptr_t i = (uintptr_t)(imgData);
|
||||
|
||||
if (i == 0xD9000000 || i == 0xE7000000 || (i & 1) == 1)
|
||||
// if (i == 0xD9000000 || i == 0xE7000000 || (i & 1) == 1)
|
||||
if ((i & 1) == 1)
|
||||
return 0;
|
||||
|
||||
if ((i & 0xFF000000) != 0xAB000000 && (i & 0xFF000000) != 0xCD000000 && i != 0) {
|
||||
// if ((i & 0xFF000000) != 0xAB000000 && (i & 0xFF000000) != 0xCD000000 && i != 0) {
|
||||
if (i != 0) {
|
||||
if (imgData[0] == '_' && imgData[1] == '_' && imgData[2] == 'O' && imgData[3] == 'T' && imgData[4] == 'R' &&
|
||||
imgData[5] == '_' && imgData[6] == '_')
|
||||
return 1;
|
||||
@ -839,13 +890,13 @@ extern "C" AnimationHeaderCommon* ResourceMgr_LoadAnimByName(const char* path) {
|
||||
animNormal->common.frameCount = res->frameCount;
|
||||
animNormal->frameData = (int16_t*)malloc(res->rotationValues.size() * sizeof(int16_t));
|
||||
|
||||
for (int i = 0; i < res->rotationValues.size(); i++)
|
||||
for (size_t i = 0; i < res->rotationValues.size(); i++)
|
||||
animNormal->frameData[i] = res->rotationValues[i];
|
||||
|
||||
|
||||
animNormal->jointIndices = (JointIndex*)malloc(res->rotationIndices.size() * sizeof(Vec3s));
|
||||
|
||||
for (int i = 0; i < res->rotationIndices.size(); i++) {
|
||||
for (size_t i = 0; i < res->rotationIndices.size(); i++) {
|
||||
animNormal->jointIndices[i].x = res->rotationIndices[i].x;
|
||||
animNormal->jointIndices[i].y = res->rotationIndices[i].y;
|
||||
animNormal->jointIndices[i].z = res->rotationIndices[i].z;
|
||||
@ -861,12 +912,12 @@ extern "C" AnimationHeaderCommon* ResourceMgr_LoadAnimByName(const char* path) {
|
||||
|
||||
animCurve->copyValues = (s16*)malloc(res->copyValuesArr.size() * sizeof(s16));
|
||||
|
||||
for (int i = 0; i < res->copyValuesArr.size(); i++)
|
||||
for (size_t i = 0; i < res->copyValuesArr.size(); i++)
|
||||
animCurve->copyValues[i] = res->copyValuesArr[i];
|
||||
|
||||
animCurve->transformData = (TransformData*)malloc(res->transformDataArr.size() * sizeof(TransformData));
|
||||
|
||||
for (int i = 0; i < res->transformDataArr.size(); i++)
|
||||
for (size_t i = 0; i < res->transformDataArr.size(); i++)
|
||||
{
|
||||
animCurve->transformData[i].unk_00 = res->transformDataArr[i].unk_00;
|
||||
animCurve->transformData[i].unk_02 = res->transformDataArr[i].unk_02;
|
||||
@ -876,7 +927,7 @@ extern "C" AnimationHeaderCommon* ResourceMgr_LoadAnimByName(const char* path) {
|
||||
}
|
||||
|
||||
animCurve->refIndex = (u8*)malloc(res->refIndexArr.size());
|
||||
for (int i = 0; i < res->refIndexArr.size(); i++)
|
||||
for (size_t i = 0; i < res->refIndexArr.size(); i++)
|
||||
animCurve->refIndex[i] = res->refIndexArr[i];
|
||||
|
||||
anim = (AnimationHeaderCommon*)animCurve;
|
||||
@ -926,7 +977,7 @@ extern "C" SkeletonHeader* ResourceMgr_LoadSkeletonByName(const char* path) {
|
||||
baseHeader->segment = (void**)malloc(sizeof(StandardLimb*) * res->limbTable.size());
|
||||
}
|
||||
|
||||
for (int i = 0; i < res->limbTable.size(); i++) {
|
||||
for (size_t i = 0; i < res->limbTable.size(); i++) {
|
||||
std::string limbStr = res->limbTable[i];
|
||||
auto limb = std::static_pointer_cast<Ship::SkeletonLimb>(
|
||||
OTRGlobals::Instance->context->GetResourceManager()->LoadResource(limbStr.c_str()));
|
||||
@ -1023,7 +1074,7 @@ extern "C" SkeletonHeader* ResourceMgr_LoadSkeletonByName(const char* path) {
|
||||
animData->limbModifications = new SkinLimbModif[animData->limbModifCount];
|
||||
animData->dlist = ResourceMgr_LoadGfxByName(limb->skinDList2.c_str());
|
||||
|
||||
for (int i = 0; i < skinDataSize; i++)
|
||||
for (size_t i = 0; i < skinDataSize; i++)
|
||||
{
|
||||
animData->limbModifications[i].vtxCount = limb->skinData[i].unk_8_arr.size();
|
||||
animData->limbModifications[i].transformCount = limb->skinData[i].unk_C_arr.size();
|
||||
@ -1241,7 +1292,7 @@ extern "C" uint32_t OTRGetCurrentHeight() {
|
||||
|
||||
extern "C" void OTRControllerCallback(ControllerCallback* controller) {
|
||||
auto controllers = OTRGlobals::Instance->context->GetWindow()->Controllers;
|
||||
for (int i = 0; i < controllers.size(); i++) {
|
||||
for (size_t i = 0; i < controllers.size(); i++) {
|
||||
for (int j = 0; j < controllers[i].size(); j++) {
|
||||
OTRGlobals::Instance->context->GetWindow()->Controllers[i][j]->WriteToSource(controller);
|
||||
}
|
||||
|
@ -39,13 +39,16 @@ void ResourceMgr_CacheDirectory(const char* resName);
|
||||
char** ResourceMgr_ListFiles(const char* searchMask, int* resultSize);
|
||||
void ResourceMgr_LoadFile(const char* resName);
|
||||
char* ResourceMgr_LoadFileFromDisk(const char* filePath);
|
||||
char* ResourceMgr_LoadJPEG(char* data, int dataSize);
|
||||
char* ResourceMgr_LoadTexByName(const char* texPath);
|
||||
char* ResourceMgr_LoadTexOrDListByName(const char* filePath);
|
||||
char* ResourceMgr_LoadPlayerAnimByName(const char* animPath);
|
||||
AnimationHeaderCommon* ResourceMgr_LoadAnimByName(const char* path);
|
||||
char* ResourceMgr_GetNameByCRC(uint64_t crc, char* alloc);
|
||||
Gfx* ResourceMgr_LoadGfxByCRC(uint64_t crc);
|
||||
Gfx* ResourceMgr_LoadGfxByName(const char* path);
|
||||
Gfx* ResourceMgr_PatchGfxByName(const char* path, int size);
|
||||
char* ResourceMgr_LoadArrayByNameAsVec3s(const char* path);
|
||||
Vtx* ResourceMgr_LoadVtxByCRC(uint64_t crc);
|
||||
|
||||
Vtx* ResourceMgr_LoadVtxByName(const char* path);
|
||||
@ -60,6 +63,7 @@ bool Config_setValue(char* category, char* key, char* value);
|
||||
|
||||
uint64_t GetPerfCounter();
|
||||
struct SkeletonHeader* ResourceMgr_LoadSkeletonByName(const char* path);
|
||||
s32* ResourceMgr_LoadCSByName(const char* path);
|
||||
int ResourceMgr_OTRSigCheck(char* imgData);
|
||||
uint64_t osGetTime(void);
|
||||
uint32_t osGetCount(void);
|
||||
@ -85,4 +89,4 @@ void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples);
|
||||
int Controller_ShouldRumble(size_t i);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -449,6 +449,7 @@ bool func_8009899C(GlobalContext* globalCtx, Ship::SceneCommand* cmd)
|
||||
|
||||
k = 0;
|
||||
//i = globalCtx->objectCtx.unk_09;
|
||||
i = 0;
|
||||
firstStatus = &globalCtx->objectCtx.status[0];
|
||||
status = &globalCtx->objectCtx.status[i];
|
||||
|
||||
@ -913,7 +914,7 @@ extern "C" s32 OTRfunc_8009728C(GlobalContext* globalCtx, RoomContext* roomCtx,
|
||||
return 0; // UH OH
|
||||
|
||||
size = globalCtx->roomList[roomNum].vromEnd - globalCtx->roomList[roomNum].vromStart;
|
||||
roomCtx->unk_34 = (void*)ALIGN16((u32)roomCtx->bufPtrs[roomCtx->unk_30] - ((size + 8) * roomCtx->unk_30 + 7));
|
||||
roomCtx->unk_34 = (void*)ALIGN16((uintptr_t)roomCtx->bufPtrs[roomCtx->unk_30] - ((size + 8) * roomCtx->unk_30 + 7));
|
||||
|
||||
osCreateMesgQueue(&roomCtx->loadQueue, &roomCtx->loadMsg, 1);
|
||||
//DmaMgr_SendRequest2(&roomCtx->dmaRequest, roomCtx->unk_34, globalCtx->roomList[roomNum].vromStart, size, 0,
|
||||
|
@ -312,7 +312,7 @@ void DmaMgr_ThreadEntry(void* arg0) {
|
||||
osSyncPrintf("DMAマネージャスレッド実行開始\n");
|
||||
while (true) {
|
||||
osRecvMesg(&sDmaMgrMsgQueue, &msg, OS_MESG_BLOCK);
|
||||
req = (DmaRequest*)msg;
|
||||
req = (DmaRequest*)msg.ptr;
|
||||
if (req == NULL) {
|
||||
break;
|
||||
}
|
||||
@ -360,7 +360,7 @@ s32 DmaMgr_SendRequestImpl(DmaRequest* req, uintptr_t ram, uintptr_t vrom, size_
|
||||
}
|
||||
}
|
||||
|
||||
osSendMesg(&sDmaMgrMsgQueue, req, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&sDmaMgrMsgQueue, req, OS_MESG_BLOCK);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -371,7 +371,7 @@ s32 DmaMgr_SendRequest0(uintptr_t ram, uintptr_t vrom, size_t size) {
|
||||
s32 ret;
|
||||
|
||||
osCreateMesgQueue(&queue, &msg, 1);
|
||||
ret = DmaMgr_SendRequestImpl(&req, ram, vrom, size, 0, &queue, NULL);
|
||||
ret = DmaMgr_SendRequestImpl(&req, ram, vrom, size, 0, &queue, OS_MESG_PTR(NULL));
|
||||
if (ret == -1) {
|
||||
return ret;
|
||||
}
|
||||
@ -413,7 +413,7 @@ void DmaMgr_Init(void) {
|
||||
}
|
||||
|
||||
#if 0
|
||||
if ((uintptr_t)_bootSegmentRomStart != gDmaDataTable[0].vromEnd)
|
||||
if ((uintptr_t)_bootSegmentRomStart != gDmaDataTable[0].vromEnd)
|
||||
{
|
||||
osSyncPrintf("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart,
|
||||
gDmaDataTable[0].vromEnd);
|
||||
|
@ -63,7 +63,7 @@ void ArenaImpl_LockInit(Arena* arena) {
|
||||
}
|
||||
|
||||
void ArenaImpl_Lock(Arena* arena) {
|
||||
osSendMesg(&arena->lock, NULL, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&arena->lock, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void ArenaImpl_Unlock(Arena* arena) {
|
||||
|
@ -7,7 +7,7 @@ void func_800C3C80(AudioMgr* audioMgr) {
|
||||
|
||||
task = audioMgr->rspTask;
|
||||
if (audioMgr->rspTask->taskQueue != NULL) {
|
||||
osSendMesg(task->taskQueue, NULL, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(task->taskQueue, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,8 +25,8 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
|
||||
audioMgr->audioTask.list = audioMgr->rspTask->task;
|
||||
audioMgr->audioTask.msgQ = &audioMgr->unk_AC;
|
||||
|
||||
audioMgr->audioTask.msg = NULL;
|
||||
osSendMesg(&audioMgr->sched->cmdQ, &audioMgr->audioTask, OS_MESG_BLOCK);
|
||||
audioMgr->audioTask.msg.ptr = NULL;
|
||||
osSendMesgPtr(&audioMgr->sched->cmdQ, &audioMgr->audioTask, OS_MESG_BLOCK);
|
||||
Sched_SendEntryMsg(audioMgr->sched);
|
||||
}
|
||||
|
||||
@ -96,7 +96,7 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
|
||||
osCreateMesgQueue(&audioMgr->unk_74, &audioMgr->unk_8C, 8);
|
||||
osCreateMesgQueue(&audioMgr->unk_C8, &audioMgr->unk_E0, 1);
|
||||
|
||||
osSendMesg(&audioMgr->unk_AC, NULL, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&audioMgr->unk_AC, NULL, OS_MESG_BLOCK);
|
||||
|
||||
static bool hasInitialized = false;
|
||||
|
||||
@ -107,7 +107,7 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
|
||||
Audio_Init();
|
||||
AudioLoad_SetDmaHandler(DmaMgr_DmaHandler);
|
||||
Audio_InitSound();
|
||||
osSendMesg(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK);
|
||||
ModInternal_ExecuteAudioInitHooks();
|
||||
// Removed due to crash
|
||||
//IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->unk_74);
|
||||
|
@ -251,7 +251,7 @@ void AudioHeap_PopCache(s32 tableType) {
|
||||
persistent->numEntries--;
|
||||
}
|
||||
|
||||
void AudioHeap_InitMainPools(ptrdiff_t initPoolSize) {
|
||||
void AudioHeap_InitMainPools(size_t initPoolSize) {
|
||||
AudioHeap_AllocPoolInit(&gAudioContext.audioInitPool, gAudioContext.audioHeap, initPoolSize);
|
||||
AudioHeap_AllocPoolInit(&gAudioContext.audioSessionPool, gAudioContext.audioHeap + initPoolSize,
|
||||
gAudioContext.audioHeapSize - initPoolSize);
|
||||
@ -1150,9 +1150,9 @@ void AudioHeap_UnapplySampleCacheForFont(SampleCacheEntry* entry, s32 fontId) {
|
||||
Drum* drum;
|
||||
Instrument* inst;
|
||||
SoundFontSound* sfx;
|
||||
s32 instId;
|
||||
s32 drumId;
|
||||
s32 sfxId;
|
||||
size_t instId;
|
||||
size_t drumId;
|
||||
size_t sfxId;
|
||||
|
||||
for (instId = 0; instId < gAudioContext.soundFonts[fontId].numInstruments; instId++) {
|
||||
inst = Audio_GetInstrumentInner(fontId, instId);
|
||||
@ -1203,7 +1203,7 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) {
|
||||
}
|
||||
}
|
||||
|
||||
void AudioHeap_UnapplySampleCache(SampleCacheEntry* entry, SoundFontSample* sample)
|
||||
void AudioHeap_UnapplySampleCache(SampleCacheEntry* entry, SoundFontSample* sample)
|
||||
{
|
||||
if (!gUseLegacySD)
|
||||
return;
|
||||
@ -1272,18 +1272,18 @@ void AudioHeap_DiscardSampleCaches(void) {
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
u32 oldAddr;
|
||||
u32 newAddr;
|
||||
uintptr_t oldAddr;
|
||||
uintptr_t newAddr;
|
||||
size_t size;
|
||||
u8 newMedium;
|
||||
} StorageChange;
|
||||
|
||||
void AudioHeap_ChangeStorage(StorageChange* change, SoundFontSample* sample) {
|
||||
if (sample != NULL) {
|
||||
u32 start = change->oldAddr;
|
||||
u32 end = change->oldAddr + change->size;
|
||||
uintptr_t start = change->oldAddr;
|
||||
uintptr_t end = change->oldAddr + change->size;
|
||||
|
||||
if (start <= (u32)sample->sampleAddr && (u32)sample->sampleAddr < end) {
|
||||
if (start <= sample->sampleAddr && sample->sampleAddr < end) {
|
||||
sample->sampleAddr = sample->sampleAddr - start + change->newAddr;
|
||||
sample->medium = change->newMedium;
|
||||
}
|
||||
@ -1306,7 +1306,7 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
|
||||
s32 numFonts;
|
||||
s32 instId;
|
||||
s32 drumId;
|
||||
s32 sfxId;
|
||||
size_t sfxId;
|
||||
StorageChange change;
|
||||
s32 sampleBankId1;
|
||||
s32 sampleBankId2;
|
||||
|
@ -10,8 +10,8 @@ const s16 D_8014A6C0[] = {
|
||||
0x0030, // gTatumsPerBeat
|
||||
};
|
||||
|
||||
//const AudioContextInitSizes D_8014A6C4 = { 0x37F00, 0xE0E0, 0xBCE0 };
|
||||
const AudioContextInitSizes D_8014A6C4 = { 0x37F000, 0xE0E00, 0xBCE00 }; // OTRTODO: This might be overkill...
|
||||
// OTRTODO: This might be overkill...
|
||||
const AudioContextInitSizes D_8014A6C4 = { 0x37F000, 0xE0E00, 0xBCE00 };
|
||||
|
||||
ReverbSettings D_80133420[][3] = {
|
||||
{
|
||||
|
@ -21,8 +21,8 @@ typedef enum {
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 sampleBankId1;
|
||||
/* 0x04 */ s32 sampleBankId2;
|
||||
/* 0x08 */ s32 baseAddr1;
|
||||
/* 0x0C */ s32 baseAddr2;
|
||||
/* 0x08 */ intptr_t baseAddr1;
|
||||
/* 0x0C */ intptr_t baseAddr2;
|
||||
/* 0x10 */ u32 medium1;
|
||||
/* 0x14 */ u32 medium2;
|
||||
} RelocInfo; // size = 0x18
|
||||
@ -40,27 +40,28 @@ void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus);
|
||||
void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo, s32 temporary);
|
||||
void AudioLoad_RelocateSample(SoundFontSound* sound, SoundFontData* mem, RelocInfo* relocInfo, int fontId);
|
||||
void AudioLoad_DiscardFont(s32 fontId);
|
||||
u32 AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad);
|
||||
void* AudioLoad_SyncLoad(u32 tableType, u32 tableId, s32* didAllocate);
|
||||
uintptr_t AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad);
|
||||
uintptr_t AudioLoad_SyncLoad(u32 tableType, u32 tableId, s32* didAllocate);
|
||||
u32 AudioLoad_GetRealTableIndex(s32 tableType, u32 tableId);
|
||||
void* AudioLoad_SearchCaches(s32 tableType, s32 id);
|
||||
AudioTable* AudioLoad_GetLoadTable(s32 tableType);
|
||||
void AudioLoad_SyncDma(uintptr_t devAddr, u8* addr, size_t size, s32 medium);
|
||||
void AudioLoad_SyncDmaUnkMedium(u32 devAddr, u8* addr, size_t size, s32 unkMediumParam);
|
||||
s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, u32 devAddr, void* ramAddr, size_t size,
|
||||
void AudioLoad_SyncDmaUnkMedium(uintptr_t devAddr, u8* addr, size_t size, s32 unkMediumParam);
|
||||
s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr, uintptr_t ramAddr, size_t size,
|
||||
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType);
|
||||
void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData, OSMesgQueue* retQueue);
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, u32 devAddr, void* ramAddr, ptrdiff_t size, s32 medium,
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t devAddr, uintptr_t ramAddr,
|
||||
size_t size, s32 medium,
|
||||
s32 nChunks, OSMesgQueue* retQueue, s32 retMsg);
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoad(u32 devAddr, void* ramAddr, size_t size, s32 medium, s32 nChunks,
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoad(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s32 medium, s32 nChunks,
|
||||
OSMesgQueue* retQueue, s32 retMsg);
|
||||
void AudioLoad_AsyncDma(AudioAsyncLoad* asyncLoad, size_t size);
|
||||
void AudioLoad_AsyncDmaUnkMedium(u32 devAddr, void* ramAddr, size_t size, s16 arg3);
|
||||
void AudioLoad_AsyncDmaUnkMedium(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s16 arg3);
|
||||
u8* AudioLoad_SyncLoadSeq(s32 seqId);
|
||||
s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus);
|
||||
void AudioLoad_DmaSlowCopy(AudioSlowLoad* slowLoad, ptrdiff_t size);
|
||||
void AudioLoad_DmaSlowCopy(AudioSlowLoad* slowLoad, size_t size);
|
||||
void AudioLoad_ProcessSlowLoads(s32 resetStatus);
|
||||
void AudioLoad_DmaSlowCopyUnkMedium(s32 devAddr, u8* ramAddr, ptrdiff_t size, s32 arg3);
|
||||
void AudioLoad_DmaSlowCopyUnkMedium(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s32 arg3);
|
||||
|
||||
OSMesgQueue sScriptLoadQueue;
|
||||
OSMesg sScriptLoadMesgBuf[0x10];
|
||||
@ -115,11 +116,11 @@ void AudioLoad_DecreaseSampleDmaTtls(void) {
|
||||
gAudioContext.unused2628 = 0;
|
||||
}
|
||||
|
||||
void* AudioLoad_DmaSampleData(u32 devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium) {
|
||||
uintptr_t AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium) {
|
||||
s32 pad1;
|
||||
SampleDma* dma;
|
||||
s32 hasDma = false;
|
||||
u32 dmaDevAddr;
|
||||
uintptr_t dmaDevAddr;
|
||||
u32 pad2;
|
||||
u32 dmaIndex;
|
||||
u32 transfer;
|
||||
@ -288,7 +289,6 @@ void AudioLoad_InitSampleDmaBuffers(s32 arg0) {
|
||||
|
||||
s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
|
||||
return true;
|
||||
|
||||
if (fontId == 0xFF) {
|
||||
return true;
|
||||
|
||||
@ -390,7 +390,7 @@ SoundFontData* AudioLoad_SyncLoadSeqFonts(s32 seqId, u32* outDefaultFontId) {
|
||||
|
||||
while (numFonts > 0) {
|
||||
fontId = gAudioContext.sequenceFontTable[index++];
|
||||
|
||||
|
||||
font = AudioLoad_SyncLoadFont(fontId);
|
||||
numFonts--;
|
||||
}
|
||||
@ -416,7 +416,7 @@ void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1) {
|
||||
s32 AudioLoad_SyncLoadSample(SoundFontSample* sample, s32 fontId) {
|
||||
void* sampleAddr;
|
||||
|
||||
if (sample->unk_bit25 == 1)
|
||||
if (sample->unk_bit25 == 1)
|
||||
{
|
||||
if (sample->medium != MEDIUM_RAM) {
|
||||
sampleAddr = AudioHeap_AllocSampleCache(sample->size, fontId, (void*)sample->sampleAddr, sample->medium,
|
||||
@ -464,7 +464,7 @@ s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId) {
|
||||
|
||||
void AudioLoad_AsyncLoad(s32 tableType, s32 id, s32 nChunks, s32 retData, OSMesgQueue* retQueue) {
|
||||
if (AudioLoad_AsyncLoadInner(tableType, id, nChunks, retData, retQueue) == NULL) {
|
||||
osSendMesg(retQueue, 0xFFFFFFFF, OS_MESG_NOBLOCK);
|
||||
osSendMesg32(retQueue, 0xFFFFFFFF, OS_MESG_NOBLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
@ -483,7 +483,7 @@ void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* ret
|
||||
u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts) {
|
||||
s32 index;
|
||||
|
||||
if (!gUseLegacySD)
|
||||
if (!gUseLegacySD)
|
||||
{
|
||||
if (seqId == 255)
|
||||
return NULL;
|
||||
@ -555,6 +555,8 @@ s32 AudioLoad_SyncInitSeqPlayer(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
// call matches but is UB because it too is missing a return, and using the
|
||||
// result of a non-void function that has failed to return a value is UB.
|
||||
// The callers of this function do not use the return value, so it's fine.
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIdx, s32 seqId, s32 skipTicks) {
|
||||
@ -565,6 +567,8 @@ s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIdx, s32 seqId, s32 skipTicks
|
||||
gAudioContext.seqPlayers[playerIdx].skipTicks = skipTicks;
|
||||
AudioLoad_SyncInitSeqPlayerInternal(playerIdx, seqId, 0);
|
||||
// Missing return, see above.
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
@ -581,6 +585,8 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
AudioSeq_SequencePlayerDisable(seqPlayer);
|
||||
|
||||
fontId = 0xFF;
|
||||
index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
|
||||
numFonts = gAudioContext.sequenceFontTable[index++];
|
||||
|
||||
if (gUseLegacySD) {
|
||||
index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
|
||||
@ -594,11 +600,11 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
numFonts--;
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
SequenceData seqData2 = ResourceMgr_LoadSeqByName(sequenceMap[seqId]);
|
||||
|
||||
for (int i = 0; i < seqData2.numFonts; i++)
|
||||
for (int i = 0; i < seqData2.numFonts; i++)
|
||||
{
|
||||
fontId = seqData2.fonts[i];
|
||||
AudioLoad_SyncLoadFont(fontId); // NOTE: If this is commented out, then enemies will play child link sounds...
|
||||
@ -607,14 +613,13 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) {
|
||||
}
|
||||
|
||||
seqData = AudioLoad_SyncLoadSeq(seqId);
|
||||
|
||||
|
||||
if (seqData == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
AudioSeq_ResetSequencePlayer(seqPlayer);
|
||||
seqPlayer->seqId = seqId;
|
||||
|
||||
if (gUseLegacySD)
|
||||
seqPlayer->defaultFont = AudioLoad_GetRealTableIndex(FONT_TABLE, fontId);
|
||||
else
|
||||
@ -642,12 +647,12 @@ u8* AudioLoad_SyncLoadSeq(s32 seqId) {
|
||||
return AudioLoad_SyncLoad(SEQUENCE_TABLE, seqId, &didAllocate);
|
||||
}
|
||||
|
||||
u32 AudioLoad_GetSampleBank(u32 sampleBankId, u32* outMedium) {
|
||||
uintptr_t AudioLoad_GetSampleBank(u32 sampleBankId, u32* outMedium) {
|
||||
return AudioLoad_TrySyncLoadSampleBank(sampleBankId, outMedium, true);
|
||||
}
|
||||
|
||||
u32 AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad) {
|
||||
void* ret;
|
||||
uintptr_t AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad) {
|
||||
uintptr_t ret;
|
||||
AudioTable* sampleBankTable;
|
||||
u32 realTableId = AudioLoad_GetRealTableIndex(SAMPLE_TABLE, sampleBankId);
|
||||
s8 cachePolicy;
|
||||
@ -727,7 +732,7 @@ SoundFontData* AudioLoad_SyncLoadFont(u32 fontId) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
uintptr_t AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
size_t size;
|
||||
AudioTable* table;
|
||||
s32 pad;
|
||||
@ -735,7 +740,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
s32 status;
|
||||
uintptr_t romAddr;
|
||||
s32 cachePolicy;
|
||||
void* ret;
|
||||
uintptr_t ret;
|
||||
u32 realId;
|
||||
|
||||
realId = AudioLoad_GetRealTableIndex(tableType, id);
|
||||
@ -743,8 +748,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
if (ret != NULL) {
|
||||
*didAllocate = false;
|
||||
status = 2;
|
||||
} else
|
||||
{
|
||||
} else {
|
||||
char* seqData = 0;
|
||||
SoundFont* fnt;
|
||||
|
||||
@ -756,8 +760,8 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
medium = sData.medium;
|
||||
cachePolicy = sData.cachePolicy;
|
||||
romAddr = 0;
|
||||
}
|
||||
else if (!gUseLegacySD && tableType == FONT_TABLE)
|
||||
}
|
||||
else if (!gUseLegacySD && tableType == FONT_TABLE)
|
||||
{
|
||||
fnt = ResourceMgr_LoadAudioSoundFont(fontMap[id]);
|
||||
size = sizeof(SoundFont);
|
||||
@ -765,7 +769,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
cachePolicy = 0;
|
||||
romAddr = 0;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
table = AudioLoad_GetLoadTable(tableType);
|
||||
size = table->entries[realId].size;
|
||||
@ -837,7 +841,7 @@ void* AudioLoad_SyncLoad(u32 tableType, u32 id, s32* didAllocate) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
u32 AudioLoad_GetRealTableIndex(s32 tableType, u32 id)
|
||||
u32 AudioLoad_GetRealTableIndex(s32 tableType, u32 id)
|
||||
{
|
||||
if ((tableType == SEQUENCE_TABLE || tableType == FONT_TABLE) && !gUseLegacySD) {
|
||||
return id;
|
||||
@ -845,7 +849,7 @@ u32 AudioLoad_GetRealTableIndex(s32 tableType, u32 id)
|
||||
|
||||
AudioTable* table = AudioLoad_GetLoadTable(tableType);
|
||||
|
||||
// If the size is 0, then this entry actually redirects to another entry.
|
||||
// If the size is 0, then this entry actually redirects to another entry.
|
||||
// The rom address is actually an index into the same table where the "real" data is.
|
||||
if (table->entries[id].size == 0) {
|
||||
id = table->entries[id].romAddr;
|
||||
@ -891,14 +895,13 @@ AudioTable* AudioLoad_GetLoadTable(s32 tableType) {
|
||||
}
|
||||
|
||||
void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo) {
|
||||
u32 reloc;
|
||||
u32 reloc2;
|
||||
uintptr_t reloc;
|
||||
uintptr_t reloc2;
|
||||
Instrument* inst;
|
||||
Drum* drum;
|
||||
SoundFontSound* sfx;
|
||||
s32 i;
|
||||
SoundFont* sf = NULL;
|
||||
|
||||
s32 numDrums = 0;
|
||||
s32 numInstruments = 0;
|
||||
s32 numSfx = 0;
|
||||
@ -912,26 +915,25 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
numDrums = sf->numDrums;
|
||||
numInstruments = sf->numInstruments;
|
||||
numSfx = sf->numSfx;
|
||||
}
|
||||
}
|
||||
|
||||
void** ptrs = (void**)mem;
|
||||
|
||||
|
||||
#define BASE_OFFSET(x) (void*)((u32)(x) + (u32)(mem))
|
||||
|
||||
reloc2 = ptrs[0];
|
||||
if (1) {}
|
||||
if ((reloc2 != 0 || !gUseLegacySD) && (numDrums != 0))
|
||||
if ((reloc2 != 0 || !gUseLegacySD) && (numDrums != 0))
|
||||
{
|
||||
ptrs[0] = BASE_OFFSET(reloc2);
|
||||
for (i = 0; i < numDrums; i++)
|
||||
for (i = 0; i < numDrums; i++)
|
||||
{
|
||||
if (gUseLegacySD)
|
||||
reloc = ((Drum**)ptrs[0])[i];
|
||||
|
||||
if (reloc != 0 || !gUseLegacySD)
|
||||
if (reloc != 0 || !gUseLegacySD)
|
||||
{
|
||||
if (gUseLegacySD)
|
||||
if (gUseLegacySD)
|
||||
{
|
||||
reloc = BASE_OFFSET(reloc);
|
||||
((Drum**)ptrs[0])[i] = drum = reloc;
|
||||
@ -940,15 +942,15 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
if (!gUseLegacySD)
|
||||
drum = sf->drums[i];
|
||||
|
||||
if (!drum->loaded)
|
||||
if (!drum->loaded)
|
||||
{
|
||||
if (!gUseLegacySD)
|
||||
if (!gUseLegacySD)
|
||||
{
|
||||
AudioLoad_RelocateSample(&sf->drums[i]->sound, mem, relocInfo, fontOffsets[fontId]);
|
||||
//reloc = drum->envelope;
|
||||
drum->loaded = 1;
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
AudioLoad_RelocateSample(&drum->sound, mem, relocInfo, fontOffsets[fontId]);
|
||||
reloc = drum->envelope;
|
||||
@ -966,7 +968,7 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
ptrs[1] = BASE_OFFSET(reloc2);
|
||||
for (i = 0; i < numSfx; i++) {
|
||||
reloc = (SoundFontSound*)ptrs[1] + i;
|
||||
if (reloc != 0 || !gUseLegacySD)
|
||||
if (reloc != 0 || !gUseLegacySD)
|
||||
{
|
||||
if (!gUseLegacySD) {
|
||||
AudioLoad_RelocateSample(&sf->soundEffects[i].sample, mem, relocInfo, fontOffsets[fontId]);
|
||||
@ -979,7 +981,7 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (numInstruments > 0x7E) {
|
||||
numInstruments = 0x7E;
|
||||
}
|
||||
@ -988,7 +990,7 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
int startEC = gUseLegacySD ? 2 + numInstruments - 1 : numInstruments - 1;
|
||||
//for (i = 2; i <= 2 + numInstruments - 1; i++) {
|
||||
for (i = startI; i <= startEC; i++) {
|
||||
if (!gUseLegacySD || ptrs[i] != NULL)
|
||||
if (!gUseLegacySD || ptrs[i] != NULL)
|
||||
{
|
||||
ptrs[i] = BASE_OFFSET(ptrs[i]);
|
||||
|
||||
@ -996,9 +998,9 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
inst = ptrs[i];
|
||||
else
|
||||
inst = sf->instruments[i];
|
||||
|
||||
|
||||
if (inst != NULL && !inst->loaded) {
|
||||
if (inst->normalRangeLo != 0)
|
||||
if (inst->normalRangeLo != 0)
|
||||
{
|
||||
AudioLoad_RelocateSample(&inst->lowNotesSound, mem, relocInfo, fontOffsets[fontId]);
|
||||
}
|
||||
@ -1008,10 +1010,10 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* mem, RelocInfo* relocInfo
|
||||
}
|
||||
|
||||
reloc = inst->envelope;
|
||||
|
||||
|
||||
if (gUseLegacySD)
|
||||
inst->envelope = BASE_OFFSET(reloc);
|
||||
|
||||
|
||||
inst->loaded = 1;
|
||||
}
|
||||
}
|
||||
@ -1050,10 +1052,10 @@ void AudioLoad_SyncDma(uintptr_t devAddr, u8* addr, size_t size, s32 medium) {
|
||||
}
|
||||
}
|
||||
|
||||
void AudioLoad_SyncDmaUnkMedium(u32 devAddr, u8* addr, size_t size, s32 unkMediumParam) {
|
||||
void AudioLoad_SyncDmaUnkMedium(uintptr_t devAddr, u8* addr, size_t size, s32 unkMediumParam) {
|
||||
}
|
||||
|
||||
s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, u32 devAddr, void* ramAddr, size_t size,
|
||||
s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr, uintptr_t ramAddr, size_t size,
|
||||
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType) {
|
||||
if (gAudioContext.resetTimer > 0x10) {
|
||||
return -1;
|
||||
@ -1079,7 +1081,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
|
||||
void* ret;
|
||||
s32 medium;
|
||||
s8 cachePolicy;
|
||||
u32 devAddr;
|
||||
uintptr_t devAddr;
|
||||
s32 status;
|
||||
u32 temp_v0;
|
||||
u32 realId;
|
||||
@ -1106,7 +1108,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
|
||||
ret = AudioLoad_SearchCaches(tableType, realId);
|
||||
if (ret != NULL) {
|
||||
status = 2;
|
||||
osSendMesg(retQueue, MK_ASYNC_MSG(retData, 0, 0, 0), OS_MESG_NOBLOCK);
|
||||
osSendMesg32(retQueue, MK_ASYNC_MSG(retData, 0, 0, 0), OS_MESG_NOBLOCK);
|
||||
} else {
|
||||
sp50 = AudioLoad_GetLoadTable(tableType);
|
||||
size = sp50->entries[realId].size;
|
||||
@ -1206,7 +1208,7 @@ s32 AudioLoad_AssertValidAddr(uintptr_t ramAddr, uintptr_t startAddr, size_t siz
|
||||
}
|
||||
}
|
||||
|
||||
#define BASE_ROM_OFFSET(x) (void*)((u32)(x) + (u32)(romAddr))
|
||||
#define BASE_ROM_OFFSET(x) (uintptr_t)((uintptr_t)(x) + (uintptr_t)(romAddr))
|
||||
|
||||
void AudioLoad_InitSwapFontSampleHeaders(SoundFontSample* sample, uintptr_t romAddr) {
|
||||
size_t maxSoundFontSize = 0x3AA0; // soundFont 0 is the largest size at 0x3AA0
|
||||
@ -1282,7 +1284,7 @@ void AudioLoad_InitSwapFont(void) {
|
||||
}
|
||||
|
||||
// sfxs
|
||||
ptrs[1] = (void*)BOMSWAP32((u32)ptrs[1]);
|
||||
ptrs[1] = (void*)BOMSWAP32((uintptr_t)ptrs[1]);
|
||||
if ((ptrs[1] != NULL) && (numSfxs != 0)) {
|
||||
sfxList = (SoundFontSound*)BASE_ROM_OFFSET(ptrs[1]);
|
||||
|
||||
@ -1332,25 +1334,18 @@ void AudioLoad_InitSwapFont(void) {
|
||||
|
||||
#undef BASE_ROM_OFFSET
|
||||
|
||||
void AudioLoad_Init(void* heap, u32 heapSize) {
|
||||
void AudioLoad_Init(void* heap, size_t heapSize) {
|
||||
char pad[0x48];
|
||||
s32 numFonts;
|
||||
void* temp_v0_3;
|
||||
s32 i;
|
||||
u64* heapP;
|
||||
u8* ctxP;
|
||||
s16* u2974p;
|
||||
|
||||
D_801755D0 = NULL;
|
||||
gAudioContext.resetTimer = 0;
|
||||
|
||||
{
|
||||
s32 i;
|
||||
u8* ctxP = (u8*)&gAudioContext;
|
||||
for (i = sizeof(gAudioContext); i >= 0; i--) {
|
||||
*ctxP++ = 0;
|
||||
}
|
||||
}
|
||||
memset(&gAudioContext, 0, sizeof(gAudioContext));
|
||||
|
||||
switch (osTvType) {
|
||||
case OS_TV_PAL:
|
||||
@ -1399,7 +1394,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
||||
gAudioContext.audioHeapSize = heapSize;
|
||||
}
|
||||
|
||||
for (i = 0; i < (s32)gAudioContext.audioHeapSize / 8; i++) {
|
||||
for (i = 0; i < gAudioContext.audioHeapSize / 8; i++) {
|
||||
((u64*)gAudioContext.audioHeap)[i] = 0;
|
||||
}
|
||||
|
||||
@ -1437,7 +1432,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
||||
if (gUseLegacySD)
|
||||
numFonts = gAudioContext.soundFontTable->numEntries;
|
||||
|
||||
if (gUseLegacySD)
|
||||
if (gUseLegacySD)
|
||||
{
|
||||
gAudioContext.soundFonts = AudioHeap_Alloc(&gAudioContext.audioInitPool, numFonts * sizeof(SoundFont));
|
||||
|
||||
@ -1450,7 +1445,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
||||
int seqListSize = 0;
|
||||
char** seqList = ResourceMgr_ListFiles("audio/sequences*", &seqListSize);
|
||||
|
||||
for (int i = 0; i < seqListSize; i++)
|
||||
for (size_t i = 0; i < seqListSize; i++)
|
||||
{
|
||||
SequenceData sDat = ResourceMgr_LoadSeqByName(seqList[i]);
|
||||
|
||||
@ -1465,7 +1460,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
||||
int fntListSize = 0;
|
||||
char** fntList = ResourceMgr_ListFiles("audio/fonts*", &fntListSize);
|
||||
|
||||
for (int i = 0; i < fntListSize; i++)
|
||||
for (int i = 0; i < fntListSize; i++)
|
||||
{
|
||||
SoundFont* sf = ResourceMgr_LoadAudioSoundFont(fntList[i]);
|
||||
|
||||
@ -1485,12 +1480,12 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
||||
|
||||
if (temp_v0_3 = AudioHeap_Alloc(&gAudioContext.audioInitPool, D_8014A6C4.permanentPoolSize), temp_v0_3 == NULL) {
|
||||
// cast away const from D_8014A6C4
|
||||
*((u32*)&D_8014A6C4.permanentPoolSize) = 0;
|
||||
// *((u32*)&D_8014A6C4.permanentPoolSize) = 0;
|
||||
}
|
||||
|
||||
AudioHeap_AllocPoolInit(&gAudioContext.permanentPool, temp_v0_3, D_8014A6C4.permanentPoolSize);
|
||||
gAudioContextInitalized = true;
|
||||
osSendMesg(gAudioContext.taskStartQueueP, (void*)gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
|
||||
osSendMesg32(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
void AudioLoad_InitSlowLoads(void) {
|
||||
@ -1501,6 +1496,7 @@ void AudioLoad_InitSlowLoads(void) {
|
||||
s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
|
||||
SoundFontSample* sample;
|
||||
AudioSlowLoad* slowLoad;
|
||||
|
||||
sample = AudioLoad_GetFontSample(fontId, instId);
|
||||
if (sample == NULL) {
|
||||
*isDone = 0;
|
||||
@ -1639,14 +1635,14 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus) {
|
||||
}
|
||||
}
|
||||
|
||||
void AudioLoad_DmaSlowCopy(AudioSlowLoad* slowLoad, ptrdiff_t size) {
|
||||
void AudioLoad_DmaSlowCopy(AudioSlowLoad* slowLoad, size_t size) {
|
||||
Audio_InvalDCache(slowLoad->curRamAddr, size);
|
||||
osCreateMesgQueue(&slowLoad->msgqueue, &slowLoad->msg, 1);
|
||||
AudioLoad_Dma(&slowLoad->ioMesg, OS_MESG_PRI_NORMAL, 0, slowLoad->curDevAddr, slowLoad->curRamAddr, size,
|
||||
&slowLoad->msgqueue, slowLoad->medium, "SLOWCOPY");
|
||||
}
|
||||
|
||||
void AudioLoad_DmaSlowCopyUnkMedium(s32 devAddr, u8* ramAddr, ptrdiff_t size, s32 arg3) {
|
||||
void AudioLoad_DmaSlowCopyUnkMedium(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s32 arg3) {
|
||||
}
|
||||
|
||||
s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone) {
|
||||
@ -1660,19 +1656,16 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone) {
|
||||
}
|
||||
|
||||
seqId = AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId);
|
||||
|
||||
seqTable = AudioLoad_GetLoadTable(SEQUENCE_TABLE);
|
||||
|
||||
slowLoad = &gAudioContext.slowLoads[gAudioContext.slowLoadPos];
|
||||
if (slowLoad->status == LOAD_STATUS_DONE) {
|
||||
slowLoad->status = LOAD_STATUS_WAITING;
|
||||
}
|
||||
|
||||
|
||||
slowLoad->sample.sampleAddr = NULL;
|
||||
slowLoad->isDone = isDone;
|
||||
|
||||
if (!gUseLegacySD)
|
||||
if (!gUseLegacySD)
|
||||
{
|
||||
SequenceData sData = ResourceMgr_LoadSeqByName(sequenceMap[seqId]);
|
||||
char* seqData = sData.seqData;
|
||||
@ -1708,7 +1701,8 @@ void AudioLoad_InitAsyncLoads(void) {
|
||||
}
|
||||
}
|
||||
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, u32 devAddr, void* ramAddr, ptrdiff_t size, s32 medium,
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t devAddr, uintptr_t ramAddr, size_t size,
|
||||
s32 medium,
|
||||
s32 nChunks, OSMesgQueue* retQueue, s32 retMsg) {
|
||||
AudioAsyncLoad* asyncLoad;
|
||||
|
||||
@ -1718,12 +1712,12 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, u32 devAdd
|
||||
return NULL;
|
||||
}
|
||||
|
||||
osSendMesg(&gAudioContext.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
|
||||
osSendMesgPtr(&gAudioContext.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
|
||||
asyncLoad->unkMediumParam = unkMediumParam;
|
||||
return asyncLoad;
|
||||
}
|
||||
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoad(u32 devAddr, void* ramAddr, size_t size, s32 medium, s32 nChunks,
|
||||
AudioAsyncLoad* AudioLoad_StartAsyncLoad(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s32 medium, s32 nChunks,
|
||||
OSMesgQueue* retQueue, s32 retMsg) {
|
||||
AudioAsyncLoad* asyncLoad;
|
||||
s32 i;
|
||||
@ -1751,7 +1745,7 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoad(u32 devAddr, void* ramAddr, size_t size
|
||||
} else if (nChunks == 1) {
|
||||
asyncLoad->chunkSize = size;
|
||||
} else {
|
||||
asyncLoad->chunkSize = ALIGN256((s32)size / nChunks);
|
||||
asyncLoad->chunkSize = ALIGN256(size / nChunks);
|
||||
if (asyncLoad->chunkSize < 0x100) {
|
||||
asyncLoad->chunkSize = 0x100;
|
||||
}
|
||||
@ -1834,7 +1828,7 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
|
||||
break;
|
||||
}
|
||||
|
||||
doneMsg = asyncLoad->retMsg;
|
||||
doneMsg.data32 = asyncLoad->retMsg;
|
||||
if (1) {}
|
||||
asyncLoad->status = LOAD_STATUS_WAITING;
|
||||
osSendMesg(asyncLoad->retQueue, doneMsg, OS_MESG_NOBLOCK);
|
||||
@ -1896,14 +1890,14 @@ void AudioLoad_AsyncDma(AudioAsyncLoad* asyncLoad, size_t size) {
|
||||
asyncLoad->medium, "BGCOPY");
|
||||
}
|
||||
|
||||
void AudioLoad_AsyncDmaUnkMedium(u32 devAddr, void* ramAddr, size_t size, s16 arg3) {
|
||||
void AudioLoad_AsyncDmaUnkMedium(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s16 arg3) {
|
||||
}
|
||||
|
||||
#define RELOC(v, base) (reloc = (void*)((u32)(v) + (u32)(base)))
|
||||
#define RELOC(v, base) (reloc = (uintptr_t)((uintptr_t)(v) + (uintptr_t)(base)))
|
||||
|
||||
void AudioLoad_RelocateSample(SoundFontSound* sound, SoundFontData* mem, RelocInfo* relocInfo, int fontId) {
|
||||
size_t maxSoundBankSize = 0x3EB2A0; // sample bank 0 is largest size at 0x3EB2A0
|
||||
if (gUseLegacySD)
|
||||
if (gUseLegacySD)
|
||||
{
|
||||
// NOTE: This is hack to detect whether or not the sample has been relocated.
|
||||
if ((uintptr_t)mem <= maxSoundBankSize) {
|
||||
@ -1915,7 +1909,7 @@ void AudioLoad_RelocateSample(SoundFontSound* sound, SoundFontData* mem, RelocIn
|
||||
void* reloc;
|
||||
|
||||
// NOTE: Seems precarious to assume the RAM is never <= 0x3EB2A0, but it largely works.
|
||||
if ((uintptr_t)sound->sample < maxSoundBankSize || !gUseLegacySD)
|
||||
if ((uintptr_t)sound->sample < maxSoundBankSize || !gUseLegacySD)
|
||||
{
|
||||
if (!gUseLegacySD) {
|
||||
SoundFontSample* sample2 = sound;
|
||||
@ -1958,7 +1952,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* mem, Rel
|
||||
AudioPreloadReq* preload;
|
||||
AudioPreloadReq* topPreload;
|
||||
SoundFontSample* sample;
|
||||
ptrdiff_t size;
|
||||
size_t size;
|
||||
s32 nChunks;
|
||||
u8* addr;
|
||||
s32 preloadInProgress;
|
||||
@ -2021,12 +2015,12 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* mem, Rel
|
||||
switch (async) {
|
||||
case false:
|
||||
if (sample->medium == MEDIUM_UNK) {
|
||||
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, addr, sample->size,
|
||||
AudioLoad_SyncDmaUnkMedium(sample->sampleAddr, addr, sample->size,
|
||||
gAudioContext.sampleBankTable->unkMediumParam);
|
||||
sample->sampleAddr = addr;
|
||||
sample->medium = MEDIUM_RAM;
|
||||
} else {
|
||||
AudioLoad_SyncDma((u32)sample->sampleAddr, addr, sample->size, sample->medium);
|
||||
AudioLoad_SyncDma(sample->sampleAddr, addr, sample->size, sample->medium);
|
||||
sample->sampleAddr = addr;
|
||||
sample->medium = MEDIUM_RAM;
|
||||
}
|
||||
@ -2039,7 +2033,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* mem, Rel
|
||||
preload->ramAddr = addr;
|
||||
preload->encodedInfo = (gAudioContext.preloadSampleStackTop << 24) | 0xFFFFFF;
|
||||
preload->isFree = false;
|
||||
preload->endAndMediumKey = (u32)sample->sampleAddr + sample->size + sample->medium;
|
||||
preload->endAndMediumKey = sample->sampleAddr + sample->size + sample->medium;
|
||||
gAudioContext.preloadSampleStackTop++;
|
||||
break;
|
||||
}
|
||||
@ -2050,7 +2044,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* mem, Rel
|
||||
topPreload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
|
||||
sample = topPreload->sample;
|
||||
nChunks = (sample->size >> 12) + 1;
|
||||
AudioLoad_StartAsyncLoad((u32)sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium, nChunks,
|
||||
AudioLoad_StartAsyncLoad(sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium, nChunks,
|
||||
&gAudioContext.preloadSampleQueue, topPreload->encodedInfo);
|
||||
}
|
||||
}
|
||||
@ -2059,7 +2053,7 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
|
||||
SoundFontSample* sample;
|
||||
AudioPreloadReq* preload;
|
||||
u32 preloadIndex;
|
||||
u32 key;
|
||||
uintptr_t key;
|
||||
u32 nChunks;
|
||||
s32 pad;
|
||||
|
||||
@ -2188,7 +2182,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, RelocInfo* relocInfo
|
||||
AudioPreloadReq* preload;
|
||||
AudioPreloadReq* topPreload;
|
||||
u8* addr = NULL;
|
||||
ptrdiff_t size;
|
||||
size_t size;
|
||||
s32 i;
|
||||
SoundFontSample* sample;
|
||||
s32 preloadInProgress;
|
||||
@ -2256,7 +2250,6 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, RelocInfo* relocInfo
|
||||
}
|
||||
|
||||
sample = gAudioContext.usedSamples[i];
|
||||
|
||||
if (sample->medium == MEDIUM_RAM) {
|
||||
continue;
|
||||
}
|
||||
@ -2289,12 +2282,12 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, RelocInfo* relocInfo
|
||||
switch (async) {
|
||||
case false:
|
||||
if (sample->medium == MEDIUM_UNK) {
|
||||
AudioLoad_SyncDmaUnkMedium((u32)sample->sampleAddr, addr, sample->size,
|
||||
AudioLoad_SyncDmaUnkMedium(sample->sampleAddr, addr, sample->size,
|
||||
gAudioContext.sampleBankTable->unkMediumParam);
|
||||
sample->sampleAddr = addr;
|
||||
sample->medium = MEDIUM_RAM;
|
||||
} else {
|
||||
AudioLoad_SyncDma((u32)sample->sampleAddr, addr, sample->size, sample->medium);
|
||||
AudioLoad_SyncDma(sample->sampleAddr, addr, sample->size, sample->medium);
|
||||
sample->sampleAddr = addr;
|
||||
sample->medium = MEDIUM_RAM;
|
||||
}
|
||||
@ -2306,7 +2299,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, RelocInfo* relocInfo
|
||||
preload->ramAddr = addr;
|
||||
preload->encodedInfo = (gAudioContext.preloadSampleStackTop << 24) | 0xFFFFFF;
|
||||
preload->isFree = false;
|
||||
preload->endAndMediumKey = (u32)sample->sampleAddr + sample->size + sample->medium;
|
||||
preload->endAndMediumKey = sample->sampleAddr + sample->size + sample->medium;
|
||||
gAudioContext.preloadSampleStackTop++;
|
||||
break;
|
||||
}
|
||||
@ -2317,7 +2310,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, RelocInfo* relocInfo
|
||||
topPreload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
|
||||
sample = topPreload->sample;
|
||||
nChunks = (sample->size >> 12) + 1;
|
||||
AudioLoad_StartAsyncLoad((u32)sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium, nChunks,
|
||||
AudioLoad_StartAsyncLoad(sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium, nChunks,
|
||||
&gAudioContext.preloadSampleQueue, topPreload->encodedInfo);
|
||||
}
|
||||
}
|
||||
@ -2333,11 +2326,11 @@ void AudioLoad_LoadPermanentSamples(void) {
|
||||
for (i = 0; i < gAudioContext.permanentPool.count; i++) {
|
||||
RelocInfo relocInfo;
|
||||
|
||||
if (gAudioContext.permanentCache[i].tableType == FONT_TABLE)
|
||||
if (gAudioContext.permanentCache[i].tableType == FONT_TABLE)
|
||||
{
|
||||
fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioContext.permanentCache[i].id);
|
||||
//fontId = gAudioContext.permanentCache[i].id;
|
||||
|
||||
|
||||
if (!gUseLegacySD) {
|
||||
SoundFont* sf = ResourceMgr_LoadAudioSoundFont(fontMap[fontId]);
|
||||
relocInfo.sampleBankId1 = sf->sampleBankId1;
|
||||
|
@ -286,11 +286,11 @@ void Audio_ProcessNotes(void) {
|
||||
}
|
||||
|
||||
subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale;
|
||||
|
||||
|
||||
f32 resampRate = gAudioContext.audioBufferParameters.resampleRate;
|
||||
|
||||
if (!gUseLegacySD && !noteSubEu2->bitField1.isSyntheticWave && noteSubEu2->sound.soundFontSound != NULL &&
|
||||
noteSubEu2->sound.soundFontSound->sample != NULL &&
|
||||
noteSubEu2->sound.soundFontSound->sample != NULL &&
|
||||
noteSubEu2->sound.soundFontSound->sample->sampleRateMagicValue == 'RIFF') {
|
||||
resampRate = CALC_RESAMPLE_FREQ(noteSubEu2->sound.soundFontSound->sample->sampleRate);
|
||||
}
|
||||
@ -320,7 +320,7 @@ SoundFontSound* Audio_InstrumentGetSound(Instrument* instrument, s32 semitone) {
|
||||
|
||||
Instrument* Audio_GetInstrumentInner(s32 fontId, s32 instId) {
|
||||
Instrument* inst;
|
||||
|
||||
|
||||
if (fontId == 0xFF) {
|
||||
return NULL;
|
||||
}
|
||||
@ -354,7 +354,6 @@ Instrument* Audio_GetInstrumentInner(s32 fontId, s32 instId) {
|
||||
gAudioContext.audioErrorFlags = ((fontId << 8) + instId) + 0x1000000;
|
||||
return inst;
|
||||
}
|
||||
|
||||
|
||||
return inst;
|
||||
}
|
||||
|
@ -942,7 +942,7 @@ u8 AudioSeq_GetInstrument(SequenceChannel* channel, u8 instId, Instrument** inst
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (inst->envelope != NULL)
|
||||
if (inst->envelope != NULL)
|
||||
{
|
||||
adsr->envelope = inst->envelope;
|
||||
adsr->releaseRate = (inst->releaseRate);
|
||||
@ -1067,8 +1067,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
|
||||
offset = ((u16*)gAudioContext.sequenceFontTable)[seqPlayer->seqId];
|
||||
lowBits = gAudioContext.sequenceFontTable[offset];
|
||||
command = gAudioContext.sequenceFontTable[offset + lowBits - result];
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
SequenceData sDat = ResourceMgr_LoadSeqByName(sequenceMap[seqPlayer->seqId]);
|
||||
command = sDat.fonts[sDat.numFonts - result - 1];
|
||||
}
|
||||
@ -1179,14 +1178,12 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
|
||||
result = (u8)parameters[0];
|
||||
command = (u8)parameters[0];
|
||||
|
||||
if (seqPlayer->defaultFont != 0xFF)
|
||||
{
|
||||
if (seqPlayer->defaultFont != 0xFF) {
|
||||
if (gUseLegacySD) {
|
||||
offset = ((u16*)gAudioContext.sequenceFontTable)[seqPlayer->seqId];
|
||||
lowBits = gAudioContext.sequenceFontTable[offset];
|
||||
command = gAudioContext.sequenceFontTable[offset + lowBits - result];
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
SequenceData sDat = ResourceMgr_LoadSeqByName(sequenceMap[seqPlayer->seqId]);
|
||||
command = sDat.fonts[sDat.numFonts - result - 1];
|
||||
}
|
||||
|
@ -382,11 +382,11 @@ void AudioSynth_EnvSetup1(Acmd* cmd, s32 arg1, s32 arg2, s32 arg3, s32 arg4) {
|
||||
void func_800DBD08(void) {
|
||||
}
|
||||
|
||||
void AudioSynth_LoadBuffer(Acmd* cmd, s32 arg1, s32 arg2, s32 arg3) {
|
||||
void AudioSynth_LoadBuffer(Acmd* cmd, s32 arg1, s32 arg2, uintptr_t arg3) {
|
||||
aLoadBuffer(cmd, arg3, arg1, arg2);
|
||||
}
|
||||
|
||||
void AudioSynth_SaveBuffer(Acmd* cmd, s32 arg1, s32 arg2, s32 arg3) {
|
||||
void AudioSynth_SaveBuffer(Acmd* cmd, s32 arg1, s32 arg2, uintptr_t arg3) {
|
||||
aSaveBuffer(cmd, arg1, arg3, arg2);
|
||||
}
|
||||
|
||||
@ -678,11 +678,11 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
|
||||
s32 temp_v1_6;
|
||||
void* buf;
|
||||
s32 nSamplesToDecode;
|
||||
u32 sampleAddr;
|
||||
uintptr_t sampleAddr;
|
||||
u32 samplesLenFixedPoint;
|
||||
s32 samplesLenAdjusted;
|
||||
s32 nSamplesProcessed;
|
||||
s32 loopEndPos;
|
||||
uintptr_t loopEndPos;
|
||||
s32 nSamplesToProcess;
|
||||
s32 phi_s4;
|
||||
s32 nFirstFrameSamplesToIgnore;
|
||||
@ -690,15 +690,15 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
|
||||
s32 frameSize;
|
||||
s32 nFramesToDecode;
|
||||
s32 skipInitialSamples;
|
||||
s32 sampleDataStart;
|
||||
intptr_t sampleDataStart;
|
||||
u8* sampleData;
|
||||
s32 nParts;
|
||||
s32 curPart;
|
||||
s32 sampleDataStartPad;
|
||||
intptr_t sampleDataStartPad;
|
||||
s32 side;
|
||||
s32 resampledTempLen;
|
||||
u16 noteSamplesDmemAddrBeforeResampling;
|
||||
s32 sampleDataOffset;
|
||||
intptr_t sampleDataOffset;
|
||||
s32 thing;
|
||||
s32 s5;
|
||||
Note* note;
|
||||
|
@ -39,8 +39,7 @@ extern u64 rspAspMainDataStart[];
|
||||
extern u64 rspAspMainDataEnd[];
|
||||
|
||||
void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples) {
|
||||
// OTRTODO: uintptr_t?
|
||||
u32 sp4C;
|
||||
OSMesg sp4C;
|
||||
|
||||
gAudioContext.totalTaskCnt++;
|
||||
|
||||
@ -51,7 +50,7 @@ void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples) {
|
||||
if (gAudioContext.resetStatus != 0) {
|
||||
if (AudioHeap_ResetStep() == 0) {
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetSpecIdToLoad, OS_MESG_NOBLOCK);
|
||||
osSendMesg8(gAudioContext.audioResetQueueP, gAudioContext.audioResetSpecIdToLoad, OS_MESG_NOBLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -59,8 +58,8 @@ void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples) {
|
||||
int j = 0;
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
// msg = 0000RREE R = read pos, E = End Pos
|
||||
while (osRecvMesg(gAudioContext.cmdProcQueueP, (OSMesg*)&sp4C, OS_MESG_NOBLOCK) != -1) {
|
||||
Audio_ProcessCmds(sp4C);
|
||||
while (osRecvMesg(gAudioContext.cmdProcQueueP, &sp4C, OS_MESG_NOBLOCK) != -1) {
|
||||
Audio_ProcessCmds(sp4C.data32);
|
||||
j++;
|
||||
}
|
||||
if ((j == 0) && (gAudioContext.cmdQueueFinished)) {
|
||||
@ -85,7 +84,7 @@ AudioTask* func_800E5000(void) {
|
||||
s16* currAiBuffer;
|
||||
OSTask_t* task;
|
||||
s32 index;
|
||||
u32 sp4C;
|
||||
OSMesg sp4C;
|
||||
s32 sp48;
|
||||
s32 i;
|
||||
|
||||
@ -103,7 +102,7 @@ AudioTask* func_800E5000(void) {
|
||||
}
|
||||
}
|
||||
|
||||
osSendMesg(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
|
||||
osSendMesg32(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
|
||||
gAudioContext.rspTaskIdx ^= 1;
|
||||
gAudioContext.curAIBufIdx++;
|
||||
gAudioContext.curAIBufIdx %= 3;
|
||||
@ -150,7 +149,7 @@ AudioTask* func_800E5000(void) {
|
||||
if (gAudioContext.resetStatus != 0) {
|
||||
if (AudioHeap_ResetStep() == 0) {
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetSpecIdToLoad, OS_MESG_NOBLOCK);
|
||||
osSendMesg8(gAudioContext.audioResetQueueP, gAudioContext.audioResetSpecIdToLoad, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
sWaitingAudioTask = NULL;
|
||||
@ -187,11 +186,11 @@ AudioTask* func_800E5000(void) {
|
||||
j = 0;
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
// msg = 0000RREE R = read pos, E = End Pos
|
||||
while (osRecvMesg(gAudioContext.cmdProcQueueP, (OSMesg*)&sp4C, OS_MESG_NOBLOCK) != -1) {
|
||||
while (osRecvMesg(gAudioContext.cmdProcQueueP, &sp4C, OS_MESG_NOBLOCK) != -1) {
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
Audio_ProcessCmds(sp4C);
|
||||
Audio_ProcessCmds(sp4C.data32);
|
||||
j++;
|
||||
}
|
||||
if ((j == 0) && (gAudioContext.cmdQueueFinished)) {
|
||||
@ -387,11 +386,11 @@ void Audio_InitMesgQueuesInternal(void) {
|
||||
ARRAY_COUNT(gAudioContext.audioResetMesgs));
|
||||
}
|
||||
|
||||
void Audio_QueueCmd(u32 opArgs, void** data) {
|
||||
void Audio_QueueCmd(u32 opArgs, u32 data) {
|
||||
AudioCmd* cmd = &gAudioContext.cmdBuf[gAudioContext.cmdWrPos & 0xFF];
|
||||
|
||||
cmd->opArgs = opArgs;
|
||||
cmd->data = *data;
|
||||
cmd->data = data;
|
||||
|
||||
gAudioContext.cmdWrPos++;
|
||||
|
||||
@ -401,23 +400,28 @@ void Audio_QueueCmd(u32 opArgs, void** data) {
|
||||
}
|
||||
|
||||
void Audio_QueueCmdF32(u32 opArgs, f32 data) {
|
||||
Audio_QueueCmd(opArgs, (void**)&data);
|
||||
union
|
||||
{
|
||||
f32 f;
|
||||
u32 u;
|
||||
} uData = { .f = data };
|
||||
Audio_QueueCmd(opArgs, uData.u);
|
||||
}
|
||||
|
||||
void Audio_QueueCmdS32(u32 opArgs, s32 data) {
|
||||
Audio_QueueCmd(opArgs, (void**)&data);
|
||||
Audio_QueueCmd(opArgs, data);
|
||||
}
|
||||
|
||||
void Audio_QueueCmdS8(u32 opArgs, s8 data) {
|
||||
u32 uData = data << 0x18;
|
||||
|
||||
Audio_QueueCmd(opArgs, (void**)&uData);
|
||||
Audio_QueueCmd(opArgs, uData);
|
||||
}
|
||||
|
||||
void Audio_QueueCmdU16(u32 opArgs, u16 data) {
|
||||
u32 uData = data << 0x10;
|
||||
|
||||
Audio_QueueCmd(opArgs, (void**)&uData);
|
||||
Audio_QueueCmd(opArgs, uData);
|
||||
}
|
||||
|
||||
s32 Audio_ScheduleProcessCmds(void) {
|
||||
@ -429,8 +433,8 @@ s32 Audio_ScheduleProcessCmds(void) {
|
||||
}
|
||||
|
||||
ret =
|
||||
osSendMesg(gAudioContext.cmdProcQueueP,
|
||||
(void*)(((gAudioContext.cmdRdPos & 0xFF) << 8) | (gAudioContext.cmdWrPos & 0xFF)), OS_MESG_NOBLOCK);
|
||||
osSendMesg32(gAudioContext.cmdProcQueueP,
|
||||
(((gAudioContext.cmdRdPos & 0xFF) << 8) | (gAudioContext.cmdWrPos & 0xFF)), OS_MESG_NOBLOCK);
|
||||
if (ret != -1) {
|
||||
gAudioContext.cmdRdPos = gAudioContext.cmdWrPos;
|
||||
ret = 0;
|
||||
@ -532,11 +536,11 @@ void func_800E5EA4(s32 arg0, u32* arg1, u32* arg2) {
|
||||
|
||||
s32 func_800E5EDC(void) {
|
||||
s32 pad;
|
||||
s32 sp18;
|
||||
OSMesg sp18;
|
||||
|
||||
if (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp18, OS_MESG_NOBLOCK) == -1) {
|
||||
if (osRecvMesg(gAudioContext.audioResetQueueP, &sp18, OS_MESG_NOBLOCK) == -1) {
|
||||
return 0;
|
||||
} else if (gAudioContext.audioResetSpecIdToLoad != sp18) {
|
||||
} else if (gAudioContext.audioResetSpecIdToLoad != sp18.data8) {
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
@ -546,7 +550,7 @@ s32 func_800E5EDC(void) {
|
||||
void func_800E5F34(void) {
|
||||
// macro?
|
||||
// clang-format off
|
||||
s32 chk = -1; s32 sp28; do {} while (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp28, OS_MESG_NOBLOCK) != chk);
|
||||
s32 chk = -1; OSMesg sp28; do {} while (osRecvMesg(gAudioContext.audioResetQueueP, &sp28, OS_MESG_NOBLOCK) != chk);
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
|
@ -1250,7 +1250,7 @@ s32 Audio_SetGanonDistVol(u8 targetVol);
|
||||
// Function originally not called, so repurposing for DPad input
|
||||
void func_800EC960(u8 dpad) {
|
||||
if (dpad) {
|
||||
sOcarinaAllowedBtnMask =
|
||||
sOcarinaAllowedBtnMask =
|
||||
(BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT | BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT);
|
||||
sOcarinaABtnMap = BTN_A;
|
||||
sOcarinaCUPBtnMap = BTN_CUP | BTN_DUP;
|
||||
@ -4095,7 +4095,7 @@ void func_800F4870(u8 arg0) {
|
||||
}
|
||||
|
||||
// (name derived from debug strings, should probably update. used in ganon/ganon_boss scenes)
|
||||
s32 Audio_SetGanonDistVol(u8 targetVol)
|
||||
s32 Audio_SetGanonDistVol(u8 targetVol)
|
||||
{
|
||||
u8 phi_v0;
|
||||
u16 phi_v0_2;
|
||||
@ -4517,7 +4517,7 @@ void func_800F5C2C(void) {
|
||||
sPrevMainBgmSeqId = NA_BGM_DISABLED;
|
||||
}
|
||||
|
||||
void Audio_PlayFanfare(u16 seqId)
|
||||
void Audio_PlayFanfare(u16 seqId)
|
||||
{
|
||||
u16 sp26;
|
||||
u32 sp20;
|
||||
|
@ -122,9 +122,9 @@ void Audio_ClearBGMMute(u8 channelIdx) {
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_PlaySoundGeneral(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* vol, s8* reverbAdd)
|
||||
void Audio_PlaySoundGeneral(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* vol, s8* reverbAdd)
|
||||
{
|
||||
u8 i;
|
||||
size_t i;
|
||||
SoundRequest* req;
|
||||
|
||||
if (!gSoundBankMuted[SFX_BANK_SHIFT(sfxId)]) {
|
||||
@ -204,7 +204,7 @@ void Audio_RemoveMatchingSoundRequests(u8 aspect, SoundBankEntry* cmp) {
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_ProcessSoundRequest(void)
|
||||
void Audio_ProcessSoundRequest(void)
|
||||
{
|
||||
u16 sfxId;
|
||||
u8 count;
|
||||
@ -307,7 +307,7 @@ void Audio_ProcessSoundRequest(void)
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_RemoveSoundBankEntry(u8 bankId, u8 entryIndex)
|
||||
void Audio_RemoveSoundBankEntry(u8 bankId, u8 entryIndex)
|
||||
{
|
||||
SoundBankEntry* entry = &gSoundBanks[bankId][entryIndex];
|
||||
u8 i;
|
||||
@ -335,7 +335,7 @@ void Audio_RemoveSoundBankEntry(u8 bankId, u8 entryIndex)
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_ChooseActiveSounds(u8 bankId)
|
||||
void Audio_ChooseActiveSounds(u8 bankId)
|
||||
{
|
||||
u8 numChosenSounds;
|
||||
u8 numChannels;
|
||||
@ -492,7 +492,7 @@ void Audio_ChooseActiveSounds(u8 bankId)
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_PlayActiveSounds(u8 bankId)
|
||||
void Audio_PlayActiveSounds(u8 bankId)
|
||||
{
|
||||
u8 entryIndex;
|
||||
SequenceChannel* channel;
|
||||
@ -553,7 +553,7 @@ void Audio_PlayActiveSounds(u8 bankId)
|
||||
}
|
||||
}
|
||||
|
||||
void Audio_StopSfxByBank(u8 bankId)
|
||||
void Audio_StopSfxByBank(u8 bankId)
|
||||
{
|
||||
SoundBankEntry* entry;
|
||||
s32 pad;
|
||||
@ -615,7 +615,7 @@ void Audio_StopSfxByPos(Vec3f* pos) {
|
||||
Audio_RemoveMatchingSoundRequests(2, &cmp);
|
||||
}
|
||||
|
||||
void Audio_StopSfxByPosAndId(Vec3f* pos, u16 sfxId)
|
||||
void Audio_StopSfxByPosAndId(Vec3f* pos, u16 sfxId)
|
||||
{
|
||||
SoundBankEntry* entry;
|
||||
u8 entryIndex = gSoundBanks[SFX_BANK(sfxId)][0].next;
|
||||
@ -735,7 +735,7 @@ void func_800F8F88(void) {
|
||||
}
|
||||
}
|
||||
|
||||
u8 Audio_IsSfxPlaying(u32 sfxId)
|
||||
u8 Audio_IsSfxPlaying(u32 sfxId)
|
||||
{
|
||||
SoundBankEntry* entry;
|
||||
u8 entryIndex = gSoundBanks[SFX_BANK(sfxId)][0].next;
|
||||
|
@ -240,7 +240,7 @@ int fbTest = -1;
|
||||
void GameState_Update(GameState* gameState) {
|
||||
GraphicsContext* gfxCtx = gameState->gfxCtx;
|
||||
|
||||
if (fbTest == -1)
|
||||
if (fbTest == -1)
|
||||
{
|
||||
fbTest = gfx_create_framebuffer(64, 112);
|
||||
//fbTest = gfx_create_framebuffer(256, 512);
|
||||
@ -323,18 +323,18 @@ void GameState_Update(GameState* gameState) {
|
||||
GameState_Draw(gameState, gfxCtx);
|
||||
func_800C49F4(gfxCtx);
|
||||
}
|
||||
|
||||
|
||||
// -----------------------
|
||||
// Cheats hooks
|
||||
// -----------------------
|
||||
|
||||
|
||||
// Inf Money
|
||||
if (CVar_GetS32("gInfiniteMoney", 0) != 0) {
|
||||
if (gSaveContext.rupees < CUR_CAPACITY(UPG_WALLET)) {
|
||||
gSaveContext.rupees = CUR_CAPACITY(UPG_WALLET);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Inf Health
|
||||
if (CVar_GetS32("gInfiniteHealth", 0) != 0) {
|
||||
if (gSaveContext.health < gSaveContext.healthCapacity) {
|
||||
@ -348,33 +348,33 @@ void GameState_Update(GameState* gameState) {
|
||||
if (AMMO(ITEM_STICK) < CUR_CAPACITY(UPG_STICKS)) {
|
||||
AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS);
|
||||
}
|
||||
|
||||
|
||||
// Deku Nuts
|
||||
if (AMMO(ITEM_NUT) < CUR_CAPACITY(UPG_NUTS)) {
|
||||
AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS);
|
||||
}
|
||||
|
||||
|
||||
// Bombs
|
||||
if (AMMO(ITEM_BOMB) < CUR_CAPACITY(UPG_BOMB_BAG)) {
|
||||
AMMO(ITEM_BOMB) = CUR_CAPACITY(UPG_BOMB_BAG);
|
||||
}
|
||||
|
||||
|
||||
// Fairy Bow (Ammo)
|
||||
if (AMMO(ITEM_BOW) < CUR_CAPACITY(UPG_QUIVER)) {
|
||||
AMMO(ITEM_BOW) = CUR_CAPACITY(UPG_QUIVER);
|
||||
}
|
||||
|
||||
|
||||
// Fairy Slingshot (Ammo)
|
||||
if (AMMO(ITEM_SLINGSHOT) < CUR_CAPACITY(UPG_BULLET_BAG)) {
|
||||
AMMO(ITEM_SLINGSHOT) = CUR_CAPACITY(UPG_BULLET_BAG);
|
||||
}
|
||||
|
||||
|
||||
// Bombchus (max: 50, no upgrades)
|
||||
if (AMMO(ITEM_BOMBCHU) < 50) {
|
||||
AMMO(ITEM_BOMBCHU) = 50;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Inf Magic
|
||||
if (CVar_GetS32("gInfiniteMagic", 0) != 0) {
|
||||
if (gSaveContext.magicAcquired && gSaveContext.magic != (gSaveContext.doubleMagic + 1) * 0x30) {
|
||||
@ -386,7 +386,7 @@ void GameState_Update(GameState* gameState) {
|
||||
if (CVar_GetS32("gInfiniteNayru", 0) != 0) {
|
||||
gSaveContext.nayrusLoveTimer = 0x44B;
|
||||
}
|
||||
|
||||
|
||||
// Moon Jump On L
|
||||
if (CVar_GetS32("gMoonJumpOnL", 0) != 0) {
|
||||
if (gGlobalCtx) {
|
||||
@ -424,7 +424,7 @@ void GameState_Update(GameState* gameState) {
|
||||
} else {
|
||||
CVar_SetS32("gPrevTime", -1);
|
||||
}
|
||||
|
||||
|
||||
//since our CVar is same value and properly default to 0 there is not problems doing this in single line.
|
||||
gSaveContext.language = CVar_GetS32("gLanguages", 0);
|
||||
|
||||
@ -525,7 +525,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
|
||||
}
|
||||
SpeedMeter_Init(&D_801664D0);
|
||||
func_800AA0B4();
|
||||
osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
|
||||
|
||||
endTime = osGetTime();
|
||||
// "Other initialization processing time %d us"
|
||||
|
@ -170,12 +170,12 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
|
||||
|
||||
D_8016A528 = osGetTime() - sGraphSetTaskTime - D_8016A558;
|
||||
|
||||
osSetTimer(&timer, OS_USEC_TO_CYCLES(3000000), 0, &gfxCtx->queue, (OSMesg)666);
|
||||
osSetTimer(&timer, OS_USEC_TO_CYCLES(3000000), 0, &gfxCtx->queue, OS_MESG_32(666));
|
||||
|
||||
osRecvMesg(&gfxCtx->queue, &msg, OS_MESG_BLOCK);
|
||||
osStopTimer(&timer);
|
||||
//OTRTODO - Proper GFX crash handler
|
||||
#if 0
|
||||
#if 0
|
||||
if (msg == (OSMesg)666) {
|
||||
osSyncPrintf(VT_FGCOL(RED));
|
||||
osSyncPrintf("RCPが帰ってきませんでした。"); // "RCP did not return."
|
||||
@ -194,7 +194,7 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
|
||||
}
|
||||
Fault_AddHungupAndCrashImpl("RCP is HUNG UP!!", "Oh! MY GOD!!");
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
osRecvMesg(&gfxCtx->queue, &msg, OS_MESG_NOBLOCK);
|
||||
|
||||
D_8012D260 = gfxCtx->workBuffer;
|
||||
@ -243,7 +243,7 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
|
||||
}
|
||||
|
||||
scTask->msgQ = &gfxCtx->queue;
|
||||
scTask->msg = NULL;
|
||||
scTask->msg.ptr = NULL;
|
||||
|
||||
cfb = &sGraphCfbInfos[sGraphCfbInfoIdx++];
|
||||
cfb->fb1 = gfxCtx->curFrameBuffer;
|
||||
@ -262,7 +262,7 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
|
||||
|
||||
gfxCtx->schedMsgQ = &gSchedContext.cmdQ;
|
||||
|
||||
osSendMesg(&gSchedContext.cmdQ, scTask, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&gSchedContext.cmdQ, scTask, OS_MESG_BLOCK);
|
||||
Sched_SendEntryMsg(&gSchedContext);
|
||||
}
|
||||
|
||||
@ -399,7 +399,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
|
||||
sGraphUpdateTime = time;
|
||||
}
|
||||
|
||||
if (CVar_GetS32("gDebugEnabled", 0))
|
||||
if (CVar_GetS32("gDebugEnabled", 0))
|
||||
{
|
||||
if (CHECK_BTN_ALL(gameState->input[0].press.button, BTN_Z) &&
|
||||
CHECK_BTN_ALL(gameState->input[0].cur.button, BTN_L | BTN_R)) {
|
||||
@ -475,14 +475,14 @@ static void RunFrame()
|
||||
{
|
||||
uint64_t ticksA, ticksB;
|
||||
ticksA = GetPerfCounter();
|
||||
|
||||
|
||||
Graph_StartFrame();
|
||||
|
||||
// TODO: Workaround for rumble being too long. Implement os thread functions.
|
||||
for (int i = 0; i < 3; i++) {
|
||||
PadMgr_ThreadEntry(&gPadMgr);
|
||||
}
|
||||
|
||||
|
||||
Graph_Update(&runFrameContext.gfxCtx, runFrameContext.gameState);
|
||||
ticksB = GetPerfCounter();
|
||||
|
||||
|
@ -32,11 +32,11 @@ void IrqMgr_AddClient(IrqMgr* this, IrqMgrClient* c, OSMesgQueue* msgQ) {
|
||||
osSetIntMask(prevInt);
|
||||
|
||||
if (this->resetStatus > STATUS_IDLE) {
|
||||
osSendMesg(c->queue, (OSMesg) & this->prenmiMsg, OS_MESG_NOBLOCK);
|
||||
osSendMesgPtr(c->queue, &this->prenmiMsg, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
if (this->resetStatus >= STATUS_NMI) {
|
||||
osSendMesg(c->queue, (OSMesg) & this->nmiMsg, OS_MESG_NOBLOCK);
|
||||
osSendMesgPtr(c->queue, &this->nmiMsg, OS_MESG_NOBLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,8 +107,8 @@ void IrqMgr_HandlePreNMI(IrqMgr* this) {
|
||||
this->resetStatus = STATUS_PRENMI;
|
||||
sIrqMgrResetTime = this->resetTime = osGetTime();
|
||||
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(450000), 0ull, &this->queue, (OSMesg)PRENMI450_MSG);
|
||||
IrqMgr_JamMesgForClient(this, (OSMesg) & this->prenmiMsg);
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(450000), 0ull, &this->queue, OS_MESG_32(PRENMI450_MSG));
|
||||
IrqMgr_JamMesgForClient(this, OS_MESG_PTR(&this->prenmiMsg));
|
||||
}
|
||||
|
||||
void IrqMgr_CheckStack() {
|
||||
@ -131,19 +131,19 @@ void IrqMgr_HandlePRENMI450(IrqMgr* this) {
|
||||
gIrqMgrResetStatus = temp;
|
||||
this->resetStatus = STATUS_NMI;
|
||||
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(30000), 0ull, &this->queue, (OSMesg)PRENMI480_MSG);
|
||||
IrqMgr_SendMesgForClient(this, (OSMesg) & this->nmiMsg);
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(30000), 0ull, &this->queue, OS_MESG_32(PRENMI480_MSG));
|
||||
IrqMgr_SendMesgForClient(this, OS_MESG_PTR(&this->nmiMsg));
|
||||
}
|
||||
|
||||
void IrqMgr_HandlePRENMI480(IrqMgr* this) {
|
||||
u32 ret;
|
||||
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(20000), 0ull, &this->queue, (OSMesg)PRENMI500_MSG);
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(20000), 0ull, &this->queue, OS_MESG_32(PRENMI500_MSG));
|
||||
ret = osAfterPreNMI();
|
||||
if (ret) {
|
||||
// "osAfterPreNMI returned %d !?"
|
||||
osSyncPrintf("osAfterPreNMIが %d を返しました!?\n", ret);
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(1000), 0ull, &this->queue, (OSMesg)PRENMI480_MSG);
|
||||
osSetTimer(&this->timer, OS_USEC_TO_CYCLES(1000), 0ull, &this->queue, OS_MESG_32(PRENMI480_MSG));
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,7 +160,7 @@ void IrqMgr_HandleRetrace(IrqMgr* this) {
|
||||
}
|
||||
}
|
||||
sIrqMgrRetraceCount++;
|
||||
IrqMgr_SendMesgForClient(this, (OSMesg) & this->retraceMsg);
|
||||
IrqMgr_SendMesgForClient(this, OS_MESG_PTR(&this->retraceMsg));
|
||||
}
|
||||
|
||||
void IrqMgr_ThreadEntry(void* arg0) {
|
||||
@ -168,13 +168,13 @@ void IrqMgr_ThreadEntry(void* arg0) {
|
||||
IrqMgr* this = (IrqMgr*)arg0;
|
||||
u8 exit;
|
||||
|
||||
msg = 0;
|
||||
msg.data32 = 0;
|
||||
osSyncPrintf("IRQマネージャスレッド実行開始\n"); // "Start IRQ manager thread execution"
|
||||
exit = false;
|
||||
|
||||
while (!exit) {
|
||||
osRecvMesg(&this->queue, &msg, OS_MESG_BLOCK);
|
||||
switch ((u32)msg) {
|
||||
switch (msg.data32) {
|
||||
case RETRACE_MSG:
|
||||
IrqMgr_HandleRetrace(this);
|
||||
break;
|
||||
@ -225,8 +225,8 @@ void IrqMgr_Init(IrqMgr* this, void* stack, OSPri pri, u8 retraceCount) {
|
||||
this->resetTime = 0;
|
||||
|
||||
osCreateMesgQueue(&this->queue, this->msgBuf, ARRAY_COUNT(this->msgBuf));
|
||||
osSetEventMesg(OS_EVENT_PRENMI, &this->queue, (OSMesg)PRE_NMI_MSG);
|
||||
osViSetEvent(&this->queue, (OSMesg)RETRACE_MSG, retraceCount);
|
||||
osSetEventMesg(OS_EVENT_PRENMI, &this->queue, OS_MESG_32(PRE_NMI_MSG));
|
||||
osViSetEvent(&this->queue, OS_MESG_32(RETRACE_MSG), retraceCount);
|
||||
osCreateThread(&this->thread, 0x13, IrqMgr_ThreadEntry, this, stack, pri);
|
||||
osStartThread(&this->thread);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
s32 gScreenWidth = SCREEN_WIDTH;
|
||||
s32 gScreenHeight = SCREEN_HEIGHT;
|
||||
u32 gSystemHeapSize = 0;
|
||||
size_t gSystemHeapSize = 0;
|
||||
|
||||
PreNmiBuff* gAppNmiBufferPtr;
|
||||
SchedContext gSchedContext;
|
||||
@ -53,7 +53,7 @@ void Main(void* arg) {
|
||||
uintptr_t sysHeap;
|
||||
uintptr_t fb;
|
||||
void* debugHeap;
|
||||
s32 debugHeapSize;
|
||||
size_t debugHeapSize;
|
||||
s16* msg;
|
||||
|
||||
osSyncPrintf("mainproc 実行開始\n"); // "Start running"
|
||||
@ -87,7 +87,7 @@ void Main(void* arg) {
|
||||
R_ENABLE_ARENA_DBG = 0;
|
||||
|
||||
osCreateMesgQueue(&sSiIntMsgQ, sSiIntMsgBuf, 1);
|
||||
osSetEventMesg(5, &sSiIntMsgQ, 0);
|
||||
osSetEventMesg(5, &sSiIntMsgQ, OS_MESG_PTR(NULL));
|
||||
|
||||
Main_LogSystemHeap();
|
||||
|
||||
@ -118,7 +118,7 @@ void Main(void* arg) {
|
||||
|
||||
while (true) {
|
||||
msg = NULL;
|
||||
osRecvMesg(&irqMgrMsgQ, (OSMesg)&msg, OS_MESG_BLOCK);
|
||||
osRecvMesg(&irqMgrMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK);
|
||||
if (msg == NULL) {
|
||||
break;
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ OSMesgQueue* PadMgr_LockSerialMesgQueue(PadMgr* padMgr) {
|
||||
padMgr->serialMsgQ.validCount, padMgr, &padMgr->serialMsgQ, &ctrlrQ);
|
||||
}
|
||||
|
||||
osRecvMesg(&padMgr->serialMsgQ, (OSMesg)&ctrlrQ, OS_MESG_BLOCK);
|
||||
osRecvMesg(&padMgr->serialMsgQ, (OSMesg*)&ctrlrQ, OS_MESG_BLOCK);
|
||||
|
||||
if (D_8012D280 > 2) {
|
||||
// "serialMsgQ Locked"
|
||||
@ -38,7 +38,7 @@ void PadMgr_UnlockSerialMesgQueue(PadMgr* padMgr, OSMesgQueue* ctrlrQ) {
|
||||
padMgr->serialMsgQ.validCount, padMgr, &padMgr->serialMsgQ, ctrlrQ);
|
||||
}
|
||||
|
||||
osSendMesg(&padMgr->serialMsgQ, ctrlrQ, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&padMgr->serialMsgQ, ctrlrQ, OS_MESG_BLOCK);
|
||||
|
||||
if (D_8012D280 > 2) {
|
||||
// "serialMsgQ Unlocked"
|
||||
@ -52,7 +52,7 @@ void PadMgr_LockPadData(PadMgr* padMgr) {
|
||||
}
|
||||
|
||||
void PadMgr_UnlockPadData(PadMgr* padMgr) {
|
||||
osSendMesg(&padMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&padMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void PadMgr_RumbleControl(PadMgr* padMgr) {
|
||||
@ -174,7 +174,7 @@ void PadMgr_RumbleStop(PadMgr* padMgr) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (osMotorInit(ctrlrQ, &padMgr->pfs[i], i) == 0) {
|
||||
#if 0
|
||||
if ((gFaultStruct.msgId == 0) && (padMgr->rumbleOnFrames != 0))
|
||||
if ((gFaultStruct.msgId == 0) && (padMgr->rumbleOnFrames != 0))
|
||||
{
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// "Stop vibration pack"
|
||||
@ -399,7 +399,7 @@ void PadMgr_ThreadEntry(PadMgr* padMgr) {
|
||||
osSyncPrintf("コントローラスレッドイベント待ち %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
|
||||
}
|
||||
|
||||
osRecvMesg(&padMgr->interruptMsgQ, (OSMesg)&mesg, OS_MESG_BLOCK);
|
||||
osRecvMesg(&padMgr->interruptMsgQ, (OSMesg*)&mesg, OS_MESG_BLOCK);
|
||||
//LogUtils_CheckNullPointer("msg", mesg, "../padmgr.c", 563);
|
||||
|
||||
PadMgr_HandleRetraceMsg(padMgr);
|
||||
|
@ -84,12 +84,12 @@ void Sched_HandleReset(SchedContext* sc) {
|
||||
if (sc->curRSPTask != NULL) {
|
||||
LOG_TIME("(((u64)(now - graph_rsp_start_time)*(1000000LL/15625LL))/((62500000LL*3/4)/15625LL))",
|
||||
OS_CYCLES_TO_USEC(now - sRSPGFXStartTime), "../sched.c", 427);
|
||||
osSendMesg(&sc->interruptQ, RSP_DONE_MSG, OS_MESG_NOBLOCK);
|
||||
osSendMesg32(&sc->interruptQ, RSP_DONE_MSG, OS_MESG_NOBLOCK);
|
||||
}
|
||||
if (sc->curRDPTask != NULL) {
|
||||
LOG_TIME("(((u64)(now - rdp_start_time)*(1000000LL/15625LL))/((62500000LL*3/4)/15625LL))",
|
||||
OS_CYCLES_TO_USEC(now - sRDPStartTime), "../sched.c", 431);
|
||||
osSendMesg(&sc->interruptQ, RDP_DONE_MSG, OS_MESG_NOBLOCK);
|
||||
osSendMesg32(&sc->interruptQ, RDP_DONE_MSG, OS_MESG_NOBLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -294,10 +294,10 @@ void Sched_HandleEntry(SchedContext* sc) {
|
||||
OSScTask* nextRSP = NULL;
|
||||
OSScTask* nextRDP = NULL;
|
||||
s32 state;
|
||||
OSMesg msg = NULL;
|
||||
OSMesg msg = OS_MESG_PTR(NULL);
|
||||
|
||||
while (osRecvMesg(&sc->cmdQ, &msg, OS_MESG_NOBLOCK) != -1) {
|
||||
Sched_QueueTask(sc, msg);
|
||||
Sched_QueueTask(sc, msg.ptr);
|
||||
}
|
||||
|
||||
if (sc->doAudio != 0 && sc->curRSPTask != NULL) {
|
||||
@ -427,14 +427,14 @@ void Sched_SendEntryMsg(SchedContext* sc) {
|
||||
osSyncPrintf("osScKickEntryMsg\n");
|
||||
}
|
||||
|
||||
osSendMesg(&sc->interruptQ, ENTRY_MSG, OS_MESG_BLOCK);
|
||||
osSendMesg32(&sc->interruptQ, ENTRY_MSG, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void Sched_ThreadEntry(void* arg) {
|
||||
void* msg;
|
||||
OSMesg msg;
|
||||
SchedContext* sc = (SchedContext*)arg;
|
||||
|
||||
msg = NULL;
|
||||
msg.ptr = NULL;
|
||||
|
||||
while (true) {
|
||||
if (sLogScheduler) {
|
||||
@ -444,7 +444,7 @@ void Sched_ThreadEntry(void* arg) {
|
||||
|
||||
osRecvMesg(&sc->interruptQ, &msg, OS_MESG_BLOCK);
|
||||
|
||||
switch ((s32)msg) {
|
||||
switch (msg.data32) {
|
||||
case ENTRY_MSG:
|
||||
if (sLogScheduler) {
|
||||
osSyncPrintf("%08d:ENTRY_MSG\n", (u32)OS_CYCLES_TO_USEC(osGetTime()));
|
||||
@ -466,7 +466,7 @@ void Sched_ThreadEntry(void* arg) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (((OSScMsg*)msg)->type) {
|
||||
switch (((OSScMsg*)msg.ptr)->type) {
|
||||
case 1:
|
||||
Sched_HandleRetrace(sc);
|
||||
continue;
|
||||
@ -485,8 +485,8 @@ void Sched_Init(SchedContext* sc, void* stack, OSPri priority, UNK_TYPE arg3, UN
|
||||
sc->unk_24C = 1;
|
||||
osCreateMesgQueue(&sc->interruptQ, sc->intBuf, 8);
|
||||
osCreateMesgQueue(&sc->cmdQ, sc->cmdMsgBuf, 8);
|
||||
osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, RSP_DONE_MSG);
|
||||
osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, RDP_DONE_MSG);
|
||||
osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, OS_MESG_32(RSP_DONE_MSG));
|
||||
osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, OS_MESG_32(RDP_DONE_MSG));
|
||||
IrqMgr_AddClient(irqMgr, &sc->irqClient, &sc->interruptQ);
|
||||
osCreateThread(&sc->thread, 5, Sched_ThreadEntry, sc, stack, priority);
|
||||
osStartThread(&sc->thread);
|
||||
|
@ -6,7 +6,7 @@ void Sleep_Cycles(OSTime cycles) {
|
||||
OSTimer timer;
|
||||
|
||||
osCreateMesgQueue(&mq, &msg, OS_MESG_BLOCK);
|
||||
osSetTimer(&timer, cycles, 0, &mq, NULL);
|
||||
osSetTimer(&timer, cycles, 0, &mq, OS_MESG_PTR(NULL));
|
||||
osRecvMesg(&mq, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
|
@ -1584,6 +1584,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, Collis
|
||||
&colCtx->subdivLength.y, &colCtx->subdivLengthInv.y);
|
||||
BgCheck_SetSubdivisionDimension(colCtx->minBounds.z, colCtx->subdivAmount.z, &colCtx->maxBounds.z,
|
||||
&colCtx->subdivLength.z, &colCtx->subdivLengthInv.z);
|
||||
|
||||
#ifdef _SOH64 // BGCheck needs more memory on 64 bits because it crashes on some areas
|
||||
colCtx->memSize *= 2;
|
||||
#endif
|
||||
|
||||
memSize = colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z +
|
||||
colCtx->colHeader->numPolygons * sizeof(u8) + colCtx->dyna.polyNodesMax * sizeof(SSNode) +
|
||||
colCtx->dyna.polyListMax * sizeof(CollisionPoly) + colCtx->dyna.vtxListMax * sizeof(Vec3s) +
|
||||
@ -3787,7 +3792,7 @@ void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader) {
|
||||
/**
|
||||
* Convert CollisionHeader Segmented to Virtual addressing
|
||||
*/
|
||||
void CollisionHeader_GetVirtual(void* colHeader, CollisionHeader** dest)
|
||||
void CollisionHeader_GetVirtual(void* colHeader, CollisionHeader** dest)
|
||||
{
|
||||
if (ResourceMgr_OTRSigCheck(colHeader))
|
||||
colHeader = ResourceMgr_LoadColByName(colHeader);
|
||||
|
@ -183,7 +183,7 @@ void Font_LoadChar(Font* font, u8 character, u16 codePointIndex) {
|
||||
* The different icons are given in the MessageBoxIcon enum.
|
||||
*/
|
||||
void Font_LoadMessageBoxIcon(Font* font, u16 icon) {
|
||||
memcpy(font->iconBuf, msgStaticTbl[4 + icon], FONT_CHAR_TEX_SIZE);
|
||||
memcpy(font->iconBuf, ResourceMgr_LoadTexByName(msgStaticTbl[4 + icon]), FONT_CHAR_TEX_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -194,7 +194,7 @@ void Font_LoadOrderedFont(Font* font) {
|
||||
size_t len;
|
||||
size_t jj;
|
||||
s32 fontStatic;
|
||||
u32 fontBuf;
|
||||
u8* fontBuf;
|
||||
s32 codePointIndex;
|
||||
s32 fontBufIndex;
|
||||
s32 offset;
|
||||
|
@ -136,7 +136,7 @@ void HealthMeter_Init(GlobalContext* globalCtx) {
|
||||
HeartDDOutline[1] = HEARTS_DD_PRIM_G;
|
||||
HeartDDOutline[2] = HEARTS_DD_PRIM_B;
|
||||
}
|
||||
|
||||
|
||||
interfaceCtx->unk_228 = 0x140;
|
||||
interfaceCtx->unk_226 = gSaveContext.health;
|
||||
interfaceCtx->unk_22A = interfaceCtx->unk_1FE = 0;
|
||||
@ -162,9 +162,9 @@ void HealthMeter_Init(GlobalContext* globalCtx) {
|
||||
sHeartsDDPrim[0][1] = sHeartsDDPrim[1][1] = HeartDDOutline[1];
|
||||
sHeartsDDPrim[0][2] = sHeartsDDPrim[1][2] = HeartDDOutline[2];
|
||||
|
||||
sHeartsDDPrim[2][0] = HeartInner[0];
|
||||
sHeartsDDPrim[2][1] = HeartInner[1];
|
||||
sHeartsDDPrim[2][2] = HeartInner[2];
|
||||
// sHeartsDDPrim[2][0] = HeartInner[0];
|
||||
// sHeartsDDPrim[2][1] = HeartInner[1];
|
||||
// sHeartsDDPrim[2][2] = HeartInner[2];
|
||||
|
||||
sHeartsDDEnv[0][0] = sHeartsDDEnv[1][0] = HeartDDInner[0];
|
||||
sHeartsDDEnv[0][1] = sHeartsDDEnv[1][1] = HeartDDInner[1];
|
||||
@ -274,11 +274,11 @@ void HealthMeter_Update(GlobalContext* globalCtx) {
|
||||
sHeartsDDEnv[0][2] = HeartDDInner[2];
|
||||
|
||||
if (CVar_GetS32("gHudColors", 1) == 2) {
|
||||
sHeartsDDPrim[2][0] = HeartInner[0];
|
||||
sHeartsDDPrim[2][0] = HeartInner[0];
|
||||
sHeartsDDPrim[2][1] = HeartInner[1];
|
||||
sHeartsDDPrim[2][2] = HeartInner[2];
|
||||
|
||||
sHeartsDDPrim[1][0] = HeartDDOutline[0];
|
||||
sHeartsDDPrim[1][0] = HeartDDOutline[0];
|
||||
sHeartsDDPrim[1][1] = HeartDDOutline[1];
|
||||
sHeartsDDPrim[1][2] = HeartDDOutline[2];
|
||||
|
||||
@ -286,7 +286,7 @@ void HealthMeter_Update(GlobalContext* globalCtx) {
|
||||
sHeartsDDEnv[1][1] = HeartDDInner[1];
|
||||
sHeartsDDEnv[1][2] = HeartDDInner[2];
|
||||
|
||||
HeartDDInner[0] = HeartInner[0];
|
||||
HeartDDInner[0] = HeartInner[0];
|
||||
HeartDDInner[1] = HeartInner[1];
|
||||
HeartDDInner[2] = HeartInner[2];
|
||||
|
||||
@ -306,9 +306,9 @@ void HealthMeter_Update(GlobalContext* globalCtx) {
|
||||
sBeatingHeartsDDEnv[1] = (u8)(gFactor + HeartDDInner[1]) & 0xFF;
|
||||
sBeatingHeartsDDEnv[2] = (u8)(bFactor + HeartDDInner[2]) & 0xFF;
|
||||
} else {
|
||||
sHeartsDDPrim[2][0] = HEARTS_PRIM_R;
|
||||
sHeartsDDPrim[2][1] = HEARTS_PRIM_G;
|
||||
sHeartsDDPrim[2][2] = HEARTS_PRIM_B;
|
||||
// sHeartsDDPrim[2][0] = HEARTS_PRIM_R;
|
||||
// sHeartsDDPrim[2][1] = HEARTS_PRIM_G;
|
||||
// sHeartsDDPrim[2][2] = HEARTS_PRIM_B;
|
||||
|
||||
sHeartsDDPrim[1][0] = HEARTS_DD_PRIM_R;
|
||||
sHeartsDDPrim[1][1] = HEARTS_DD_PRIM_G;
|
||||
|
@ -1153,14 +1153,16 @@ void Message_LoadItemIcon(GlobalContext* globalCtx, u16 itemId, s16 y) {
|
||||
R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem32XOffsets[gSaveContext.language];
|
||||
R_TEXTBOX_ICON_YPOS = y + 6;
|
||||
R_TEXTBOX_ICON_SIZE = 32;
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, gItemIcons[itemId], 0x1000);
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
|
||||
ResourceMgr_LoadTexByName(gItemIcons[itemId]), 0x1000);
|
||||
// "Item 32-0"
|
||||
osSyncPrintf("アイテム32-0\n");
|
||||
} else {
|
||||
R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem24XOffsets[gSaveContext.language];
|
||||
R_TEXTBOX_ICON_YPOS = y + 10;
|
||||
R_TEXTBOX_ICON_SIZE = 24;
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, gItemIcons[itemId], 0x900);
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
|
||||
ResourceMgr_LoadTexByName(gItemIcons[itemId]), 0x900);
|
||||
// "Item 24"
|
||||
osSyncPrintf("アイテム24=%d (%d) {%d}\n", itemId, itemId - ITEM_KOKIRI_EMERALD, 84);
|
||||
}
|
||||
@ -3302,7 +3304,7 @@ void Message_Update(GlobalContext* globalCtx) {
|
||||
|
||||
void Message_SetTables(void) {
|
||||
OTRMessage_Init();
|
||||
|
||||
|
||||
// OTRTODO
|
||||
//sNesMessageEntryTablePtr = sNesMessageEntryTable;
|
||||
//sGerMessageEntryTablePtr = sGerMessageEntryTable;
|
||||
|
@ -10,11 +10,11 @@ void MsgEvent_SendNullTask(void) {
|
||||
task.next = NULL;
|
||||
task.flags = OS_SC_RCP_MASK;
|
||||
task.msgQ = &queue;
|
||||
task.msg = NULL;
|
||||
task.msg.ptr = NULL;
|
||||
task.framebuffer = NULL;
|
||||
task.list.t.type = M_NULTASK;
|
||||
osCreateMesgQueue(task.msgQ, &msg, 1);
|
||||
osSendMesg(&gSchedContext.cmdQ, &task, OS_MESG_BLOCK);
|
||||
osSendMesgPtr(&gSchedContext.cmdQ, &task, OS_MESG_BLOCK);
|
||||
Sched_SendEntryMsg(&gSchedContext);
|
||||
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
@ -1317,7 +1317,7 @@ void Interface_LoadItemIcon1(GlobalContext* globalCtx, u16 button) {
|
||||
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK);
|
||||
DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->iconItemSegment + button * 0x1000,
|
||||
(uintptr_t)_icon_item_staticSegmentRomStart + (gSaveContext.equips.buttonItems[button] * 0x1000),
|
||||
0x1000, 0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 1171);
|
||||
0x1000, 0, &interfaceCtx->loadQueue, OS_MESG_PTR(NULL), "../z_parameter.c", 1171);
|
||||
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
@ -1327,7 +1327,7 @@ void Interface_LoadItemIcon2(GlobalContext* globalCtx, u16 button) {
|
||||
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK);
|
||||
DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_180, interfaceCtx->iconItemSegment + button * 0x1000,
|
||||
(uintptr_t)_icon_item_staticSegmentRomStart + (gSaveContext.equips.buttonItems[button] * 0x1000),
|
||||
0x1000, 0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 1193);
|
||||
0x1000, 0, &interfaceCtx->loadQueue, OS_MESG_PTR(NULL), "../z_parameter.c", 1193);
|
||||
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
@ -2164,7 +2164,7 @@ void Interface_SetNaviCall(GlobalContext* globalCtx, u16 naviCallState) {
|
||||
|
||||
if (((naviCallState == 0x1D) || (naviCallState == 0x1E)) && !interfaceCtx->naviCalling &&
|
||||
(globalCtx->csCtx.state == CS_STATE_IDLE)) {
|
||||
if (!CVar_GetS32("gDisableNaviCallAudio", 0)) {
|
||||
if (!CVar_GetS32("gDisableNaviCallAudio", 0)) {
|
||||
// clang-format off
|
||||
if (naviCallState == 0x1E) { Audio_PlaySoundGeneral(NA_SE_VO_NAVY_CALL, &D_801333D4, 4,
|
||||
&D_801333E0, &D_801333E0, &D_801333E8); }
|
||||
@ -2884,7 +2884,7 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) {
|
||||
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
|
||||
//There is probably a more elegant way to do it.
|
||||
char* doAction = actionsTbl[3];
|
||||
char newName[512];
|
||||
@ -2903,7 +2903,7 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) {
|
||||
doAction = newName;
|
||||
}
|
||||
memcpy(interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE * 2, ResourceMgr_LoadTexByName(doAction), DO_ACTION_TEX_SIZE);
|
||||
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE * 2, G_IM_FMT_IA,
|
||||
DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
@ -2987,8 +2987,8 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) {
|
||||
//This later will feature color per C button right now that it.
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), interfaceCtx->cRightAlpha);
|
||||
}
|
||||
|
||||
OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, ((u8*)gButtonBackgroundTex), 32, 32,
|
||||
|
||||
OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, ((u8*)gButtonBackgroundTex), 32, 32,
|
||||
OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)+Right_HUD_Margin), R_ITEM_BTN_Y(temp)+(Top_HUD_Margin*-1), R_ITEM_BTN_WIDTH(temp),
|
||||
R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, R_ITEM_BTN_DD(temp) << 1);
|
||||
|
||||
@ -3073,7 +3073,7 @@ void Interface_DrawAmmoCount(GlobalContext* globalCtx, s16 button, s16 alpha) {
|
||||
}
|
||||
|
||||
if (i != 0) {
|
||||
OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[i], 8, 8,
|
||||
OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[i], 8, 8,
|
||||
OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)+Right_HUD_Margin), R_ITEM_AMMO_Y(button)+(Top_HUD_Margin*-1), 8, 8, 1 << 10, 1 << 10);
|
||||
}
|
||||
|
||||
@ -3444,11 +3444,11 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
||||
|
||||
if ((player->stateFlags1 & 0x00800000) || (globalCtx->shootingGalleryStatus > 1) ||
|
||||
((globalCtx->sceneNum == SCENE_BOWLING) && Flags_GetSwitch(globalCtx, 0x38))) {
|
||||
|
||||
|
||||
if (!fullUi) {
|
||||
Interface_DrawItemIconTexture(globalCtx, gItemIcons[gSaveContext.equips.buttonItems[0]], 0);
|
||||
}
|
||||
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
|
||||
0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
@ -4070,7 +4070,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
||||
|
||||
for (svar1 = 0; svar1 < 5; svar1++) {
|
||||
// clang-format off
|
||||
svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]);
|
||||
svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]);
|
||||
OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, digitTextures[timerDigits[svar1]], 8, 16,
|
||||
svar5 + timerDigitLeftPos[svar1],
|
||||
svar2 = gSaveContext.timerY[svar6], digitWidth[svar1], VREG(42), VREG(43) << 1,
|
||||
|
@ -198,8 +198,8 @@ void Gameplay_Init(GameState* thisx) {
|
||||
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
|
||||
gGlobalCtx = globalCtx;
|
||||
//globalCtx->state.gfxCtx = NULL;
|
||||
u32 zAlloc;
|
||||
u32 zAllocAligned;
|
||||
uintptr_t zAlloc;
|
||||
uintptr_t zAllocAligned;
|
||||
size_t zAllocSize;
|
||||
Player* player;
|
||||
s32 playerStartCamId;
|
||||
|
@ -363,13 +363,13 @@ void Player_SetModelsForHoldingShield(Player* this) {
|
||||
if ((CVar_GetS32("gShieldTwoHanded", 0) && (this->heldItemActionParam != PLAYER_AP_STICK) ||
|
||||
!Player_HoldsTwoHandedWeapon(this)) && !Player_IsChildWithHylianShield(this)) {
|
||||
this->rightHandType = 10;
|
||||
this->rightHandDLists = &sPlayerDListGroups[10][(void)0, gSaveContext.linkAge];
|
||||
this->rightHandDLists = &sPlayerDListGroups[10][gSaveContext.linkAge];
|
||||
if (this->sheathType == 18) {
|
||||
this->sheathType = 16;
|
||||
} else if (this->sheathType == 19) {
|
||||
this->sheathType = 17;
|
||||
}
|
||||
this->sheathDLists = &sPlayerDListGroups[this->sheathType][(void)0, gSaveContext.linkAge];
|
||||
this->sheathDLists = &sPlayerDListGroups[this->sheathType][gSaveContext.linkAge];
|
||||
this->modelAnimType = 2;
|
||||
this->itemActionParam = -1;
|
||||
}
|
||||
@ -381,10 +381,10 @@ void Player_SetModels(Player* this, s32 modelGroup) {
|
||||
this->rightHandType = gPlayerModelTypes[modelGroup][2];
|
||||
this->sheathType = gPlayerModelTypes[modelGroup][3];
|
||||
|
||||
this->leftHandDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][1]][(void)0, gSaveContext.linkAge];
|
||||
this->rightHandDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][2]][(void)0, gSaveContext.linkAge];
|
||||
this->sheathDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][3]][(void)0, gSaveContext.linkAge];
|
||||
this->waistDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][4]][(void)0, gSaveContext.linkAge];
|
||||
this->leftHandDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][1]][gSaveContext.linkAge];
|
||||
this->rightHandDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][2]][gSaveContext.linkAge];
|
||||
this->sheathDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][3]][gSaveContext.linkAge];
|
||||
this->waistDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][4]][gSaveContext.linkAge];
|
||||
|
||||
Player_SetModelsForHoldingShield(this);
|
||||
}
|
||||
@ -859,15 +859,15 @@ void func_8008F87C(GlobalContext* globalCtx, Player* this, SkelAnime* skelAnime,
|
||||
(Player_ActionToMagicSpell(this, this->itemActionParam) < 0)) {
|
||||
s32 pad;
|
||||
|
||||
sp7C = D_80126058[(void)0, gSaveContext.linkAge];
|
||||
sp78 = D_80126060[(void)0, gSaveContext.linkAge];
|
||||
sp74 = D_80126068[(void)0, gSaveContext.linkAge] - this->unk_6C4;
|
||||
sp7C = D_80126058[gSaveContext.linkAge];
|
||||
sp78 = D_80126060[gSaveContext.linkAge];
|
||||
sp74 = D_80126068[gSaveContext.linkAge] - this->unk_6C4;
|
||||
|
||||
Matrix_Push();
|
||||
Matrix_TranslateRotateZYX(pos, rot);
|
||||
Matrix_MultVec3f(&D_8012602C, &spA4);
|
||||
Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.linkAge], &skelAnime->jointTable[shinLimbIndex]);
|
||||
Matrix_Translate(D_80126050[(void)0, gSaveContext.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_TranslateRotateZYX(&D_80126038[gSaveContext.linkAge], &skelAnime->jointTable[shinLimbIndex]);
|
||||
Matrix_Translate(D_80126050[gSaveContext.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_MultVec3f(&D_8012602C, &sp98);
|
||||
Matrix_MultVec3f(&D_80126070, &footprintPos);
|
||||
Matrix_Pop();
|
||||
@ -1055,16 +1055,16 @@ s32 func_800902F0(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
|
||||
if (this->unk_6AD != 2) {
|
||||
*dList = NULL;
|
||||
} else if (limbIndex == PLAYER_LIMB_L_FOREARM) {
|
||||
*dList = sArmOutDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sArmOutDLs[gSaveContext.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_L_HAND) {
|
||||
*dList = sHandOutDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sHandOutDLs[gSaveContext.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_R_SHOULDER) {
|
||||
*dList = sRightShoulderNearDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sRightShoulderNearDLs[gSaveContext.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_R_FOREARM) {
|
||||
*dList = D_80125F30[(void)0, gSaveContext.linkAge];
|
||||
*dList = D_80125F30[gSaveContext.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
|
||||
*dList = Player_HoldsHookshot(this) ? gLinkAdultRightHandHoldingHookshotFarDL
|
||||
: sHoldingFirstPersonWeaponDLs[(void)0, gSaveContext.linkAge];
|
||||
: sHoldingFirstPersonWeaponDLs[gSaveContext.linkAge];
|
||||
} else {
|
||||
*dList = NULL;
|
||||
}
|
||||
@ -1348,7 +1348,7 @@ void func_80090D20(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_player_lib.c", 2712),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[((void)0, gSaveContext.linkAge)]);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[(gSaveContext.linkAge)]);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_player_lib.c", 2717);
|
||||
}
|
||||
@ -1479,7 +1479,7 @@ void func_80090D20(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
} else if (limbIndex == PLAYER_LIMB_HEAD) {
|
||||
Matrix_MultVec3f(&D_801260D4, &this->actor.focus.pos);
|
||||
} else {
|
||||
Vec3f* vec = &D_801261E0[((void)0, gSaveContext.linkAge)];
|
||||
Vec3f* vec = &D_801261E0[(gSaveContext.linkAge)];
|
||||
|
||||
Actor_SetFeetPos(&this->actor, limbIndex, PLAYER_LIMB_L_FOOT, vec, PLAYER_LIMB_R_FOOT, vec);
|
||||
}
|
||||
@ -1487,7 +1487,7 @@ void func_80090D20(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
}
|
||||
|
||||
u32 func_80091738(GlobalContext* globalCtx, u8* segment, SkelAnime* skelAnime) {
|
||||
s16 linkObjectId = gLinkObjectIds[(void)0, gSaveContext.linkAge];
|
||||
s16 linkObjectId = gLinkObjectIds[gSaveContext.linkAge];
|
||||
size_t size;
|
||||
void* ptr;
|
||||
|
||||
@ -1504,7 +1504,7 @@ u32 func_80091738(GlobalContext* globalCtx, u8* segment, SkelAnime* skelAnime) {
|
||||
gSegments[4] = VIRTUAL_TO_PHYSICAL(segment + 0x3800);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(segment + 0x8800);
|
||||
|
||||
SkelAnime_InitLink(globalCtx, skelAnime, gPlayerSkelHeaders[(void)0, gSaveContext.linkAge], &gPlayerAnim_003238, 9,
|
||||
SkelAnime_InitLink(globalCtx, skelAnime, gPlayerSkelHeaders[gSaveContext.linkAge], &gPlayerAnim_003238, 9,
|
||||
ptr, ptr, PLAYER_LIMB_MAX);
|
||||
|
||||
return size + 0x8800 + 0x90;
|
||||
@ -1518,6 +1518,7 @@ s32 func_80091880(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
|
||||
s32 type;
|
||||
s32 dListOffset = 0;
|
||||
Gfx** dLists;
|
||||
size_t ptrSize = sizeof(uint32_t);
|
||||
|
||||
if ((modelGroup == 2) && !LINK_IS_ADULT && (ptr[1] == 2)) {
|
||||
modelGroup = 1;
|
||||
@ -1537,12 +1538,12 @@ s32 func_80091880(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
|
||||
type = gPlayerModelTypes[modelGroup][2];
|
||||
D_80160018 = type;
|
||||
if (type == 10) {
|
||||
dListOffset = ptr[1] * sizeof(uintptr_t);
|
||||
dListOffset = ptr[1] * ptrSize;
|
||||
}
|
||||
} else if (limbIndex == PLAYER_LIMB_SHEATH) {
|
||||
type = gPlayerModelTypes[modelGroup][3];
|
||||
if ((type == 18) || (type == 19)) {
|
||||
dListOffset = ptr[1] * sizeof(uintptr_t);
|
||||
dListOffset = ptr[1] * ptrSize;
|
||||
} else if (type == 16 && CVar_GetS32("gPauseLiveLink", 0)) {
|
||||
//if (ptr[0] == 1)
|
||||
//dListOffset = 4;
|
||||
@ -1553,7 +1554,7 @@ s32 func_80091880(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
|
||||
return 0;
|
||||
}
|
||||
|
||||
dLists = &sPlayerDListGroups[type][(void)0, gSaveContext.linkAge];
|
||||
dLists = &sPlayerDListGroups[type][gSaveContext.linkAge];
|
||||
*dList = dLists[dListOffset];
|
||||
|
||||
return 0;
|
||||
@ -1609,7 +1610,7 @@ void func_80091A24(GlobalContext* globalCtx, void* seg04, void* seg06, SkelAnime
|
||||
viewport.vp.vscale[0] = viewport.vp.vtrans[0] = width * 2;
|
||||
viewport.vp.vscale[1] = viewport.vp.vtrans[1] = height * 2;
|
||||
gSPViewport(POLY_OPA_DISP++, &viewport);
|
||||
|
||||
|
||||
guPerspective(perspMtx, &perspNorm, fovy, (f32)width / (f32)height, 10.0f, 4000.0f, 1.0f);
|
||||
|
||||
gSPPerspNormalize(POLY_OPA_DISP++, perspNorm);
|
||||
|
@ -554,7 +554,7 @@ u32 func_80096FE8(GlobalContext* globalCtx, RoomContext* roomCtx) {
|
||||
roomCtx->bufPtrs[0] = GameState_Alloc(&globalCtx->state, maxRoomSize, "../z_room.c", 946);
|
||||
// "Room buffer initial pointer=%08x"
|
||||
osSyncPrintf("部屋バッファ開始ポインタ=%08x\n", roomCtx->bufPtrs[0]);
|
||||
roomCtx->bufPtrs[1] = (void*)((s32)roomCtx->bufPtrs[0] + maxRoomSize);
|
||||
roomCtx->bufPtrs[1] = (void*)((intptr_t)roomCtx->bufPtrs[0] + maxRoomSize);
|
||||
// "Room buffer end pointer=%08x"
|
||||
osSyncPrintf("部屋バッファ終了ポインタ=%08x\n", roomCtx->bufPtrs[1]);
|
||||
osSyncPrintf(VT_RST);
|
||||
@ -586,7 +586,7 @@ s32 func_8009728C(GlobalContext* globalCtx, RoomContext* roomCtx, s32 roomNum) {
|
||||
|
||||
osCreateMesgQueue(&roomCtx->loadQueue, &roomCtx->loadMsg, 1);
|
||||
DmaMgr_SendRequest2(&roomCtx->dmaRequest, roomCtx->unk_34, globalCtx->roomList[roomNum].vromStart, size, 0,
|
||||
&roomCtx->loadQueue, NULL, "../z_room.c", 1036);
|
||||
&roomCtx->loadQueue, OS_MESG_PTR(NULL), "../z_room.c", 1036);
|
||||
roomCtx->unk_30 ^= 1;
|
||||
|
||||
return 1;
|
||||
|
@ -61,6 +61,7 @@ void Object_InitBank(GlobalContext* globalCtx, ObjectContext* objectCtx) {
|
||||
|
||||
for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) {
|
||||
objectCtx->status[i].id = OBJECT_INVALID;
|
||||
objectCtx->status[i].segment = NULL;
|
||||
}
|
||||
|
||||
osSyncPrintf(VT_FGCOL(GREEN));
|
||||
|
@ -857,7 +857,7 @@ void AnimationContext_SetLoadFrame(GlobalContext* globalCtx, LinkAnimationHeader
|
||||
animation = ResourceMgr_LoadAnimByName(animation);
|
||||
|
||||
LinkAnimationHeader* linkAnimHeader = SEGMENTED_TO_VIRTUAL(animation);
|
||||
u32 ram = frameTable;
|
||||
Vec3s* ram = frameTable;
|
||||
|
||||
osCreateMesgQueue(&entry->data.load.msgQueue, &entry->data.load.msg, 1);
|
||||
|
||||
|
@ -326,6 +326,7 @@ void BossGoma_ClearPixels32x32Rgba16(s16* rgba16image, u8* clearPixelTable, s16
|
||||
* Clear pixels from Gohma's textures
|
||||
*/
|
||||
void BossGoma_ClearPixels(u8* clearPixelTable, s16 i) {
|
||||
return;
|
||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaBodyTex), clearPixelTable, i);
|
||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaShellUndersideTex), clearPixelTable, i);
|
||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaDarkShellTex), clearPixelTable, i);
|
||||
|
@ -2370,7 +2370,7 @@ void EnHorse_CutsceneUpdate(EnHorse* this, GlobalContext* globalCtx) {
|
||||
EnHorse_Freeze(this);
|
||||
return;
|
||||
}
|
||||
if (linkCsAction != 0 && linkCsAction != 0xABABABAB) {
|
||||
if (linkCsAction != 0 && (uint32_t)(uintptr_t)linkCsAction != 0xABABABAB) {
|
||||
csFunctionIdx = EnHorse_GetCutsceneFunctionIndex(linkCsAction->action);
|
||||
if (csFunctionIdx != 0) {
|
||||
if (this->cutsceneAction != csFunctionIdx) {
|
||||
|
@ -660,7 +660,7 @@ void func_80AF68E4(EnSa* this, GlobalContext* globalCtx) {
|
||||
EnSa_ChangeAnim(this, csAction->action);
|
||||
this->unk_210 = csAction->action;
|
||||
}
|
||||
if (phi_v0) {}
|
||||
//if (phi_v0) {}
|
||||
if (csAction->action == 3) {
|
||||
if (this->unk_20C == 0) {
|
||||
phi_v0 = 0;
|
||||
|
@ -4868,7 +4868,7 @@ void func_8083AE40(Player* this, s16 objectId) {
|
||||
ASSERT(size <= 1024 * 8, "size <= 1024 * 8", "../z_player.c", 9091);
|
||||
|
||||
DmaMgr_SendRequest2(&this->giObjectDmaRequest, (uintptr_t)this->giObjectSegment, gObjectTable[objectId].vromStart,
|
||||
size, 0, &this->giObjectLoadQueue, NULL, "../z_player.c", 9099);
|
||||
size, 0, &this->giObjectLoadQueue, OS_MESG_PTR(NULL), "../z_player.c", 9099);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9479,7 +9479,7 @@ void Player_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
Player_SetEquipmentData(globalCtx, this);
|
||||
this->prevBoots = this->currentBoots;
|
||||
Player_InitCommon(this, globalCtx, gPlayerSkelHeaders[((void)0, gSaveContext.linkAge)]);
|
||||
this->giObjectSegment = (void*)(((u32)ZeldaArena_MallocDebug(0x3008, "../z_player.c", 17175) + 8) & ~0xF);
|
||||
this->giObjectSegment = (void*)(((uintptr_t)ZeldaArena_MallocDebug(0x3008, "../z_player.c", 17175) + 8) & ~0xF);
|
||||
|
||||
sp50 = gSaveContext.respawnFlag;
|
||||
|
||||
@ -10819,7 +10819,7 @@ void Player_UpdateCommon(Player* this, GlobalContext* globalCtx, Input* input) {
|
||||
static Vec3f D_80854838 = { 0.0f, 0.0f, -30.0f };
|
||||
|
||||
void Player_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
static Vec3f sDogSpawnPos;
|
||||
static Vec3f sDogSpawnPos;
|
||||
Player* this = (Player*)thisx;
|
||||
s32 dogParams;
|
||||
s32 pad;
|
||||
|
@ -159,7 +159,7 @@ void KaleidoScope_DrawEquipment(GlobalContext* globalCtx) {
|
||||
u16 pad;
|
||||
s16 cursorMoveResult;
|
||||
u16 cursorItem;
|
||||
u16 cursorSlot;
|
||||
u16 cursorSlot = 0;
|
||||
s16 cursorPoint;
|
||||
s16 cursorX;
|
||||
s16 cursorY;
|
||||
|
@ -3216,11 +3216,11 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
|
||||
GameOverContext* gameOverCtx = &globalCtx->gameOverCtx;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
Input* input = &globalCtx->state.input[0];
|
||||
size_t size;
|
||||
size_t size0;
|
||||
size_t size1;
|
||||
size_t size2;
|
||||
u16 i;
|
||||
size_t size = 0;
|
||||
size_t size0 = 0;
|
||||
size_t size1 = 0;
|
||||
size_t size2 = 0;
|
||||
u16 i = 0;
|
||||
s16 stepR;
|
||||
s16 stepG;
|
||||
s16 stepB;
|
||||
@ -3283,7 +3283,7 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
|
||||
//DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size,
|
||||
//"../z_kaleido_scope_PAL.c", 3675);
|
||||
|
||||
pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF);
|
||||
//pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF);
|
||||
#endif
|
||||
|
||||
switch (globalCtx->sceneNum) {
|
||||
@ -3331,7 +3331,7 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
|
||||
|
||||
// OTRTODO: LANGUAGE SUPPORT
|
||||
#if 1
|
||||
pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF);
|
||||
//pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF);
|
||||
|
||||
if (gSaveContext.language == LANGUAGE_ENG) {
|
||||
//size = (uintptr_t)_icon_item_nes_staticSegmentRomEnd - (uintptr_t)_icon_item_nes_staticSegmentRomStart;
|
||||
|
Loading…
Reference in New Issue
Block a user