Initial re-upload

This commit is contained in:
Hazel 2024-08-28 23:36:39 -04:00
commit dfaf87100e
29 changed files with 1332 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/bin/
/build/
/local/

12
.gitmodules vendored Executable file
View File

@ -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

8
.idea/.gitignore vendored Normal file
View File

@ -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

1
.idea/.name Normal file
View File

@ -0,0 +1 @@
hooks-ac

11
.idea/cmake.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeSharedSettings">
<configurations>
<configuration PROFILE_NAME="Release_x86 [WIN32]" ENABLED="true" GENERATION_DIR="build/x86/Release/win_gcc" CONFIG_NAME="Release" TOOLCHAIN_NAME="MinGW [Crosscompile]" GENERATION_OPTIONS="-DCMAKE_TOOLCHAIN_FILE=&quot;lib/cmake-various/toolchain/toolchain-mingw_nix-win-x86.cmake&quot;" NO_GENERATOR="true" />
<configuration PROFILE_NAME="Debug_x86 [WIN32]" ENABLED="true" GENERATION_DIR="build/x86/Debug/win_gcc" CONFIG_NAME="Debug" TOOLCHAIN_NAME="MinGW [Crosscompile]" GENERATION_OPTIONS="-DCMAKE_TOOLCHAIN_FILE=&quot;lib/cmake-various/toolchain/toolchain-mingw_nix-win-x86.cmake&quot;" NO_GENERATOR="true" />
<configuration PROFILE_NAME="Debug_x64 [WIN32]" ENABLED="true" GENERATION_DIR="build/x64/Debug/win_gcc" CONFIG_NAME="Debug" TOOLCHAIN_NAME="MinGW [Crosscompile]" GENERATION_OPTIONS="-DCMAKE_TOOLCHAIN_FILE=&quot;lib/cmake-various/toolchain/toolchain-mingw_nix-win-x64.cmake&quot;" NO_GENERATOR="true" />
<configuration PROFILE_NAME="Release_x64 [WIN32]" ENABLED="true" GENERATION_DIR="build/x64/Release/win_gcc" CONFIG_NAME="Release" TOOLCHAIN_NAME="MinGW [Crosscompile]" GENERATION_OPTIONS="-DCMAKE_TOOLCHAIN_FILE=&quot;lib/cmake-various/toolchain/toolchain-mingw_nix-win-x64.cmake&quot;" NO_GENERATOR="true" />
</configurations>
</component>
</project>

2
.idea/hooks.iml Normal file
View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

View File

@ -0,0 +1,73 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="ConstantConditionsOC" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="DuplicatedCode" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="PyBroadExceptionInspection" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="PyCompatibilityInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ourVersions">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="2.7" />
<item index="1" class="java.lang.String" itemvalue="3.7" />
<item index="2" class="java.lang.String" itemvalue="3.8" />
<item index="3" class="java.lang.String" itemvalue="3.9" />
</list>
</value>
</option>
</inspection_tool>
<inspection_tool class="PyDefaultArgumentInspection" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="PyInterpreterInspection" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="E266" />
<option value="E701" />
<option value="E265" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N806" />
<option value="N803" />
<option value="N802" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyTypeCheckerInspection" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="PyUnusedLocalInspection" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="ReassignedToPlainText" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="ShellCheck" enabled="true" level="ERROR" enabled_by_default="true">
<shellcheck_settings value="SC2164" />
</inspection_tool>
<inspection_tool class="Simplify" enabled="false" level="WARNING" enabled_by_default="false">
<option name="clangTidyCheckOptions">
<list>
<ClangTidyCheckOption>
<option name="optionName" value="clion-simplify.SimplifyConstantConditions" />
<option name="optionValue" value="1" />
</ClangTidyCheckOption>
<ClangTidyCheckOption>
<option name="optionName" value="clion-simplify.SimplifyIfWithReturn" />
<option name="optionValue" value="0" />
</ClangTidyCheckOption>
<ClangTidyCheckOption>
<option name="optionName" value="clion-simplify.SimplifyEqualToTrueFalse" />
<option name="optionValue" value="1" />
</ClangTidyCheckOption>
<ClangTidyCheckOption>
<option name="optionName" value="clion-simplify.SimplifyTernaryWithConstantBranch" />
<option name="optionValue" value="1" />
</ClangTidyCheckOption>
</list>
</option>
</inspection_tool>
<inspection_tool class="SpellCheckingInspection" enabled="true" level="TYPO" enabled_by_default="true">
<option name="processCode" value="false" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
</profile>
</component>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownEnhProjectSettings">
<AnnotatorSettings targetHasSpaces="true" linkCaseMismatch="true" wikiCaseMismatch="true" wikiLinkHasDashes="true" notUnderWikiHome="true" targetNotWikiPageExt="true" notUnderSourceWikiHome="true" targetNameHasAnchor="true" targetPathHasAnchor="true" wikiLinkHasSlash="true" wikiLinkHasSubdir="true" wikiLinkHasOnlyAnchor="true" linkTargetsWikiHasExt="true" linkTargetsWikiHasBadExt="true" notUnderSameRepo="true" targetNotUnderVcs="false" linkNeedsExt="true" linkHasBadExt="true" linkTargetNeedsExt="true" linkTargetHasBadExt="true" wikiLinkNotInWiki="true" imageTargetNotInRaw="true" repoRelativeAcrossVcsRoots="true" multipleWikiTargetsMatch="true" unresolvedLinkReference="true" linkIsIgnored="true" anchorIsIgnored="true" anchorIsUnresolved="true" anchorLineReferenceIsUnresolved="true" anchorLineReferenceFormat="true" anchorHasDuplicates="true" abbreviationDuplicates="true" abbreviationNotUsed="true" attributeIdDuplicateDefinition="true" attributeIdNotUsed="true" footnoteDuplicateDefinition="true" footnoteUnresolved="true" footnoteDuplicates="true" footnoteNotUsed="true" macroDuplicateDefinition="true" macroUnresolved="true" macroDuplicates="true" macroNotUsed="true" referenceDuplicateDefinition="true" referenceUnresolved="true" referenceDuplicates="true" referenceNotUsed="true" referenceUnresolvedNumericId="true" enumRefDuplicateDefinition="true" enumRefUnresolved="true" enumRefDuplicates="true" enumRefNotUsed="true" enumRefLinkUnresolved="true" enumRefLinkDuplicates="true" simTocUpdateNeeded="true" simTocTitleSpaceNeeded="true" />
<HtmlExportSettings updateOnSave="false" parentDir="" targetDir="" cssDir="css" scriptDir="js" plainHtml="false" imageDir="" copyLinkedImages="false" imagePathType="0" targetPathType="2" targetExt="" useTargetExt="false" noCssNoScripts="false" useElementStyleAttribute="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" />
<LinkMapSettings>
<textMaps />
</LinkMapSettings>
</component>
</project>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="FlexmarkProjectSettings">
<FlexmarkHtmlSettings flexmarkSpecExampleRendering="0" flexmarkSpecExampleRenderHtml="false">
<flexmarkSectionLanguages>
<option name="1" value="Markdown" />
<option name="2" value="HTML" />
<option name="3" value="flexmark-ast:1" />
</flexmarkSectionLanguages>
</FlexmarkHtmlSettings>
</component>
<component name="MarkdownProjectSettings">
<PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" synchronizePreviewPosition="true" highlightPreviewType="LINE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="true" showSelectionInPreview="true" lastLayoutSetsDefault="false">
<PanelProvider>
<provider providerId="com.vladsch.md.nav.editor.swing.html.panel" providerName="Default - Swing" />
</PanelProvider>
</PreviewSettings>
<ParserSettings gitHubSyntaxChange="false" correctedInvalidSettings="false" emojiShortcuts="1" emojiImages="0">
<PegdownExtensions>
<option name="ATXHEADERSPACE" value="true" />
<option name="FENCED_CODE_BLOCKS" value="true" />
<option name="INTELLIJ_DUMMY_IDENTIFIER" value="true" />
<option name="RELAXEDHRULES" value="true" />
<option name="STRIKETHROUGH" value="true" />
<option name="TABLES" value="true" />
<option name="TASKLISTITEMS" value="true" />
</PegdownExtensions>
<ParserOptions>
<option name="COMMONMARK_LISTS" value="true" />
<option name="EMOJI_SHORTCUTS" value="true" />
<option name="GFM_TABLE_RENDERING" value="true" />
<option name="PRODUCTION_SPEC_PARSER" value="true" />
<option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
</ParserOptions>
</ParserSettings>
<HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" addPageHeader="false" addAnchorLinks="false" anchorLinksWrapText="false" imageUriSerials="false" addDocTypeHtml="true" noParaTags="false" defaultUrlTitle="false" migratedPlantUml="true" migratedAnchorLinks="true" plantUmlConversion="0">
<GeneratorProvider>
<provider providerId="com.vladsch.md.nav.editor.text.html.generator" providerName="Unmodified HTML Generator" />
</GeneratorProvider>
<headerTop />
<headerBottom />
<bodyTop />
<bodyBottom />
<fencedCodeConversions>
<option name="c4plantuml" value="NONE" />
<option name="ditaa" value="NONE" />
<option name="erd" value="NONE" />
<option name="graphviz" value="NONE" />
<option name="latex" value="KATEX" />
<option name="math" value="KATEX" />
<option name="mermaid" value="NONE" />
<option name="nomnoml" value="NONE" />
<option name="plantuml" value="NONE" />
<option name="puml" value="NONE" />
<option name="svgbob" value="NONE" />
<option name="umlet" value="NONE" />
<option name="vega" value="NONE" />
<option name="vegalite" value="NONE" />
<option name="wavedrom" value="NONE" />
</fencedCodeConversions>
</HtmlSettings>
<CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssUriSerial="true" isCssTextEnabled="false" isDynamicPageWidth="true">
<StylesheetProvider>
<provider providerId="com.vladsch.md.nav.editor.text.html.css" providerName="No Stylesheet" />
</StylesheetProvider>
<ScriptProviders />
<cssText />
<cssUriHistory />
</CssSettings>
</component>
</project>

15
.idea/misc.xml Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CidrRootsConfiguration">
<sourceRoots>
<file path="$PROJECT_DIR$/src" />
</sourceRoots>
<excludeRoots>
<file path="$PROJECT_DIR$/bin" />
<file path="$PROJECT_DIR$/build" />
<file path="$PROJECT_DIR$/lib" />
<file path="$PROJECT_DIR$/local" />
</excludeRoots>
</component>
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/hooks.iml" filepath="$PROJECT_DIR$/.idea/hooks.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

21
CMakeLists.txt Executable file
View File

@ -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}")

46
CMakeLists_win-gcc.cmake Executable file
View File

@ -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
)

View File

@ -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"
)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,44 @@
#ifndef _DEFINES_H
#define _DEFINES_H
#include <stdint.h>
#include <windows.h>
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

View File

@ -0,0 +1,188 @@
#include "iidx25.h"
#include "iidx26.h"
#include "iidx27.h"
#include "iidx28.h"
#include "iidx29.h"
#include "iidx30.h"
#include <MinHook.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <windows.h>
#include <psapi.h>
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, "<soft>");
cursor = strstr(cursor ? cursor : rv, "<ext __type=\"str\">");
cursor = strstr(cursor ? cursor : rv, "2");
memmove(rv, cursor ? cursor : rv, 8);
rv[8] = '\0';
if (!strstr(cursor ? cursor : rv, "</ext>")) 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;
}

View File

@ -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"
)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,55 @@
#ifndef _DEFINES_H
#define _DEFINES_H
#include <stdint.h>
#include <stdbool.h>
#include <windows.h>
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

View File

@ -0,0 +1,255 @@
#include "iidx25.h"
#include "iidx26.h"
#include "iidx27.h"
#include <MinHook.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <windows.h>
#include <psapi.h>
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, "<soft>");
cursor = strstr(cursor ? cursor : rv, "<ext __type=\"str\">");
cursor = strstr(cursor ? cursor : rv, "2");
memmove(rv, cursor ? cursor : rv, 8);
rv[8] = '\0';
if (!strstr(cursor ? cursor : rv, "</ext>")) 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;
}