Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions Module.mk
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ cflags += \
# Each AVS-dependent project should consume the earliest AVS import definition
# that is still ABI-compatible with the real build its target links against.

avsvers_32 := 1700 1603 1601 1508 1403 1304 1101 1002 803 0
avsvers_32 := 1700 1603 1601 1508 1403 1306 1304 1101 1002 803 0
avsvers_64 := 1700 1603 1601 1509 1508

imps += avs avs-ea3
Expand All @@ -91,6 +91,7 @@ include src/main/acioemu/Module.mk
include src/main/aciomgr/Module.mk
include src/main/aciotest/Module.mk
include src/main/asio/Module.mk
include src/main/avs-util/Module.mk
include src/main/bio2drv/Module.mk
include src/main/bio2emu-iidx/Module.mk
include src/main/bio2emu/Module.mk
Expand Down Expand Up @@ -685,9 +686,9 @@ $(zipdir)/ddr-12.zip: \
$(V)zip -j $@ $^

$(zipdir)/ddr-13.zip: \
build/bin/avs2_1304-32/launcher.exe \
build/bin/avs2_1304-32/ddrhook2.dll \
build/bin/avs2_1304-32/unicorntail.dll \
build/bin/avs2_1306-32/launcher.exe \
build/bin/avs2_1306-32/ddrhook2.dll \
build/bin/avs2_1306-32/unicorntail.dll \
build/bin/indep-32/config.exe \
build/bin/indep-32/ddrio.dll \
build/bin/indep-32/ddrio-mm.dll \
Expand All @@ -700,7 +701,7 @@ $(zipdir)/ddr-13.zip: \
$(V)echo ... $@
$(V)zip -j $@ $^

$(zipdir)/ddr-14-to-16.zip: \
$(zipdir)/ddr-14-to-18.zip: \
build/bin/avs2_1508-32/launcher.exe \
build/bin/avs2_1508-32/ddrhook2.dll \
build/bin/avs2_1508-32/unicorntail.dll \
Expand All @@ -709,14 +710,16 @@ $(zipdir)/ddr-14-to-16.zip: \
build/bin/indep-32/eamio.dll \
build/bin/indep-32/geninput.dll \
dist/ddr/config.bat \
dist/ddr/gamestart-17.bat \
dist/ddr/gamestart-18.bat \
dist/ddr/gamestart-14.bat \
dist/ddr/gamestart-15.bat \
dist/ddr/gamestart-16.bat \
| $(zipdir)/
$(V)echo ... $@
$(V)zip -j $@ $^

$(zipdir)/ddr-16-x64.zip: \
$(zipdir)/ddr-16-to-18-x64.zip: \
build/bin/avs2_1603-64/launcher.exe \
build/bin/avs2_1603-64/ddrhook2.dll \
build/bin/avs2_1603-64/unicorntail.dll \
Expand All @@ -725,6 +728,8 @@ $(zipdir)/ddr-16-x64.zip: \
build/bin/indep-64/eamio.dll \
build/bin/indep-64/geninput.dll \
dist/ddr/config.bat \
dist/ddr/gamestart-17.bat \
dist/ddr/gamestart-18.bat \
dist/ddr/gamestart-16.bat \
| $(zipdir)/
$(V)echo ... $@
Expand Down Expand Up @@ -827,8 +832,8 @@ $(BUILDDIR)/bemanitools.zip: \
$(zipdir)/ddr-12.zip \
$(zipdir)/ddr-12-us.zip \
$(zipdir)/ddr-13.zip \
$(zipdir)/ddr-14-to-16.zip \
$(zipdir)/ddr-16-x64.zip \
$(zipdir)/ddr-14-to-18.zip \
$(zipdir)/ddr-16-to-18-x64.zip \
$(zipdir)/ddr-hwio-x86.zip \
$(zipdir)/ddr-hwio-x64.zip \
$(zipdir)/doc.zip \
Expand Down
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,12 @@ The following games are supported with their corresponding hook-libraries.
- Dance Dance Revolution X (`ddr-11.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md)
- Dance Dance Revolution X2 (US/EU regions) (`ddr-12-us.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md)
- Dance Dance Revolution X2 (JP region) (`ddr-12.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2013 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2014 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution X3 vs. 2ndMIX (`ddr-13.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2013 (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution 2014 (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A20 (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- Dance Dance Revolution A20+ (`ddr-14-to-18.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
- [Beatmania IIDX](doc/iidxhook/README.md)
- Beatmania IIDX 9th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
- Beatmania IIDX 10th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
Expand Down
2 changes: 2 additions & 0 deletions doc/ddrhook/ddrhook2.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ The following games are supported by this hook library:
- Dance Dance Revolution 2013
- Dance Dance Revolution 2014
- Dance Dance Revolution A
- Dance Dance Revolution A20
- Dance Dance Revolution A20+

Note that different builds of the same hook library are required to run the different versions. See
different distribution packages, e.g. `ddr-12.zip`, `ddr-13.zip` etc.
Expand Down
121 changes: 104 additions & 17 deletions src/imports/avs.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <sys/stat.h>

enum property_create_flag {
PROPERTY_FLAG_READ = 0x1,
Expand All @@ -26,18 +27,39 @@ enum property_node_traversal {
};

enum property_type {
PROPERTY_TYPE_VOID = 1,
PROPERTY_TYPE_S8 = 2,
PROPERTY_TYPE_U8 = 3,
PROPERTY_TYPE_S16 = 4,
PROPERTY_TYPE_U16 = 5,
PROPERTY_TYPE_S32 = 6,
PROPERTY_TYPE_U32 = 7,
PROPERTY_TYPE_S64 = 8,
PROPERTY_TYPE_U64 = 9,
PROPERTY_TYPE_BIN = 10,
PROPERTY_TYPE_STR = 11,
PROPERTY_TYPE_BOOL = 52
PROPERTY_TYPE_VOID = 0x01,
PROPERTY_TYPE_S8 = 0x02,
PROPERTY_TYPE_U8 = 0x03,
PROPERTY_TYPE_S16 = 0x04,
PROPERTY_TYPE_U16 = 0x05,
PROPERTY_TYPE_S32 = 0x06,
PROPERTY_TYPE_U32 = 0x07,
PROPERTY_TYPE_S64 = 0x08,
PROPERTY_TYPE_U64 = 0x09,
PROPERTY_TYPE_BIN = 0x0A,
PROPERTY_TYPE_STR = 0x0B,
PROPERTY_TYPE_IP4 = 0x0C,
PROPERTY_TYPE_TIME = 0x0D,
PROPERTY_TYPE_FLOAT = 0x0E,
PROPERTY_TYPE_DOUBLE = 0x0F,
PROPERTY_TYPE_4U8 = 0x25,
PROPERTY_TYPE_ATTR = 0x2E,
PROPERTY_TYPE_BOOL = 0x34,

// Missing __type attribute
PROPERTY_TYPE_VOID_WITH_ATTRIBUTES = 0x40 | PROPERTY_TYPE_VOID,
PROPERTY_TYPE_ARRAY_S8 = 0x40 | PROPERTY_TYPE_S8,
PROPERTY_TYPE_ARRAY_U8 = 0x40 | PROPERTY_TYPE_U8,
PROPERTY_TYPE_ARRAY_S16 = 0x40 | PROPERTY_TYPE_S16,
PROPERTY_TYPE_ARRAY_U16 = 0x40 | PROPERTY_TYPE_U16,
PROPERTY_TYPE_ARRAY_S32 = 0x40 | PROPERTY_TYPE_S32,
PROPERTY_TYPE_ARRAY_U32 = 0x40 | PROPERTY_TYPE_U32,
PROPERTY_TYPE_ARRAY_S64 = 0x40 | PROPERTY_TYPE_S64,
PROPERTY_TYPE_ARRAY_U64 = 0x40 | PROPERTY_TYPE_U64,
PROPERTY_TYPE_ARRAY_TIME = 0x40 | PROPERTY_TYPE_TIME,
PROPERTY_TYPE_ARRAY_BOOL = 0x40 | PROPERTY_TYPE_BOOL,

PROPERTY_TYPE_STR_WITH_ATTRIBUTES = 0x40 | PROPERTY_TYPE_STR,
};

struct property;
Expand Down Expand Up @@ -66,6 +88,7 @@ enum psmap_type {
PSMAP_TYPE_STR = 10,
PSMAP_TYPE_ATTR = 45,
PSMAP_TYPE_BOOL = 50,
PSMAP_TYPE_TERMINATOR = 0xFF,
};

#define PSMAP_FLAG_HAVE_DEFAULT 0x01
Expand Down Expand Up @@ -102,7 +125,7 @@ struct property_psmap {

#define PSMAP_END \
{ \
0xFF, 0, 0, 0, NULL, 0 \
PSMAP_TYPE_TERMINATOR, 0, 0, 0, NULL, 0 \
} \
} \
;
Expand Down Expand Up @@ -160,6 +183,11 @@ void avs_boot(

void avs_shutdown(void);

typedef uint32_t avs_desc;
typedef int avs_error;

#define AVS_IS_ERROR(x) x < 0

void log_body_fatal(const char *module, const char *fmt, ...);
void log_body_info(const char *module, const char *fmt, ...);
void log_body_misc(const char *module, const char *fmt, ...);
Expand Down Expand Up @@ -187,6 +215,7 @@ int property_insert_read(
uint32_t context);
int property_mem_write(struct property *prop, void *bytes, int nbytes);
void *property_desc_to_buffer(struct property *prop);
avs_error property_query_size(struct property *prop);
void property_file_write(struct property *prop, const char *path);
int property_set_flag(struct property *prop, int flags, int mask);
void property_destroy(struct property *prop);
Expand All @@ -203,8 +232,8 @@ int property_psmap_export(
const struct property_psmap *psmap);

struct property_node *property_node_clone(
struct property *new_parent,
int unk0,
struct property *parent_prop,
struct property_node *parent_node,
struct property_node *src,
bool deep);
struct property_node *property_node_create(
Expand All @@ -226,15 +255,73 @@ void property_node_remove(struct property_node *node);
enum property_type property_node_type(struct property_node *node);
struct property_node *property_node_traversal(
struct property_node *node, enum property_node_traversal direction);
void property_node_datasize(struct property_node *node);
int property_node_datasize(struct property_node *node);
avs_error property_node_read(struct property_node *node, enum property_type type, void* data, uint32_t data_size);

static inline void property_remove(struct property *prop, struct property_node *node, const char *path)
{
struct property_node *cur = property_search(prop, node, path);
while (cur) {
struct property_node *next = property_node_traversal(node, TRAVERSE_NEXT_SEARCH_RESULT);
property_node_remove(cur);
cur = next;
}
}

bool std_getenv(const char *key, char *val, uint32_t nbytes);
void std_setenv(const char *key, const char *val);

void* avs_fs_open(const char* path, int mode, int flags);
struct avs_stat {
uint64_t st_atime;
uint64_t st_mtime;
uint64_t st_ctime;
uint32_t unk1;
uint32_t filesize;
struct stat padding;
};

#if AVS_VERSION <= 1306
enum avs_file_mode {
AVS_FILE_READ = 0x00,
AVS_FILE_WRITE = 0x01,
AVS_FILE_READ_WRITE = 0x02,
AVS_FILE_CREATE = 0x10,
AVS_FILE_TRUNCATE = 0x20,
AVS_FILE_EXCLUSIVE = 0x80,
};
#else
enum avs_file_mode {
AVS_FILE_READ = 0x01,
AVS_FILE_WRITE = 0x02,
AVS_FILE_CREATE = 0x10,
AVS_FILE_TRUNCATE = 0x20,
AVS_FILE_EXCLUSIVE = 0x80,
};
#endif

enum avs_file_flag {
AVS_FILE_FLAG_SHARE_READ = 0x124,
AVS_FILE_FLAG_SHARE_WRITE = 0x92,
};

enum avs_seek_origin {
AVS_SEEK_SET = 0,
AVS_SEEK_CUR = 1,
AVS_SEEK_END = 2,
};

avs_desc avs_fs_open(const char *path, uint16_t mode, int flags);
int avs_fs_close(avs_desc desc);
size_t avs_fs_read(avs_desc desc, char *buf, uint32_t sz);
int avs_fs_lseek(avs_desc desc, long pos, int whence);
int avs_fs_lstat(const char *path, struct avs_stat *st);
int avs_fs_copy(const char *src, const char *dest);
int avs_fs_addfs(void *filesys_struct);
int avs_fs_mount(
const char *mountpoint, const char *fsroot, const char *fstype, void *data);
avs_desc avs_fs_opendir(const char *path);
const char* avs_fs_readdir(avs_desc dir);
void avs_fs_closedir(avs_desc dir);

bool avs_is_active();

Expand Down
7 changes: 7 additions & 0 deletions src/imports/import_32_0_avs.def
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ LIBRARY libavs-win32

EXPORTS
avs_boot
avs_fs_close
avs_fs_copy
avs_fs_lseek
avs_fs_lstat
avs_fs_open
avs_fs_read
avs_net_ctrl
avs_shutdown
avs_thread_create
Expand All @@ -26,6 +32,7 @@ EXPORTS
property_node_clone
property_node_create
property_node_name
property_node_read
property_node_refer
property_node_remove
property_node_type
Expand Down
11 changes: 11 additions & 0 deletions src/imports/import_32_1002_avs.def
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ LIBRARY libavs-win32

EXPORTS
avs_boot
avs_fs_close
avs_fs_copy
avs_fs_lseek
avs_fs_lstat
avs_fs_open
avs_fs_read
avs_fs_opendir
avs_fs_readdir
avs_fs_closedir
avs_net_ctrl
avs_shutdown
avs_thread_create
Expand All @@ -27,11 +36,13 @@ EXPORTS
property_node_create
property_node_datasize
property_node_name
property_node_read
property_node_refer
property_node_remove
property_node_type
property_node_traversal
property_node_refdata
property_query_size
property_psmap_export
property_psmap_import
std_getenv
Expand Down
16 changes: 16 additions & 0 deletions src/imports/import_32_1101_avs.def
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ LIBRARY libavs-win32

EXPORTS
avs_boot @22 NONAME
avs_fs_close @60 NONAME
avs_fs_copy @63 NONAME
avs_fs_lseek @70 NONAME
avs_fs_lstat @71 NONAME
avs_fs_open @75 NONAME
avs_fs_read @77 NONAME
avs_fs_opendir @76 NONAME
avs_fs_readdir @78 NONAME
avs_fs_closedir @61 NONAME
avs_net_ctrl @107 NONAME
avs_shutdown @140 NONAME
avs_thread_create @156 NONAME
Expand All @@ -19,8 +28,15 @@ EXPORTS
property_insert_read @255 NONAME
property_node_create @266 NONAME
property_node_datasize @267 NONAME
property_node_name @274 NONAME
property_node_read @276 NONAME
property_node_refer @278 NONAME
property_node_remove @279 NONAME
property_node_type @282 NONAME
property_node_clone @280 NONAME
property_node_traversal @282 NONAME
property_node_refdata @277 NONAME
property_query_size @290 NONAME
property_psmap_import @288 NONAME
property_psmap_export @287 NONAME
property_read_query_memsize @291 NONAME
Expand Down
Loading