MegamixATSync is an ATProto based mod for Project Diva MegaMix+
1//#include <MinHook.h>
2//#include <bits/stdc++.h>
3#include <stdbool.h>
4#include <stddef.h>
5#include <stdint.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <windows.h>
9
10typedef int8_t i8;
11typedef int16_t i16;
12typedef int32_t i32;
13typedef int64_t i64;
14typedef uint8_t u8;
15typedef uint16_t u16;
16typedef uint32_t u32;
17typedef uint64_t u64;
18typedef float f32;
19typedef double f64;
20
21#define FUNCTION_PTR(returnType, function, location, ...) returnType (*function) (__VA_ARGS__) = (returnType (*) (__VA_ARGS__)) (location)
22#define FUNCTION_PTR_H(returnType, function, ...) extern returnType (*function) (__VA_ARGS__)
23
24#define PROC_ADDRESS(libraryName, procName) GetProcAddress (LoadLibrary (TEXT (libraryName)), procName)
25
26#define HOOK(returnType, functionName, location, ...) \
27 typedef returnType (*functionName) (__VA_ARGS__); \
28 functionName original##functionName = NULL; \
29 void *where##functionName = (void *)location; \
30 returnType implOf##functionName (__VA_ARGS__)
31
32#define INSTALL_HOOK(functionName) \
33 { \
34 MH_Initialize (); \
35 MH_CreateHook ((void *)where##functionName, (void *)implOf##functionName, (void **)(&original##functionName)); \
36 MH_EnableHook ((void *)where##functionName); \
37 }
38
39#define READ_MEMORY(location, type) *(type *)location
40
41#define WRITE_MEMORY(location, type, ...) \
42 { \
43 const type data[] = {__VA_ARGS__}; \
44 DWORD oldProtect; \
45 VirtualProtect ((void *)(location), sizeof (data), PAGE_EXECUTE_READWRITE, &oldProtect); \
46 memcpy ((void *)(location), data, sizeof (data)); \
47 VirtualProtect ((void *)(location), sizeof (data), oldProtect, &oldProtect); \
48 }
49
50#define WRITE_MEMORY_STRING(location, data, length) \
51 { \
52 DWORD oldProtect; \
53 VirtualProtect ((void *)(location), length, PAGE_EXECUTE_READWRITE, &oldProtect); \
54 memcpy ((void *)(location), data, length); \
55 VirtualProtect ((void *)(location), length, oldProtect, &oldProtect); \
56 }
57
58#define WRITE_NOP(location, count) \
59 { \
60 DWORD oldProtect; \
61 VirtualProtect ((void *)(location), (size_t)(count), PAGE_EXECUTE_READWRITE, &oldProtect); \
62 for (size_t i = 0; i < (size_t)(count); i++) \
63 *((uint8_t *)(location) + i) = 0x90; \
64 VirtualProtect ((void *)(location), (size_t)(count), oldProtect, &oldProtect); \
65 }
66
67#define WRITE_NULL(location, count) \
68 { \
69 DWORD oldProtect; \
70 VirtualProtect ((void *)(location), (size_t)(count), PAGE_EXECUTE_READWRITE, &oldProtect); \
71 for (size_t i = 0; i < (size_t)(count); i++) \
72 *((uint8_t *)(location) + i) = 0x00; \
73 VirtualProtect ((void *)(location), (size_t)(count), oldProtect, &oldProtect); \
74 }
75
76#define COUNTOFARR(arr) sizeof (arr) / sizeof (arr[0])