commit dfaf87100ef120dcc40b83455e2f7eef0d08b475 Author: Scan Date: Wed Aug 28 23:36:39 2024 -0400 Initial re-upload diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2de2978 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/bin/ +/build/ +/local/ + diff --git a/.gitmodules b/.gitmodules new file mode 100755 index 0000000..948464e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule "lib/cmake-various"] + path = lib/cmake-various + url = https://codeberg.org/lilium/cmake-various.git + branch = master +[submodule "lib/exec_u001"] + path = lib/exec_u001 + url = https://codeberg.org/lilium/exec_u001.git + branch = master +[submodule "lib/minhook"] + path = lib/minhook + url = https://github.com/TsudaKageyu/minhook.git + branch = master diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..f9b5e3b --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +hooks-ac \ No newline at end of file diff --git a/.idea/cmake.xml b/.idea/cmake.xml new file mode 100644 index 0000000..a1a212e --- /dev/null +++ b/.idea/cmake.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/hooks.iml b/.idea/hooks.iml new file mode 100644 index 0000000..f08604b --- /dev/null +++ b/.idea/hooks.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..9358eb3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,73 @@ + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator-enh.xml b/.idea/markdown-navigator-enh.xml new file mode 100644 index 0000000..a8fcc84 --- /dev/null +++ b/.idea/markdown-navigator-enh.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml new file mode 100644 index 0000000..d7e995c --- /dev/null +++ b/.idea/markdown-navigator.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..062a3f0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..52dc6c7 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..fbd5f9b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,21 @@ +## Global settings ## +# Solution name and CMake version used +cmake_minimum_required(VERSION 3.16) +project(hooks-ac) +include("${CMAKE_TOOLCHAIN_FILE}") +include(lib/cmake-various/extension/PrecompiledHeader.cmake) +include(lib/cmake-various/extension/CMakeEx.cmake) +target_init_build_revision(CMAKE) +message(STATUS "BuildRevision is ${CMAKE_BuildRevision}") + +## Load main config ## +if (CMAKE_SYSTEM_NAME MATCHES ".*[W|w]indows.*") + include(CMakeLists_win-gcc.cmake) +else () + message(FATAL_ERROR "Unsupported target platform") +endif () + +## Post-setup Info ## +message(STATUS "Configuration name: ${TOOLCHAIN_CONFIG}") +message(STATUS "Target OS: ${CMAKE_SYSTEM_NAME}") +message(STATUS "Target Arch: ${CMAKE_SYSTEM_PROCESSOR}") diff --git a/CMakeLists_win-gcc.cmake b/CMakeLists_win-gcc.cmake new file mode 100755 index 0000000..946dc21 --- /dev/null +++ b/CMakeLists_win-gcc.cmake @@ -0,0 +1,46 @@ +## Global settings ## +# Binaries prefix +set(CMAKE_STATIC_LIBRARY_PREFIX "") +set(CMAKE_SHARED_LIBRARY_PREFIX "") +set(CMAKE_IMPORT_LIBRARY_PREFIX "") +# Binaries output directory +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/${TOOLCHAIN_CONFIG}") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/${TOOLCHAIN_CONFIG}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/${TOOLCHAIN_CONFIG}") +# Compilation profile specific +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) +if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") +endif () +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti") +# Compiler stage +add_compile_definitions(CMAKE_BUILD WINDOWS_TARGET) +add_compile_options(-Wall -Wextra -Wno-attributes -Wno-pragmas -Wno-unknown-pragmas -Wno-eof-newline -Wno-deprecated-declarations -Wenum-conversion -Wno-unused-function -Wno-unused-parameter) +add_compile_options(-fPIC) +include_directories( + lib/win_gcc/include + lib/nix_gcc/include/${TOOLCHAIN_TARGET_ARCH} +) +# Linker stage +link_directories( + "${PROJECT_SOURCE_DIR}/lib/win_gcc" + "${PROJECT_SOURCE_DIR}/lib/win_gcc/${TOOLCHAIN_TARGET_ARCH}" + "${PROJECT_SOURCE_DIR}/lib/win_gcc/${TOOLCHAIN_TARGET_ARCH}/dll" +) + +## Add projects ## +# hooking support +add_subdirectory( + lib/minhook +) +# omnimix banner coloring +add_subdirectory( + src/omnimix-banner +) +# omnimix clear/combo data +add_subdirectory( + src/omnimix-dataloader +) diff --git a/src/omnimix-banner/CMakeLists.txt b/src/omnimix-banner/CMakeLists.txt new file mode 100755 index 0000000..81a0e57 --- /dev/null +++ b/src/omnimix-banner/CMakeLists.txt @@ -0,0 +1,43 @@ +## omnimix_banner.shared ## +set(target_name "omnimix_banner") +file(GLOB_RECURSE FILE_${target_name} CONFIGURE_DEPENDS "*.c") +add_library(${target_name} SHARED ${FILE_${target_name}}) + +# Local #define +target_compile_definitions(${target_name} PRIVATE + BIN_BUILDREV="${CMAKE_BuildRevision}" + ) + +# Local includes (#include "" | gcc -iquote) +target_include_directories_quote(${target_name} PRIVATE + . + Style + ) + +# External includes (#include <> | gcc -I) +target_include_directories(${target_name} PRIVATE + ${CMAKE_SOURCE_DIR}/lib/mihook/include + ) + +# Force includes (include for every file | gcc -include) +target_force_include(${target_name} QUOTE + ) + +# Local dynamic linker (compiled libraries) - referenced libraries +target_link_libraries(${target_name} PRIVATE + minhook + ) + +# External dynamic linker (binary libraries) - external/system libraries +target_link_libraries(${target_name} PRIVATE + ) + +# Post build hooks +target_init_vsmacro(${target_name}) +execute_process( + COMMAND python "${SolutionDir}lib/exec_u001/main.py" "--root=${SolutionDir}" "--exiv=${ProjectDir}on_init.exiv" "-m:ProjectDir=${ProjectDir}" "-m:TargetDir=${TargetDir}" "-m:PlatformTarget=${PlatformTarget}" "-m:PlatformLib=nix_gcc" + ) +add_custom_command(TARGET ${target_name} + POST_BUILD + COMMAND python "${SolutionDir}lib/exec_u001/main.py" "--root=${SolutionDir}" "--exiv=${ProjectDir}on_compiled.exiv" "-m:ProjectDir=${ProjectDir}" "-m:TargetDir=${TargetDir}" "-m:PlatformTarget=${PlatformTarget}" "-m:PlatformLib=nix_gcc" + ) diff --git a/src/omnimix-banner/Style/iidx25.h b/src/omnimix-banner/Style/iidx25.h new file mode 100644 index 0000000..5210c40 --- /dev/null +++ b/src/omnimix-banner/Style/iidx25.h @@ -0,0 +1,45 @@ +#ifndef _IIDX25_H +#define _IIDX25_H +#include "defines.h" + + +static const ob_payload_t REV_20180919 = { + .revision ="20180919", + .songdb_va = 0x265A35, + .banner_va = 0xB6DF0, + .song_by_id = (const uint16_t[]) { + 1002, 1007, 1011, 1012, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2004, 2007, 2009, + 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, + 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, + 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4028, 4031, 4202, + 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, 5001, 5002, 5003, + 5005, 5006, 5008, 5013, 5020, 5022, 5023, 5026, 5027, 5029, 5201, 5202, 5203, 5204, 5205, 5206, + 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6023, 6024, 6025, 6026, 6030, 6201, + 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, 7005, 7007, 7009, 7012, 7013, + 7015, 7017, 7019, 7020, 7023, 7025, 7027, 7028, 7029, 7030, 7031, 7033, 7035, 7201, 7202, 7203, + 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, 8033, 8034, 8035, 8036, + 8038, 8041, 8042, 8046, 8201, 8202, 8203, 8204, 9003, 9004, 9005, 9007, 9008, 9009, 9013, 9014, + 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, 9036, 9040, 9041, 9043, 9047, + 9049, 9050, 9053, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, 9405, 9406, 10003, 10007, 10008, + 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10031, 10032, 10037, 10039, 10043, 10044, 10045, + 10050, 10051, 10054, 10201, 10204, 10205, 10206, 11003, 11006, 11016, 11017, 11020, 11021, 11022, 11023, 11024, + 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, 11201, 11202, 11203, 12001, 12024, + 12032, 12033, 12035, 12039, 12042, 12044, 12046, 12047, 12048, 12202, 12203, 12205, 13004, 13007, 13008, 13012, + 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13036, 13042, 13043, 13045, 13049, 13201, 13202, 13203, + 13204, 13205, 13206, 13207, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, 14024, 14025, 14026, + 14027, 14032, 14034, 14036, 14041, 14042, 14045, 14048, 14054, 14057, 14201, 14203, 14204, 14205, 14206, 14207, + 14212, 14213, 15012, 15017, 15033, 15034, 15035, 15036, 15037, 15042, 15046, 15047, 15050, 15051, 15052, 15203, + 15206, 15210, 15212, 15213, 15214, 15216, 16007, 16012, 16018, 16041, 16044, 16046, 16047, 16048, 16201, 16202, + 16203, 16204, 16206, 16208, 16210, 16211, 17010, 17011, 17018, 17019, 17029, 17030, 17031, 17036, 17038, 17042, + 17045, 17047, 17048, 17049, 17100, 18016, 18026, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, 18049, + 18052, 18063, 18070, 18102, 18201, 18202, 19012, 19017, 19021, 19023, 19041, 19043, 19044, 19061, 19066, 20001, + 20010, 20014, 20034, 20042, 20045, 20056, 20057, 20060, 20069, 20076, 20092, 21010, 21017, 21036, 21046, 21054, + 21057, 21070, 21071, 21074, 21075, 21080, 21086, 21201, 21204, 21205, 21206, 21207, 21208, 21209, 21210, 21211, + 21212, 21215, 21216, 21217, 21218, 21219, 21222, 21223, 21224, 21227, 21228, 21229, 21232, 21233, 21234, 21235, + 21236, 21238, 21239, 21240, 21241, 21244, 21245, 21246, 21247, 21248, 21249, 21250, 21252, 21254, 21255, 21256, + 21257, 21259, 21260, 21261, 21263, 21264, 21265, 22020, 22036, 22050, 22066, 22072, 22081, 0 + } +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/Style/iidx26.h b/src/omnimix-banner/Style/iidx26.h new file mode 100644 index 0000000..559df91 --- /dev/null +++ b/src/omnimix-banner/Style/iidx26.h @@ -0,0 +1,86 @@ +#ifndef _IIDX26_H +#define _IIDX26_H +#include "defines.h" + + +static const ob_payload_t REV_20190902 = { + .revision ="20190902", + .songdb_va = 0x53D785, + .banner_va = 0x16E4F0, + .song_by_id = (const uint16_t[]) { + 1002, 1007, 1011, 1012, 1013, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, + 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, + 2007, 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, + 2211, 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, + 3208, 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4028, + 4030, 4031, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, + 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5023, 5026, 5027, 5029, 5201, 5202, 5203, + 5204, 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6024, 6025, 6026, + 6030, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, 7005, 7007, 7009, + 7012, 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7027, 7028, 7029, 7030, 7031, 7033, 7035, 7201, + 7202, 7203, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, 8033, 8034, + 8035, 8036, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9003, 9004, 9005, 9007, 9008, + 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, 9040, 9041, + 9043, 9047, 9049, 9050, 9053, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, 9405, 9406, 10003, + 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10031, 10032, 10037, 10039, 10043, + 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 10206, 11003, 11006, 11016, 11017, 11020, 11021, 11022, + 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, 11201, 11202, 11203, + 12001, 12024, 12032, 12033, 12035, 12039, 12042, 12046, 12047, 12048, 12202, 12203, 12205, 13004, 13007, 13008, + 13012, 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13034, 13036, 13042, 13043, 13045, 13049, 13201, + 13202, 13203, 13204, 13205, 13206, 13207, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, 14024, + 14025, 14026, 14027, 14032, 14034, 14036, 14041, 14042, 14045, 14048, 14054, 14057, 14201, 14203, 14204, 14205, + 14206, 14207, 14212, 14213, 15012, 15017, 15033, 15034, 15035, 15036, 15037, 15042, 15046, 15047, 15051, 15052, + 15203, 15206, 15210, 15212, 15213, 15214, 15216, 16007, 16012, 16018, 16033, 16041, 16044, 16046, 16047, 16048, + 16201, 16202, 16203, 16204, 16206, 16208, 16210, 16211, 17010, 17011, 17018, 17019, 17029, 17030, 17031, 17036, + 17038, 17042, 17045, 17047, 17048, 17049, 17100, 18016, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, + 18049, 18052, 18063, 18065, 18070, 18102, 18201, 18202, 19012, 19017, 19021, 19023, 19035, 19041, 19043, 19044, + 19061, 19066, 20001, 20010, 20014, 20034, 20042, 20045, 20056, 20057, 20060, 20069, 20076, 20092, 21009, 21010, + 21017, 21036, 21046, 21054, 21057, 21070, 21071, 21074, 21075, 21080, 21086, 21201, 21204, 21205, 21206, 21207, + 21208, 21209, 21210, 21211, 21212, 21215, 21216, 21217, 21218, 21219, 21222, 21223, 21224, 21227, 21228, 21229, + 21232, 21233, 21234, 21235, 21236, 21238, 21239, 21240, 21241, 21244, 21245, 21246, 21247, 21248, 21249, 21250, + 21252, 21254, 21255, 21256, 21257, 21259, 21260, 21261, 21263, 21264, 21265, 22020, 22023, 22036, 22050, 22066, + 22071, 22072, 22081, 22082, 23020, 23023, 23025, 23040, 23042, 23059, 0 + } +}; + +static const ob_payload_t REV_20191007 = { + .revision ="20191007", + .songdb_va = 0x53D785, + .banner_va = 0x16E4F0, + .song_by_id = (const uint16_t[]) { + 1002, 1007, 1011, 1012, 1013, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, + 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, + 2007, 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, + 2211, 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, + 3208, 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4028, + 4030, 4031, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, + 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5023, 5026, 5027, 5029, 5201, 5202, 5203, + 5204, 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6024, 6025, 6026, + 6030, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, 7005, 7007, 7009, + 7012, 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7027, 7028, 7029, 7030, 7031, 7033, 7035, 7201, + 7202, 7203, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, 8033, 8034, + 8035, 8036, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9003, 9004, 9005, 9007, 9008, + 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, 9040, 9041, + 9043, 9047, 9049, 9050, 9053, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, 9405, 9406, 10003, + 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10031, 10032, 10037, 10039, 10043, + 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 10206, 11003, 11006, 11016, 11017, 11020, 11021, 11022, + 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, 11201, 11202, 11203, + 12001, 12024, 12032, 12033, 12035, 12039, 12042, 12046, 12047, 12048, 12202, 12203, 12205, 13004, 13007, 13008, + 13012, 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13034, 13036, 13042, 13043, 13045, 13049, 13201, + 13202, 13203, 13204, 13205, 13206, 13207, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, 14024, + 14025, 14026, 14027, 14032, 14034, 14036, 14041, 14042, 14045, 14048, 14054, 14057, 14201, 14203, 14204, 14205, + 14206, 14207, 14212, 14213, 15012, 15017, 15033, 15034, 15035, 15036, 15037, 15042, 15046, 15047, 15051, 15052, + 15203, 15206, 15210, 15212, 15213, 15214, 15216, 16007, 16012, 16018, 16033, 16041, 16044, 16046, 16047, 16048, + 16201, 16202, 16203, 16204, 16206, 16208, 16210, 16211, 17010, 17011, 17018, 17019, 17029, 17030, 17031, 17036, + 17038, 17042, 17045, 17047, 17048, 17049, 17100, 18016, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, + 18049, 18052, 18063, 18065, 18070, 18102, 18201, 18202, 19012, 19017, 19021, 19023, 19035, 19041, 19043, 19044, + 19061, 19066, 20001, 20010, 20014, 20034, 20042, 20045, 20056, 20057, 20060, 20069, 20076, 20092, 21009, 21010, + 21017, 21036, 21046, 21054, 21057, 21070, 21071, 21074, 21075, 21080, 21086, 21201, 21204, 21205, 21206, 21207, + 21208, 21209, 21210, 21211, 21212, 21215, 21216, 21217, 21218, 21219, 21222, 21223, 21224, 21227, 21228, 21229, + 21232, 21233, 21234, 21235, 21236, 21238, 21239, 21240, 21241, 21244, 21245, 21246, 21247, 21248, 21249, 21250, + 21252, 21254, 21255, 21256, 21257, 21259, 21260, 21261, 21263, 21264, 21265, 22020, 22023, 22036, 22050, 22066, + 22071, 22072, 22081, 22082, 23020, 23023, 23025, 23040, 23042, 23059, 0 + } +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/Style/iidx27.h b/src/omnimix-banner/Style/iidx27.h new file mode 100644 index 0000000..8bee51a --- /dev/null +++ b/src/omnimix-banner/Style/iidx27.h @@ -0,0 +1,51 @@ +#ifndef _IIDX27_H +#define _IIDX27_H +#include "defines.h" + + +static const ob_payload_t REV_20200929 = { + .revision ="20200929", + .songdb_va = 0x86A31D, + .banner_va = 0x354BE0, + .song_by_id = (const uint16_t[]) { + 1002, 1011, 1012, 1013, 1016, 1018, 1100, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, + 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, + 2007, 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, + 2211, 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, + 3208, 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4027, + 4028, 4030, 4031, 4100, 4101, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, + 4214, 4215, 4216, 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5026, 5027, 5029, 5100, + 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, + 6024, 6025, 6026, 6030, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, + 7005, 7007, 7009, 7012, 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7026, 7027, 7028, 7029, 7030, + 7031, 7033, 7035, 7201, 7202, 7203, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, + 8022, 8030, 8033, 8034, 8035, 8036, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9003, + 9004, 9005, 9007, 9008, 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, + 9032, 9035, 9040, 9041, 9043, 9047, 9049, 9050, 9053, 9056, 9201, 9202, 9204, 9401, 9402, 9403, + 9404, 9405, 9406, 10003, 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10031, + 10032, 10035, 10037, 10039, 10043, 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 10206, 11003, 11006, + 11016, 11017, 11020, 11021, 11022, 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, + 11048, 11049, 11100, 11101, 11201, 11202, 11203, 12001, 12024, 12032, 12033, 12035, 12039, 12042, 12046, 12047, + 12048, 12100, 12101, 12202, 12203, 12205, 13004, 13007, 13008, 13012, 13016, 13018, 13020, 13022, 13023, 13027, + 13030, 13033, 13034, 13036, 13042, 13043, 13045, 13049, 13100, 13101, 13201, 13202, 13203, 13204, 13205, 13206, + 13207, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, 14024, 14025, 14026, 14027, 14032, 14034, + 14036, 14041, 14042, 14043, 14045, 14048, 14054, 14057, 14100, 14101, 14102, 14201, 14203, 14204, 14205, 14206, + 14207, 14212, 14213, 15012, 15017, 15033, 15034, 15035, 15037, 15042, 15046, 15047, 15051, 15101, 15102, 15103, + 15104, 15105, 15203, 15206, 15210, 15212, 15213, 15214, 15216, 16007, 16012, 16018, 16033, 16041, 16044, 16046, + 16047, 16048, 16101, 16102, 16103, 16104, 16105, 16201, 16202, 16203, 16204, 16206, 16208, 16210, 16211, 17010, + 17011, 17018, 17019, 17029, 17030, 17031, 17036, 17038, 17042, 17045, 17047, 17048, 17049, 17100, 17101, 17102, + 18016, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, 18049, 18052, 18058, 18063, 18065, 18070, 18100, + 18102, 18103, 18201, 18202, 19012, 19017, 19021, 19023, 19035, 19041, 19043, 19044, 19061, 19066, 19100, 20001, + 20010, 20014, 20034, 20042, 20045, 20056, 20057, 20060, 20069, 20075, 20076, 20092, 20103, 20104, 20105, 20106, + 20107, 21009, 21010, 21017, 21023, 21028, 21036, 21046, 21049, 21054, 21057, 21070, 21071, 21074, 21075, 21080, + 21086, 21100, 21101, 21102, 21103, 21104, 21105, 21106, 21107, 21108, 21201, 21204, 21205, 21206, 21207, 21208, + 21209, 21210, 21211, 21212, 21215, 21216, 21217, 21218, 21219, 21222, 21223, 21224, 21227, 21228, 21229, 21232, + 21233, 21234, 21235, 21236, 21238, 21239, 21240, 21241, 21244, 21245, 21246, 21247, 21248, 21249, 21250, 21252, + 21254, 21255, 21256, 21257, 21259, 21260, 21261, 21263, 21264, 21265, 22020, 22023, 22028, 22036, 22050, 22051, + 22066, 22071, 22072, 22078, 22081, 22082, 22101, 22102, 22103, 22104, 22105, 22106, 22107, 23014, 23020, 23023, + 23024, 23025, 23040, 23042, 23059, 23077, 23100, 23101, 23102, 24035, 24042, 24053, 24059, 24062, 24100, 24101, + 0 + } +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/Style/iidx28.h b/src/omnimix-banner/Style/iidx28.h new file mode 100644 index 0000000..3aad113 --- /dev/null +++ b/src/omnimix-banner/Style/iidx28.h @@ -0,0 +1,84 @@ +#ifndef _IIDX28_H +#define _IIDX28_H +#include "defines.h" + + +static const ob_payload_t REV_20210830 = { + .revision = "20210830", + .songdb_va = 0xB442CD, + .banner_va = 0x4C7490, + .song_by_id = (const uint16_t[]) { + 1002, 1011, 1012, 1013, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, 2007, + 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, + 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, + 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4027, 4028, + 4030, 4031, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, + 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5026, 5027, 5029, 5201, 5202, 5203, 5204, + 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6024, 6025, 6026, 6030, + 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, 7005, 7007, 7009, 7012, + 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7033, 7035, 7201, + 7202, 7203, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, 8033, 8034, + 8035, 8036, 8037, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9003, 9004, 9005, 9007, + 9008, 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, 9040, + 9041, 9043, 9047, 9049, 9050, 9053, 9054, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, 9405, + 9406, 10003, 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10031, 10032, 10035, + 10037, 10039, 10043, 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 11003, 11006, 11016, 11017, 11020, + 11021, 11022, 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, 11201, + 11202, 11203, 12001, 12024, 12032, 12033, 12035, 12042, 12046, 12047, 12048, 12202, 12203, 12205, 13004, 13006, + 13007, 13008, 13012, 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13034, 13036, 13042, 13043, 13045, + 13049, 13201, 13202, 13203, 13204, 13205, 13206, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, + 14024, 14025, 14026, 14027, 14032, 14034, 14041, 14042, 14043, 14045, 14048, 14054, 14057, 14201, 14204, 14205, + 14206, 14212, 14213, 15017, 15022, 15033, 15034, 15035, 15037, 15042, 15046, 15047, 15051, 15203, 15206, 15210, + 15214, 15216, 16007, 16012, 16033, 16041, 16044, 16046, 16048, 16201, 16202, 16203, 16204, 16206, 16208, 16211, + 17010, 17011, 17018, 17019, 17029, 17030, 17031, 17036, 17038, 17042, 17045, 17047, 17048, 17049, 17100, 18007, + 18016, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, 18049, 18052, 18058, 18063, 18065, 18070, 18102, + 18201, 18202, 19012, 19017, 19021, 19023, 19035, 19041, 19043, 19044, 19061, 19066, 20001, 20010, 20014, 20034, + 20042, 20045, 20050, 20056, 20057, 20060, 20069, 20075, 20076, 20092, 21009, 21010, 21017, 21023, 21028, 21036, + 21046, 21049, 21054, 21057, 21070, 21071, 21074, 21075, 21080, 21086, 21201, 21265, 22020, 22023, 22028, 22036, + 22045, 22050, 22051, 22066, 22071, 22072, 22078, 22081, 22082, 23014, 23020, 23023, 23024, 23025, 23040, 23042, + 23059, 23065, 23077, 24035, 24042, 24048, 24053, 24059, 24062, 24064, 25020, 25023, 25025, 25062, 25065, 25072, + 25087, 26061, 0 + } +}; + +static const ob_payload_t REV_20210915 = { + .revision ="20210915", + .songdb_va = 0xB4432D, + .banner_va = 0x4C7490, + .song_by_id = (const uint16_t[]) { + 1002, 1011, 1012, 1013, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, 2007, + 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, + 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, + 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4027, 4028, + 4030, 4031, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, + 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5026, 5027, 5029, 5201, 5202, 5203, 5204, + 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6024, 6025, 6026, 6030, + 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, 7005, 7007, 7009, 7012, + 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7033, 7035, 7201, + 7202, 7203, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, 8033, 8034, + 8035, 8036, 8037, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9003, 9004, 9005, 9007, + 9008, 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, 9040, + 9041, 9043, 9047, 9049, 9050, 9053, 9054, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, 9405, + 9406, 10003, 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10031, 10032, 10035, + 10037, 10039, 10043, 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 11003, 11006, 11016, 11017, 11020, + 11021, 11022, 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, 11201, + 11202, 11203, 12001, 12024, 12032, 12033, 12035, 12042, 12046, 12047, 12048, 12202, 12203, 12205, 13004, 13006, + 13007, 13008, 13012, 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13034, 13036, 13042, 13043, 13045, + 13049, 13201, 13202, 13203, 13204, 13205, 13206, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, + 14024, 14025, 14026, 14027, 14032, 14034, 14041, 14042, 14043, 14045, 14048, 14054, 14057, 14201, 14204, 14205, + 14206, 14212, 14213, 15017, 15022, 15033, 15034, 15035, 15037, 15042, 15046, 15047, 15051, 15203, 15206, 15210, + 15214, 15216, 16007, 16012, 16033, 16041, 16044, 16046, 16048, 16201, 16202, 16203, 16204, 16206, 16208, 16211, + 17010, 17011, 17018, 17019, 17029, 17030, 17031, 17036, 17038, 17042, 17045, 17047, 17048, 17049, 17100, 18007, + 18016, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, 18049, 18052, 18058, 18063, 18065, 18070, 18102, + 18201, 18202, 19012, 19017, 19021, 19023, 19035, 19041, 19043, 19044, 19061, 19066, 20001, 20010, 20014, 20034, + 20042, 20045, 20050, 20056, 20057, 20060, 20069, 20075, 20076, 20092, 21009, 21010, 21017, 21023, 21028, 21036, + 21046, 21049, 21054, 21057, 21070, 21071, 21074, 21075, 21080, 21086, 21201, 21265, 22020, 22023, 22028, 22036, + 22045, 22050, 22051, 22066, 22071, 22072, 22078, 22081, 22082, 23014, 23020, 23023, 23024, 23025, 23040, 23042, + 23059, 23065, 23077, 24035, 24042, 24048, 24053, 24059, 24062, 24064, 25020, 25023, 25025, 25062, 25065, 25072, + 25087, 26061, 0 + } +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/Style/iidx29.h b/src/omnimix-banner/Style/iidx29.h new file mode 100644 index 0000000..b251358 --- /dev/null +++ b/src/omnimix-banner/Style/iidx29.h @@ -0,0 +1,46 @@ +#ifndef _IIDX29_H +#define _IIDX29_H +#include "defines.h" + + +static const ob_payload_t REV_20220824 = { + .revision = "20220824", + .songdb_va = 0x823885, + .banner_va = 0x3C0180, + .song_by_id = (const uint16_t[]) { + 1002, 1011, 1012, 1013, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, 2007, + 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, + 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, + 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4027, 4028, + 4030, 4031, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, + 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5026, 5027, 5029, 5201, 5202, 5203, 5204, + 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6024, 6025, 6026, 6030, + 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 7000, 7001, 7005, 7007, 7009, 7012, + 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7026, 7027, 7028, 7029, 7030, 7033, 7035, 7201, 7202, + 7203, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, 8033, 8034, 8035, + 8036, 8037, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9003, 9004, 9005, 9007, 9008, + 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, 9040, 9041, + 9043, 9047, 9049, 9050, 9053, 9054, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, 9405, 9406, + 10003, 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10032, 10035, 10037, 10039, + 10043, 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 11003, 11006, 11016, 11017, 11020, 11021, 11022, + 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, 11201, 11202, 11203, + 12001, 12024, 12032, 12033, 12035, 12042, 12047, 12048, 12202, 12203, 12205, 13004, 13006, 13007, 13008, 13012, + 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13034, 13036, 13042, 13043, 13045, 13049, 13201, 13202, + 13203, 13204, 13205, 13206, 13208, 13209, 13211, 13212, 13213, 13214, 14010, 14013, 14017, 14024, 14025, 14026, + 14027, 14032, 14034, 14041, 14042, 14043, 14045, 14048, 14054, 14057, 14201, 14204, 14205, 14206, 14212, 14213, + 15017, 15022, 15033, 15034, 15035, 15037, 15042, 15046, 15047, 15051, 15203, 15206, 15210, 15214, 15216, 16007, + 16012, 16033, 16041, 16044, 16046, 16048, 16201, 16202, 16203, 16204, 16206, 16208, 16211, 17010, 17011, 17018, + 17019, 17029, 17030, 17031, 17036, 17038, 17045, 17047, 17048, 17049, 17100, 18007, 18016, 18031, 18033, 18034, + 18037, 18038, 18041, 18046, 18048, 18049, 18052, 18058, 18063, 18065, 18070, 18102, 18201, 18202, 19012, 19021, + 19023, 19035, 19041, 19043, 19044, 19061, 19066, 20001, 20010, 20014, 20034, 20042, 20045, 20050, 20056, 20057, + 20060, 20069, 20075, 20076, 20092, 21009, 21010, 21017, 21023, 21028, 21036, 21046, 21049, 21054, 21057, 21070, + 21071, 21074, 21075, 21080, 21086, 21201, 21265, 22020, 22023, 22028, 22036, 22045, 22050, 22051, 22066, 22071, + 22072, 22078, 22081, 22082, 23014, 23020, 23023, 23024, 23025, 23040, 23042, 23059, 23065, 23077, 24035, 24042, + 24048, 24053, 24059, 24062, 24064, 25020, 25023, 25025, 25044, 25060, 25062, 25065, 25066, 25072, 25087, 25096, + 26013, 26021, 26032, 26035, 26057, 26061, 26065, 26096, 26098, 27203, 28099, 28204, 28205, 28207, 28208, 28210, + 0 + } +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/Style/iidx30.h b/src/omnimix-banner/Style/iidx30.h new file mode 100644 index 0000000..40adb08 --- /dev/null +++ b/src/omnimix-banner/Style/iidx30.h @@ -0,0 +1,48 @@ +#ifndef _IIDX30_H +#define _IIDX30_H +#include "defines.h" + + +static const ob_payload_t REV_20230905 = { + .revision ="20230905", + .songdb_va = 0x1275D25, + .banner_va = 0x982710, + .song_by_id = (const uint16_t[]) { + 1002, 1011, 1012, 1013, 1016, 1018, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1401, 1402, 2001, 2002, 2004, 2007, + 2009, 2010, 2011, 2013, 2014, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, + 2212, 3002, 3003, 3014, 3015, 3016, 3017, 3018, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, + 3209, 3210, 3211, 3212, 3213, 4009, 4010, 4011, 4013, 4018, 4019, 4022, 4024, 4026, 4027, 4028, + 4030, 4031, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4214, 4215, 4216, + 4217, 5001, 5002, 5003, 5005, 5006, 5008, 5013, 5020, 5022, 5026, 5027, 5029, 5201, 5202, 5203, + 5204, 5205, 5206, 5207, 5208, 5209, 6000, 6002, 6006, 6009, 6014, 6017, 6020, 6024, 6025, 6026, + 6028, 6030, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6211, 6212, 7000, 7001, 7005, + 7007, 7009, 7012, 7013, 7015, 7017, 7019, 7020, 7023, 7025, 7027, 7028, 7029, 7030, 7033, 7035, + 7201, 7202, 7203, 7204, 8002, 8007, 8010, 8011, 8012, 8014, 8015, 8016, 8019, 8021, 8022, 8030, + 8033, 8034, 8035, 8036, 8037, 8038, 8041, 8042, 8046, 8047, 8201, 8202, 8203, 8204, 9004, 9005, + 9007, 9008, 9009, 9013, 9014, 9017, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9031, 9032, 9035, + 9040, 9041, 9043, 9047, 9049, 9050, 9053, 9054, 9056, 9201, 9202, 9204, 9401, 9402, 9403, 9404, + 9405, 9406, 9407, 10003, 10007, 10008, 10011, 10012, 10014, 10015, 10021, 10026, 10027, 10029, 10030, 10032, + 10035, 10037, 10039, 10043, 10044, 10045, 10050, 10051, 10054, 10201, 10204, 10205, 11003, 11006, 11016, 11017, + 11020, 11021, 11022, 11023, 11024, 11027, 11029, 11039, 11041, 11042, 11044, 11045, 11046, 11047, 11048, 11049, + 11201, 11202, 11203, 12001, 12024, 12032, 12033, 12035, 12042, 12047, 12048, 12202, 12203, 12205, 13004, 13006, + 13007, 13008, 13016, 13018, 13020, 13022, 13023, 13027, 13030, 13033, 13034, 13036, 13042, 13043, 13045, 13049, + 13201, 13202, 13203, 13204, 13205, 13206, 13208, 13209, 13211, 13212, 13213, 13214, 13215, 14010, 14013, 14017, + 14024, 14025, 14026, 14027, 14032, 14034, 14041, 14042, 14043, 14045, 14048, 14054, 14057, 14201, 14204, 14205, + 14206, 14212, 14213, 15017, 15022, 15033, 15034, 15035, 15037, 15042, 15046, 15047, 15051, 15203, 15206, 15210, + 15214, 15216, 15217, 15218, 15219, 15220, 15221, 16007, 16012, 16033, 16044, 16046, 16048, 16201, 16202, 16203, + 16204, 16206, 16208, 16211, 16212, 16213, 16214, 17010, 17011, 17018, 17019, 17029, 17030, 17031, 17036, 17038, + 17045, 17047, 17048, 17049, 17100, 17200, 18007, 18016, 18031, 18033, 18034, 18037, 18038, 18041, 18046, 18048, + 18049, 18052, 18058, 18063, 18065, 18070, 18102, 18201, 18202, 18203, 19012, 19021, 19023, 19035, 19041, 19043, + 19044, 19061, 19066, 20001, 20010, 20014, 20034, 20042, 20045, 20050, 20056, 20057, 20060, 20069, 20075, 20092, + 21009, 21010, 21017, 21023, 21028, 21036, 21046, 21049, 21054, 21057, 21070, 21071, 21074, 21075, 21080, 21086, + 21201, 21265, 22020, 22023, 22028, 22036, 22045, 22050, 22051, 22066, 22071, 22072, 22078, 22081, 22082, 23014, + 23020, 23023, 23024, 23025, 23040, 23042, 23059, 23065, 23077, 24035, 24042, 24048, 24053, 24059, 24062, 24064, + 25020, 25023, 25025, 25044, 25060, 25062, 25065, 25066, 25067, 25072, 25077, 25087, 25096, 26013, 26014, 26021, + 26032, 26035, 26057, 26061, 26065, 26096, 26098, 26111, 27006, 27038, 27067, 27068, 27072, 27082, 27097, 27098, + 27203, 28075, 28099, 28204, 28205, 28207, 28208, 28210, 29214, 29215, 29216, 29217, 29219, 29220, 29221, 29902, + 29904, 29910, 29912, 29913, 29914, 30223, 30224, 30225, 30226, 30227, 30228, 30229, 30230, 30231, 0 + } +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/defines.h b/src/omnimix-banner/defines.h new file mode 100644 index 0000000..bb99bce --- /dev/null +++ b/src/omnimix-banner/defines.h @@ -0,0 +1,44 @@ +#ifndef _DEFINES_H +#define _DEFINES_H +#include +#include + + +enum LOG_LEVEL +{ + FATAL = 1, + WARNING = 2, + INFO = 3, + MISC = 4 +}; +typedef struct ob_payload ob_payload_t; +typedef union ob_module ob_module_t; +typedef void(__fastcall *rainbow_banner_t)(void *, int32_t); +typedef int64_t(*game_log_t)(int64_t, enum LOG_LEVEL, const char*, const char*, ...); + +union ob_module +{ + long long base; + HMODULE handle; +}; +struct ob_payload +{ + const char *revision; + const int songdb_va; + const int banner_va; + const uint16_t *song_by_id; +}; + +extern game_log_t game_log; + +#define HOOK_NAME "omnimix_banner" +#ifdef BIN_BUILDREV +#define HOOK_REVISION BIN_BUILDREV +#else +#error "Specify BIN_BUILDREV" +#endif +#define log_msg(level, msg, args...) game_log(0, level, HOOK_NAME, msg, ##args) + + + +#endif \ No newline at end of file diff --git a/src/omnimix-banner/omnimix_banner.c b/src/omnimix-banner/omnimix_banner.c new file mode 100755 index 0000000..69fed91 --- /dev/null +++ b/src/omnimix-banner/omnimix_banner.c @@ -0,0 +1,188 @@ +#include "iidx25.h" +#include "iidx26.h" +#include "iidx27.h" +#include "iidx28.h" +#include "iidx29.h" +#include "iidx30.h" +#include +#include +#include +#include +#include +#include + + +static const ob_payload_t *const payloads_[] = { + &REV_20180919, + &REV_20190902, + &REV_20191007, + &REV_20200929, + &REV_20210830, + &REV_20210915, + &REV_20220824, + &REV_20230905, + NULL +}; +static const ob_payload_t *payload_; +static ob_module_t avs2_; +static ob_module_t bm2dx_; +game_log_t game_log; + +HMODULE get_module(const char *name) +{ + HMODULE rv = NULL; + + // Prioritize exact match + rv = GetModuleHandle(name); + if (rv) return rv; + + // Find first .dll including specified name + HMODULE modules[1024]; + DWORD cb_needed; + HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId()); + if (EnumProcessModules(process, modules, sizeof(modules), &cb_needed)) + { + const size_t needlelen = strlen(name) - 4; + char *needle = malloc(needlelen + 1); + memcpy(needle, name, needlelen); + needle[needlelen] = '\0'; + for (unsigned int i = 0; i < (cb_needed / sizeof(HMODULE)); i++) + { + TCHAR szModName[MAX_PATH]; + if (GetModuleBaseName(process, modules[i], szModName, sizeof(szModName) / sizeof(TCHAR))) + { + if (strstr(szModName, needle)) + { + log_msg(WARNING, "Loading %s as %s instead", szModName, name); + rv = modules[i]; + break; + } + } + } + free(needle); + } + CloseHandle(process); + + return rv; +} +const char *get_revision() +{ + static char rv[9] = ""; + FILE *ea3f = fopen("prop/ea3-config.xml", "rb"); + if (!ea3f)return rv; + fseek(ea3f, 0L, SEEK_END); + int sz = ftell(ea3f); + fseek(ea3f, 0, SEEK_SET); + char *ea3buf = malloc(sz + 1); + fread(ea3buf, sz, 1, ea3f); + ea3buf[sz] = '\0'; + + const char *cursor = ea3buf; + cursor = strstr(cursor ? cursor : rv, ""); + cursor = strstr(cursor ? cursor : rv, ""); + cursor = strstr(cursor ? cursor : rv, "2"); + memmove(rv, cursor ? cursor : rv, 8); + rv[8] = '\0'; + if (!strstr(cursor ? cursor : rv, "")) rv[0] = '\0'; + + fclose(ea3f); + free(ea3buf); + return rv; +} +const ob_payload_t *get_payload() +{ + const char *revision = get_revision(); + const ob_payload_t *const *it = payloads_; + while (*it) + { + if (!strcmp((*it)->revision, revision)) + break; + it++; + } + return *it; +} +inline int count_ids(const uint16_t *it) +{ + int rv = 0; + while (*it) + { + rv++; + it++; + } + return rv; +} + +int binary_search(const uint16_t arr[], int l, int r, uint16_t x) +{ + while (l <= r) + { + int m = l + (r - l) / 2; + if (arr[m] == x) + return m; + if (arr[m] < x) + l = m + 1; + else + r = m - 1; + } + return -1; +} +bool __fastcall hook(void *some_pointer, int64_t song_id) +{ + return binary_search(payload_->song_by_id, 0, count_ids(payload_->song_by_id), (uint16_t) song_id) != -1 ? true : false; +} +BOOL WINAPI DllMain(HMODULE module, DWORD reason, void *reserved) +{ + switch (reason) + { + case DLL_PROCESS_ATTACH: + { + avs2_.handle = GetModuleHandle("avs2-core.dll"); + game_log = (game_log_t) (GetProcAddress(avs2_.handle, "XCgsqzn0000175")); + payload_ = get_payload(); + if (!payload_) + { + log_msg(WARNING, "Invalid environment, aborting..."); + return false; + } + + bm2dx_.handle = get_module("bm2dx.dll"); + rainbow_banner_t rainbow_banner = (rainbow_banner_t) (bm2dx_.base + payload_->banner_va); + char *omni_string = ((char *) (bm2dx_.base + payload_->songdb_va)); + if (strcmp(omni_string, "music_data.bin") != 0 && strcmp(omni_string, "music_omni.bin") != 0) + { + log_msg(WARNING, "Invalid bm2dx.dll, aborting..."); + return false; + } + log_msg(MISC, "Detected revision: hook=%s, payload=%s", HOOK_REVISION, payload_->revision); + + int error_code = MH_Initialize(); + if (error_code == MH_ERROR_ALREADY_INITIALIZED) + { + log_msg(INFO, "MinHook already initialized"); + error_code ^= MH_ERROR_ALREADY_INITIALIZED; + } + if (error_code == MH_OK) + { + error_code |= MH_CreateHook((PVOID) rainbow_banner, (PVOID) hook, 0); + error_code |= MH_EnableHook(MH_ALL_HOOKS); + } + if (error_code == MH_OK) + { + log_msg(INFO, "Injected payload: sva=0x%x, bva=0x%x, sbi=%d", payload_->songdb_va, payload_->banner_va, count_ids(payload_->song_by_id)); + } + else + { + log_msg(WARNING, "MinHook error(0x%x)", error_code); + log_msg(WARNING, "Error injecting into bm2dx.dll, aborting..."); + return false; + } + break; + } + case DLL_PROCESS_DETACH: + MH_Uninitialize(); + break; + default: + break; + } + return TRUE; +} diff --git a/src/omnimix-dataloader/CMakeLists.txt b/src/omnimix-dataloader/CMakeLists.txt new file mode 100755 index 0000000..b92c0ba --- /dev/null +++ b/src/omnimix-dataloader/CMakeLists.txt @@ -0,0 +1,43 @@ +## omnimix_dataloader.shared ## +set(target_name "omnimix_dataloader") +file(GLOB_RECURSE FILE_${target_name} CONFIGURE_DEPENDS "*.c") +add_library(${target_name} SHARED ${FILE_${target_name}}) + +# Local #define +target_compile_definitions(${target_name} PRIVATE + BIN_BUILDREV="${CMAKE_BuildRevision}" + ) + +# Local includes (#include "" | gcc -iquote) +target_include_directories_quote(${target_name} PRIVATE + . + Style + ) + +# External includes (#include <> | gcc -I) +target_include_directories(${target_name} PRIVATE + ${CMAKE_SOURCE_DIR}/lib/mihook/include + ) + +# Force includes (include for every file | gcc -include) +target_force_include(${target_name} QUOTE + ) + +# Local dynamic linker (compiled libraries) - referenced libraries +target_link_libraries(${target_name} PRIVATE + minhook + ) + +# External dynamic linker (binary libraries) - external/system libraries +target_link_libraries(${target_name} PRIVATE + ) + +# Post build hooks +target_init_vsmacro(${target_name}) +execute_process( + COMMAND python "${SolutionDir}lib/exec_u001/main.py" "--root=${SolutionDir}" "--exiv=${ProjectDir}on_init.exiv" "-m:ProjectDir=${ProjectDir}" "-m:TargetDir=${TargetDir}" "-m:PlatformTarget=${PlatformTarget}" "-m:PlatformLib=nix_gcc" + ) +add_custom_command(TARGET ${target_name} + POST_BUILD + COMMAND python "${SolutionDir}lib/exec_u001/main.py" "--root=${SolutionDir}" "--exiv=${ProjectDir}on_compiled.exiv" "-m:ProjectDir=${ProjectDir}" "-m:TargetDir=${TargetDir}" "-m:PlatformTarget=${PlatformTarget}" "-m:PlatformLib=nix_gcc" + ) diff --git a/src/omnimix-dataloader/Style/iidx25.h b/src/omnimix-dataloader/Style/iidx25.h new file mode 100644 index 0000000..252e6a2 --- /dev/null +++ b/src/omnimix-dataloader/Style/iidx25.h @@ -0,0 +1,14 @@ +#ifndef _IIDX25_H +#define _IIDX25_H +#include "defines.h" + + +static const od_payload_t REV_20180919 = { + .revision ="20180919", + .clear_rate_va = 0x434F0, + .fc_rate_va = 0x44A40, + .node_data_va = 0x157230, + .node_data_rtn_va = 0x15814B +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-dataloader/Style/iidx26.h b/src/omnimix-dataloader/Style/iidx26.h new file mode 100644 index 0000000..cc80f52 --- /dev/null +++ b/src/omnimix-dataloader/Style/iidx26.h @@ -0,0 +1,22 @@ +#ifndef _IIDX26_H +#define _IIDX26_H +#include "defines.h" + + +static const od_payload_t REV_20190902 = { + .revision = "20190902", + .clear_rate_va = 0xE08E0, + .fc_rate_va = 0xE2010, + .node_data_va = 0x3E4D10, + .node_data_rtn_va = 0x3E681B +}; + +static const od_payload_t REV_20191007 = { + .revision ="REV_20191007", + .clear_rate_va = 0xE08E0, + .fc_rate_va = 0xE2010, + .node_data_va = 0x3E4D10, + .node_data_rtn_va = 0x3E689B +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-dataloader/Style/iidx27.h b/src/omnimix-dataloader/Style/iidx27.h new file mode 100644 index 0000000..0896448 --- /dev/null +++ b/src/omnimix-dataloader/Style/iidx27.h @@ -0,0 +1,20 @@ +#ifndef _IIDX27_H +#define _IIDX27_H +#include "defines.h" +//_BUG: most likely broken? +/*_TODO: +* In x64dbg break on node_data_va to check which register holds required data (previously r11 register) +* if unsure how valid data looks, run iidx26 with hook and check what data r11 holds there and find same thing for node_data_va of iidx27 +*/ + + + +static const od_payload_t REV_20200929 = { + .revision ="20200929", + .clear_rate_va = 0x295960, + .fc_rate_va = 0x296E80, + .node_data_va = 0x69BF30, //_REM: this or 0x697280 listed for some reason as alternative + .node_data_rtn_va = 0x6988BB +}; + +#endif \ No newline at end of file diff --git a/src/omnimix-dataloader/defines.h b/src/omnimix-dataloader/defines.h new file mode 100644 index 0000000..7819533 --- /dev/null +++ b/src/omnimix-dataloader/defines.h @@ -0,0 +1,55 @@ +#ifndef _DEFINES_H +#define _DEFINES_H +#include +#include +#include + + +enum LOG_LEVEL +{ + FATAL = 1, + WARNING = 2, + INFO = 3, + MISC = 4 +}; +typedef struct od_payload od_payload_t; +typedef struct od_node_data od_node_data_t; +typedef union od_module od_module_t; +typedef __int64(__fastcall *read_node_data_s32_t)(void *, void *, unsigned int); +typedef bool(__fastcall *get_clear_rate_t)(int, int, unsigned int *); +typedef bool(__fastcall *get_fc_rate_t)(int, int, unsigned int *); +typedef int64_t(*game_log_t)(int64_t, enum LOG_LEVEL, const char *, const char *, ...); + +union od_module +{ + long long base; + HMODULE handle; +}; +struct od_payload +{ + const char *revision; + const int clear_rate_va; + const int fc_rate_va; + const int node_data_va; + const int node_data_rtn_va; +}; +struct od_node_data +{ + uint16_t song_id; + int16_t values[12]; + od_node_data_t* next; +}; + +extern game_log_t game_log; + +#define HOOK_NAME "omnimix_dataloader" +#ifdef BIN_BUILDREV +#define HOOK_REVISION BIN_BUILDREV +#else +#error "Specify BIN_BUILDREV" +#endif +#define INLINE_ASM 1 +#define log_msg(level, msg, args...) game_log(0, level, HOOK_NAME, msg, ##args) + + +#endif \ No newline at end of file diff --git a/src/omnimix-dataloader/omnimix_dataloader.c b/src/omnimix-dataloader/omnimix_dataloader.c new file mode 100755 index 0000000..c92633d --- /dev/null +++ b/src/omnimix-dataloader/omnimix_dataloader.c @@ -0,0 +1,255 @@ +#include "iidx25.h" +#include "iidx26.h" +#include "iidx27.h" +#include +#include +#include +#include +#include +#include + + +static const od_payload_t *const payloads_[] = { + &REV_20180919, + &REV_20190902, + &REV_20191007, + &REV_20200929, + NULL +}; +static const od_payload_t *payload_; +static od_module_t avs2_; +static od_module_t bm2dx_; +static od_node_data_t *node_data_head = 0; +static od_node_data_t *node_data_tail = 0; +static read_node_data_s32_t read_node_data_s32; +game_log_t game_log; + +HMODULE get_module(const char *name) +{ + HMODULE rv = NULL; + + // Prioritize exact match + rv = GetModuleHandle(name); + if (rv) return rv; + + // Find first .dll including specified name + HMODULE modules[1024]; + DWORD cb_needed; + HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId()); + if (EnumProcessModules(process, modules, sizeof(modules), &cb_needed)) + { + const size_t needlelen = strlen(name) - 4; + char *needle = malloc(needlelen + 1); + memcpy(needle, name, needlelen); + needle[needlelen] = '\0'; + for (unsigned int i = 0; i < (cb_needed / sizeof(HMODULE)); i++) + { + TCHAR szModName[MAX_PATH]; + if (GetModuleBaseName(process, modules[i], szModName, sizeof(szModName) / sizeof(TCHAR))) + { + if (strstr(szModName, needle)) + { + log_msg(WARNING, "Loading %s as %s instead", szModName, name); + rv = modules[i]; + break; + } + } + } + free(needle); + } + CloseHandle(process); + + return rv; +} +const char *get_revision() +{ + static char rv[9] = ""; + FILE *ea3f = fopen("prop/ea3-config.xml", "rb"); + if (!ea3f)return rv; + fseek(ea3f, 0L, SEEK_END); + int sz = ftell(ea3f); + fseek(ea3f, 0, SEEK_SET); + char *ea3buf = malloc(sz + 1); + fread(ea3buf, sz, 1, ea3f); + ea3buf[sz] = '\0'; + + const char *cursor = ea3buf; + cursor = strstr(cursor ? cursor : rv, ""); + cursor = strstr(cursor ? cursor : rv, ""); + cursor = strstr(cursor ? cursor : rv, "2"); + memmove(rv, cursor ? cursor : rv, 8); + rv[8] = '\0'; + if (!strstr(cursor ? cursor : rv, "")) rv[0] = '\0'; + + fclose(ea3f); + free(ea3buf); + return rv; +} +const od_payload_t *get_payload() +{ + const char *revision = get_revision(); + const od_payload_t *const *it = payloads_; + while (*it) + { + if (!strcmp((*it)->revision, revision)) + break; + it++; + } + return *it; +} + +void add_node_data(int song_id, const int clear_node_data[]) +{ + od_node_data_t *data = malloc(sizeof(od_node_data_t)); + data->song_id = (uint16_t) song_id; + data->next = 0; + for (int i = 0; i < 12; i++) + { + data->values[i] = (int16_t) clear_node_data[i]; + } + if (node_data_head == 0) + { + node_data_head = data; + node_data_tail = node_data_head; + } + else + { + node_data_tail->next = data; + node_data_tail = data; + } +} +od_node_data_t *find_node_data(int song_id) +{ + od_node_data_t *current = node_data_head; + while (current != 0) + { + if (current->song_id == song_id) + return current; + + current = current->next; + } + return 0; +} +__int64 read_node_data_hook(void *node_reference, int *dest, unsigned int bytes) +{ + log_msg(INFO, "read_node_data_hook() triggered"); + void *retaddr = __builtin_return_address(0); + if (retaddr != (void *) (bm2dx_.base + payload_->node_data_rtn_va)) + { + return read_node_data_s32(node_reference, dest, bytes); + } + else + { +#if INLINE_ASM + //_BUG: original on-compile solution, this is no longer supported by GCC as well: https://stackoverflow.com/questions/2114163/reading-a-register-value-into-a-c-variable + register void *r11 __asm__("r11");//_BUG: '__asm__ volatile' is a compilation error now + char *song_id_text_tmp = (char *) (r11 + 0xA0);//_BUG: 0xA0 may also change between versions? +#else + // compiler independent solution + /*_INFO: post compilation patching + * In disassembler go to read_node_data_hook and search for lea instruction referring to cs:read_node_data_original + * If you disabled release optimization should be something like lea and than add 0xA0 + * mov rax, [r11 + 0xA0] + * 49 8b 83 a0 00 00 00 .. (fill rest with 90) + * or + 0x500 since r11+0xA0==r11+(0xA0*sizeof(void*)) in which case + * 49 8b 83 a0 00 00 00 .. (fill rest with 90) + * */ + char *song_id_text_tmp = (char *) (&read_node_data_s32 + 0xA0 / sizeof(void *)); /*leave for better assembly output, modify so it takes r11*/ +#endif + + char song_id_text[8]; + for (int i = 0; i < 8; i++) + { + song_id_text[i] = song_id_text_tmp[i]; + } + + int song_id = atoi(song_id_text); + int dest_buffer[12]; + __int64 result = read_node_data_s32(node_reference, dest_buffer, bytes); + for (int i = 0; i < 12; i++) + { + dest[i] = dest_buffer[i]; + } + + add_node_data(song_id, dest_buffer); + return result; + } +} +bool __fastcall clear_rate_hook(int song_id, int difficulty, unsigned int *clear_rate) +{ + od_node_data_t *data = find_node_data(song_id); + if (data == 0) + return false; + + *clear_rate = (unsigned int) data->values[difficulty]; + if (*clear_rate > 1000) + return false; + + return true; +} +bool __fastcall fc_rate_hook(int song_id, int difficulty, unsigned int *fc_rate) +{ + od_node_data_t *data = find_node_data(song_id); + if (data == 0) + return false; + + *fc_rate = (unsigned int) data->values[difficulty + 6]; + if (*fc_rate > 1000) + return false; + + return true; +} +BOOL WINAPI DllMain(HMODULE module, DWORD reason, void *reserved) +{ + switch (reason) + { + case DLL_PROCESS_ATTACH: + { + avs2_.handle = GetModuleHandle("avs2-core.dll"); + game_log = (game_log_t) (GetProcAddress(avs2_.handle, "XCgsqzn0000175")); + payload_ = get_payload(); + if (!payload_) + { + log_msg(WARNING, "Invalid environment, aborting..."); + return false; + } + + bm2dx_.handle = get_module("bm2dx.dll"); + read_node_data_s32 = (read_node_data_s32_t) (bm2dx_.base + payload_->node_data_va); + get_clear_rate_t clear_rate = (get_clear_rate_t) (bm2dx_.base + payload_->clear_rate_va); + get_fc_rate_t fc_rate = (get_fc_rate_t) (bm2dx_.base + payload_->fc_rate_va); + log_msg(MISC, "Detected revision: hook=%s, payload=%s", HOOK_REVISION, payload_->revision); + + int error_code = MH_Initialize(); + if (error_code == MH_ERROR_ALREADY_INITIALIZED) + { + log_msg(INFO, "MinHook already initialized"); + error_code ^= MH_ERROR_ALREADY_INITIALIZED; + } + if (error_code == MH_OK) + { + error_code |= MH_CreateHook((PVOID) read_node_data_s32, (PVOID) read_node_data_hook, (PVOID *) &read_node_data_s32); + error_code |= MH_CreateHook((PVOID) clear_rate, (PVOID) clear_rate_hook, (PVOID *) 0); + error_code |= MH_CreateHook((PVOID) fc_rate, (PVOID) fc_rate_hook, (PVOID *) 0); + error_code |= MH_EnableHook(MH_ALL_HOOKS); + } + if (error_code == MH_OK) + { + log_msg(INFO, "Injected payload: rrd=0x%x, gcr=0x%x, gfr=0x%x", payload_->node_data_va, payload_->clear_rate_va, payload_->fc_rate_va); + } + else + { + log_msg(WARNING, "MinHook error(0x%x)", error_code); + log_msg(WARNING, "Error injecting into bm2dx.dll, aborting..."); + return false; + } + break; + } + case DLL_PROCESS_DETACH: + MH_Uninitialize(); + break; + default: + break; + } + return TRUE; +}