diff --git a/iidx@asphyxia/README.md b/iidx@asphyxia/README.md index 56d6bd8..73344b2 100644 --- a/iidx@asphyxia/README.md +++ b/iidx@asphyxia/README.md @@ -1,10 +1,15 @@ # beatmaniaIIDX -Plugin Version: **v0.1.17** +Plugin Version: **v0.1.18** --- Supported Versions + - beatmaniaIIDX 9th Style (JAH) + - beatmaniaIIDX 10th Style (JAE) + - beatmaniaIIDX 11 IIDXRED (JAB) + - beatmaniaIIDX 12 HAPPY SKY (JAC) + - beatmaniaIIDX 13 DistorteD (JAC) - beatmaniaIIDX 14 GOLD (2007072301) - beatmaniaIIDX 15 DJ TROOPERS (2008031100) - beatmaniaIIDX 16 EMPRESS (2009072200) @@ -24,6 +29,7 @@ Supported Versions - beatmaniaIIDX 30 RESIDENT (2023090500) - beatmaniaIIDX 31 EPOLIS (2024082600) - beatmaniaIIDX 32 Pinky Crush (2025082500) + - beatmaniaIIDX 33 Sparkle Shower (2026081900) --- @@ -40,12 +46,15 @@ Features Known Issues - Clear Lamps may display invalid lamps due to missing conversion code - - DJ LEVEL folders are broken in ~ DJ TROOPERS due to missing rank\_id + - DJ LEVEL folders are broken before EMPRESS due to missing rank\_id - LEGGENDARIA play records before HEROIC VERSE may not display on higher version due to missing conversion code - SUPER FUTURE 2323 play records doesn't display on other version due to missing conversion code - ONE MORE EXTRA STAGE progress won't save (can't test this due to skill issue) + - DOUBLE PLAY or two persons play may not work properly (can't test this due to skill issue) + - New card cannot be registered before DistorteD (this is due to those games uses magnetic card) - Some of licensed songs are locked behind (kinda solved with music\_open but needs to be verified) - - Some of badges aren't saving in RESIDENT ~ (needs to figure out name to id) + - Some of badges aren't saving in RESIDENT and above (needs to figure out name to id) + - Some of records may have invalid MISS COUNT --- @@ -168,3 +177,27 @@ Changelogs **v0.1.17** - Added Initial support for Pinky Crush + - Fixed where note\_size, lift\_cover, note\_beam\_size doesn't get saved in WebUI (EPOLIS ~) + - Fixed STEP UP related issues + - Unable to use STEP UP ticket + - HARD / EX HARD folder display low level charts regardless player skill + - Fixed HEROIC VERSE issues + - Unable to complete registration + - Crash after Event room choose + - Fixed where unable to complete registration or login (tricoro) + +**v0.1.18** + - Added Initial support for Sparkle Shower + - Added Initial support for DistorteD, HAPPY SKY, IIDXRED, 10th Style, 9th Style + - Requires updated version of asphyxia-core otherwise plugin won't register [v1.70b] + - Migration from (previous version) menu will not work + - Existing card with no current version user data will treat as new card on registration but it will use existing profile data + - New card cannot be registered (~ HAPPY SKY) + - Need to invoke new card registration to core. + - 9th Style will use seperate user data database as its using raw blob + - Added ALL/STORE/RIVAL TOP pacemaker support + - Added basic save support of STORY mode (Resort Anthem) + - Fixed where tricoro does not work after Asphyxia Core update + - Fixed where unable to login after playing a while on old versions + - Improved WebUI customization settings with descriptive dropdown menus (@COLV9) + - Improved WebUI score viewer with song title mapping, detailed difficulty breakdown and sorting (@COLV9) diff --git a/iidx@asphyxia/data/djtraining.json b/iidx@asphyxia/data/djtraining.json new file mode 100644 index 0000000..b326209 --- /dev/null +++ b/iidx@asphyxia/data/djtraining.json @@ -0,0 +1,3981 @@ +{ + "33": { + "0": { + "0": { + "1": { + "mid": [ + 11032, + 31006, + 31021, + 32085, + 32098, + 31098, + 31100, + 22062, + 32082, + 31017 + ], + "diff": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 29078, + 23062, + 22077, + 31113, + 30082, + 20100, + 29081, + 32101, + 31023, + 31024 + ], + "diff": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 10033, + 20053, + 30102, + 16021, + 30101, + 32081, + 29075, + 32096, + 31101, + 16050 + ], + "diff": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 32084, + 18054, + 19058, + 1019, + 32080, + 32019, + 17058, + 18072, + 31097, + 31025 + ], + "diff": [ + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 17054, + 19060, + 29005, + 20068, + 18023, + 32022, + 30045, + 29085, + 31102, + 32083 + ], + "diff": [ + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "1": { + "mid": [ + 28037, + 24066, + 19049, + 22042, + 26109, + 31033, + 30022, + 18060, + 29099, + 29065 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 29008, + 32045, + 9039, + 20091, + 14051, + 15045, + 19015, + 20055, + 32111, + 32101 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 30099, + 17051, + 14053, + 23070, + 14039, + 31113, + 32085, + 29081, + 19046, + 30109 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 13009, + 19052, + 31011, + 19003, + 23052, + 18030, + 28001, + 20067, + 24029, + 22085 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 26055, + 27108, + 19054, + 30075, + 20058, + 32033, + 12013, + 17033, + 22067, + 14016 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 31067, + 3004, + 32050, + 11010, + 19016, + 12015, + 21058, + 23048, + 12019, + 28074 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 27092, + 31105, + 11008, + 22044, + 26084, + 15010, + 19001, + 27005, + 20003, + 30059 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 32001, + 11052, + 18024, + 25052, + 17032, + 12052, + 15061, + 20096, + 29037, + 22088 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 18059, + 14014, + 30030, + 15001, + 20065, + 5019, + 16004, + 15054, + 24077, + 31099 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "1": { + "mid": [ + 29007, + 12049, + 26046, + 29000, + 31073, + 30043, + 12053, + 28072, + 23018, + 23045 + ], + "diff": [ + 1, + 1, + 1, + 1, + 2, + 2, + 1, + 2, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 17057, + 26011, + 28070, + 21042, + 15044, + 30054, + 23051, + 20083, + 32082, + 16013 + ], + "diff": [ + 1, + 1, + 2, + 2, + 2, + 1, + 1, + 1, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 5000, + 29046, + 27004, + 23027, + 27114, + 23074, + 20013, + 16047, + 12014, + 31021 + ], + "diff": [ + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 19024, + 30046, + 32039, + 27112, + 18025, + 31109, + 29006, + 27106, + 21078, + 20059 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 21007, + 12018, + 25050, + 22058, + 30051, + 24025, + 31069, + 29102, + 19005, + 14000 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 22014, + 14023, + 6007, + 29020, + 18045, + 21033, + 25070, + 30053, + 11007, + 22067 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 24027, + 30080, + 32048, + 29036, + 27029, + 21090, + 31049, + 28010, + 26050, + 26044 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 18051, + 28059, + 14008, + 20087, + 29055, + 27056, + 19040, + 9028, + 24019, + 31112 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2, + 3, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 21013, + 15028, + 32035, + 21004, + 4008, + 23036, + 8032, + 28018, + 16038, + 29095 + ], + "diff": [ + 2, + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "3": { + "1": { + "mid": [ + 17012, + 32004, + 31081, + 17014, + 27043, + 24082, + 22042, + 30016, + 31113, + 31107 + ], + "diff": [ + 3, + 3, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 29008, + 16003, + 19025, + 17000, + 13041, + 18055, + 23094, + 32098, + 30029, + 31062 + ], + "diff": [ + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 13019, + 17026, + 24066, + 18023, + 23049, + 25091, + 27000, + 20021, + 25006, + 17017 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 3, + 3, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 12010, + 18025, + 14001, + 16015, + 26071, + 9039, + 27083, + 11010, + 25063, + 17055 + ], + "diff": [ + 3, + 3, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 19037, + 11004, + 4006, + 14037, + 20009, + 9059, + 6018, + 31063, + 21050, + 14056 + ], + "diff": [ + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 14014, + 18028, + 24084, + 13039, + 22002, + 18030, + 30047, + 28069, + 26115, + 32083 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 22029, + 13003, + 10025, + 17002, + 22100, + 32075, + 18066, + 30004, + 27110, + 27080 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 31011, + 18012, + 11008, + 10016, + 3008, + 22034, + 19031, + 14031, + 27010, + 30072 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 28065, + 29020, + 14046, + 28009, + 21001, + 17015, + 11032, + 19009, + 30114, + 11025 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "10": { + "mid": [ + 18051, + 14007, + 16031, + 17023, + 19018, + 9057, + 22058, + 16038, + 15009, + 13029 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "4": { + "1": { + "mid": [ + 17027, + 29011, + 25073, + 27058, + 23008, + 12015, + 20064, + 23095, + 19032, + 20019 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 23057, + 17028, + 27033, + 11052, + 31076, + 22061, + 21014, + 26092, + 15007, + 27087 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 24081, + 11001, + 28080, + 18021, + 27011, + 29058, + 26040, + 22094, + 19053, + 30109 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 19072, + 23068, + 32043, + 20095, + 6013, + 18044, + 26049, + 24057, + 20025, + 16037 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 21037, + 21007, + 21056, + 23030, + 18056, + 21090, + 29009, + 27077, + 16004, + 26041 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 24095, + 28058, + 30060, + 25080, + 18061, + 22017, + 23083, + 32000, + 22083, + 22038 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 19003, + 11040, + 31000, + 26010, + 29084, + 18060, + 14021, + 19026, + 31037, + 17044 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 31075, + 21019, + 23074, + 23045, + 21069, + 19068, + 22055, + 19030, + 24077, + 29029 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 27019, + 28114, + 26038, + 25019, + 23013, + 26093, + 24024, + 22087, + 14029, + 24007 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "10": { + "mid": [ + 25009, + 29070, + 22001, + 26104, + 30034, + 24073, + 18001, + 29094, + 22093, + 22032 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "5": { + "1": { + "mid": [ + 25008, + 31001, + 16003, + 30027, + 24072, + 23092, + 22074, + 26025, + 28016, + 19042 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 29007, + 31027, + 21033, + 19071, + 22003, + 19001, + 27059, + 26087, + 24014, + 27026 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 17022, + 20070, + 23061, + 23000, + 24018, + 23027, + 17059, + 18050, + 27052, + 20047 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 22015, + 24020, + 17009, + 19075, + 29025, + 31068, + 28027, + 28091, + 25021, + 30098 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 30079, + 28007, + 15001, + 12007, + 16038, + 30076, + 21050, + 20099, + 20007, + 19002 + ], + "diff": [ + 3, + 3, + 3, + 3, + 4, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 16002, + 15004, + 24050, + 26047, + 31007, + 20094, + 22012, + 19005, + 25017, + 21032 + ], + "diff": [ + 4, + 4, + 3, + 3, + 3, + 3, + 3, + 4, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 17016, + 15000, + 22008, + 21016, + 27095, + 25058, + 28002, + 30007, + 30054, + 29017 + ], + "diff": [ + 3, + 4, + 4, + 4, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 24080, + 27020, + 27046, + 15049, + 18004, + 20043, + 14009, + 20089, + 13005, + 22009 + ], + "diff": [ + 4, + 3, + 4, + 3, + 3, + 3, + 4, + 4, + 3, + 4 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 30024, + 26037, + 18017, + 25007, + 27007, + 30005, + 19074, + 14004, + 20055, + 18032 + ], + "diff": [ + 3, + 3, + 4, + 3, + 4, + 3, + 4, + 4, + 4, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "10": { + "mid": [ + 30025, + 22054, + 20020, + 14052, + 24050, + 27023, + 19054, + 24057, + 15026, + 28008 + ], + "diff": [ + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + } + }, + "1": { + "0": { + "1": { + "mid": [ + 23060, + 1000, + 9036, + 11015, + 1006, + 2006, + 1019, + 23080, + 22026, + 24046 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 20046, + 19073, + 29005, + 26069, + 1017, + 7032, + 24038, + 15045, + 32063 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 25032, + 21004, + 19017, + 1019, + 21022, + 21053, + 31111, + 31100, + 31023, + 20047 + ], + "diff": [ + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "1": { + "mid": [ + 27066, + 23033, + 31033, + 30072, + 25078, + 28092, + 29075, + 26027, + 19070, + 22048 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 25071, + 23084, + 17003, + 27106, + 26067, + 29097, + 29099, + 22024, + 21079, + 31024 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 28079, + 30043, + 24088, + 30038, + 31021, + 29081, + 32111, + 20090, + 12003, + 30109 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 28045, + 32043, + 28062, + 23043, + 30011, + 31049, + 26050, + 20036, + 27054, + 25031 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 13041, + 16035, + 27058, + 32073, + 25040, + 17053, + 30051, + 19028, + 31041, + 29080 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 30032, + 26055, + 32071, + 28109, + 8028, + 32023, + 28039, + 29085, + 21038, + 27013 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 29093, + 25049, + 26085, + 24057, + 22004, + 30075, + 5021, + 31078, + 30058, + 23019 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 25005, + 29002, + 20086, + 15008, + 24005, + 17058, + 32066, + 14012, + 28000, + 26060 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 11035, + 26037, + 31048, + 4006, + 18023, + 26084, + 28002, + 27059, + 12016, + 22084 + ], + "diff": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "1": { + "mid": [ + 5000, + 23054, + 24018, + 14030, + 29096, + 26068, + 27109, + 12037, + 30041, + 28005 + ], + "diff": [ + 1, + 2, + 1, + 1, + 2, + 2, + 1, + 2, + 2, + 1 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 28019, + 19008, + 23066, + 15057, + 31004, + 7024, + 26019, + 15054, + 32082, + 24011 + ], + "diff": [ + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 1, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 17051, + 30025, + 22054, + 27022, + 27075, + 32022, + 9028, + 20065, + 20102, + 31053 + ], + "diff": [ + 2, + 1, + 1, + 2, + 2, + 2, + 1, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 28113, + 16030, + 27046, + 16021, + 17064, + 24025, + 26058, + 20098, + 32097, + 31077 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 18013, + 30070, + 25054, + 21077, + 16053, + 19050, + 11051, + 23091, + 24091, + 27113 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 10041, + 13041, + 27065, + 12031, + 30111, + 28038, + 26036, + 13050, + 21011, + 9016 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 24090, + 12008, + 30020, + 26099, + 28085, + 31012, + 16041, + 30068, + 29037, + 27116 + ], + "diff": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 27079, + 14050, + 29047, + 14002, + 8031, + 24030, + 21066, + 30066, + 31023, + 22010 + ], + "diff": [ + 3, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 11040, + 10019, + 16022, + 25057, + 19059, + 22057, + 15045, + 13015, + 8049, + 31045 + ], + "diff": [ + 2, + 2, + 3, + 3, + 2, + 2, + 3, + 2, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "3": { + "1": { + "mid": [ + 31039, + 19073, + 18018, + 27039, + 15014, + 27051, + 29028, + 21048, + 26003, + 28011 + ], + "diff": [ + 2, + 3, + 3, + 2, + 3, + 3, + 3, + 2, + 2, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 30000, + 28073, + 32009, + 23067, + 29069, + 31003, + 31033, + 18006, + 20021, + 29045 + ], + "diff": [ + 2, + 2, + 2, + 3, + 3, + 2, + 3, + 3, + 3, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 22006, + 26009, + 8043, + 27018, + 23004, + 29060, + 18032, + 24031, + 31072, + 30036 + ], + "diff": [ + 3, + 2, + 3, + 2, + 3, + 3, + 2, + 3, + 3, + 2 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 24032, + 15004, + 26033, + 20038, + 29024, + 11012, + 21068, + 23012, + 31036, + 17037 + ], + "diff": [ + 3, + 3, + 2, + 2, + 3, + 3, + 3, + 3, + 2, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 18013, + 23056, + 17042, + 12010, + 25035, + 9059, + 20076, + 32077, + 16019, + 19046 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 28046, + 16002, + 14049, + 22075, + 8023, + 29021, + 31071, + 29063, + 27010, + 30064 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 25061, + 22049, + 24016, + 26046, + 28049, + 22086, + 23082, + 20090, + 31101, + 27080 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 4001, + 30061, + 30047, + 17065, + 28042, + 31029, + 26112, + 19015, + 24000, + 23022 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 21041, + 17044, + 25048, + 27011, + 28041, + 12028, + 24089, + 13021, + 29079, + 29012 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "10": { + "mid": [ + 25018, + 11013, + 24004, + 18022, + 24080, + 15032, + 20072, + 9037, + 22062, + 12029 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "4": { + "1": { + "mid": [ + 16042, + 27061, + 17046, + 24075, + 21027, + 20102, + 18001, + 26077, + 29053, + 31103 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 25028, + 17025, + 32043, + 25043, + 23053, + 12030, + 28117, + 20039, + 22059, + 25068 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 23093, + 16011, + 25090, + 22098, + 19004, + 26051, + 31026, + 28050, + 10009, + 26076 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 12021, + 13017, + 27092, + 28102, + 22043, + 25026, + 28071, + 30039, + 22088, + 16006 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 30033, + 19072, + 21013, + 8017, + 20031, + 23072, + 1004, + 12015, + 26053, + 30053 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 15041, + 18068, + 24051, + 23007, + 20048, + 27043, + 17032, + 31015, + 23055, + 31107 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 26095, + 28045, + 18021, + 20028, + 32062, + 22069, + 28021, + 24070, + 29068, + 15056 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 21063, + 6005, + 25069, + 22053, + 30009, + 27030, + 20041, + 32028, + 20006, + 16016 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 28051, + 21012, + 23061, + 30055, + 8028, + 29054, + 10040, + 19065, + 31061, + 24094 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "10": { + "mid": [ + 30037, + 23063, + 23068, + 25074, + 17007, + 31052, + 15059, + 25063, + 19067, + 16026 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "5": { + "1": { + "mid": [ + 13054, + 28025, + 13040, + 10004, + 26059, + 12045, + 14020, + 29041, + 31030, + 22031 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "mid": [ + 31010, + 27004, + 22015, + 26104, + 14035, + 22091, + 15020, + 18008, + 25000, + 23041 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "mid": [ + 29078, + 14005, + 26086, + 30095, + 10025, + 32005, + 30005, + 22079, + 26078, + 21084 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "4": { + "mid": [ + 23037, + 26064, + 21045, + 31059, + 29025, + 28029, + 20051, + 18014, + 25027, + 22064 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "5": { + "mid": [ + 30080, + 20063, + 32035, + 21016, + 26001, + 31051, + 15013, + 31034, + 15038, + 26040 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 4, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "6": { + "mid": [ + 22033, + 19064, + 18026, + 28087, + 26000, + 24038, + 30094, + 10022, + 21029, + 20019 + ], + "diff": [ + 3, + 3, + 3, + 3, + 3, + 4, + 3, + 3, + 4, + 4 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "7": { + "mid": [ + 27012, + 26085, + 28007, + 21015, + 15015, + 9038, + 18039, + 7032, + 7034, + 19007 + ], + "diff": [ + 3, + 3, + 3, + 4, + 4, + 4, + 3, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "8": { + "mid": [ + 21012, + 10028, + 20071, + 12002, + 14044, + 29050, + 20003, + 15054, + 29052, + 21088 + ], + "diff": [ + 4, + 3, + 3, + 4, + 3, + 3, + 4, + 4, + 3, + 4 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "9": { + "mid": [ + 26016, + 3004, + 15005, + 27007, + 4016, + 29042, + 25092, + 19074, + 23083, + 7039 + ], + "diff": [ + 4, + 3, + 3, + 4, + 3, + 3, + 4, + 4, + 4, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "10": { + "mid": [ + 22089, + 22016, + 19063, + 20086, + 24082, + 29001, + 15026, + 30012, + 21032, + 31044 + ], + "diff": [ + 4, + 3, + 4, + 4, + 3, + 4, + 4, + 3, + 3, + 3 + ], + "cflg": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + } + } + } +} diff --git a/iidx@asphyxia/data/grade.json b/iidx@asphyxia/data/grade.json index 970189b..87fd85d 100644 --- a/iidx@asphyxia/data/grade.json +++ b/iidx@asphyxia/data/grade.json @@ -90,5 +90,51 @@ "kind": 0 } } + }, + "33": { + "0": { + "15": { + "music_id": [ 30068, 24057, 27033, 29045 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + }, + "16": { + "music_id": [ 14029, 18001, 16003, 27060 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + }, + "17": { + "music_id": [ 27000, 25004, 28084, 30024 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + }, + "18": { + "music_id": [ 30052, 18032, 16020, 12004 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + } + }, + "1": { + "15": { + "music_id": [ 30032, 26049, 19038, 16016 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + }, + "16": { + "music_id": [ 21073, 14021, 29049, 25017 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + }, + "17": { + "music_id": [ 31059, 17017, 24014, 28005 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + }, + "18": { + "music_id": [ 25007, 29017, 19002, 9028 ], + "class_id": [ 3, 3, 3, 3 ], + "kind": 0 + } + } } } diff --git a/iidx@asphyxia/data/legg_open.json b/iidx@asphyxia/data/legg_open.json new file mode 100644 index 0000000..3629b63 --- /dev/null +++ b/iidx@asphyxia/data/legg_open.json @@ -0,0 +1,33 @@ +{ + "33": { + "26069": { "kind": 0 }, + "24026": { "kind": 0 }, + "8023": { "kind": 0 }, + "28050": { "kind": 0 }, + "30029": { "kind": 0 }, + "31049": { "kind": 0 }, + "15025": { "kind": 0 }, + "20064": { "kind": 0 }, + "18008": { "kind": 0 }, + "30100": { "kind": 0 }, + "33058": { "kind": 0 }, + "12012": { "kind": 0 }, + "24009": { "kind": 0 }, + "23087": { "kind": 0 }, + "28039": { "kind": 0 }, + "26055": { "kind": 0 }, + "25006": { "kind": 0 }, + "22016": { "kind": 0 }, + "27075": { "kind": 0 }, + "18006": { "kind": 0 }, + "17058": { "kind": 0 }, + "31050": { "kind": 0 }, + "20082": { "kind": 0 }, + "32084": { "kind": 0 }, + "32110": { "kind": 0 }, + "32081": { "kind": 0 }, + "31025": { "kind": 0 }, + "32085": { "kind": 0 }, + "33001": { "kind": 0 } + } +} diff --git a/iidx@asphyxia/data/music_open.json b/iidx@asphyxia/data/music_open.json index 0da4f89..018e6b1 100644 --- a/iidx@asphyxia/data/music_open.json +++ b/iidx@asphyxia/data/music_open.json @@ -1,82 +1,105 @@ -{ - "26": { - "26002": { "kind": 0 }, - "26006": { "kind": 0 }, - "26022": { "kind": 0 }, - "26045": { "kind": 0 } - }, - "27": { - "27070": { "kind": 0 }, - "27071": { "kind": 0 }, - "27073": { "kind": 0 } - }, - "28": { - "28001": { "kind": 0 }, - "28036": { "kind": 0 }, - "28038": { "kind": 0 }, - "28072": { "kind": 0 }, - "28074": { "kind": 0 } - }, - "29": { - "29071": { "kind": 0 }, - "29072": { "kind": 0 }, - "29075": { "kind": 0 }, - "29081": { "kind": 0 }, - "29082": { "kind": 0 }, - "29085": { "kind": 0 }, - "29101": { "kind": 0 }, - "29102": { "kind": 0 }, - "29103": { "kind": 0 } - }, - "30": { - "30038": { "kind": 0 }, - "30082": { "kind": 0 }, - "30083": { "kind": 0 }, - "30084": { "kind": 0 }, - "30085": { "kind": 0 }, - "30101": { "kind": 0 }, - "30102": { "kind": 0 }, - "30104": { "kind": 0 }, - "30105": { "kind": 0 } - }, - "31": { - "31021": { "kind": 0 }, - "31022": { "kind": 0 }, - "31023": { "kind": 0 }, - "31024": { "kind": 0 }, - "31025": { "kind": 0 }, - "31065": { "kind": 0 }, - "31066": { "kind": 0 }, - "31097": { "kind": 0 }, - "31098": { "kind": 0 }, - "31099": { "kind": 0 }, - "31100": { "kind": 0 }, - "31101": { "kind": 0 }, - "31102": { "kind": 0 }, - "31110": { "kind": 0 }, - "31112": { "kind": 0 }, - "31113": { "kind": 0 } - }, - "32": { - "32022": { "kind": 0 }, - "32049": { "kind": 0 }, - "32078": { "kind": 0 }, - "32079": { "kind": 0 }, - "32080": { "kind": 0 }, - "32081": { "kind": 0 }, - "32082": { "kind": 0 }, - "32083": { "kind": 0 }, - "32084": { "kind": 0 }, - "32085": { "kind": 0 }, - "32096": { "kind": 0 }, - "32097": { "kind": 0 }, - "32098": { "kind": 0 }, - "32019": { "kind": 0 }, - "32101": { "kind": 0 }, - "32102": { "kind": 0 }, - "32103": { "kind": 0 }, - "32104": { "kind": 0 }, - "32110": { "kind": 0 }, - "32111": { "kind": 0 } - } -} +{ + "24": { + "24061": { "kind": 0 } + }, + "26": { + "26002": { "kind": 0 }, + "26006": { "kind": 0 }, + "26022": { "kind": 0 }, + "26045": { "kind": 0 } + }, + "27": { + "27071": { "kind": 0 }, + "27073": { "kind": 0 } + }, + "28": { + "28001": { "kind": 0 }, + "28074": { "kind": 0 } + }, + "29": { + "29071": { "kind": 0 }, + "29072": { "kind": 0 }, + "29075": { "kind": 0 }, + "29081": { "kind": 0 }, + "29082": { "kind": 0 }, + "29085": { "kind": 0 }, + "29101": { "kind": 0 }, + "29102": { "kind": 0 }, + "29103": { "kind": 0 } + }, + "30": { + "30038": { "kind": 0 }, + "30082": { "kind": 0 }, + "30083": { "kind": 0 }, + "30084": { "kind": 0 }, + "30085": { "kind": 0 }, + "30101": { "kind": 0 }, + "30102": { "kind": 0 }, + "30104": { "kind": 0 }, + "30105": { "kind": 0 } + }, + "31": { + "31021": { "kind": 0 }, + "31023": { "kind": 0 }, + "31024": { "kind": 0 }, + "31025": { "kind": 0 }, + "31097": { "kind": 0 }, + "31098": { "kind": 0 }, + "31099": { "kind": 0 }, + "31100": { "kind": 0 }, + "31101": { "kind": 0 }, + "31102": { "kind": 0 }, + "31110": { "kind": 0 }, + "31112": { "kind": 0 }, + "31113": { "kind": 0 } + }, + "32": { + "32019": { "kind": 0 }, + "32022": { "kind": 0 }, + "32049": { "kind": 0 }, + "32078": { "kind": 0 }, + "32079": { "kind": 0 }, + "32080": { "kind": 0 }, + "32081": { "kind": 0 }, + "32082": { "kind": 0 }, + "32083": { "kind": 0 }, + "32084": { "kind": 0 }, + "32085": { "kind": 0 }, + "32096": { "kind": 0 }, + "32097": { "kind": 0 }, + "32098": { "kind": 0 }, + "32101": { "kind": 0 }, + "32102": { "kind": 0 }, + "32103": { "kind": 0 }, + "32104": { "kind": 0 }, + "32110": { "kind": 0 }, + "32111": { "kind": 0 } + }, + "33": { + "33001": { "kind": 0 }, + "33007": { "kind": 0 }, + "33049": { "kind": 0 }, + "33078": { "kind": 0 }, + "33081": { "kind": 0 }, + "33082": { "kind": 0 }, + "33083": { "kind": 0 }, + "33084": { "kind": 0 }, + "33085": { "kind": 0 }, + "33095": { "kind": 0 }, + "33096": { "kind": 0 }, + "33105": { "kind": 0 }, + "33106": { "kind": 0 }, + "33115": { "kind": 0 }, + "33116": { "kind": 0 }, + "33117": { "kind": 0 }, + "33118": { "kind": 0 }, + "33119": { "kind": 0 }, + "33120": { "kind": 0 }, + "33121": { "kind": 0 }, + "33129": { "kind": 0 }, + "33130": { "kind": 0 }, + "33131": { "kind": 0 }, + "33132": { "kind": 0 }, + "33133": { "kind": 0 } + } +} diff --git a/iidx@asphyxia/handlers/gamesystem.ts b/iidx@asphyxia/handlers/gamesystem.ts index e67e939..d657186 100644 --- a/iidx@asphyxia/handlers/gamesystem.ts +++ b/iidx@asphyxia/handlers/gamesystem.ts @@ -16,6 +16,51 @@ export const gssysteminfo: EPR = async (info, data, send) => { arena_cpu_define: [], } + switch (version) { + case 33: + case 32: + result.arena_schedule.phase = K.ITEM("u8", 3); + result.arena_schedule = Object.assign(result.arena_schedule, { season: K.ITEM("u8", 0) }); // arena season for online // + + case 31: + result.arena_schedule = Object.assign(result.arena_schedule, { rule_type: K.ITEM("u8", 0) }); // arena rule for online // + + default: + break; + } + + for (let s = 0; s < 2; ++s) { + for (let c = 0; c < 20; ++c) { + // arena_music_difficult // + result.arena_music_difficult.push({ + play_style: K.ITEM("s32", s), + arena_class: K.ITEM("s32", c), + low_difficult: K.ITEM("s32", 1), + high_difficult: K.ITEM("s32", 12), + is_leggendaria: K.ITEM("bool", 1), + force_music_list_id: K.ITEM("s32", 0), + }); + + // arena_cpu_define // + result.arena_cpu_define.push({ + play_style: K.ITEM("s32", s), + arena_class: K.ITEM("s32", c), + grade_id: K.ITEM("s32", IIDX_CPUS[s][c][0]), + low_music_difficult: K.ITEM("s32", IIDX_CPUS[s][c][1]), + high_music_difficult: K.ITEM("s32", IIDX_CPUS[s][c][2]), + is_leggendaria: K.ITEM("bool", IIDX_CPUS[s][c][3]), + }); + + // maching_class_range // + result.maching_class_range.push({ + play_style: K.ITEM("s32", s), + matching_class: K.ITEM("s32", c), + low_arena_class: K.ITEM("s32", 1), + high_arena_class: K.ITEM("s32", 20), + }); + } + } + // following datas are made up needs to figure out correct way to do it // let music_open = JSON.parse(await IO.ReadFile("data/music_open.json", "utf-8")); if (!_.isNil(music_open[version])) { @@ -33,75 +78,53 @@ export const gssysteminfo: EPR = async (info, data, send) => { }); } - switch (version) { - case 32: - result.arena_schedule.phase = K.ITEM("u8", 3); - result.arena_schedult = Object.assign(result.arena_schedule, { season: K.ITEM("u8", 0) }); // arena season for online // - - case 31: - result.arena_schedult = Object.assign(result.arena_schedule, { rule_type: K.ITEM("u8", 0) }); // arena rule for online // - - result = Object.assign(result, { grade_course: [] }); - - // following datas are made up needs to figure out correct way to do it // - let grade = JSON.parse(await IO.ReadFile("data/grade.json", "utf-8")); - if (!_.isNil(grade[version])) { - Object.keys(grade[version]).forEach(s => { - Object.keys(grade[version][s]).forEach(c => { - result.grade_course.push({ - play_style: K.ITEM("s32", Number(s)), - grade_id: K.ITEM("s32", Number(c)), - is_valid: K.ITEM("bool", true), - music_id_0: K.ITEM("s32", grade[version][s][c].music_id[0]), - class_id_0: K.ITEM("s32", grade[version][s][c].class_id[0]), - music_id_1: K.ITEM("s32", grade[version][s][c].music_id[1]), - class_id_1: K.ITEM("s32", grade[version][s][c].class_id[1]), - music_id_2: K.ITEM("s32", grade[version][s][c].music_id[2]), - class_id_2: K.ITEM("s32", grade[version][s][c].class_id[2]), - music_id_3: K.ITEM("s32", grade[version][s][c].music_id[3]), - class_id_3: K.ITEM("s32", grade[version][s][c].class_id[3]), - index: K.ITEM("s32", result.grade_course.length), - cube_num: K.ITEM("s32", 0), - kind: K.ITEM("s32", grade[version][s][c].kind), - }); + if (version >= 31) { + result = Object.assign(result, { grade_course: [] }); + let grade = JSON.parse(await IO.ReadFile("data/grade.json", "utf-8")); // following datas are made up needs to figure out correct way to do it // + if (!_.isNil(grade[version])) { + Object.keys(grade[version]).forEach(s => { + Object.keys(grade[version][s]).forEach(c => { + result.grade_course.push({ + play_style: K.ITEM("s32", Number(s)), + grade_id: K.ITEM("s32", Number(c)), + is_valid: K.ITEM("bool", true), + music_id_0: K.ITEM("s32", grade[version][s][c].music_id[0]), + class_id_0: K.ITEM("s32", grade[version][s][c].class_id[0]), + music_id_1: K.ITEM("s32", grade[version][s][c].music_id[1]), + class_id_1: K.ITEM("s32", grade[version][s][c].class_id[1]), + music_id_2: K.ITEM("s32", grade[version][s][c].music_id[2]), + class_id_2: K.ITEM("s32", grade[version][s][c].class_id[2]), + music_id_3: K.ITEM("s32", grade[version][s][c].music_id[3]), + class_id_3: K.ITEM("s32", grade[version][s][c].class_id[3]), + index: K.ITEM("s32", result.grade_course.length), + cube_num: K.ITEM("s32", 0), + kind: K.ITEM("s32", grade[version][s][c].kind), }); }); - } - - default: - break; - } - - // arena_music_difficult // - for (let s = 0; s < 2; ++s) { - for (let c = 0; c < 20; ++c) { - result.arena_music_difficult.push({ - play_style: K.ITEM("s32", s), - arena_class: K.ITEM("s32", c), - low_difficult: K.ITEM("s32", 1), - high_difficult: K.ITEM("s32", 12), - is_leggendaria: K.ITEM("bool", 1), - force_music_list_id: K.ITEM("s32", 0), - }); - - result.maching_class_range.push({ - play_style: K.ITEM("s32", s), - matching_class: K.ITEM("s32", c), - low_arena_class: K.ITEM("s32", 1), - high_arena_class: K.ITEM("s32", 20), - }); - - result.arena_cpu_define.push({ - play_style: K.ITEM("s32", s), - arena_class: K.ITEM("s32", c), - grade_id: K.ITEM("s32", IIDX_CPUS[s][c][0]), - low_music_difficult: K.ITEM("s32", IIDX_CPUS[s][c][1]), - high_music_difficult: K.ITEM("s32", IIDX_CPUS[s][c][2]), - is_leggendaria: K.ITEM("bool", IIDX_CPUS[s][c][3]), }); } } + // following datas are made up needs to figure out correct way to do it // + if (version >= 33) { + let legg_open = JSON.parse(await IO.ReadFile("data/legg_open.json", "utf-8")); + if (!_.isNil(legg_open[version])) { + result = Object.assign(result, { leggendaria_open: [] }); + + Object.keys(legg_open).forEach(v => { + Object.keys(legg_open[v]).forEach(m => { + if (Number(v) > version) return; + + result.leggendaria_open.push({ + music_id: K.ITEM("s32", Number(m)), + kind: K.ITEM("s32", legg_open[v][m].kind), + }); + }); + }); + } + } + + let eventData = null; switch (version) { case 29: result = Object.assign(result, { @@ -129,7 +152,7 @@ export const gssysteminfo: EPR = async (info, data, send) => { break; case 31: let totalMetron = 0; - let eventData = await DB.Find(null, { + eventData = await DB.Find(null, { collection: "event_1", version: version, event_data: "myepo_map", @@ -158,14 +181,57 @@ export const gssysteminfo: EPR = async (info, data, send) => { break; case 32: result = Object.assign(result, { - Event1Value: K.ATTR({ val: String(U.GetConfig("pc_event")) }), // TEST // - Event1Phase: K.ATTR({ val: String(U.GetConfig("pc_event1")) }), // TEST // - Event2Phase: K.ATTR({ val: String(U.GetConfig("pc_event2")) }), // TEST // - ExtraBossEventPhase: K.ATTR({ val: String(U.GetConfig("pc_extraboss")) }), // TEST // + Event1Value: K.ATTR({ val: String(U.GetConfig("pc_event")) }), + Event1Phase: K.ATTR({ val: String(U.GetConfig("pc_event1")) }), + Event2Phase: K.ATTR({ val: String(U.GetConfig("pc_event2")) }), + ExtraBossEventPhase: K.ATTR({ val: String(U.GetConfig("pc_extraboss")) }), isNewSongAnother12OpenFlg: K.ATTR({ val: String(Number(U.GetConfig("NewSongAnother12"))) }), isKiwamiOpenFlg: K.ATTR({ val: String(Number(U.GetConfig("Eisei"))) }), WorldTourismOpenList: K.ATTR({ val: String(-1) }), - OldBPLBattleOpenPhase: K.ATTR({ val: String(3) }), + BPLBattleOpenPhase: K.ATTR({ val: String(2) }), + }); + break; + case 33: + let totalScorePoint = 0, totalMissPoint = 0; + let extra_boss = await DB.Find(null, { + collection: "extra_boss", + version: version, + }); + + if (!_.isNil(extra_boss)) { + extra_boss.forEach((res: any) => { + totalScorePoint += Number(res.progress_point_score); + totalMissPoint += Number(res.progress_point_miss); + }); + } + + result = Object.assign(result, { + Event1Phase: K.ATTR({ val: String(U.GetConfig("ss_event1")) }), + ExtraBossEvent: K.ATTR({ val: String(U.GetConfig("ss_extraboss")) }), + isNewSongAnother12OpenFlg: K.ATTR({ val: String(Number(U.GetConfig("NewSongAnother12"))) }), + isKiwamiOpenFlg: K.ATTR({ val: String(Number(U.GetConfig("Eisei"))) }), + WorldTourismOpenList: K.ATTR({ val: String(-1) }), + BPLBattleOpenPhase: K.ATTR({ val: String(2) }), + VocaloidEvent: K.ATTR({ val: String(U.GetConfig("ss_cyber")) }), + KrankAppendSeason: K.ATTR({ val: String(0) }), + the4thEvent: K.ATTR({ val: String(1)} ), + beat: K.ATTR({ val: String(5293) }), // It wasn't. TODO:: Figure out what this value does // + extraevent_2: { + "@attr": { + all_point_score: String(totalScorePoint), + all_point_miss: String(totalMissPoint), + season: String(Number(U.GetConfig("ss_extraboss_season"))), + }, + /* up to 32 entries + info: K.ATTR({ + gauge_level: String(), + class_id: String(), + score_extra: String(), + miss_extra: String(), + score_onemore: String(), + miss_onemore: String() + }),*/ + } }); break; diff --git a/iidx@asphyxia/handlers/grade.ts b/iidx@asphyxia/handlers/grade.ts index fec600e..10823e1 100644 --- a/iidx@asphyxia/handlers/grade.ts +++ b/iidx@asphyxia/handlers/grade.ts @@ -1,18 +1,37 @@ import { pcdata } from "../models/pcdata"; import { grade } from "../models/grade"; -import { IDtoRef, GetVersion } from "../util"; +import { IDtoRef, GetVersion, GetModel, GetCommand } from "../util"; import { eisei_grade } from "../models/lightning"; import { badge } from "../models/badge"; +export const grademethod: EPR = async (info, data, send) => { + const command = GetCommand(data); + switch (command[0]) { + case "raised": + return await graderaised(info, data, send); + + default: + break; + } + + return send.deny({ format: false, header: false }); +} + export const graderaised: EPR = async (info, data, send) => { const version = GetVersion(info); - const iidxid = Number($(data).attr().iidxid); - const refid = await IDtoRef(iidxid); - const gid = Number($(data).attr().gid); - const gtype = Number($(data).attr().gtype); + const command = GetCommand(data); - let cflg = Number($(data).attr().cflg); - let achi = Number($(data).attr().achi); + let refid = null; + if (version < 11) refid = command[1].split('|')[0]; + else if (version < 13) refid = await IDtoRef(Number(command[1])); + else refid = await IDtoRef(Number($(data).attr().iidxid)); + + const gid = version < 13 ? Number(command[3]) : Number($(data).attr().gid); + const gtype = version < 13 ? Number(command[2]) : Number($(data).attr().gtype); + + let cflg = version < 13 ? Number(command[4]) : Number($(data).attr().cflg); + if (version >= 23) cflg = Number($(data).attr().cstage); + let achi = version < 13 ? Number(command[5]) : Number($(data).attr().achi); let pcdata = await DB.FindOne(refid, { collection: "pcdata", version: version }); let grade = await DB.FindOne(refid, { @@ -22,8 +41,6 @@ export const graderaised: EPR = async (info, data, send) => { gradeId: gid, }); - if (version >= 23) cflg = Number($(data).attr().cstage); - const isTDJ = !_.isNil($(data).element("lightning_play_data")); // lightning model // const hasEiseiData = (!_.isNil($(data).element("eisei_data")) || !_.isNil($(data).element("eisei_grade_data")) || !_.isNil($(data).element("kiwami_data"))); if (isTDJ && hasEiseiData) { @@ -62,6 +79,7 @@ export const graderaised: EPR = async (info, data, send) => { break; case 31: case 32: + case 33: eisei_clear_type = Number($(data).attr("kiwami_data").clear_type); eisei_grade_id = Number($(data).attr("kiwami_data").grade_id); eisei_grade_type = Number($(data).attr("kiwami_data").grade_type); @@ -118,13 +136,20 @@ export const graderaised: EPR = async (info, data, send) => { let updatePcdata = false; let updateGrade = false; - if (_.isNil(pcdata)) return send.deny(); + if (version > 9) { + if (version < 23) { + if (gtype == 0 && cflg == 4) updatePcdata = true; + else if (gtype == 1 && cflg == 3) updatePcdata = true; + } else { + if (cflg == 4) updatePcdata = true; + } + } + + if (version > 9 && _.isNil(pcdata)) return send.deny(); if (_.isNil(grade)) { - if (cflg == 4) { + if (updatePcdata) { if (gtype == 0) pcdata.sgid = Math.max(gid, pcdata.sgid); else pcdata.dgid = Math.max(gid, pcdata.dgid); - - updatePcdata = true; } updateGrade = true; @@ -136,11 +161,9 @@ export const graderaised: EPR = async (info, data, send) => { updateGrade = true; } - if (cflg == 4) { + if (updatePcdata) { if (gtype == 0) pcdata.sgid = Math.max(gid, pcdata.sgid); else pcdata.dgid = Math.max(gid, pcdata.dgid); - - updatePcdata = true; } } @@ -192,17 +215,31 @@ export const graderaised: EPR = async (info, data, send) => { ); } + const maxStage = version < 23 ? (gtype == 0 ? 4 : 3) : 4; let gradeUser = await DB.Find(null, { collection: "grade", version: version, style: gtype, gradeId: gid, - maxStage: 4, + maxStage, }); - return send.object( - K.ATTR({ + let result = { + "@attr": { pnum: String(gradeUser.length), - }) - ); + } + } + + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result["@attr"]["method"] = "graderaised"; + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + } + } + + return send.object(result, sendOption); }; diff --git a/iidx@asphyxia/handlers/music.ts b/iidx@asphyxia/handlers/music.ts index 931dc8f..fb620d5 100644 --- a/iidx@asphyxia/handlers/music.ts +++ b/iidx@asphyxia/handlers/music.ts @@ -1,15 +1,48 @@ -import { IDtoRef, GetVersion, OldMidToNewMid, NewMidToOldMid, ReftoProfile, ReftoPcdata, ClidToPlaySide, ReftoQPRO, NumArrayToString, OldMidToVerMid, GetWeekId } from "../util"; +import { IDtoRef, GetVersion, OldMidToNewMid, NewMidToOldMid, ReftoProfile, ReftoPcdata, ClidToPlaySide, ReftoQPRO, NumArrayToString, OldMidToVerMid, GetModel, GetCommand, NumArrayToHex } from "../util"; import { score, score_top } from "../models/score"; import { profile } from "../models/profile"; import { shop_data } from "../models/shop"; import { tutorial } from "../models/tutorial"; import { badge } from "../models/badge"; import { activity_mybest } from "../models/activity"; +import { djtraining } from "../models/djtraining"; +import { rival } from "../models/rival"; + +export const musicmethod: EPR = async (info, data, send) => { + const command = GetCommand(data); + switch (command[0]) { + case "getrank": + return await musicgetrank(info, data, send); + case "getralive": + return await musicgetralive(info, data, send); + case "appoint": + return await musicappoint(info, data, send); + case "reg": + return await musicreg(info, data, send); + case "crate": + return await musiccrate(info, data, send); + + default: + break; + } + + return send.deny({ format: false, header: false }); +} export const musicgetrank: EPR = async (info, data, send) => { const version = GetVersion(info); - const refid = await IDtoRef(Number($(data).attr().iidxid)); - const cltype = Number($(data).attr().cltype); // 0 -> SP, 1 -> DP // + const command = GetCommand(data); + + let refid = null; + if (version < 11) refid = command[1].split('|')[0]; + else if (version < 13) refid = await IDtoRef(Number(command[1])); + else refid = await IDtoRef(Number($(data).attr().iidxid)); + + let cltype = null; + if (version < 11) cltype = Number(command[2]) == 120 ? 0 : 1; + else if (version < 13) cltype = Number(command[2]); // 0 -> SP, 1 -> DP // + else cltype = Number($(data).attr().cltype); + const music_data: any = ( await DB.Find(refid, { collection: "score", @@ -24,14 +57,25 @@ export const musicgetrank: EPR = async (info, data, send) => { [Number($(data).attr().iidxid4), await IDtoRef(Number($(data).attr().iidxid4))], ]; + let result = null; let m = [], top = [], b = [], t = []; let score_data: number[]; - let indices, temp_mid = 0; - if (version == 14 || version == 15) { - let result = { + let indices, mapValue, temp_mid = 0; + let arrayType = version < 33 ? "s16" as const : "s32" as const; + if (version < 16) { + result = { r: [], // v - (-1, beginner/-2, tutorial) // }; - indices = cltype === 0 ? [1, 2, 3] : [6, 7, 8]; + + if (version < 12) { + indices = cltype === 0 ? [2, 1, 3] : [7, 6, 8]; + mapValue = (x => indices.indexOf(x) + (cltype === 0 ? 0 : 3)); + } else { + indices = cltype === 0 ? [1, 2, 3] : [6, 7, 8]; + mapValue = (x => x > 3 ? x - 3 : x - 1); + } + + const musicData: Record = {}; music_data.forEach((res: score) => { if (_.isNil(res.cArray)) throw new Error("[music.getrank] There is unsupported entry in Database"); @@ -43,23 +87,52 @@ export const musicgetrank: EPR = async (info, data, send) => { for (let a = 0; a < 3; a++) { if (res.esArray[indices[a]] == 0) continue; let rank_id = _.isNil(res.rArray) ? -1 : res.rArray[indices[a]]; + if (version < 10) { + const data = NumArrayToHex([11, 3, 1, 1], [temp_mid, rank_id, res.cArray[indices[a]] > 1 ? 1 : 0, 0]); + if (mapValue(indices[a]) in musicData) { + musicData[mapValue(indices[a])] += data; + } else { + musicData[mapValue(indices[a])] = data; + } + } + else if (version < 12) { + const data = NumArrayToString(version < 11 ? [11, 3, 2, 14] : [11, 3, 3, 13], [temp_mid, res.cArray[indices[a]], rank_id, res.esArray[indices[a]]]); + if (mapValue(indices[a]) in musicData) { + musicData[mapValue(indices[a])] += data; + } else { + musicData[mapValue(indices[a])] = data; + } + } else { + const data = NumArrayToString([7, 4, 13, 3, 3], [verMid[1], a, res.esArray[indices[a]], rank_id, res.cArray[indices[a]]]); + if (verMid[0] in musicData) { + musicData[verMid[0]] += data; + } else { + musicData[verMid[0]] = data; + } + } + } - result.r.push( - K.ITEM("str", NumArrayToString( - [7, 4, 13, 3, 3], - [verMid[1], a, res.esArray[indices[a]], rank_id, res.cArray[indices[a]]] // 4th element is rid (rank_id) // - ), { v: String(verMid[0]) }) + if (version < 12) { + result.r = Object.entries(musicData).map(([clid, packed]) => + K.ITEM("str", packed, { cl: String(clid) }), + ); + } + else { + result.r = Object.entries(musicData).map(([version, packed]) => + K.ITEM("str", packed, { v: String(version) }), ); } // BEGINNER // - if (res.cArray[0] == 0) return; - result.r.push( - K.ITEM("str", NumArrayToString( - [12, 6], - [temp_mid, res.cArray[0]] - ), { v: String("-1") }) - ); + if (version > 12) { + if (res.cArray[0] == 0) return; + result.r.push( + K.ITEM("str", NumArrayToString( + [12, 6], + [temp_mid, res.cArray[0]] + ), { v: String("-1") }) + ); + } }); // TUTORIAL // @@ -77,7 +150,22 @@ export const musicgetrank: EPR = async (info, data, send) => { ); }); - return send.object(result); + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result = Object.assign(result, { + "@attr": { + method: "musicgetrank" + } + }) + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + } + } + + return send.object(result, sendOption); } else if (version < 20) { indices = cltype === 0 ? [1, 2, 3] : [6, 7, 8]; @@ -90,16 +178,16 @@ export const musicgetrank: EPR = async (info, data, send) => { if (version == 16) score_data = [-1, temp_mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i])]; else score_data = [-1, temp_mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i]), ...indices.map(i => res.mArray[i])]; + m.push(K.ARRAY(arrayType, score_data)); - m.push(K.ARRAY("s16", score_data)); if (res.cArray[0] != 0) b.push(K.ARRAY("u16", [temp_mid, res.cArray[0]])); }); - for (let i = 0; i < rival_refids.length; i++) { - if (_.isNaN(rival_refids[i][0])) continue; + for (let i = 0; i < 5; i++) { + if (_.isNaN(rival_refids[i][0]) || _.isNil(rival_refids[i][0])) continue; const rival_score = await DB.Find(String(rival_refids[i][1]), - { collection: "score", } + { collection: "score" } ); rival_score.forEach((res: score) => { @@ -109,8 +197,7 @@ export const musicgetrank: EPR = async (info, data, send) => { if (version == 16) score_data = [i, temp_mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i])]; else score_data = [i, temp_mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i]), ...indices.map(i => res.mArray[i])]; - - m.push(K.ARRAY("s16", score_data)); + m.push(K.ARRAY(arrayType, score_data)); }); } @@ -131,17 +218,19 @@ export const musicgetrank: EPR = async (info, data, send) => { music_data.forEach((res: score) => { if (_.isNil(res.cArray)) throw new Error("[music.getrank] There is unsupported entry in Database"); + if (res.mid < 0) return; // HOW // + let mVersion = Math.floor(res.mid / 1000); if (mVersion > version) return; score_data = [-1, res.mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i]), ...indices.map(i => res.mArray[i])]; + m.push(K.ARRAY(arrayType, score_data)); - m.push(K.ARRAY("s16", score_data)); if (res.cArray[0] != 0) b.push(K.ARRAY("u16", [res.mid, res.cArray[0]])); }); - for (let i = 0; i < rival_refids.length; i++) { - if (_.isNaN(rival_refids[i][0])) continue; + for (let i = 0; i < 5; i++) { + if (_.isNaN(rival_refids[i][0]) || _.isNil(rival_refids[i][0])) continue; const rival_score = await DB.Find(String(rival_refids[i][1]), { collection: "score", } @@ -152,8 +241,7 @@ export const musicgetrank: EPR = async (info, data, send) => { if (mVersion > version) return; score_data = [i, res.mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i]), ...indices.map(i => res.mArray[i])]; - - m.push(K.ARRAY("s16", score_data)); + m.push(K.ARRAY(arrayType, score_data)); }); } @@ -165,6 +253,8 @@ export const musicgetrank: EPR = async (info, data, send) => { if (score_top.length > 0) { if (version >= 27) { score_top.forEach((res) => { + if (res.mid < 0) return; + let mVersion = Math.floor(res.mid / 1000); if (mVersion > version) return; @@ -176,7 +266,7 @@ export const musicgetrank: EPR = async (info, data, send) => { name3: res.names[3], name4: res.names[4], }), - detail: K.ARRAY("s16", [res.mid, ...res.clflgs, ...res.scores]) + detail: K.ARRAY(arrayType, [res.mid, ...res.clflgs, ...res.scores]) }); }); } else { @@ -190,7 +280,7 @@ export const musicgetrank: EPR = async (info, data, send) => { name1: res.names[2], name2: res.names[3], }), - detail: K.ARRAY("s16", [res.mid, ...indices.map(i => res.clflgs[i]), ...indices.map(i => res.scores[i])]) + detail: K.ARRAY(arrayType, [res.mid, ...indices.map(i => res.clflgs[i]), ...indices.map(i => res.scores[i])]) }); }); } @@ -206,7 +296,7 @@ export const musicgetrank: EPR = async (info, data, send) => { else { return send.success(); } - + return send.object({ m, b, @@ -214,15 +304,8 @@ export const musicgetrank: EPR = async (info, data, send) => { }); } -export const musicgetralive: EPR = async (info, data, send) => { - const version = GetVersion(info); - const refid = await IDtoRef(Number($(data).attr().iidxid)); +export const musicgetranksub: EPR = async (info, data, send) => { const cltype = Number($(data).attr().cltype); // 0 -> SP, 1 -> DP // - const music_data: any = ( - await DB.Find(refid, { - collection: "score", - }) - ); const rival_refids = [ [Number($(data).attr().iidxid0), await IDtoRef(Number($(data).attr().iidxid0))], [Number($(data).attr().iidxid1), await IDtoRef(Number($(data).attr().iidxid1))], @@ -231,49 +314,127 @@ export const musicgetralive: EPR = async (info, data, send) => { [Number($(data).attr().iidxid4), await IDtoRef(Number($(data).attr().iidxid4))], ]; - let result = { - d: [] - }; - let myRecord: Record = {}; - let rRecord: Record = {}; - let indices = cltype === 0 ? [1, 2, 3] : [6, 7, 8]; - - music_data.forEach((res: score) => { - if (_.isNil(res.cArray)) throw new Error("[music.getralive] There is unsupported entry in Database"); - - myRecord[NewMidToOldMid(res.mid)] = [...res.esArray, ...res.cArray]; - }); + let m = []; + let score_data: number[]; + let indices = cltype === 0 ? [0, 1, 2, 3, 4] : [5, 6, 7, 8, 9]; for (let i = 0; i < rival_refids.length; i++) { if (_.isNaN(rival_refids[i][0])) continue; - const rival_score = await DB.Find(String(rival_refids[i][1]), - { collection: "score", } - ); + for (let i = 0; i < 5; i++) { + if (_.isNaN(rival_refids[i][0]) || _.isNil(rival_refids[i][0])) continue; - // [0~2] - NOPLAY/WIN/LOSE (ANOTHER/HYPER/NORMAL), // - // consider same score as LOSE, tho theres seems DRAW state but game render as LOSE // - // TODO:: figure out what other elements does // + const rival_score = await DB.Find(String(rival_refids[i][1]), + { collection: "score" } + ); + + rival_score.forEach((res: score) => { + for (let a = 0; a < indices.length; a++) { + if (res.rArray[indices[a]] == -1) continue; + + // [index?, rno?, ...] // + score_data = [i, i, res.mid, indices[a], res.cArray[indices[a]], res.esArray[indices[a]], res.mArray[indices[a]]]; + m.push(K.ARRAY("s32", score_data)); + } + }); + } + } + + return send.object({ + style: K.ATTR({ type: String(cltype) }), + m, + }); +} + +export const musicgetralive: EPR = async (info, data, send) => { + const version = GetVersion(info); + const command = GetCommand(data); + const refid = await IDtoRef(Number($(data).attr().iidxid)); + const cltype = version < 13 ? Number(command[1]) : Number($(data).attr().cltype); // 0 -> SP, 1 -> DP // + + let rival_refids = []; + let music_data = []; + let myRecord: Record = {}; + let rRecord: Record = {}; + let indices = cltype == 0 ? [1, 2, 3] : [6, 7, 8]; + if (version < 13) { + rival_refids = [ + [Number(command[2]), await IDtoRef(Number(command[2]))], + [Number(command[3]), await IDtoRef(Number(command[3]))], + [Number(command[4]), await IDtoRef(Number(command[4]))], + [Number(command[5]), await IDtoRef(Number(command[5]))], + [Number(command[6]), await IDtoRef(Number(command[6]))], + ]; + } else { + rival_refids = [ + [Number($(data).attr().iidxid0), await IDtoRef(Number($(data).attr().iidxid0))], + [Number($(data).attr().iidxid1), await IDtoRef(Number($(data).attr().iidxid1))], + [Number($(data).attr().iidxid2), await IDtoRef(Number($(data).attr().iidxid2))], + [Number($(data).attr().iidxid3), await IDtoRef(Number($(data).attr().iidxid3))], + [Number($(data).attr().iidxid4), await IDtoRef(Number($(data).attr().iidxid4))], + ]; + + music_data = await DB.Find(refid, { + collection: "score", + }); + music_data.forEach((res: score) => { + if (res.mid < 0) return; + + if (_.isNil(res.cArray)) throw new Error("[music.getralive] There is unsupported entry in Database"); + let mid = NewMidToOldMid(res.mid); + let verMid = OldMidToVerMid(mid); + if (verMid[0] > version) return; + + myRecord[NewMidToOldMid(res.mid)] = [...res.esArray, ...res.cArray]; + }); + } + + for (let i = 0; i < 5; i++) { + if (_.isNaN(rival_refids[i][0]) || _.isNil(rival_refids[i][0])) continue; + + const rival_score = await DB.Find(String(rival_refids[i][1]), + { collection: "score" } + ); rival_score.forEach((res: score) => { + if (res.mid < 0) return; + let mid = NewMidToOldMid(res.mid); let verMid = OldMidToVerMid(mid); if (verMid[0] > version) return; let scoreArray = Array(15).fill(0); - if (!_.isNil(myRecord[mid])) { + let strResult = ""; + if (version < 13) { + const masks = Array(5).fill(0); for (let a = 0; a < 3; a++) { - let myExscore = myRecord[mid][indices[a]]; - let rvExscore = res.esArray[indices[a]]; - let mycFlg = myRecord[mid][indices[a] + 10]; - let rvcFlg = res.cArray[indices[a]]; - - if (mycFlg == 0 || rvcFlg == 0) continue; - scoreArray[2 - a] = myExscore > rvExscore ? 1 : 2; + if (res.cArray[indices[a]] > 0) { + masks[i] |= 1 << a; + } } - } - let strResult = NumArrayToString([6], [verMid[1]]); - strResult += NumArrayToString(Array(15).fill(2), scoreArray); + strResult = NumArrayToString( + [7, 2, 3, 3, 3, 3, 3], + [verMid[1], 0, masks[4], masks[3], masks[2], masks[1], masks[0]] + ); + } else { + // [0~2] - NOPLAY/WIN/LOSE (ANOTHER/HYPER/NORMAL), // + // consider same score as LOSE, tho theres seems DRAW state but game render as LOSE // + // TODO:: figure out what other elements does // + if (!_.isNil(myRecord[mid])) { + for (let a = 0; a < 3; a++) { + let myExscore = myRecord[mid][indices[a]]; + let rvExscore = res.esArray[indices[a]]; + let mycFlg = myRecord[mid][indices[a] + 10]; + let rvcFlg = res.cArray[indices[a]]; + + if (mycFlg == 0 || rvcFlg == 0) continue; + scoreArray[i * 3 + (2 - a)] = myExscore > rvExscore ? 1 : 2; + } + } + + strResult = NumArrayToString([6], [verMid[1]]); + strResult += NumArrayToString(Array(15).fill(2), scoreArray); + } if (verMid[0] in rRecord) { rRecord[verMid[0]] += strResult; @@ -283,26 +444,46 @@ export const musicgetralive: EPR = async (info, data, send) => { }); } + let result = { + d: [] + }; + for (const key in rRecord) { result.d.push( K.ITEM("str", rRecord[key], { v: key }) ); } - return send.object(result); + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result = Object.assign(result, { + "@attr": { + method: "musicgetralive" + } + }) + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + } + } + + return send.object(result, sendOption); } export const musicappoint: EPR = async (info, data, send) => { const version = GetVersion(info); + const command = GetCommand(data); // clid, ctype, grd, iidxid, lv, mid, subtype // - const refid = await IDtoRef(Number($(data).attr().iidxid)); - const ctype = Number($(data).attr().ctype); - const subtype = Number($(data).attr().subtype); - let mid = Number($(data).attr().mid); - let clid = Number($(data).attr().clid); + const refid = version < 13 ? await IDtoRef(Number(command[5])) : await IDtoRef(Number($(data).attr().iidxid)); + const ctype = version < 13 ? Number(command[3]) : Number($(data).attr().ctype); + const subtype = version < 13 ? Number(command[4]) : Number($(data).attr().subtype); + let mid = version < 13 ? Number(command[1]) : Number($(data).attr().mid); + let clid = version < 13 ? Number(command[2]) : Number($(data).attr().clid); - const mapping = [1, 2, 3, 6, 7, 8]; + const mapping = version < 12 ? [2, 1, 3, 7, 6, 8] : [1, 2, 3, 6, 7, 8]; if (version < 20) { mid = OldMidToNewMid(mid); clid = mapping[clid]; @@ -314,11 +495,14 @@ export const musicappoint: EPR = async (info, data, send) => { let result: any = {}; // MINE // - const music_data: score | null = await DB.FindOne(refid, { - collection: "score", - mid: mid, - [clid]: { $exists: true }, - }); + let music_data: score | null = null; + if (!_.isNil(refid)) { + music_data = await DB.FindOne(refid, { + collection: "score", + mid: mid, + [clid]: { $exists: true }, + }); + } let mydata, option = 0, option2 = 0; if (!_.isNil(music_data)) { @@ -329,8 +513,10 @@ export const musicappoint: EPR = async (info, data, send) => { } } - if (version < 16) mydata = K.ITEM("str", Buffer.from(music_data[clid], "base64").toString("hex").toUpperCase()); - else mydata = K.ITEM("bin", Buffer.from(music_data[clid], "base64")); + if (!_.isNil(music_data[clid])) { // can be null as RED doesn't send ghost data // + if (version < 16) mydata = K.ITEM("str", Buffer.from(music_data[clid], "base64").toString("hex").toUpperCase()); + else mydata = K.ITEM("bin", Buffer.from(music_data[clid], "base64")); + } } /*** ctype @@ -351,10 +537,11 @@ export const musicappoint: EPR = async (info, data, send) => { ***/ // OTHERS // - let other_refid, other_musicdata: score | null, other_pcdata, other_profile, sdata = null; - if (!_.isNaN(subtype)) { - switch (ctype) { - case 1: + let other_refid, other_musicdata, other_pcdata, other_profile, sdata = null; + let other_musicdatas = []; + switch (ctype) { + case 1: + if (!_.isNaN(subtype)) { other_refid = await IDtoRef(subtype); other_profile = await ReftoProfile(other_refid); other_pcdata = await ReftoPcdata(other_refid, version); @@ -363,38 +550,103 @@ export const musicappoint: EPR = async (info, data, send) => { mid: mid, [clid]: { $exists: true }, }); - if (_.isNaN(other_pcdata) || _.isNil(other_musicdata)) break; + } + break; - if (version < 16) { - sdata = K.ITEM("str", Buffer.from(other_musicdata[clid], "base64").toString("hex").toUpperCase(), { - score: String(other_musicdata.esArray[clid]), - pid: String(other_profile[1]), - name: String(other_profile[0]), - riidxid: String(other_profile[2]) + case 2: // ALL, STORE TOP // + case 10: + other_musicdatas = await DB.Find(null, { + collection: "score", + mid: mid, + [clid]: { $exists: true }, + }); + break; + + case 8: // RIVAL TOP - refer rival table rather than subtype parsing // + let rivals = await DB.Find(refid, { + collection: "rival", + play_style: ClidToPlaySide(clid) + 1, + }); + if (rivals.length > 0) { + for (const rival of rivals) { + let rival_musicdata = await DB.FindOne(rival.rival_refid, { + collection: "score", + mid: mid, + [clid]: { $exists: true }, }); - } - else { - sdata = K.ITEM("bin", Buffer.from(other_musicdata[clid], "base64"), { - score: String(other_musicdata.esArray[clid]), - pid: String(other_profile[1]), - name: String(other_profile[0]), - riidxid: String(other_profile[2]) - }); - } - break; + if (!_.isNil(rival_musicdata)) other_musicdatas.push(rival_musicdata); + } + } + break; - default: - break; + default: + break; + } + + if (other_musicdatas.length > 0) { + other_musicdatas.sort((a: score, b: score) => b.esArray[clid] - a.esArray[clid]); + other_musicdata = other_musicdatas[0]; + other_profile = await ReftoProfile(other_musicdata.__refid); + other_pcdata = await ReftoPcdata(other_musicdata.__refid, version); + } + + if (!_.isNil(other_musicdata) && !_.isNil(other_profile)) { + if (version < 16) { + if (!_.isNil(other_musicdata[clid])) { + sdata = K.ITEM("str", Buffer.from(other_musicdata[clid], "base64").toString("hex").toUpperCase(), { + score: String(other_musicdata.esArray[clid]), + pid: String(other_profile[1]), + name: String(other_profile[0]), + riidxid: String(other_profile[2]) + }); + } else { + if (version < 12) { + sdata = { + "@attr": { + score: other_musicdata.esArray[clid], + pid: other_profile[1], + name: other_profile[0], + } + } + } + } + } + else { + sdata = K.ITEM("bin", Buffer.from(other_musicdata[clid], "base64"), { + score: String(other_musicdata.esArray[clid]), + pid: String(other_profile[1]), + name: String(other_profile[0]), + riidxid: String(other_profile[2]) + }); } } - if (_.isNil(mydata) && _.isNil(sdata)) return send.success(); + if (_.isNil(mydata) && _.isNil(sdata)) { + if (version < 14) { + return send.object({ + "@attr": { + method: "musicappoint" + } + }, { + rootName: GetModel(info), + status: version < 13 ? "ENODATA" : 0, + format: false, + header: false, + }); + } + + return send.success(); + } if (version >= 27) { let my_gauge_data = Buffer.alloc(0), other_gauge_data = Buffer.alloc(0); - if (!_.isNil(music_data[clid + 10])) my_gauge_data = Buffer.from(music_data[clid + 10], "base64"); - + if (!_.isNil(music_data)) { + if (!_.isNil(music_data[clid + 10])) { + my_gauge_data = Buffer.from(music_data[clid + 10], "base64"); + } + } + if (!_.isNil(sdata)) { if (_.isNil(other_musicdata.optArray)) { // migration // other_musicdata.optArray = Array(10).fill(0); @@ -441,13 +693,50 @@ export const musicappoint: EPR = async (info, data, send) => { if (!_.isNil(mydata) && !_.isNil(sdata)) result = { mydata, sdata }; } + if (version < 14) { + if (_.isNil(mydata)) mydata = { "@content": "" }; + + if (version < 12) { + if (!_.isNil(sdata)) { + return send.object({ + "@attr": { + method: "musicappoint" + }, + data: sdata, + }, { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }); + } + } + + return send.pugFile(`pug/${GetModel(info)}/musicappoint.pug`, { + mydata: mydata["@content"], + sdata: { + score: sdata["@attr"]["score"], + pid: sdata["@attr"]["pid"], + name: sdata["@attr"]["name"], + content: sdata["@content"], + } + }, { + format: false, + header: false, + }); + } + return send.object(result); } export const musicreg: EPR = async (info, data, send) => { const version = GetVersion(info); - const refid = await IDtoRef(Number($(data).attr().iidxid)); + const command = GetCommand(data); + let refid = null; + if (version < 11) refid = command[1].split('|')[0]; + else if (version < 13) refid = await IDtoRef(Number(command[1])); + else refid = await IDtoRef(Number($(data).attr().iidxid)); const shop_data = await DB.FindOne({ collection: "shop_data", }); @@ -455,20 +744,30 @@ export const musicreg: EPR = async (info, data, send) => { collection: "profile", }); + const mid_indice = version < 12 ? 3 : 2; + const clid_indice = version < 12 ? 2 : 3; + // wid, oppid, opname, opt, opt2, pside, nocnt, anum // - const pgnum = Number($(data).attr().pgnum); - const gnum = Number($(data).attr().gnum); - const mnum = Number($(data).attr().mnum); - const cflg = Number($(data).attr().cflg); - let mid = Number($(data).attr().mid); - let clid = Number($(data).attr().clid); + let mid = version < 13 ? Number(command[mid_indice]) : Number($(data).attr().mid); + let clid = version < 13 ? Number(command[clid_indice]) : Number($(data).attr().clid); + const pgnum = version < 13 ? Number(command[4]) : Number($(data).attr().pgnum); + const gnum = version < 13 ? Number(command[5]) : Number($(data).attr().gnum); + const mnum = version < 13 ? -1 : Number($(data).attr().mnum); + const cflg = version < 13 ? Number(command[7]) : Number($(data).attr().cflg); let exscore = (pgnum * 2 + gnum); let ghost = null, ghost_gauge = null; // Heroic Verse // let style = 0, option = 0, option_2 = 0, rid = -1; + if (version < 13) rid = Number(command[6]); + else if (!_.isNil($(data).attr().rid)) rid = Number($(data).attr().rid); + else if (!_.isNil($(data).attr().dj_level)) rid = Number($(data).attr().dj_level); + if (rid > -1) console.log(`[music.reg] rank_id : ${rid}`); + + if (mid < 0) return send.deny(); + // TODO:: Leggendaria until HEROIC VERSE has seperate music_id // // TODO:: SUPER FUTURE 2323 has seperate music_id // - const mapping = [1, 2, 3, 6, 7, 8]; + const mapping = version < 12 ? [2, 1, 3, 7, 6, 8] : [1, 2, 3, 6, 7, 8]; if (version == -1) return send.deny(); else if (version < 20) { mid = OldMidToNewMid(mid); @@ -497,12 +796,13 @@ export const musicreg: EPR = async (info, data, send) => { let opt2Array = Array(10).fill(0); // USED OPTION (CastHour) // let update = 0; - if (!_.isNil($(data).attr().rid)) rid = Number($(data).attr().rid); - else if (!_.isNil($(data).attr().dj_level)) rid = Number($(data).attr().dj_level); - if (rid > -1) console.log(`[music.reg] rank_id : ${rid}`); - - if (version < 16) ghost = Buffer.from($(data).str("ghost"), "hex").toString("base64"); - else ghost = $(data).buffer("ghost").toString("base64"); + if (version == 12 || version == 13) { + ghost = Buffer.from($(data).obj["@content"], "hex").toString("base64"); + } else if (version == 14 || version == 15) { + ghost = Buffer.from($(data).str("ghost"), "hex").toString("base64"); + } else if (version > 15) { + ghost = $(data).buffer("ghost").toString("base64"); + } if (version >= 27) { ghost_gauge = $(data).buffer("ghost_gauge").toString("base64"); @@ -735,6 +1035,41 @@ export const musicreg: EPR = async (info, data, send) => { ); } + if (!_.isNil($(data).attr().djt_tier)) { + let tier = Number($(data).attr().djt_tier); + let part = Number($(data).attr().djt_part); + let midx = Number($(data).attr().djt_midx); + + const djt_data: djtraining | null = await DB.FindOne(refid, { + collection: "djtraining", + version: version, + play_style: ClidToPlaySide(clid), + + tier: tier, + part: part, + midx: midx, + }); + let cflag = _.isNil(djt_data) ? cflg : Math.max(cflg, djt_data.cflg); + + await DB.Upsert( + refid, + { + collection: "djtraining", + version: version, + play_style: ClidToPlaySide(clid), + + tier: tier, + part: part, + midx: midx, + }, + { + $set: { + cflg: cflag, + } + } + ); + } + let shop_rank = -1, shop_rank_data = []; let scores: any[][]; scores = ( @@ -826,6 +1161,7 @@ export const musicreg: EPR = async (info, data, send) => { crate: String(crate), frate: String(frate), rankside: String(style), + bestScore: String(update), }, ranklist: { "@attr": { total_user_num: String(shop_rank_data.length) }, @@ -834,7 +1170,18 @@ export const musicreg: EPR = async (info, data, send) => { shopdata: K.ATTR({ rank: String(shop_rank) }), } - return send.object(result); + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result["@attr"]["method"] = "musicreg"; + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }; + } + + return send.object(result, sendOption); } export const musicbreg: EPR = async (info, data, send) => { @@ -849,6 +1196,8 @@ export const musicbreg: EPR = async (info, data, send) => { let clid = 0; // SP BEGINNER // let exscore = (pgnum * 2 + gnum); + if (mid < 0) return send.deny(); + if (version < 20) mid = OldMidToNewMid(mid); const music_data: score | null = await DB.FindOne(refid, { @@ -921,15 +1270,28 @@ export const musicbreg: EPR = async (info, data, send) => { } ); + if (version < 14) { + return send.object({ + "@attr": { + method: "musicbreg", + } + }, { + rootName: GetModel(info), + format: false, + header: false, + }) + } + return send.success(); }; export const musiccrate: EPR = async (info, data, send) => { const version = GetVersion(info); + const command = GetCommand(data); const scores = await DB.Find(null, { collection: "score", }); - const cltype = Number($(data).attr().cltype); + const cltype = version < 13 ? Number(command[1]) : Number($(data).attr().cltype); let cFlgs: Record = {}, fcFlgs: Record = {}, @@ -938,6 +1300,7 @@ export const musiccrate: EPR = async (info, data, send) => { scores.forEach((res) => { let mVersion = Math.floor(res.mid / 1000); if (mVersion > version) return; + if (res.mid < 0) return; let totalArray = Array(10).fill(0); let cFlgArray = Array(10).fill(0); @@ -974,17 +1337,26 @@ export const musiccrate: EPR = async (info, data, send) => { } } - let indices = [1, 2, 3, 6, 7, 8]; - if (version == 14 || version == 15) { - let verMid = OldMidToVerMid(Number(key)); - - let str = cltype == 0 ? - `${NumArrayToString([7, 7, 7, 7], [verMid[1], cRate[1], cRate[2], cRate[3]])}ZZZZ` : - `${NumArrayToString([7, 7, 7, 7], [verMid[1], cRate[6], cRate[7], cRate[8]])}ZZZZ`; - - cdata.push( - K.ITEM("str", str, { ver: String(verMid[0]) }) - ); + let indices = [1, 2, 3, 6, 7, 8], mapValue = null; + if (version < 16) { + indices = cltype == 0 ? [1, 2, 3] : [6, 7, 8]; + if (version < 12) { + indices = cltype === 0 ? [2, 1, 3] : [7, 6, 8]; + mapValue = (x => indices.indexOf(x) + (cltype === 0 ? 0 : 3)); + for (let a = 0; a < indices.length; a++) { + cdata.push( + K.ITEM("str", NumArrayToString([11, 7], [Number(key), cRate[indices[a]]]), { + clid: String(mapValue(indices[a])), + }), + ); + } + } else { + let verMid = OldMidToVerMid(Number(key)); + let str = `${NumArrayToString([7, 7, 7, 7], [verMid[1], ...indices.map(i => cRate[i])])}ZZZZ`; + cdata.push( + K.ITEM("str", str, { ver: String(verMid[0]) }) + ); + } } else { let rateArray = version < 27 ? [...indices.map(i => cRate[i]), ...indices.map(i => fcRate[i])] : [...cRate, ...fcRate]; @@ -994,9 +1366,23 @@ export const musiccrate: EPR = async (info, data, send) => { } } - result = (version == 14 || version == 15) ? { cdata } : { c }; + result = (version < 16) ? { cdata } : { c }; - return send.object(result); + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result = { + "@attr": { method: "musiccrate" }, + ...result + }; + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }; + } + + return send.object(result, sendOption); } // this is not valid response // diff --git a/iidx@asphyxia/handlers/pc.ts b/iidx@asphyxia/handlers/pc.ts index b20f6c1..fe166f2 100644 --- a/iidx@asphyxia/handlers/pc.ts +++ b/iidx@asphyxia/handlers/pc.ts @@ -1,25 +1,48 @@ -import { pcdata, KDZ_pcdata, IIDX27_pcdata, IIDX28_pcdata, IIDX29_pcdata, IIDX30_pcdata, JDZ_pcdata, LDJ_pcdata, IIDX21_pcdata, IIDX22_pcdata, IIDX23_pcdata, IIDX24_pcdata, IIDX25_pcdata, IIDX26_pcdata, JDJ_pcdata, HDD_pcdata, I00_pcdata, GLD_pcdata, IIDX31_pcdata, IIDX32_pcdata } from "../models/pcdata"; +import { pcdata, KDZ_pcdata, IIDX27_pcdata, IIDX28_pcdata, IIDX29_pcdata, IIDX30_pcdata, JDZ_pcdata, LDJ_pcdata, IIDX21_pcdata, IIDX22_pcdata, IIDX23_pcdata, IIDX24_pcdata, IIDX25_pcdata, IIDX26_pcdata, JDJ_pcdata, HDD_pcdata, I00_pcdata, GLD_pcdata, IIDX31_pcdata, IIDX32_pcdata, IIDX33_pcdata, FDD_pcdata, ECO_pcdata, E11_pcdata, D01_pcdata } from "../models/pcdata"; import { grade } from "../models/grade"; import { custom, default_custom } from "../models/custom"; -import { IDtoCode, IDtoRef, GetVersion, ReftoProfile, ReftoPcdata, ReftoQPRO, appendSettingConverter, NumArrayToString, GetWeekId } from "../util"; +import { IDtoCode, IDtoRef, GetVersion, ReftoProfile, ReftoPcdata, ReftoQPRO, appendSettingConverter, NumArrayToString, GetModel, GetCommand, NumArrayToHex } from "../util"; import { eisei_grade, eisei_grade_data, lightning_custom, lightning_musicfilter, lightning_musicfilter_sort, lightning_musicmemo, lightning_musicmemo_new, lightning_playdata, lightning_settings, lm_customdata, lm_playdata, lm_settings, lm_settings_new, musicfilter_data, musicfilter_sort_data, musicmemo_data, musicmemo_data_new } from "../models/lightning"; import { profile, default_profile } from "../models/profile"; -import { rival, rival_data } from "../models/rival"; +import { rival, rival_data, rival_sub } from "../models/rival"; import { world_tourism } from "../models/worldtourism"; import { shop_data } from "../models/shop"; import { tutorial } from "../models/tutorial"; import { expert } from "../models/ranking"; import { blueboss } from "../models/event"; -import { badge } from "../models/badge"; +import { badge, badgeBaseMap, badgeVersionMap } from "../models/badge"; import { extra_favorite } from "../models/favorite"; import { activity, activity_mybest } from "../models/activity"; import { extra_boss } from "../models/extraboss"; +import { djtraining } from "../models/djtraining"; + +export const pcmethod: EPR = async (info, data, send) => { + const command = GetCommand(data); + switch (command[0]) { + case "common": + return await pccommon(info, data, send); + case "reg": + return await pcreg(info, data, send); + case "get": + return await pcget(info, data, send); + case "save": + return await pcsave(info, data, send); + + default: + break; + } + + return send.deny({ format: false, header: false }); +} export const pccommon: EPR = async (info, data, send) => { const version = GetVersion(info); let result: any = { - "@attr": { expire: 300 }, + "@attr": { + expire: String(300), + ls: String(0), // have no idea what this value does // + }, ir: K.ATTR({ beat: String(U.GetConfig("BeatPhase")) }), expert: K.ATTR({ phase: String(U.GetConfig("ExpertPhase")) }), expert_random_secret: K.ATTR({ phase: String(U.GetConfig("ExpertRandomPhase")) }), @@ -29,6 +52,18 @@ export const pccommon: EPR = async (info, data, send) => { // have no idea what some of attribute or value does // // exposing these to plugin setting or use static value // switch (version) { + case 10: + break; + case 11: + result["@attr"].tf = 1; + result["@attr"].csok = 1; + break; + case 12: + result["@attr"].tf = 1; + result["@attr"].beok = 1; + break; + case 13: + break; case 14: result = Object.assign(result, { gshop: { @@ -321,6 +356,8 @@ export const pccommon: EPR = async (info, data, send) => { display_asio_logo: {}, lane_gacha: {}, tourism_booster: {}, + fix_framerate: {}, + fix_real: {}, }); break; case 32: @@ -337,48 +374,12 @@ export const pccommon: EPR = async (info, data, send) => { season: [ { "@attr": { - season: String(0), + season: String(0), // 0 -> 4 // s_m: String(0), s_f: String(0), e_m: String(0), e_f: String(0), } - }, - { - "@attr": { - season: String(1), - s_m: String(1), - s_f: String(0), - e_m: String(0), - e_f: String(0), - } - }, - { - "@attr": { - season: String(2), - s_m: String(1), - s_f: String(1), - e_m: String(0), - e_f: String(0), - } - }, - { - "@attr": { - season: String(3), - s_m: String(1), - s_f: String(1), - e_m: String(1), - e_f: String(0), - } - }, - { - "@attr": { - season: String(4), - s_m: String(1), - s_f: String(1), - e_m: String(1), - e_f: String(1), - } } ] },*/ @@ -387,31 +388,129 @@ export const pccommon: EPR = async (info, data, send) => { display_asio_logo: {}, lane_gacha: {}, tourism_booster: {}, - disable_same_triger: K.ATTR({ frame: String(0) }), - //fps_fix: {}, - //fix_framerate: {}, + fix_framerate: {}, fix_real: {}, }); break; + case 33: + result = Object.assign(result, { + movie_agreement: K.ATTR({ version: String(1) }), + license: { + string: K.ITEM("bin", Buffer.alloc(0)), // TODO:: figure out what this does (alloc size: 600) // + }, + movie_upload: K.ATTR({ url: String(U.GetConfig("MovieUpload")) }), + vip_pass_black: {}, + deller_bonus: K.ATTR({ open: String(1) }), + common_evnet: K.ATTR({ flg: String(-1) }), + /*system_voice: { + season: [ + { + "@attr": { + season: String(0), // 0 -> 4 // + s_a: String(0), + s_b: String(0), + s_c: String(0), + e_a: String(0), + e_b: String(0), + e_c: String(0), + } + } + ] + },*/ + play_video: {}, + music_retry: {}, + display_asio_logo: {}, + lane_gacha: {}, + tourism_booster: {}, + fix_framerate: {}, + fix_real: {}, + disable_cardless: {}, + }); + break; default: return send.deny(); } - return send.object(result); + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result["@attr"]["method"] = "pccommon"; + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }; + } + + return send.object(result, sendOption); }; export const pcreg: EPR = async (info, data, send) => { const version = GetVersion(info); - const id = _.random(10000000, 99999999); - const idstr = IDtoCode(id); - const refid = $(data).attr().rid; + const command = GetCommand(data); + const refid = version < 13 ? command[1].split('|')[0] : $(data).attr().rid; + const profile = await DB.FindOne(refid, { collection: "profile" }); + const myPcdata = await DB.FindOne(refid, { collection: "pcdata", version: version }); + + let name = version < 13 ? command[2] : $(data).attr().name; + let pid = Number($(data).attr().pid); + let id = _.random(10000000, 99999999); + let idstr = IDtoCode(id); + let updateProfile = true; + if (version < 14 && !_.isNil(profile)) { + updateProfile = false; + } + + if (version < 11 && !_.isNil(myPcdata)) { + await DB.Upsert( + refid, + { + collection: "pcdata", + version: version, + }, + { + $set: { + spnum: Number(command[4]), + sflg0: Number(command[5]), + ctype: Number(command[6]), + sach: Number(command[7]), + dach: Number(command[8]), + }, + } + ); + + if (version < 14) { + return send.object({ + "@attr": { + method: "pcreg", + }, + }, { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }); + } + } let pcdata: object; let lightning_settings: object; let lightning_playdata: object; let lightning_custom: object; switch (version) { + case 10: + pcdata = D01_pcdata; + break; + case 11: + pcdata = E11_pcdata; + break; + case 12: + pcdata = ECO_pcdata; + break; + case 13: + pcdata = FDD_pcdata; + break; case 14: pcdata = GLD_pcdata; break; @@ -486,26 +585,34 @@ export const pcreg: EPR = async (info, data, send) => { lightning_settings = lm_settings_new; lightning_custom = lm_customdata; break; + case 33: + pcdata = IIDX33_pcdata; + lightning_playdata = lm_playdata; + lightning_settings = lm_settings_new; + lightning_custom = lm_customdata; + break; default: return send.deny(); } - await DB.Upsert( - refid, - { - collection: "profile", - }, - { - $set: { - name: $(data).attr().name, - pid: Number($(data).attr().pid), - id, - idstr, - ...default_profile, + if (updateProfile) { + await DB.Upsert( + refid, + { + collection: "profile", + }, + { + $set: { + name, + pid, + id, + idstr, + ...default_profile, + } } - } - ); + ); + } await DB.Upsert( refid, @@ -552,16 +659,31 @@ export const pcreg: EPR = async (info, data, send) => { } ); - await DB.Upsert( - refid, - { - collection: "lightning_custom", - version: version, + if (version > 27) { + await DB.Upsert( + refid, + { + collection: "lightning_custom", + version: version, + }, + { + $set: lightning_custom, + } + ); + } + } + + if (version < 14) { + return send.object({ + "@attr": { + method: "pcreg", }, - { - $set: lightning_custom, - } - ); + }, { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }); } return send.object( @@ -574,13 +696,16 @@ export const pcreg: EPR = async (info, data, send) => { export const pcget: EPR = async (info, data, send) => { const version = GetVersion(info); - const refid = $(data).attr().rid; + const command = GetCommand(data); + const refid = version < 13 ? command[1].split('|')[0] : $(data).attr().rid; + const play_style = version < 13 ? Number(GetCommand(data)[2]) : -1; const profile = await DB.FindOne(refid, { collection: "profile" }); const pcdata = await DB.FindOne(refid, { collection: "pcdata", version: version }); const custom = await DB.FindOne(refid, { collection: "custom", version: version }); const grade = await DB.Find(refid, { collection: "grade", version: version }); const rivals = await DB.Find(refid, { collection: "rival" }); + const rivals_sub = await DB.Find(refid, { collection: "rival_sub" }); const shop_data = await DB.FindOne({ collection: "shop_data" }); const expert = await DB.Find(refid, { collection: "expert", version: version }); const world_tourism = await DB.Find(refid, { collection: "world_tourism", version: version }); @@ -596,46 +721,96 @@ export const pcget: EPR = async (info, data, send) => { const lm_music_filter_sort = await DB.Find(refid, { collection: "lightning_musicfilter_sort", version: version }); let lm_custom: any = await DB.FindOne(refid, { collection: "lightning_custom", version: version }); - if (_.isNil(pcdata)) return send.deny(); + // since happy sky and below does not use cardmng deny if theres no profile avaialble // + if (version < 13 && _.isNil(profile)) return send.deny(); - // migration // - if (_.isNil(custom.disable_beginner_option)) { - await DB.Upsert(refid, - { - collection: "custom", - version: version, - }, - { - $set: { - disable_beginner_option: false, + if (_.isNil(pcdata)) { + if (version < 14) { + return send.object({ + "@attr": { + method: "pcget" } - } - ); + }, { + rootName: GetModel(info), + status: version < 13 ? "ENOCARDID" : 1, + format: false, + header: false, + }); + } - custom.disable_beginner_option = false; + return send.deny(); } // migration // - if (version >= 28 && _.isNil(lm_custom)) { - await DB.Upsert(refid, - { - collection: "lightning_custom", - version: version, - }, - { - $set: lm_customdata, + { + // add disable_beginner_option // + if (_.isNil(custom.disable_beginner_option)) { + await DB.Upsert(refid, + { + collection: "custom", + version: version, + }, + { + $set: { + disable_beginner_option: false, + } + } + ); + + custom.disable_beginner_option = false; + } + + // add default lightning custom data // + if (version >= 28 && _.isNil(lm_custom)) { + await DB.Upsert(refid, + { + collection: "lightning_custom", + version: version, + }, + { + $set: lm_customdata, + } + ); + + lm_custom = lm_customdata; + } + + // add missing djrank elements // + if (version == 29 && _.isNil(pcdata.dr_sprank)) { + pcdata.dr_sprank = IIDX29_pcdata.dr_sprank; + pcdata.dr_sppoint = IIDX29_pcdata.dr_sppoint; + pcdata.dr_dprank = IIDX29_pcdata.dr_dprank; + pcdata.dr_dppoint = IIDX29_pcdata.dr_dppoint; + } + + // fix HARD / EXHARD step up folder // + if (version >= 32) { + if (pcdata.st_sp_level > 0 && pcdata.st_sp_level_h == 0) pcdata.st_sp_level_h = -1; + if (pcdata.st_sp_level > 0 && pcdata.st_sp_level_exh == 0) pcdata.st_sp_level_exh = -1; + if (pcdata.st_dp_level > 0 && pcdata.st_dp_level_h == 0) pcdata.st_dp_level_h = -1; + if (pcdata.st_dp_level > 0 && pcdata.st_dp_level_exh == 0) pcdata.st_dp_level_exh = -1; + } + + // fix event crash // + if (pcdata.event_last_select_id == -1) { + pcdata.event_last_select_id = 0; + } + + if (version == 33) { // temp // + if (_.isNil(custom.cn_color)) { + custom.cn_color = 0; + custom.cn_size = 0; } - ); - lm_custom = lm_customdata; - } + if (_.isNil(lm_custom.premium_bg_concent)) { + lm_custom.premium_bg_concent = 0; + } - // migration // - if (version == 29 && _.isNil(pcdata.dr_sprank)) { - pcdata.dr_sprank = IIDX29_pcdata.dr_sprank; - pcdata.dr_sppoint = IIDX29_pcdata.dr_sppoint; - pcdata.dr_dprank = IIDX29_pcdata.dr_dprank; - pcdata.dr_dppoint = IIDX29_pcdata.dr_dppoint; + if (_.isNil(lm_custom.entry_bg)) { + lm_custom.entry_bg = 0; + lm_custom.entry_bg_brightness = 0; + } + } } // temporary solution until figure out why this happening on others // @@ -659,7 +834,10 @@ export const pcget: EPR = async (info, data, send) => { custom.hide_iidxid, custom.disable_beginner_option, ); - let dArray = [], eArray = [], rArray = [], mArray = [], bArray = [], fArray = [], fsArray = [], efArray = []; + let dArray = [], eArray = [], rArray = [], + rsArray = [], mArray = [], bArray = [], + fArray = [], fsArray = [], efArray = [], + exArray = []; grade.forEach((res: grade) => { dArray.push([res.style, res.gradeId, res.maxStage, res.archive]); @@ -703,6 +881,27 @@ export const pcget: EPR = async (info, data, send) => { rArray.sort((a: rival_data, b: rival_data): number => a.play_style - b.play_style || a.index - b.index); } + if (rivals_sub.length > 0) { + for (let a = 0; a < rivals_sub.length; a++) { + let profile = await ReftoProfile(rivals_sub[a].rival_refid); + let pcdata = await ReftoPcdata(rivals_sub[a].rival_refid, version); + let qprodata = await ReftoQPRO(rivals_sub[a].rival_refid, version); + + let rival_data: rival_data = { + play_style: rivals_sub[a].play_style, + index: rivals_sub[a].index, + + profile: profile, + pcdata: pcdata, + qprodata: qprodata, + } + + rsArray.push(rival_data); + } + + rsArray.sort((a: rival_data, b: rival_data): number => a.play_style - b.play_style || a.index - b.index); + } + let wArray = []; if (world_tourism.length > 0) { for (let wt of world_tourism) { @@ -716,8 +915,117 @@ export const pcget: EPR = async (info, data, send) => { wArray.sort((a, b) => a.tour_id - b.tour_id); } - let event, gradeStr = "", exStr = "", skinStr = ""; - if (version == 14) { + let event, party, gradeStr = "", exStr = "", skinStr = ""; + const style = version < 13 ? Number(command[2]) : -1; + const maxStage = version < 13 ? (style == 0 ? 4 : 3) : -1; + if (version == 10) { + dArray.forEach((res) => { + if (res[0] != style) return; + gradeStr += NumArrayToHex([8, 4, 8], [res[1], res[2], res[3]]); + }); + + expert.sort((a: expert, b: expert) => a.coid - b.coid); + expert.forEach((res) => { + for (let a = 0; a < 6; a++) { + exArray.push({ + clid: a, + coid: res.coid, + cflg: res.cArray[a] == 1 ? 5 : 0, // cflg == cstage // + pgnum: res.pgArray[a], + gnum: res.gArray[a], + }); + } + }); + + return send.pugFile("pug/D01/pcget.pug", { + profile, + pcdata, + gradeStr, + exArray, + }); + } + else if (version == 11) { + dArray.forEach((res) => { + if (res[0] != style) return; + gradeStr += NumArrayToString([5, 7, 6], [res[1], res[3], maxStage == res[2] ? 1 : 0]); + }); + + expert.sort((a: expert, b: expert) => a.coid - b.coid); + expert.forEach((res) => { + for (let a = 0; a < 6; a++) { + exStr += NumArrayToString([6, 5, 1], [res.coid, a, res.cArray[a]]); + exStr += NumArrayToString([18], [res.pgArray[a]]); + exStr += NumArrayToString([18], [res.gArray[a]]); + } + }); + + skinStr += NumArrayToString([12], [custom.frame, custom.turntable, custom.note_burst, custom.menu_music, appendsettings, custom.lane_cover]); + + rArray = rArray.filter((res: rival) => res.play_style == (play_style + 1)); + + return send.pugFile("pug/E11/pcget.pug", { + profile, + pcdata, + gradeStr, + exStr, + skinStr, + rArray, + }); + } + else if (version == 12) { + dArray.forEach((res) => { + if (res[0] != style) return; + gradeStr += NumArrayToString([5, 7, 6], [res[1], res[3], maxStage == res[2] ? 1 : 0]); + }); + + expert.sort((a: expert, b: expert) => a.coid - b.coid); + expert.forEach((res) => { + for (let a = 0; a < 6; a++) { + exStr += NumArrayToString([6, 5, 1], [res.coid, a, res.cArray[a]]); + exStr += NumArrayToString([18], [res.pgArray[a]]); + exStr += NumArrayToString([18], [res.gArray[a]]); + } + }); + + skinStr += NumArrayToString([12], [custom.frame, custom.turntable, custom.note_burst, custom.menu_music, appendsettings, custom.lane_cover]); + + rArray = rArray.filter((res: rival) => res.play_style == (play_style + 1)); + + return send.pugFile("pug/ECO/pcget.pug", { + profile, + pcdata, + gradeStr, + exStr, + skinStr, + rArray, + }); + } + else if (version == 13) { + dArray.forEach((res) => { + gradeStr += NumArrayToString([6, 3, 2, 7], [res[1], res[2], res[0], res[3]]); + }); + + expert.sort((a: expert, b: expert) => a.coid - b.coid); + expert.forEach((res) => { + for (let a = 0; a < 6; a++) { + exStr += NumArrayToString([6, 5, 1], [res.coid, a, res.cArray[a]]); + exStr += NumArrayToString([18], [res.pgArray[a]]); + exStr += NumArrayToString([18], [res.gArray[a]]); + } + }); + + skinStr += NumArrayToString([12], [custom.frame, custom.turntable, custom.note_burst, custom.menu_music, appendsettings, custom.lane_cover, 0, custom.category_vox]); + + return send.pugFile("pug/FDD/pcget.pug", { + profile, + pcdata, + gradeStr, + exStr, + skinStr, + rArray, + }); + } + else if (version == 14) { dArray.forEach((res) => { gradeStr += NumArrayToString([6, 3, 2, 7], [res[1], res[2], res[0], res[3]]); }); @@ -821,6 +1129,11 @@ export const pcget: EPR = async (info, data, send) => { ); } + party = await DB.FindOne(refid, { collection: "party", version: version }); + if (!_.isNil(party)) { + party.cflg = Buffer.from(party.cflg, "base64").toString("hex"); + } + event = await DB.FindOne(refid, { collection: "event_1", version: version }); if (!_.isNil(event)) { event.cf = Buffer.from(event.cf, "base64").toString("hex"); @@ -835,6 +1148,7 @@ export const pcget: EPR = async (info, data, send) => { appendsettings, custom, rArray, + party, event, }); } @@ -911,6 +1225,11 @@ export const pcget: EPR = async (info, data, send) => { pinky_ug = null, pinky_ug_hall = [], pinky_ug_qpro = [], + sparkle_fl_room = [], + sparkle_fl_crop = [], + sparkle_vocalo = null, + sparkle_extra_boss = null, + sparkle_extra_boss_play = [], event_1 = null, event_1s = null, evtArray = [], evtArray2 = [], evtArray3 = [], @@ -1042,6 +1361,13 @@ export const pcget: EPR = async (info, data, send) => { pinky_ug_hall = await DB.Find(refid, { collection: "event_1_sub", version: version, event_data: "pinkyunderground_hall" }); pinky_ug_qpro = await DB.Find(refid, { collection: "event_1_sub", version: version, event_data: "pinkyunderground_hall_qpro" }); break; + case 33: + sparkle_fl_room = await DB.Find(refid, { collection: "event_1", version: version, event_data: "sparkle_fruit_lab" }); + sparkle_fl_crop = await DB.Find(refid, { collection: "event_1_sub", version: version, event_data: "sparkle_fruit_lab_crop" }); + sparkle_vocalo = await DB.FindOne(refid, { collection: "event_1", version: version, event_data: "sparkle_vocalo" }); + sparkle_extra_boss = await DB.FindOne(refid, { collection: "extra_boss", version: version }); + sparkle_extra_boss_play = await DB.Find(refid, { collection: "extra_boss_play", version: version }); + break; default: event_1 = await DB.Find(refid, { collection: "event_1", version: version }); @@ -1184,150 +1510,20 @@ export const pcget: EPR = async (info, data, send) => { ***/ if (version >= 30 && badge.length > 0) { - let djLevel, clear, grade, step_up, visitor, notes_radar, world_tourism, event1, event2; + const badgeData = { + ...badgeBaseMap, + ...(badgeVersionMap[version] ?? badgeVersionMap.default), + }; - // visitor, notes_radar, world_tourism, step_up // - if (version == 30) { - // this keep sending back on save // - // possibly wrong category_id but at least doesn't show as new badges // - visitor = badge.filter((res) => res.category_name === "visitor"); - visitor.forEach((res) => { + badge.forEach(res => { + const id = badgeData[res.category_name]; + if (id !== undefined) { bArray.push({ - id: 6, + id, flg_id: res.flg_id, flg: res.flg, }); - }); - - notes_radar = badge.filter((res) => res.category_name === "notes_radar"); - notes_radar.forEach((res) => { - bArray.push({ - id: 7, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - world_tourism = badge.filter((res) => res.category_name === "world_tourism"); - world_tourism.forEach((res) => { - bArray.push({ - id: 8, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - } else { - step_up = badge.filter((res) => res.category_name === "step_up"); - step_up.forEach((res) => { - bArray.push({ - id: 3, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - // this keep sending back on save // - // possibly wrong category_id but at least doesn't show as new badges // - visitor = badge.filter((res) => res.category_name === "visitor"); - visitor.forEach((res) => { - bArray.push({ - id: 7, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - notes_radar = badge.filter((res) => res.category_name === "notes_radar"); - notes_radar.forEach((res) => { - bArray.push({ - id: 8, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - world_tourism = badge.filter((res) => res.category_name === "world_tourism"); - world_tourism.forEach((res) => { - bArray.push({ - id: 12, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - } - - // event // - switch (version) { - case 30: - event1 = badge.filter((res) => res.category_name === "event1"); - event1.forEach((res) => { - bArray.push({ - id: 9, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - break; - case 31: - event1 = badge.filter((res) => res.category_name === "event1"); - event1.forEach((res) => { - bArray.push({ - id: 13, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - event2 = badge.filter((res) => res.category_name === "event2"); - event2.forEach((res) => { - bArray.push({ - id: 16, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - break; - case 32: - event1 = badge.filter((res) => res.category_name === "event1"); - event1.forEach((res) => { - bArray.push({ - id: 13, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - break; - - default: - break; - } - - // default // - djLevel = badge.filter((res) => res.category_name === "djLevel"); - djLevel.forEach((res) => { - bArray.push({ - id: 0, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - clear = badge.filter((res) => res.category_name === "clear"); - clear.forEach((res) => { - bArray.push({ - id: 1, - flg_id: res.flg_id, - flg: res.flg, - }); - }); - - grade = badge.filter((res) => res.category_name === "grade"); - grade.forEach((res) => { - bArray.push({ - id: 2, - flg_id: res.flg_id, - flg: res.flg, - }); + } }); bArray.sort((a, b) => a.id - b.id || a.flg_id - b.flg_id); @@ -1629,6 +1825,26 @@ export const pcget: EPR = async (info, data, send) => { }); }); + // TODO:: figure out display step/tier on profile // + let djtraining_data = JSON.parse(await IO.ReadFile("data/djtraining.json", "utf-8")); + const djtraining_save = await DB.Find(refid, { + collection: "djtraining", + version: version, + }); + let djtraining_sp = null; + let djtraining_dp = null; + + if (!_.isNil(djtraining_data[version])) { + djtraining_sp = djtraining_data[version][0]; + djtraining_dp = djtraining_data[version][1]; + + if (!_.isNil(djtraining_save)) { + djtraining_save.forEach((res) => { + djtraining_data[version][res.play_style][res.tier][res.part].cflg[res.midx] = res.cflg; + }); + } + } + let result: any = { profile, pcdata, @@ -1701,14 +1917,29 @@ export const pcget: EPR = async (info, data, send) => { pinky_ug_qpro, }); break; + case 33: + result = Object.assign(result, { + sparkle_fl_room, + sparkle_fl_crop, + sparkle_vocalo, + sparkle_extra_boss, + sparkle_extra_boss_play, + }); + break; default: break; } switch (version) { + case 33: + result = Object.assign(result, { + djtraining_sp, + djtraining_dp, + }); case 32: result = Object.assign(result, { + rsArray, fsArray, activityDayId, activityTimestamp, @@ -1744,7 +1975,9 @@ export const pcget: EPR = async (info, data, send) => { evtArray2, evtArray3, }); - default: break; + + default: + break; } return send.pugFile(`pug/LDJ/${version}pcget.pug`, result); @@ -1862,6 +2095,12 @@ export const pctakeover: EPR = async (info, data, send) => { lightning_settings = lm_settings_new; lightning_custom = lm_customdata; break; + case 33: + pcdata = IIDX33_pcdata; + lightning_playdata = lm_playdata; + lightning_settings = lm_settings_new; + lightning_custom = lm_customdata; + break; default: return send.deny(); @@ -1912,16 +2151,18 @@ export const pctakeover: EPR = async (info, data, send) => { } ); - await DB.Upsert( - refid, - { - collection: "lightning_custom", - version: version, - }, - { - $set: lightning_custom, - } - ); + if (version > 27) { + await DB.Upsert( + refid, + { + collection: "lightning_custom", + version: version, + }, + { + $set: lightning_custom, + } + ); + } } return send.object( @@ -1937,16 +2178,17 @@ export const pcvisit: EPR = async (info, data, send) => { anum: "10", snum: "10", pnum: "10", - aflg: "0", - sflg: "0", - pflg: "0", + aflg: "1", + sflg: "1", + pflg: "1", }) ); }; export const pcsave: EPR = async (info, data, send) => { const version = GetVersion(info); - const refid = await IDtoRef(Number($(data).attr().iidxid)); + const command = GetCommand(data); + const refid = version < 13 ? await IDtoRef(Number(command[1])) : await IDtoRef(Number($(data).attr().iidxid)); const cltype = Number($(data).attr().cltype); // 0 -> SP, 1 -> DP // if (version == -1) return send.deny(); @@ -1968,14 +2210,21 @@ export const pcsave: EPR = async (info, data, send) => { const hasTDJSettings = !(_.isNil($(data).element("lightning_setting"))); const hasMusicMemo = !(_.isNil($(data).element("music_memo"))); const hasTowerData = !(_.isNil($(data).element("tower_data"))); - const hasSkinData = !(_.isNil($(data).element("skin_equip"))); - const hasTDJSkinData = !(_.isNil($(data).element("tdjskin_equip"))); + const hasSkinData = !(_.isNil($(data).element("skin_equip"))) || !(_.isNil($(data).element("pskin_equip"))); + const hasTDJSkinData = !(_.isNil($(data).element("tdjskin_equip"))) || !(_.isNil($(data).element("vskin_equip"))); + const hasVisualSkinData = !(_.isNil($(data).element("vskin_customize_setting"))); const hasMusicFilter = !(_.isNil($(data).element("music_filter"))); const hasBadgeData = !(_.isNil($(data).element("badge"))); const hasActivityData = !(_.isNil($(data).element("activity_data"))); - if (cltype == 0) pcdata.spnum += 1; - else pcdata.dpnum += 1; + if (version < 13) { + // attr[2] is unknown // + pcdata.spnum = Number(command[5]); + pcdata.dpnum = Number(command[6]); + } else { + if (cltype == 0) pcdata.spnum += 1; + else pcdata.dpnum += 1; + } if (isTDJ) { if (cltype == 0) lm_playdata.sp_num += 1; @@ -1991,6 +2240,18 @@ export const pcsave: EPR = async (info, data, send) => { lm_settings.light = $(data).element("lightning_setting").numbers("light"); lm_settings.concentration = $(data).element("lightning_setting").number("concentration"); + if (version >= 31) { + lm_settings.keyboard_kind = Number($(data).attr("lightning_setting").keyboard_kind); + lm_settings.brightness = version < 33 ? Number($(data).attr("lightning_setting").brightness) : Number($(data).attr("lightning_setting").brightness_bg); + + if (version >= 33) { + lm_settings.brightness_concent = Number($(data).attr("lightning_setting").brightness_concentration); + lm_settings.assistant_disp_type = Number($(data).attr("lightning_setting").assistant_disp_type); + lm_settings.assistant_last_tab = Number($(data).attr("lightning_setting").assistant_last_tab); + lm_settings.assistant_chara = Number($(data).attr("lightning_setting").assistant_chara); + } + } + await DB.Upsert( refid, { @@ -2009,7 +2270,39 @@ export const pcsave: EPR = async (info, data, send) => { pcdata.mode = Number($(data).attr().mode); pcdata.pmode = Number($(data).attr().pmode); - if (version == 14) { + if (version == 11) { + pcdata.sach = Number(command[3]); + pcdata.dach = Number(command[4]); + pcdata.gno = Number(command[7]); + pcdata.sflg0 = Number(command[8]); + pcdata.pflg = Number(command[9]); + } + else if (version == 12) { + pcdata.sach = Number(command[3]); + pcdata.dach = Number(command[4]); + pcdata.gno = Number(command[7]); + pcdata.sflg0 = Number(command[8]); + } + else if (version == 13) { + if (cltype == 0) { + pcdata.sach = Number($(data).attr().achi); + pcdata.sp_opt = Number($(data).attr().opt); + } + else { + pcdata.dach = Number($(data).attr().achi); + pcdata.dp_opt = Number($(data).attr().opt); + pcdata.dp_opt2 = Number($(data).attr().opt2); + } + + pcdata.gno = Number($(data).attr().gno); + pcdata.sflg0 = Number($(data).attr().sflg0); + pcdata.sflg1 = Number($(data).attr().sflg1); + pcdata.sflg2 = Number($(data).attr().sflg2); + pcdata.sdhd = Number($(data).attr().sdhd); + pcdata.ncomb = Number($(data).attr().ncomb); + pcdata.mcomb = Number($(data).attr().mcomb); + } + else if (version == 14) { if (cltype == 0) { pcdata.sach = Number($(data).attr().achi); pcdata.sp_opt = Number($(data).attr().opt); @@ -2171,7 +2464,28 @@ export const pcsave: EPR = async (info, data, send) => { pcdata.liflen = Number($(data).attr().lift); pcdata.fcombo[cltype] = Number($(data).attr().fcombo); - // TODO:: STORY/LEAGUE // + // TODO:: LEAGUE // + + // pc, pf seems to be not refered but save it for future purpose // + if (!_.isNil($(data).element("party"))) { + let party_data = { + ev: Number($(data).attr("party").ev), + dif: Number($(data).attr("party").dif), + pc: Number($(data).attr("party").pc), + pf: Number($(data).attr("party").pf), + cflg: $(data).buffer("party").toString("base64"), + } + + await DB.Upsert(refid, + { + collection: "party", + version: version, + }, + { + $set: party_data, + } + ); + } if (!_.isNil($(data).element("tour"))) { let event_data = { @@ -3782,7 +4096,8 @@ export const pcsave: EPR = async (info, data, send) => { pcdata.present_orb += Number($(data).attr("orb_data").present_orb); } - // skin_customize_flg (attr: skin_frame_flg, skin_bgm_flg, ...) // + // skin_customize_flg, pskin_customize_flg (attr: skin_frame_flg, skin_bgm_flg, ...) // + // tdjskin_customize_flg, vskin_customize_flg // // TODO:: fix event saving, these event savings hasn't fully tested // if (hasEventData) { @@ -3956,27 +4271,32 @@ export const pcsave: EPR = async (info, data, send) => { pcdata.s_tsujigiri_disp = Number($(data).attr().s_tsujigiri_disp); pcdata.d_tsujigiri_disp = Number($(data).attr().d_tsujigiri_disp); - if (version >= 28) { - pcdata.ngrade = Number($(data).attr().ngrade); - } - if (version >= 29) { - pcdata.s_auto_adjust = Number($(data).attr().s_auto_adjust); - pcdata.d_auto_adjust = Number($(data).attr().d_auto_adjust); - } - if (version >= 30) { - pcdata.s_timing_split = Number($(data).attr().s_timing_split); - pcdata.d_timing_split = Number($(data).attr().d_timing_split); - pcdata.s_visualization = Number($(data).attr().s_visualization); - pcdata.d_visualization = Number($(data).attr().d_visualization); - } - if (version >= 31) { - pcdata.s_classic_hispeed = Number($(data).attr().s_classic_hispeed); - pcdata.d_classic_hispeed = Number($(data).attr().d_classic_hispeed); - } - if (version >= 32) { - pcdata.category = Number($(data).attr().category); - pcdata.bgnflg = Number($(data).attr().bgnflg); - pcdata.movie_thumbnail = Number($(data).attr().movie_thumbnail); + switch (version) { + case 33: + pcdata.naviflg = Number($(data).attr().naviflg); + pcdata.bgnasst = Number($(data).attr().bgnasst); + pcdata.s_laneobj_brignt = Number($(data).attr().s_laneobj_brignt); + pcdata.d_laneobj_brignt = Number($(data).attr().d_laneobj_brignt); + case 32: + pcdata.category = Number($(data).attr().category); + pcdata.bgnflg = Number($(data).attr().bgnflg); + pcdata.movie_thumbnail = Number($(data).attr().movie_thumbnail); + case 31: + pcdata.s_classic_hispeed = Number($(data).attr().s_classic_hispeed); + pcdata.d_classic_hispeed = Number($(data).attr().d_classic_hispeed); + case 30: + pcdata.s_timing_split = Number($(data).attr().s_timing_split); + pcdata.d_timing_split = Number($(data).attr().d_timing_split); + pcdata.s_visualization = Number($(data).attr().s_visualization); + pcdata.d_visualization = Number($(data).attr().d_visualization); + case 29: + pcdata.s_auto_adjust = Number($(data).attr().s_auto_adjust); + pcdata.d_auto_adjust = Number($(data).attr().d_auto_adjust); + case 28: + pcdata.ngrade = Number($(data).attr().ngrade); + + default: + break; } if (cltype == 0) { @@ -4532,6 +4852,63 @@ export const pcsave: EPR = async (info, data, send) => { }); break; + case 33: + pcdata.event_play_num += 1; + pcdata.event_last_select_id = Number($(data).attr("event_1").last_select_room_id); + pcdata.event_skip = false; + + if (!_.isNil($(data).element("event_1").element("is_skip"))) { + pcdata.event_skip = true; + } + + $(data).element("event_1").elements("room_data").forEach((res) => { + event_data = { + room_id: res.attr().room_id, + play_num: res.attr().play_num, + play_num_uc: res.attr().play_num_uc, + play_num_ub: res.attr().play_num_ub, + clear_num: res.attr().clear_num, + last_select_crop_index: res.attr().last_select_crop_index, + room_prog: res.attr().room_prog, + soul: Number(res.bool("soul")), + clear: Number(res.bool("clear")), + } + + res.elements("room_crop_data").forEach((res) => { + DB.Upsert( + refid, + { + collection: "event_1_sub", + version: version, + event_data: "sparkle_fruit_lab_crop", + room_id: event_data.room_id, + index: res.attr().index, + }, + { + $set: { + act_normal: res.attr().act_normal, + act_shin: res.attr().act_shin, + act_gi: res.attr().act_gi, + act_tai: res.attr().act_tai, + first_type: res.attr().first_type, + }, + }); + }); + + DB.Upsert( + refid, + { + collection: "event_1", + version: version, + event_data: "sparkle_fruit_lab", + room_id: event_data.room_id + }, + { + $set: event_data, + }); + }); + break; + default: break; } @@ -4648,6 +5025,69 @@ export const pcsave: EPR = async (info, data, send) => { } } + if (version == 33) { + let vocaloEvt = $(data).element("event_v"); + if (!_.isNil(vocaloEvt)) { + DB.Upsert( + refid, + { + collection: "event_1", + version: version, + event_data: "sparkle_vocalo", + }, + { + $set: { + play_num: Number(vocaloEvt.attr().play_num), + last_select_music: Number(vocaloEvt.attr().last_select_music), + point_get: Number(vocaloEvt.attr().point_get), + point_use_0: Number(vocaloEvt.attr().point_use_0), + point_use_1: Number(vocaloEvt.attr().point_use_1), + booster_get: Number(vocaloEvt.attr().booster_get), + booster_use_0: Number(vocaloEvt.attr().booster_use_0), + booster_use_1: Number(vocaloEvt.attr().booster_use_1), + } + }); + } + + let extraBossEvt = $(data).element("extraboss_event"); + if (!_.isNil(extraBossEvt)) { + await DB.Upsert( + refid, + { + collection: "extra_boss", + version: version, + phase: Number(extraBossEvt.attr().phase) + }, + { + $set: { + progress: Number(extraBossEvt.attr().progress), + progress_point_score: Number(extraBossEvt.attr().progress_point_score), + progress_point_miss: Number(extraBossEvt.attr().progress_point_miss), + unlock_point: Number(extraBossEvt.attr().unlock_point), + } + }); + + $(data).elements("extraboss_play").forEach(res => { + DB.Upsert( + refid, + { + collection: "extra_boss_play", + version: version, + phase: Number(res.attr().phase), + gauge_level: Number(res.attr().gauge_level) + }, + { + $set: { + extra_play_num: Number(res.attr().extra_play_num), + extra_clear_num: Number(res.attr().extra_clear_num), + onemore_play_num: Number(res.attr().onemore_play_num), + onemore_clear_num: Number(res.attr().onemore_clear_num), + } + }); + }); + } + } + if (hasWorldTourism) { if (version >= 28) { $(data).elements("world_tourism_data").forEach((res) => { @@ -4721,333 +5161,128 @@ export const pcsave: EPR = async (info, data, send) => { let badge_data = []; let badge = $(data).element("badge"); - switch (version) { - case 30: - if (!(_.isNil(badge.element("today_recommend")))) { - let badgeInfo = { - category_id: "today_recommend", - flg_id: 0, - flg: Number(badge.element("today_recommend").attr().flg), - }; + if (!(_.isNil(badge.element("step_up")))) { + badge.elements("step_up").forEach((res) => { + let badgeInfo = { + category_id: "step_up", + flg_id: Number(res.attr().flg_id), + flg: Number(res.attr().flg), + }; - badge_data.push(badgeInfo); - } + badge_data.push(badgeInfo); + }); + } - if (!(_.isNil(badge.element("weekly_ranking")))) { - let badgeInfo = { - category_id: "weekly_ranking", - flg_id: 0, - flg: Number(badge.element("weekly_ranking").attr().flg), - }; + if (!(_.isNil(badge.element("today_recommend")))) { + let badgeInfo = { + category_id: "today_recommend", + flg_id: 0, + flg: Number(badge.element("today_recommend").attr().flg), + }; - badge_data.push(badgeInfo); - } + badge_data.push(badgeInfo); + } - if (!(_.isNil(badge.element("visitor")))) { - badge.elements("visitor").forEach((res) => { - let badgeInfo = { - category_id: "visitor", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; + if (!(_.isNil(badge.element("weekly_ranking")))) { + let badgeInfo = { + category_id: "weekly_ranking", + flg_id: 0, + flg: Number(badge.element("weekly_ranking").attr().flg), + }; - badge_data.push(badgeInfo); - }); - } + badge_data.push(badgeInfo); + } - if (!(_.isNil(badge.element("notes_radar")))) { - badge.elements("notes_radar").forEach((res) => { - let badgeInfo = { - category_id: "notes_radar", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; + if (!(_.isNil(badge.element("visitor")))) { + badge.elements("visitor").forEach((res) => { + let badgeInfo = { + category_id: "visitor", + flg_id: Number(res.attr().flg_id), + flg: Number(res.attr().flg), + }; - badge_data.push(badgeInfo); - }); - } + badge_data.push(badgeInfo); + }); + } - if (!(_.isNil(badge.element("world_tourism")))) { - let badgeInfo = { - category_id: "world_tourism", - flg_id: 0, - flg: Number(badge.element("world_tourism").attr().flg), - }; + if (!(_.isNil(badge.element("notes_radar")))) { + badge.elements("notes_radar").forEach((res) => { + let badgeInfo = { + category_id: "notes_radar", + flg_id: Number(res.attr().flg_id), + flg: Number(res.attr().flg), + }; - badge_data.push(badgeInfo); - } + badge_data.push(badgeInfo); + }); + } - if (!(_.isNil(badge.element("event1")))) { - badge.elements("event1").forEach((res) => { - let badgeInfo = { - category_id: "event1", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; + if (!(_.isNil(badge.element("tsujigiri")))) { + let badgeInfo = { + category_id: "tsujigiri", + flg_id: 0, + flg: Number(badge.element("tsujigiri").attr().flg), + }; - badge_data.push(badgeInfo); - }); - } + badge_data.push(badgeInfo); + } - if (!(_.isNil(badge.element("arena")))) { - badge.elements("arena").forEach((res) => { - let badgeInfo = { - category_id: "arena", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; + if (!(_.isNil(badge.element("iidx_exam")))) { + let badgeInfo = { + category_id: "iidx_exam", + flg_id: 0, + flg: Number(badge.element("iidx_exam").attr().flg), + }; - badge_data.push(badgeInfo); - }); - } + badge_data.push(badgeInfo); + } - if (!(_.isNil(badge.element("iidx_exam")))) { - let badgeInfo = { - category_id: "iidx_exam", - flg_id: 0, - flg: Number(badge.element("iidx_exam").attr().flg), - }; + if (!(_.isNil(badge.element("world_tourism")))) { + let badgeInfo = { + category_id: "world_tourism", + flg_id: 0, + flg: Number(badge.element("world_tourism").attr().flg), + }; - badge_data.push(badgeInfo); - } - break; - case 31: - if (!(_.isNil(badge.element("step_up")))) { - badge.elements("step_up").forEach((res) => { - let badgeInfo = { - category_id: "step_up", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; + badge_data.push(badgeInfo); + } - badge_data.push(badgeInfo); - }); - } + if (!(_.isNil(badge.element("arena")))) { + badge.elements("arena").forEach((res) => { + let badgeInfo = { + category_id: "arena", + flg_id: Number(res.attr().flg_id), + flg: Number(res.attr().flg), + }; - if (!(_.isNil(badge.element("today_recommend")))) { - let badgeInfo = { - category_id: "today_recommend", - flg_id: 0, - flg: Number(badge.element("today_recommend").attr().flg), - }; + badge_data.push(badgeInfo); + }); + } - badge_data.push(badgeInfo); - } + if (!(_.isNil(badge.element("event1")))) { + badge.elements("event1").forEach((res) => { + let flg_id = _.isNil(res.attr().flg_id) ? 0 : Number(res.attr().flg_id); + let badgeInfo = { + category_id: "event1", + flg_id: flg_id, + flg: Number(res.attr().flg), + }; - if (!(_.isNil(badge.element("weekly_ranking")))) { - let badgeInfo = { - category_id: "weekly_ranking", - flg_id: 0, - flg: Number(badge.element("weekly_ranking").attr().flg), - }; + badge_data.push(badgeInfo); + }); + } - badge_data.push(badgeInfo); - } + if (!(_.isNil(badge.element("event2")))) { + badge.elements("event2").forEach((res) => { + let flg_id = _.isNil(res.attr().flg_id) ? 0 : Number(res.attr().flg_id); + let badgeInfo = { + category_id: "event2", + flg_id: flg_id, + flg: Number(res.attr().flg), + }; - if (!(_.isNil(badge.element("visitor")))) { - badge.elements("visitor").forEach((res) => { - let badgeInfo = { - category_id: "visitor", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("notes_radar")))) { - badge.elements("notes_radar").forEach((res) => { - let badgeInfo = { - category_id: "notes_radar", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("tsujigiri")))) { - let badgeInfo = { - category_id: "tsujigiri", - flg_id: 0, - flg: Number(badge.element("tsujigiri").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("iidx_exam")))) { - let badgeInfo = { - category_id: "iidx_exam", - flg_id: 0, - flg: Number(badge.element("iidx_exam").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("world_tourism")))) { - let badgeInfo = { - category_id: "world_tourism", - flg_id: 0, - flg: Number(badge.element("world_tourism").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("event1")))) { - badge.elements("event1").forEach((res) => { - let badgeInfo = { - category_id: "event1", - flg_id: 0, - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("arena")))) { - badge.elements("arena").forEach((res) => { - let badgeInfo = { - category_id: "arena", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("event2")))) { - badge.elements("event2").forEach((res) => { - let badgeInfo = { - category_id: "event2", - flg_id: 0, - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - break; - case 32: - if (!(_.isNil(badge.element("step_up")))) { - badge.elements("step_up").forEach((res) => { - let badgeInfo = { - category_id: "step_up", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("today_recommend")))) { - let badgeInfo = { - category_id: "today_recommend", - flg_id: 0, - flg: Number(badge.element("today_recommend").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("weekly_ranking")))) { - let badgeInfo = { - category_id: "weekly_ranking", - flg_id: 0, - flg: Number(badge.element("weekly_ranking").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("visitor")))) { - badge.elements("visitor").forEach((res) => { - let badgeInfo = { - category_id: "visitor", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("notes_radar")))) { - badge.elements("notes_radar").forEach((res) => { - let badgeInfo = { - category_id: "notes_radar", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("tsujigiri")))) { - let badgeInfo = { - category_id: "tsujigiri", - flg_id: 0, - flg: Number(badge.element("tsujigiri").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("iidx_exam")))) { - let badgeInfo = { - category_id: "iidx_exam", - flg_id: 0, - flg: Number(badge.element("iidx_exam").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("world_tourism")))) { - let badgeInfo = { - category_id: "world_tourism", - flg_id: 0, - flg: Number(badge.element("world_tourism").attr().flg), - }; - - badge_data.push(badgeInfo); - } - - if (!(_.isNil(badge.element("event1")))) { - badge.elements("event1").forEach((res) => { - let badgeInfo = { - category_id: "event1", - flg_id: 0, - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - - if (!(_.isNil(badge.element("arena")))) { - badge.elements("arena").forEach((res) => { - let badgeInfo = { - category_id: "arena", - flg_id: Number(res.attr().flg_id), - flg: Number(res.attr().flg), - }; - - badge_data.push(badgeInfo); - }); - } - break; - - default: - break; + badge_data.push(badgeInfo); + }); } badge_data.forEach((res) => { @@ -5107,13 +5342,13 @@ export const pcsave: EPR = async (info, data, send) => { if (hasActivityData) { const activityData = $(data).element("activity_data"); - const play_style = Number($(data).attr("activity_data").play_style); - let music_num = Number($(data).attr("activity_data").music_num); - let play_time = Number($(data).attr("activity_data").play_time); - let keyboard_num = Number($(data).attr("activity_data").keyboard_num); - let scratch_num = Number($(data).attr("activity_data").scratch_num); - let clear_update_num = $(data).numbers("activity_data.clear_update_num"); - let score_update_num = $(data).numbers("activity_data.score_update_num"); + const play_style = Number(activityData.attr().play_style); + let music_num = Number(activityData.attr().music_num); + let play_time = Number(activityData.attr().play_time); + let keyboard_num = Number(activityData.attr().keyboard_num); + let scratch_num = Number(activityData.attr().scratch_num); + let clear_update_num = activityData.numbers("clear_update_num"); + let score_update_num = activityData.numbers("score_update_num"); const date = new Date(); const monthStr = `${date.getMonth() + 1}`.padStart(2, "0"); @@ -5160,10 +5395,11 @@ export const pcsave: EPR = async (info, data, send) => { } if (hasSkinData) { - let skinData = $(data).elements("skin_equip"); + let skinData = version < 33 ? $(data).elements("skin_equip") : $(data).elements("pskin_equip"); let note_burst, bomb_size, turntable, judge_font, note_skin, note_size, lane_cover, pacemaker_cover, - lift_cover, note_beam, note_beam_size, full_combo_splash, frame; + lift_cover, note_beam, note_beam_size, full_combo_splash, + frame, cn_color, cn_size; skinData.forEach((res) => { switch (Number(res.attr().skin_id)) { @@ -5207,6 +5443,12 @@ export const pcsave: EPR = async (info, data, send) => { case 19: frame = Number(res.attr().skin_no); break; + case 20: + cn_color = Number(res.attr().skin_no); + break; + case 21: + cn_size = Number(res.attr().skin_no); + break; } }); @@ -5224,24 +5466,45 @@ export const pcsave: EPR = async (info, data, send) => { custom.note_beam_size = note_beam_size; custom.full_combo_splash = full_combo_splash; custom.frame = frame; + custom.cn_color = cn_color; + custom.cn_size = cn_size; } if (isTDJ && hasTDJSkinData) { - let skinData = $(data).elements("tdjskin_equip"); - let premium_skin; - let premium_bg; + let skinData = version < 33 ? $(data).elements("tdjskin_equip") : $(data).elements("vskin_equip"); + let result = {}; skinData.forEach((res) => { switch (Number(res.attr().skin_id)) { case 0: - premium_skin = Number(res.attr().skin_no); + result = Object.assign(result, { + premium_skin: Number(res.attr().skin_no), + }); break; case 1: - premium_bg = Number(res.attr().skin_no); + result = Object.assign(result, { + premium_bg: Number(res.attr().skin_no), + }); + break; + case 2: + result = Object.assign(result, { + premium_bg_concent: Number(res.attr().skin_no), + }); + break; + case 3: + result = Object.assign(result, { + entry_bg: Number(res.attr().skin_no), + }); break; } }); + if (isTDJ && hasVisualSkinData) { + result = Object.assign(result, { + entry_bg_brightness: Number($(data).attr("vskin_setting").entry_bg_brightness), + }); + } + await DB.Upsert( refid, { @@ -5250,12 +5513,11 @@ export const pcsave: EPR = async (info, data, send) => { }, { $set: { - premium_skin, - premium_bg, + ...result } }); + } } - } await DB.Upsert( refid, @@ -5289,6 +5551,19 @@ export const pcsave: EPR = async (info, data, send) => { } ); + if (version < 14) { + return send.object({ + "@attr": { + method: "pcsave", + } + }, { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }) + } + return send.success(); }; diff --git a/iidx@asphyxia/handlers/ranking.ts b/iidx@asphyxia/handlers/ranking.ts index ffe3faa..d2bfca5 100644 --- a/iidx@asphyxia/handlers/ranking.ts +++ b/iidx@asphyxia/handlers/ranking.ts @@ -1,25 +1,75 @@ import { expert, ranking } from "../models/ranking"; import { profile } from "../models/profile"; -import { GetVersion, IDtoRef } from "../util"; +import { GetCommand, GetModel, GetVersion, IDtoRef } from "../util"; + +export const rankingmethod: EPR = async (info, data, send) => { + const command = GetCommand(data); + switch (command[0]) { + case "entry": + return await rankingentry(info, data, send); + case "getranker": + return await rankinggetranker(info, data, send); + case "getme": + return await rankinggetme(info, data, send); + + default: + break; + } + + return send.deny({ format: false, header: false }); +} export const rankingentry: EPR = async (info, data, send) => { // pside // const version = GetVersion(info); - const refid = await IDtoRef(Number($(data).attr().iidxid)); + const command = GetCommand(data); - const coid = Number($(data).attr().coid); - const clid = Number($(data).attr().clid); + let refid: string; + if (version < 11) refid = command[1].split('|')[0]; + else if (version < 13) refid = await IDtoRef(Number(command[1])); + else refid = await IDtoRef(Number($(data).attr().iidxid)); - const opname = $(data).attr().opname; - const oppid = Number($(data).attr().oppid); - const pgnum = Number($(data).attr().pgnum); - const gnum = Number($(data).attr().gnum); - const opt = Number($(data).attr().opt); - const opt2 = Number($(data).attr().opt2); - const clr = Number($(data).attr().clr); + const profile = await DB.FindOne(refid, { + collection: "profile", + }); + const coid = version < 13 ? Number(command[3]) : Number($(data).attr().coid); + const clid = version < 13 ? Number(command[2]) : Number($(data).attr().clid); + + let opname: string; + if (version == 9) opname = command[9]; + else if (version < 11) opname = command[10]; + else if (version < 13) opname = command[9]; + else opname = $(data).attr().opname; + + let oppid = -1; + if (version == 9) oppid = profile.pid; + else if (version < 11) oppid = Number(command[11]); + else if (version < 13) oppid = Number(command[10]); + else oppid = Number($(data).attr().oppid); + + const pgnum = version < 13 ? Number(command[4]) : Number($(data).attr().pgnum); + const gnum = version < 13 ? Number(command[5]) : Number($(data).attr().gnum); + + let opt = 0; + if (version == 9) opt = Number(command[8]) + else if (version < 13) opt = Number(command[6]); + else opt = Number($(data).attr().opt) + + let opt2 = 0; + if (version == 9) opt2 = 0; + else if (version < 13) opt2 = Number(command[7]); + else opt2 = Number($(data).attr().opt2) + const exscore = (pgnum * 2 + gnum); - const cstage = Number($(data).attr().cstage); + + let cstage = 0; + if (version < 11) cstage = Number(command[12]); + else if (version < 12) cstage = Number(command[10]); + else if (version < 13) cstage = Number(command[11]); + else cstage = Number($(data).attr().cstage); + + const clr = version < 13 ? (cstage == 5 ? 1 : 0) : Number($(data).attr().clr); const expert_data = await DB.FindOne(refid, { collection: "expert", @@ -80,10 +130,6 @@ export const rankingentry: EPR = async (info, data, send) => { } ); - const profile = await DB.FindOne(refid, { - collection: "profile", - }); - const name = profile.name; await DB.Upsert( { collection: "ranking", @@ -95,7 +141,7 @@ export const rankingentry: EPR = async (info, data, send) => { $set: { pgnum: pgnum, gnum: gnum, - name: name, + name: profile.name, opname: opname, pid: oppid, udate: 0, @@ -113,12 +159,27 @@ export const rankingentry: EPR = async (info, data, send) => { clid: clid, }); expertUser.sort((a: ranking, b: ranking) => b.exscore - a.exscore); - let rankPos = expertUser.findIndex((a: ranking) => a.name == name); + let rankPos = expertUser.findIndex((a: ranking) => a.name == profile.name); - return send.object(K.ATTR({ - anum: String(expertUser.length), - jun: String(rankPos + 1), - })); + let result = { + "@attr": { + anum: String(expertUser.length), + jun: String(rankPos + 1), + } + } + + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result["@attr"]["method"] = "rankingentry" + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }; + } + + return send.object(result, sendOption); }; export const rankingoentry: EPR = async (info, data, send) => { @@ -143,11 +204,15 @@ export const rankingoentry: EPR = async (info, data, send) => { export const rankinggetranker: EPR = async (info, data, send) => { const version = GetVersion(info); + const command = GetCommand(data); + + const coid = version < 13 ? Number(command[1]) : Number($(data).attr().coid); + const clid = version < 13 ? Number(command[2]) : Number($(data).attr().clid); const ranking = await DB.Find({ collection: "ranking", version: version, - coid: Number($(data).attr().coid), - clid: Number($(data).attr().clid), + coid, + clid, }); let result = { ranker: [], @@ -169,5 +234,60 @@ export const rankinggetranker: EPR = async (info, data, send) => { ); }); - return send.object(result); + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result = Object.assign(result, { + "@attr": { method: "rankinggetranker" }, + }); + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }; + } + + return send.object(result, sendOption); }; + +export const rankinggetme: EPR = async (info, data, send) => { + const version = GetVersion(info); + const command = GetCommand(data); + const refid = command[1].split('|')[0]; + const playStyle = Number(command[2]) == 120 ? 0 : 1; + + const expertRecord = await DB.Find(refid, { collection: "expert", version: version }); + if (expertRecord.length == 0) return send.object({ "@attr": { method: "rankinggetme" } }, { header: false, format: false, rootName: GetModel(info) }); + + let result = { + "@attr": { + method: "rankinggetme", + }, + data: [], + }; + + expertRecord.forEach((res) => { + let indices = playStyle == 0 ? [0, 1, 2] : [3, 4, 5]; + for (let a = 0; a < indices.length; a++) { + if (res.cArray[indices[a]] == 0) continue; + result.data.push( + K.ATTR({ + coid: String(res.coid), + clid: String(indices[a]), + pgnum: String(res.pgArray[indices[a]]), + gnum: String(res.gArray[indices[a]]), + tcnt: String(1), + cflg: String(res.cArray[indices[a]] == 1 ? 5 : 0), + }), + ); + } + }); + + let sendOption: EamuseSendOption = { + status: "SOK", + rootName: GetModel(info), + format: false, + header: false, + }; + return send.object(result, sendOption); +} diff --git a/iidx@asphyxia/handlers/shop.ts b/iidx@asphyxia/handlers/shop.ts index 7388272..95305e5 100644 --- a/iidx@asphyxia/handlers/shop.ts +++ b/iidx@asphyxia/handlers/shop.ts @@ -1,5 +1,18 @@ import { convention_data, shop_data } from "../models/shop"; -import { GetVersion } from "../util"; +import { GetCommand, GetModel, GetVersion } from "../util"; + +export const shopmethod: EPR = async (info, data, send) => { + const command = GetCommand(data); + switch (command[0]) { + case "sentinfo": + return await shopsentinfo(info, data, send); + + default: + break; + } + + return send.deny({ format: false, header: false }); +} export const shopgetname: EPR = async (info, data, send) => { const shop_data = await DB.FindOne({ @@ -87,3 +100,25 @@ export const shopsetconvention: EPR = async (info, data, send) => { return send.success(); }; + +export const shopsentinfo: EPR = async (info, data, send) => { + const version = GetVersion(info); + + let result = {}; + let sendOption: EamuseSendOption = {}; + if (version < 14) { + result = Object.assign(result, { + "@attr": { method: "shopsentinfo" }, + }); + sendOption = { + rootName: GetModel(info), + status: version < 13 ? "SOK" : 0, + format: false, + header: false, + }; + } else { + return send.success(); + } + + return send.object(result, sendOption); +} diff --git a/iidx@asphyxia/handlers/userdata.ts b/iidx@asphyxia/handlers/userdata.ts new file mode 100644 index 0000000..467fc77 --- /dev/null +++ b/iidx@asphyxia/handlers/userdata.ts @@ -0,0 +1,32 @@ +import { userdata } from "../models/userdata"; + +export const userdataread: EPR = async (info, data, send) => { + const refid = $(data).attr().card.split('|')[0]; + const user = await DB.FindOne(refid, { + collection: "userdata", + }); + if (_.isNil(user)) return send.object({}, { status: "SOK", format: false, header: false }); + + return send.object({ + b: K.ITEM("str", user.userdata), + }, { format: false, header: false }); +} + +export const userdatawrite: EPR = async (info, data, send) => { + const refid = $(data).attr().card.split('|')[0]; + const userdata = $(data).str("b"); + + await DB.Upsert( + refid, + { + collection: "userdata", + }, + { + $set: { + userdata + } + } + ); + + return send.object({}, { status: "SOK", format: false, header: false }); +} diff --git a/iidx@asphyxia/handlers/webui.ts b/iidx@asphyxia/handlers/webui.ts index f0bf83a..c74a3f9 100644 --- a/iidx@asphyxia/handlers/webui.ts +++ b/iidx@asphyxia/handlers/webui.ts @@ -1,11 +1,11 @@ import { profile } from "../models/profile"; -import { rival } from "../models/rival"; +import { rival, rival_sub } from "../models/rival"; import { custom } from "../models/custom"; import { score, old_score } from "../models/score"; import { lightning_custom } from "../models/lightning"; export const updateRivalSettings = async (data) => { - let update_array = []; + let rival_array = [], rival_sub_array = []; if (!(_.isEmpty(data.sp_rival1))) { let update_data = { @@ -14,7 +14,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.sp_rival1, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -32,7 +32,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.sp_rival2, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -50,7 +50,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.sp_rival3, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -68,7 +68,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.sp_rival4, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -86,7 +86,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.sp_rival5, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -104,7 +104,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.dp_rival1, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -122,7 +122,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.dp_rival2, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -140,7 +140,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.dp_rival3, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -158,7 +158,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.dp_rival4, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -176,7 +176,7 @@ export const updateRivalSettings = async (data) => { rival_refid: data.dp_rival5, }; - update_array.push(update_data); + rival_array.push(update_data); } else { await DB.Remove(data.refid, { @@ -187,18 +187,211 @@ export const updateRivalSettings = async (data) => { ) } - for (let i = 0; i < update_array.length; i++) { + if (!(_.isEmpty(data.sp_rival1_sub))) { + let update_data = { + play_style: 1, + index: 0, + rival_refid: data.sp_rival1_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 1, + index: 0, + } + ) + } + + if (!(_.isEmpty(data.sp_rival2_sub))) { + let update_data = { + play_style: 1, + index: 1, + rival_refid: data.sp_rival2_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 1, + index: 1, + } + ) + } + + if (!(_.isEmpty(data.sp_rival3_sub))) { + let update_data = { + play_style: 1, + index: 2, + rival_refid: data.sp_rival3_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 1, + index: 2, + } + ) + } + + if (!(_.isEmpty(data.sp_rival4_sub))) { + let update_data = { + play_style: 1, + index: 3, + rival_refid: data.sp_rival4_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 1, + index: 3, + } + ) + } + + if (!(_.isEmpty(data.sp_rival5_sub))) { + let update_data = { + play_style: 1, + index: 4, + rival_refid: data.sp_rival5_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 1, + index: 4, + } + ) + } + + if (!(_.isEmpty(data.dp_rival1_sub))) { + let update_data = { + play_style: 2, + index: 0, + rival_refid: data.dp_rival1_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 2, + index: 0, + } + ) + } + + if (!(_.isEmpty(data.dp_rival2_sub))) { + let update_data = { + play_style: 2, + index: 1, + rival_refid: data.dp_rival2_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 2, + index: 1, + } + ) + } + + if (!(_.isEmpty(data.dp_rival3_sub))) { + let update_data = { + play_style: 2, + index: 2, + rival_refid: data.dp_rival3_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 2, + index: 2, + } + ) + } + + if (!(_.isEmpty(data.dp_rival4_sub))) { + let update_data = { + play_style: 2, + index: 3, + rival_refid: data.dp_rival4_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 2, + index: 3, + } + ) + } + + if (!(_.isEmpty(data.dp_rival5_sub))) { + let update_data = { + play_style: 2, + index: 4, + rival_refid: data.dp_rival5_sub, + }; + + rival_sub_array.push(update_data); + } else { + await DB.Remove(data.refid, + { + collection: "rival_sub", + play_style: 2, + index: 4, + } + ) + } + + for (let i = 0; i < rival_array.length; i++) { await DB.Upsert(data.refid, { collection: "rival", - play_style: update_array[i].play_style, - index: update_array[i].index, + play_style: rival_array[i].play_style, + index: rival_array[i].index, }, { $set: { - rival_refid: update_array[i].rival_refid, + rival_refid: rival_array[i].rival_refid, } } ) } + + for (let i = 0; i < rival_sub_array.length; i++) { + await DB.Upsert(data.refid, { + collection: "rival_sub", + play_style: rival_sub_array[i].play_style, + index: rival_sub_array[i].index, + }, { + $set: { + rival_refid: rival_sub_array[i].rival_refid, + } + } + ) + } }; export const updateCustomSettings = async (data) => { @@ -212,12 +405,15 @@ export const updateCustomSettings = async (data) => { note_burst: Number(data.note_burst), menu_music: Number(data.menu_music), lane_cover: Number(data.lane_cover), + lift_cover: Number(data.lift_cover), category_vox: Number(data.category_vox), note_skin: Number(data.note_skin), full_combo_splash: Number(data.full_combo_splash), disable_musicpreview: StoB(data.disable_musicpreview), note_beam: Number(data.note_beam), + note_beam_size: Number(data.note_beam_size) || 0, + note_size: Number(data.note_size), judge_font: Number(data.judge_font), pacemaker_cover: Number(data.pacemaker_cover), vefx_lock: StoB(data.vefx_lock), @@ -225,6 +421,8 @@ export const updateCustomSettings = async (data) => { bomb_size: Number(data.bomb_size), disable_hcn_color: StoB(data.disable_hcn_color), first_note_preview: Number(data.first_note_preview), + cn_color: Number(data.cn_color), + cn_size: Number(data.cn_size), rank_folder: StoB(data.rank_folder), clear_folder: StoB(data.clear_folder), @@ -268,14 +466,26 @@ export const updateCustomSettings = async (data) => { } if (data.version > 27) { + let saveData = { + premium_skin: Number(data.lm_skin), + premium_bg: Number(data.lm_bg), + } + + if (data.version >= 33) { + saveData = Object.assign(saveData, { + premium_bg_concent: Number(data.lm_bg_2), + entry_bg: Number(data.lm_entry_bg), + entry_bg_brightness: Number(data.lm_entry_bg_bright), + }); + } + await DB.Upsert(data.refid, { collection: "lightning_custom", version: Number(data.version) }, { $set: { - premium_skin: Number(data.lm_skin), - premium_bg: Number(data.lm_bg), + ...saveData } }); } diff --git a/iidx@asphyxia/index.ts b/iidx@asphyxia/index.ts index 77b9ec0..73b6db5 100644 --- a/iidx@asphyxia/index.ts +++ b/iidx@asphyxia/index.ts @@ -1,27 +1,127 @@ -import { pccommon, pcreg, pcget, pcgetname, pctakeover, pcvisit, pcsave, pcoldget, pcgetlanegacha, pcdrawlanegacha, pcshopregister } from "./handlers/pc"; -import { shopgetname, shopsavename, shopgetconvention, shopsetconvention } from "./handlers/shop"; -import { musicreg, musicgetrank, musicappoint, musicarenacpu, musiccrate, musicbreg, musicgetralive } from "./handlers/music"; -import { graderaised } from "./handlers/grade"; +import { pccommon, pcreg, pcget, pcgetname, pctakeover, pcvisit, pcsave, pcoldget, pcgetlanegacha, pcdrawlanegacha, pcshopregister, pcmethod } from "./handlers/pc"; +import { shopgetname, shopsavename, shopgetconvention, shopsetconvention, shopmethod } from "./handlers/shop"; +import { musicreg, musicgetrank, musicappoint, musicarenacpu, musiccrate, musicbreg, musicgetralive, musicgetranksub, musicmethod } from "./handlers/music"; +import { grademethod, graderaised } from "./handlers/grade"; import { gssysteminfo } from "./handlers/gamesystem"; import { updateRivalSettings, updateCustomSettings, importScoreData, exportScoreData } from "./handlers/webui"; import { GetVersion } from "./util"; -import { rankingentry, rankinggetranker, rankingoentry } from "./handlers/ranking"; +import { rankingentry, rankinggetranker, rankingmethod, rankingoentry } from "./handlers/ranking"; +import { userdataread, userdatawrite } from "./handlers/userdata"; export function register() { - if (CORE_VERSION_MAJOR <= 1 && CORE_VERSION_MINOR < 31) { - console.error("The current version of Asphyxia Core is not supported. Requires version '1.31' or later."); + if (CORE_VERSION_MAJOR <= 1 && CORE_VERSION_MINOR < 70) { + console.error("The current version of Asphyxia Core is not supported. Requires version '1.70' or later."); return; } R.Contributor("duel0213"); + R.Contributor("anzuwork"); + R.Contributor("COLV9"); - R.GameCode("GLD"); - R.GameCode("HDD"); - R.GameCode("I00"); - R.GameCode("JDJ"); - R.GameCode("JDZ"); - R.GameCode("KDZ"); - R.GameCode("LDJ"); + const gameCodes = ["C02", "D01", "E11", "ECO", "FDD", "GLD", "HDD", "I00", "JDJ", "JDZ", "KDZ", "LDJ"]; + gameCodes.forEach((res) => { + R.GameCode(res); + }); + + R.Route("userdata.read", userdataread); + R.Route("userdata.write", userdatawrite); + + const oldVersion = ["C02", "D01", "E11", "ECO"]; + oldVersion.forEach((res) => { + R.Route(`${res}.music`, musicmethod); + R.Route(`${res}.pc`, pcmethod); + R.Route(`${res}.ranking`, rankingmethod); + R.Route(`${res}.grade`, grademethod); + R.Route(`${res}.shop`, shopmethod); + }); + + const MultiRoute = (method: string, handler: EPR | boolean) => { + R.Route(`${method}`, handler); + R.Route(`IIDX21${method}`, handler); + R.Route(`IIDX22${method}`, handler); + R.Route(`IIDX23${method}`, handler); + R.Route(`IIDX24${method}`, handler); + R.Route(`IIDX25${method}`, handler); + R.Route(`IIDX26${method}`, handler); + R.Route(`IIDX27${method}`, handler); + R.Route(`IIDX28${method}`, handler); + R.Route(`IIDX29${method}`, handler); + R.Route(`IIDX30${method}`, handler); + R.Route(`IIDX31${method}`, handler); + R.Route(`IIDX32${method}`, handler); + R.Route(`IIDX33${method}`, handler); + }; + + MultiRoute("pc.common", pccommon); + MultiRoute("pc.reg", pcreg); + MultiRoute("pc.get", pcget); + MultiRoute("pc.getname", pcgetname); + MultiRoute("pc.oldget", pcoldget); + MultiRoute("pc.takeover", pctakeover); + MultiRoute("pc.visit", pcvisit); + MultiRoute("pc.save", pcsave); + MultiRoute("pc.shopregister", pcshopregister); + MultiRoute("pc.getLaneGachaTicket", pcgetlanegacha); + MultiRoute("pc.drawLaneGacha", pcdrawlanegacha); + MultiRoute("pc.consumeLaneGachaTicket", true); + + MultiRoute("shop.getname", shopgetname); + MultiRoute("shop.savename", shopsavename); + MultiRoute("shop.getconvention", shopgetconvention); + MultiRoute("shop.setconvention", shopsetconvention); + + MultiRoute("music.crate", musiccrate); + MultiRoute("music.getrank", musicgetrank); + MultiRoute("music.getranksub", musicgetranksub); + MultiRoute("music.getralive", musicgetralive); + MultiRoute("music.appoint", musicappoint); + MultiRoute("music.reg", musicreg); + MultiRoute("music.breg", musicbreg); + MultiRoute("music.arenaCPU", musicarenacpu); + + MultiRoute("grade.raised", graderaised); + + MultiRoute("ranking.entry", rankingentry); + MultiRoute("ranking.oentry", rankingoentry); + MultiRoute("ranking.getranker", rankinggetranker); + + MultiRoute("gameSystem.systemInfo", gssysteminfo); + + R.Unhandled((req: EamuseInfo, data: any, send: EamuseSend) => { + console.warn(`Unhandled Request : [${GetVersion(req)}], ${req.module}.${req.method}, ${JSON.stringify(data)}`); + return send.success({ format: false, header: false }); + }); + + R.WebUIEvent("iidxGetProfile", async (data, send: WebUISend) => { + const pcdata = await DB.FindOne(data.refid, { + collection: "pcdata", + version: Number(data.version), + }); + + return send.json({ + pcdata, + }); + }); + R.WebUIEvent("iidxGetSetting", async (data, send: WebUISend) => { + const custom = await DB.FindOne(data.refid, { + collection: "custom", + version: Number(data.version), + }); + + const lm_custom = await DB.FindOne(data.refid, { + collection: "lightning_custom", + version: Number(data.version), + }); + + return send.json({ + custom, + lm_custom, + }); + }); + R.WebUIEvent("iidxUpdateRival", updateRivalSettings); + R.WebUIEvent("iidxUpdateCustom", updateCustomSettings); + R.WebUIEvent("iidxImportScoreData", importScoreData); + R.WebUIEvent("iidxExportScoreData", exportScoreData); // common // R.Config("BeatPhase", { @@ -96,7 +196,7 @@ export function register() { name: "Movie Upload URL", type: "string", desc: "API address for play video uploading feature (JSON)", - default: "http://localhost/" + default: "http://localhost:4399/movie/" }); R.Config("Eisei", { name: "Eisei Grade Courses", @@ -226,7 +326,7 @@ export function register() { }); R.Config("sp_triparkskip", { name: "Everyone's SPACEWAR!! Skip", - desc: "Skips クプロ・ミミニャミ・パステルくんのみんなで宇宙戦争!! Event Scenes", + desc: "Skips クプロ・ミミニャミ・パステルくんのみんなで宇宙戦争!! Event Scenes", type: "integer", default: 2, }); @@ -303,12 +403,12 @@ export function register() { default: 2, }); R.Config("cp_extraboss", - { - name: "Extra Boss Phase (CP)", - desc: "Extra Boss Phase", - type: "integer", - default: 30, - }); + { + name: "Extra Boss Phase (CP)", + desc: "Extra Boss Phase", + type: "integer", + default: 30, + }); R.Config("cp_bemanisummer", { name: "BEMANI Summer 2016", desc: "NEW Generation 夏の流星フェスタ2016 Phase", @@ -336,12 +436,12 @@ export function register() { default: 1, }); R.Config("sb_extraboss", - { - name: "BUZRA ARTS", - desc: "BUZRA ARTS Phase", - type: "integer", - default: 35, - }); + { + name: "BUZRA ARTS", + desc: "BUZRA ARTS Phase", + type: "integer", + default: 35, + }); // CANNON BALLERS // R.Config("cb_boss", { @@ -357,12 +457,12 @@ export function register() { default: 3, }); R.Config("cb_extraboss", - { - name: "IIDX AIR RACE", - desc: "IIDX AIR RACE Phase", - type: "integer", - default: 35, - }); + { + name: "IIDX AIR RACE", + desc: "IIDX AIR RACE Phase", + type: "integer", + default: 35, + }); // Rootage // R.Config("rt_boss", { @@ -384,12 +484,12 @@ export function register() { default: 2, }); R.Config("rt_extraboss", - { - name: "ARC SCORE", - desc: "ARC SCORE Phase", - type: "integer", - default: 3, - }); + { + name: "ARC SCORE", + desc: "ARC SCORE Phase", + type: "integer", + default: 3, + }); // HEROIC VERSE // R.Config("hv_boss", { @@ -405,12 +505,12 @@ export function register() { default: 4, }); R.Config("hv_extraboss", - { - name: "SHADOW REBELLION", - desc: "SHADOW REBELLION Phase", - type: "integer", - default: 1, - }); + { + name: "SHADOW REBELLION", + desc: "SHADOW REBELLION Phase", + type: "integer", + default: 1, + }); // BISTROVER // R.Config("bo_boss", { @@ -509,90 +609,28 @@ export function register() { default: 3, }); - // TODO:: Make a list of customize items // - R.WebUIEvent("iidxGetProfile", async (data, send: WebUISend) => { - const pcdata = await DB.FindOne(data.refid, { - collection: "pcdata", - version: Number(data.version), - }); - - return send.json({ - pcdata, - }); + // Sparkle Shower // + R.Config("ss_event1", { + name: "Sparkle Fruit Lab.", + desc: "Sparkle Fruit Lab. Phase", + type: "integer", + default: 1, }); - R.WebUIEvent("iidxGetSetting", async (data, send: WebUISend) => { - const custom = await DB.FindOne(data.refid, { - collection: "custom", - version: Number(data.version), - }); - - const lm_custom = await DB.FindOne(data.refid, { - collection: "lightning_custom", - version: Number(data.version), - }); - - return send.json({ - custom, - lm_custom, - }); + R.Config("ss_cyber", { + name: "CYBER LOADER", + desc: "CYBER LOADER Phase", + type: "integer", + default: 1, }); - R.WebUIEvent("iidxUpdateRival", updateRivalSettings); - R.WebUIEvent("iidxUpdateCustom", updateCustomSettings); - R.WebUIEvent("iidxImportScoreData", importScoreData); - R.WebUIEvent("iidxExportScoreData", exportScoreData); - - const MultiRoute = (method: string, handler: EPR | boolean) => { - R.Route(`${method}`, handler); - R.Route(`IIDX21${method}`, handler); - R.Route(`IIDX22${method}`, handler); - R.Route(`IIDX23${method}`, handler); - R.Route(`IIDX24${method}`, handler); - R.Route(`IIDX25${method}`, handler); - R.Route(`IIDX26${method}`, handler); - R.Route(`IIDX27${method}`, handler); - R.Route(`IIDX28${method}`, handler); - R.Route(`IIDX29${method}`, handler); - R.Route(`IIDX30${method}`, handler); - R.Route(`IIDX31${method}`, handler); - R.Route(`IIDX32${method}`, handler); - }; - - MultiRoute("pc.common", pccommon); - MultiRoute("pc.reg", pcreg); - MultiRoute("pc.get", pcget); - MultiRoute("pc.getname", pcgetname); - MultiRoute("pc.oldget", pcoldget); - MultiRoute("pc.takeover", pctakeover); - MultiRoute("pc.visit", pcvisit); - MultiRoute("pc.save", pcsave); - MultiRoute("pc.shopregister", pcshopregister); - MultiRoute("pc.getLaneGachaTicket", pcgetlanegacha); - MultiRoute("pc.drawLaneGacha", pcdrawlanegacha); - MultiRoute("pc.consumeLaneGachaTicket", true); - - MultiRoute("shop.getname", shopgetname); - MultiRoute("shop.savename", shopsavename); - MultiRoute("shop.getconvention", shopgetconvention); - MultiRoute("shop.setconvention", shopsetconvention); - - MultiRoute("music.crate", musiccrate); - MultiRoute("music.getrank", musicgetrank); - MultiRoute("music.getralive", musicgetralive); - MultiRoute("music.appoint", musicappoint); - MultiRoute("music.reg", musicreg); - MultiRoute("music.breg", musicbreg); - MultiRoute("music.arenaCPU", musicarenacpu); - - MultiRoute("grade.raised", graderaised); - - MultiRoute("ranking.entry", rankingentry); - MultiRoute("ranking.oentry", rankingoentry); - MultiRoute("ranking.getranker", rankinggetranker); - - MultiRoute("gameSystem.systemInfo", gssysteminfo); - - R.Unhandled((req: EamuseInfo, data: any, send: EamuseSend) => { - console.warn(`Unhandled Request : [${GetVersion(req)}], ${req.module}.${req.method}, ${JSON.stringify(data)}`); - return send.success(); + R.Config("ss_extraboss", { + name: "EXTRA CHALLENGE (SS)", + desc: "EXTRA CHALLENGE Phase", + type: "integer", + default: 3, + }); + R.Config("ss_extraboss_season", { + name: "EXTRA CHALLENGE Season (SS)", + type: "integer", + default: 2, }); } diff --git a/iidx@asphyxia/models/badge.ts b/iidx@asphyxia/models/badge.ts index 5082980..3ba97cb 100644 --- a/iidx@asphyxia/models/badge.ts +++ b/iidx@asphyxia/models/badge.ts @@ -6,3 +6,44 @@ export interface badge { flg_id: number; flg: number; } + +export const badgeBaseMap: Record = { + djLevel: 0, + clear: 1, + grade: 2, +}; + +export const badgeVersionMap: Record> = { + 30: { + visitor: 6, + notes_radar: 7, + world_tourism: 8, + event1: 9, + }, + 31: { + step_up: 3, + visitor: 6, + notes_radar: 7, + event1: 13, + event2: 16, + }, + 32: { + step_up: 3, + visitor: 6, + notes_radar: 7, + event1: 13, + event2: 15, + }, + 33: { + step_up: 3, + visitor: 6, + notes_radar: 7, + event1: 3301, + }, + default: { + step_up: 3, + visitor: 7, + notes_radar: 8, + world_tourism: 12, + }, +}; diff --git a/iidx@asphyxia/models/custom.ts b/iidx@asphyxia/models/custom.ts index a0fd75c..3daea43 100644 --- a/iidx@asphyxia/models/custom.ts +++ b/iidx@asphyxia/models/custom.ts @@ -29,6 +29,9 @@ export interface custom { lift_cover: number; note_beam_size: number; + cn_color: number; // sparkle shower// + cn_size: number; + // appendsettings rank_folder: boolean; clear_folder: boolean; @@ -87,6 +90,9 @@ export const default_custom = { lift_cover: 0, note_beam_size: 0, + cn_color: 0, + cn_size: 0, + rank_folder: true, clear_folder: true, diff_folder: true, diff --git a/iidx@asphyxia/models/djtraining.ts b/iidx@asphyxia/models/djtraining.ts new file mode 100644 index 0000000..ff825d4 --- /dev/null +++ b/iidx@asphyxia/models/djtraining.ts @@ -0,0 +1,10 @@ +export interface djtraining { + collection: "djtraining"; + version: number; + play_style: number; + + tier: number; + part: number; + midx: number; + cflg: number; +} diff --git a/iidx@asphyxia/models/lightning.ts b/iidx@asphyxia/models/lightning.ts index 19f39df..c665823 100644 --- a/iidx@asphyxia/models/lightning.ts +++ b/iidx@asphyxia/models/lightning.ts @@ -14,7 +14,13 @@ export interface lightning_settings { concentration: number; keyboard_kind: number; // epolis // + brightness: number; + brightness_concent: number; // sparkle shower /// + + assistant_disp_type: number; // sparkle shower /// + assistant_last_tab: number; + assistant_chara: number; } export interface lightning_playdata { @@ -31,7 +37,12 @@ export interface lightning_custom { version: number; premium_skin: number; - premium_bg: number; + + premium_bg: number; // epolis // + + premium_bg_concent: number; // sparkle shower // + entry_bg: number; + entry_bg_brightness: number; } export interface eisei_grade { @@ -162,10 +173,21 @@ export const lm_settings_new = { concentration: 0, keyboard_kind: 10, // epolis // - brightness: 2, + + brightness: 0, + brightness_concent: 0, // sparkle shower // + + assistant_disp_type: 0, + assistant_last_tab: 0, + assistant_chara: 0, } export const lm_customdata = { premium_skin: 0, // Icons // + premium_bg: 0, // Background (epolis) // + + premium_bg_concent: 0, // Background [Concentration Mode] (sparkle shower) // + entry_bg: 0, // Entry BG // + entry_bg_brightness: 0, // Entry BG Brightness // } diff --git a/iidx@asphyxia/models/pcdata.ts b/iidx@asphyxia/models/pcdata.ts index 3118ab2..2280cda 100644 --- a/iidx@asphyxia/models/pcdata.ts +++ b/iidx@asphyxia/models/pcdata.ts @@ -10,6 +10,7 @@ export interface pcdata { sflg0: number; sflg1: number; sflg2: number; + pflg: number; gno: number; timing: number; sdhd: number; @@ -19,23 +20,25 @@ export interface pcdata { mcomb: number; ncomb: number; mode: number; - category: number; // attribute (Pinky Crush) // + category: number; // Pinky Crush // pmode: number; liflen: number; - judge: number; // attribute (tricoro) // + judge: number; // tricoro // opstyle: number; hispeed: number; judgeAdj: number; - notes: number; // attribute (Lincle) // + notes: number; // Lincle // pase: number; sdtype: number; help: number; fcombo: number[]; - ngrade: number; // attribute (BISTROVER) // - rtype: number; // attribute (Heroic Verse) // - bgnflg: number; // attribute (Pinky Crush) // - player_kind: number; // attribute (EPOLIS) // + ngrade: number; // BISTROVER // + rtype: number; // Heroic Verse // + naviflg: number; // Sparkle Shower // + bgnasst: number; + bgnflg: number; // Pinky Crush // + player_kind: number; // EPOLIS // gpos: number; s_sorttype: number; @@ -95,6 +98,8 @@ export interface pcdata { s_classic_hispeed: number; // EPOLIS // d_classic_hispeed: number; movie_thumbnail: number; // Pinky Crush // + s_laneobj_brignt: number; // Sparkle Shower // + d_laneobj_brignt: number; secret_flg1: string[]; // secret (Heroic Verse) // secret_flg2: string[]; @@ -237,6 +242,77 @@ export interface pcdata { tourism_secret_flg2: string[]; } +export const D01_pcdata = { + version: 10, + + spnum: 0, + sach: 0, + dach: 0, + sflg0: 0, + + sgid: -1, + dgid: -1, +} + +export const E11_pcdata = { + version: 11, + + spnum: 0, + dpnum: 0, + ctype: 0, + sach: 0, + dach: 0, + gno: 0, + sflg0: 0, + pflg: 0, + + sgid: -1, + dgid: -1, +} + +export const ECO_pcdata = { + version: 12, + + spnum: 0, + dpnum: 0, + ctype: 0, + sach: 0, + dach: 0, + sflg0: 0, + gno: 0, + gono: 0, + sd: 0, + hd: 0, + sdhd: 0, + to: 0, + + sgid: -1, + dgid: -1, +} + +export const FDD_pcdata = { + version: 13, + + spnum: 0, + dpnum: 0, + sach: 0, + dach: 0, + sflg0: 0, + sflg1: 0, + sflg2: 0, + gno: 0, + sdhd: 0, + sp_opt: 0, + dp_opt: 0, + dp_opt2: 0, + mcomb: 0, + ncomb: 0, + mode: 0, + + sgid: -1, + dgid: -1, +} + export const GLD_pcdata = { version: 14, @@ -770,9 +846,9 @@ export const IIDX24_pcdata = { dr_dppoint: Array(15).fill(0), event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, event2_play_num: 0, - event2_last_select_id: -1, + event2_last_select_id: 0, st_enemy_damage: 0, st_progress: 0, @@ -995,9 +1071,9 @@ export const IIDX26_pcdata = { eb_bossorb8: 0, event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, event2_play_num: 0, - event2_last_select_id: -1, + event2_last_select_id: 0, } export const IIDX27_pcdata = { @@ -1107,7 +1183,7 @@ export const IIDX27_pcdata = { present_orb: 0, event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, eb_keyorb: 0, eb_bossorb0: 0, @@ -1230,7 +1306,7 @@ export const IIDX28_pcdata = { present_orb: 0, event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, event_story_prog: 0, event_failed_num: 0, @@ -1350,8 +1426,8 @@ export const IIDX29_pcdata = { present_orb: 0, event_play_num: 0, - event_last_select_id: -1, - event_last_select_type: -1, + event_last_select_id: 0, + event_last_select_type: 0, } export const IIDX30_pcdata = { @@ -1468,7 +1544,7 @@ export const IIDX30_pcdata = { present_orb: 0, event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, } export const IIDX31_pcdata = { @@ -1582,7 +1658,7 @@ export const IIDX31_pcdata = { present_orb: 0, event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, event_skip: false, } @@ -1680,10 +1756,10 @@ export const IIDX32_pcdata = { st_is_track_ticket: false, st_sp_level: 0, st_dp_level: 0, - st_sp_level_h: 0, - st_dp_level_h: 0, - st_sp_level_exh: 0, - st_dp_level_exh: 0, + st_sp_level_h: -1, + st_dp_level_h: -1, + st_sp_level_exh: -1, + st_dp_level_exh: -1, st_sp_fluctuation: 0, st_dp_fluctuation: 0, st_mission_clear_num: 0, @@ -1706,5 +1782,131 @@ export const IIDX32_pcdata = { present_orb: 0, event_play_num: 0, - event_last_select_id: -1, + event_last_select_id: 0, +} + +export const IIDX33_pcdata = { + version: 33, + + spnum: 0, + dpnum: 0, + sach: 0, + dach: 0, + mode: 0, + category: 0, + pmode: 0, + ngrade: 0, + rtype: 0, + naviflg: 0, + bgnasst: 0, + player_kind: 0, + sp_opt: 0, + dp_opt: 0, + dp_opt2: 0, + gpos: 0, + s_sorttype: 0, + d_sorttype: 0, + s_pace: 0, + d_pace: 0, + s_gno: 0, + d_gno: 0, + s_sub_gno: 0, + d_sub_gno: 0, + s_gtype: 0, + d_gtype: 0, + s_sdlen: 0, + d_sdlen: 0, + s_sdtype: 0, + d_sdtype: 0, + s_timing: 0, + d_timing: 0, + s_notes: 0, + d_notes: 0, + s_judge: 0, + d_judge: 0, + s_judgeAdj: 0, + d_judgeAdj: 0, + s_hispeed: 0, + d_hispeed: 0, + s_liflen: 0, + d_liflen: 0, + s_disp_judge: 0, + d_disp_judge: 0, + s_opstyle: 0, + d_opstyle: 0, + s_graph_score: 0, + d_graph_score: 0, + s_auto_scrach: 0, + d_auto_scrach: 0, + s_gauge_disp: 0, + d_gauge_disp: 0, + s_lane_brignt: 0, + d_lane_brignt: 0, + s_camera_layout: 0, + d_camera_layout: 0, + s_ghost_score: 0, + d_ghost_score: 0, + s_tsujigiri_disp: 0, + d_tsujigiri_disp: 0, + s_auto_adjust: 0, + d_auto_adjust: 0, + s_timing_split: 0, + d_timing_split: 0, + s_visualization: 0, + d_visualization: 0, + s_classic_hispeed: 0, + d_classic_hispeed: 0, + movie_thumbnail: 0, + s_laneobj_brignt: 0, + d_laneobj_brignt: 0, + + secret_flg1: Array(3).fill("-1"), + secret_flg2: Array(3).fill("-1"), + secret_flg3: Array(3).fill("-1"), + secret_flg4: Array(3).fill("-1"), + secret_flg5: Array(3).fill("-1"), + + leggendaria_flg1: Array(3).fill("-1"), + leggendaria_flg2: Array(3).fill("-1"), + + tourism_secret_flg1: Array(3).fill("-1"), + tourism_secret_flg2: Array(3).fill("-1"), + + nr_spradar: Array(6).fill(0), + nr_dpradar: Array(6).fill(0), + + st_enemy_damage: 0, + st_progress: 0, + st_total_point: 0, + st_enemy_defeat_flg: 0, + st_is_track_ticket: false, + st_sp_level: 0, + st_dp_level: 0, + st_sp_level_h: -1, + st_dp_level_h: -1, + st_sp_level_exh: -1, + st_dp_level_exh: -1, + st_sp_fluctuation: 0, + st_dp_fluctuation: 0, + st_mission_clear_num: 0, + st_sp_mplay: 0, + st_dp_mplay: 0, + st_tips_read_list: 0, + + sgid: -1, + dgid: -1, + + achi_lastweekly: 0, + achi_pack: 0, + achi_packcomp: 0, + achi_rivalcrush: 0, + achi_visitflg: 0, + achi_weeklynum: 0, + + deller: 0, + orb: 0, + present_orb: 0, + + event_play_num: 0, + event_last_select_id: 0, } diff --git a/iidx@asphyxia/models/rival.ts b/iidx@asphyxia/models/rival.ts index d3f5ac9..250e189 100644 --- a/iidx@asphyxia/models/rival.ts +++ b/iidx@asphyxia/models/rival.ts @@ -7,6 +7,15 @@ export interface rival { rival_refid: string; }; +export interface rival_sub { + collection: "rival_sub"; + + play_style: number; + + index: number; + rival_refid: string; +} + export interface rival_data { play_style: number; index: number; diff --git a/iidx@asphyxia/models/userdata.ts b/iidx@asphyxia/models/userdata.ts new file mode 100644 index 0000000..5d5a197 --- /dev/null +++ b/iidx@asphyxia/models/userdata.ts @@ -0,0 +1,5 @@ +export interface userdata { + collection: "userdata"; + + userdata: string; +} diff --git a/iidx@asphyxia/pug/D01/pcget.pug b/iidx@asphyxia/pug/D01/pcget.pug new file mode 100644 index 0000000..4325a96 --- /dev/null +++ b/iidx@asphyxia/pug/D01/pcget.pug @@ -0,0 +1,6 @@ +D01(status="SOK" method="pcget") + pc(name=profile.name playnum=pcdata.spnum sach=pcdata.sach dach=pcdata.dach sflg=pcdata.sflg0) + grade(sgid=pcdata.sgid dgid=pcdata.dgid) #{gradeStr} + ex(rid="3") + - for (let ed of exArray) + score(clid=ed.clid coid=ed.coid pgnum=ed.pgnum gnum=ed.gnum tcnt="1" cflg=ed.cflg) diff --git a/iidx@asphyxia/pug/E11/pcget.pug b/iidx@asphyxia/pug/E11/pcget.pug new file mode 100644 index 0000000..c787ab9 --- /dev/null +++ b/iidx@asphyxia/pug/E11/pcget.pug @@ -0,0 +1,8 @@ +E11(status="SOK" method="pcget") + pc(id=profile.id idstr=profile.idstr name=profile.name pid=profile.pid spnum=pcdata.spnum dpnum=pcdata.dpnum ctype="0" sach=pcdata.sach dach=pcdata.dach gno=pcdata.gno sflg=pcdata.sflg0 pflg=pcdata.pflg) + grade(sgid=pcdata.sgid dgid=pcdata.dgid) #{gradeStr} + ex #{exStr} + skin #{skinStr} + rlist + - for (let rd of rArray) + rival(rno=rd.index id=rd.profile[2] id_str=rd.profile[3] djname=rd.profile[0] pid=rd.profile[1] sg=rd.pcdata[0] dg=rd.pcdata[1] sa=rd.pcdata[2] da=rd.pcdata[3]) diff --git a/iidx@asphyxia/pug/ECO/musicappoint.pug b/iidx@asphyxia/pug/ECO/musicappoint.pug new file mode 100644 index 0000000..54104a6 --- /dev/null +++ b/iidx@asphyxia/pug/ECO/musicappoint.pug @@ -0,0 +1,3 @@ +ECO(status="SOK" method="musicappoint") #{mydata} + if sdata != null + data(score=sdata.score pid=sdata.pid name=sdata.name) #{sdata.content} diff --git a/iidx@asphyxia/pug/ECO/pcget.pug b/iidx@asphyxia/pug/ECO/pcget.pug new file mode 100644 index 0000000..4b4e4c8 --- /dev/null +++ b/iidx@asphyxia/pug/ECO/pcget.pug @@ -0,0 +1,8 @@ +ECO(status="SOK" method="pcget") + pc(id=profile.id idstr=profile.idstr name=profile.name pid=profile.pid spnum=pcdata.spnum dpnum=pcdata.dpnum ctype="0" sach=pcdata.sach dach=pcdata.dach sflg=pcdata.sflg0 gno=pcdata.gno gono="0" sd="0" hd="0" hdsd="0" to="0") + grade(sgid=pcdata.sgid dgid=pcdata.dgid) #{gradeStr} + ex #{exStr} + skin #{skinStr} + rlist + - for (let rd of rArray) + rival(rno=rd.index id=rd.profile[2] id_str=rd.profile[3] djname=rd.profile[0] pid=rd.profile[1] sg=rd.pcdata[0] dg=rd.pcdata[1] sa=rd.pcdata[2] da=rd.pcdata[3]) diff --git a/iidx@asphyxia/pug/FDD/musicappoint.pug b/iidx@asphyxia/pug/FDD/musicappoint.pug new file mode 100644 index 0000000..432eb87 --- /dev/null +++ b/iidx@asphyxia/pug/FDD/musicappoint.pug @@ -0,0 +1,3 @@ +FDD(status="0" method="musicappoint") #{mydata} + if sdata != null + data(score=sdata.score pid=sdata.pid name=sdata.name) #{sdata.content} diff --git a/iidx@asphyxia/pug/FDD/pcget.pug b/iidx@asphyxia/pug/FDD/pcget.pug new file mode 100644 index 0000000..28fc976 --- /dev/null +++ b/iidx@asphyxia/pug/FDD/pcget.pug @@ -0,0 +1,8 @@ +FDD(status="0" method="pcget") + pc(id=profile.id idstr=profile.idstr name=profile.name pid=profile.pid spnum=pcdata.spnum dpnum=pcdata.dpnum sach=pcdata.sach dach=pcdata.dach sflg0=pcdata.sflg0 sflg1=pcdata.sflg1 sflg2=pcdata.sflg2 gno=pcdata.gno hdsd=pcdata.sdhd sp_opt=pcdata.sp_opt dp_opt=pcdata.dp_opt dp_opt2=pcdata.dp_opt2 mcomb=pcdata.mcomb ncomb=pcdata.ncomb mode=pcdata.mode) + grade(sgid=pcdata.sgid dgid=pcdata.dgid) #{gradeStr} + ex #{exStr} + skin #{skinStr} + rlist + - for (let rd of rArray) + rival(rno=rd.index id=rd.profile[2] id_str=rd.profile[3] djname=rd.profile[0] pid=rd.profile[1] sg=rd.pcdata[0] dg=rd.pcdata[1] sa=rd.pcdata[2] da=rd.pcdata[3]) diff --git a/iidx@asphyxia/pug/JDZ/pcget.pug b/iidx@asphyxia/pug/JDZ/pcget.pug index 68446e8..084ee74 100644 --- a/iidx@asphyxia/pug/JDZ/pcget.pug +++ b/iidx@asphyxia/pug/JDZ/pcget.pug @@ -10,6 +10,11 @@ pc(status="0") rival(spdp=rd.play_style id=rd.profile[2] id_str=rd.profile[3] djname=rd.profile[0] pid=rd.profile[1] sg=rd.pcdata[0] dg=rd.pcdata[1] sa=rd.pcdata[2] da=rd.pcdata[3]) visitor(anum="10" snum="10" pnum="10" vs_flg="1") fcombo(__type="s16" __count="2") #{pcdata.fcombo[0]} #{pcdata.fcombo[1]} + if party != null + party(ev=party.ev dif=party.dif) + cflg(__type="bin") #{party.cflg} + //-puzzle + flg(dif="" cha="" __type="u32") [loop] lincle(comflg="1" flg1="-1" flg2="-1" flg3="-1" flg4="-1" flg5="-1" flg6="-1" flg7="-1" refcomp="1") reflec(tf="1" br="1" ssc="1" sr="1" wu="1" sg="1" tb="1") jubeat(jflg_0="-1" jflg_1="-1" jflg_2="-1" jflg_3="-1") diff --git a/iidx@asphyxia/pug/LDJ/25pcget.pug b/iidx@asphyxia/pug/LDJ/25pcget.pug index 8c6bf22..fae5014 100644 --- a/iidx@asphyxia/pug/LDJ/25pcget.pug +++ b/iidx@asphyxia/pug/LDJ/25pcget.pug @@ -63,8 +63,7 @@ IIDX25pc(status="0") - for (let evt of rush_cannonracer_sub) map_data(map_id=evt.map_id play_num=evt.play_num progress=evt.progress boost_fuel=evt.boost_fuel is_clear=evt.is_clear rare1_appearance=evt.rare1_appearance rare2_appearance=evt.rare2_appearance rare3_appearance=evt.rare3_appearance rare4_appearance=evt.rare4_appearance rare5_appearance=evt.rare5_appearance rare6_appearance=evt.rare6_appearance rare_defeat_list=evt.rare_defeat_list) arena_data(play_num="2" play_num_dp="1" play_num_sp="1") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="20") - cube_data(cube="0" season_id="0") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="20") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="20") floor_infection(music_list="-1") qma_collabo(music_list="-1") diff --git a/iidx@asphyxia/pug/LDJ/26pcget.pug b/iidx@asphyxia/pug/LDJ/26pcget.pug index 3764f7b..3299fb9 100644 --- a/iidx@asphyxia/pug/LDJ/26pcget.pug +++ b/iidx@asphyxia/pug/LDJ/26pcget.pug @@ -43,7 +43,7 @@ IIDX26pc(status="0") join_shop(joinflg="1" join_cflg="1" join_id="ea" join_name=shop_data.opname) visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level sp_mission_point=pcdata.st_sp_mission_point dp_mission_point=pcdata.st_dp_mission_point sp_dj_mission_level=pcdata.st_sp_dj_mission_level dp_dj_mission_level=pcdata.st_dp_dj_mission_level sp_clear_mission_level=pcdata.st_sp_clear_mission_level dp_clear_mission_level=pcdata.st_dp_clear_mission_level sp_dj_mission_clear=pcdata.st_sp_dj_mission_clear dp_dj_mission_clear=pcdata.st_dp_dj_mission_clear sp_clear_mission_clear=pcdata.st_sp_clear_mission_clear dp_clear_mission_clear=pcdata.st_dp_clear_mission_clear sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} achievements(pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp last_weekly=pcdata.achi_lastweekly weekly_num=pcdata.achi_weeklynum visit_flg=pcdata.achi_visitflg rival_crush=pcdata.achi_rivalcrush) trophy(__type="s64" __count="20") #{pcdata.achi_trophy[0]} #{pcdata.achi_trophy[1]} #{pcdata.achi_trophy[2]} #{pcdata.achi_trophy[3]} #{pcdata.achi_trophy[4]} #{pcdata.achi_trophy[5]} #{pcdata.achi_trophy[6]} #{pcdata.achi_trophy[7]} #{pcdata.achi_trophy[8]} #{pcdata.achi_trophy[9]} #{pcdata.achi_trophy[10]} #{pcdata.achi_trophy[11]} #{pcdata.achi_trophy[12]} #{pcdata.achi_trophy[13]} #{pcdata.achi_trophy[14]} #{pcdata.achi_trophy[15]} #{pcdata.achi_trophy[16]} #{pcdata.achi_trophy[17]} #{pcdata.achi_trophy[18]} #{pcdata.achi_trophy[19]} deller(deller=pcdata.deller rate="1") @@ -57,9 +57,8 @@ IIDX26pc(status="0") leggendaria_semi_open(flg="-1") konami_stytle(skip_flg="0") arena_data(play_num="2" play_num_dp="1" play_num_sp="1") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="20") - cube_data(cube="0" season_id="0") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="20") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="20") chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") is_chat_0(__type="bool") 1 is_chat_1(__type="bool") 1 diff --git a/iidx@asphyxia/pug/LDJ/27pcget.pug b/iidx@asphyxia/pug/LDJ/27pcget.pug index fe85483..62617a4 100644 --- a/iidx@asphyxia/pug/LDJ/27pcget.pug +++ b/iidx@asphyxia/pug/LDJ/27pcget.pug @@ -48,16 +48,15 @@ IIDX27pc(status="0") radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(dp_clear_mission_clear=pcdata.st_dp_clear_mission_clear dp_clear_mission_level=pcdata.st_dp_clear_mission_level dp_dj_mission_clear=pcdata.st_dp_dj_mission_clear dp_dj_mission_level=pcdata.st_dp_dj_mission_level dp_level=pcdata.st_dp_level dp_mission_point=pcdata.st_dp_mission_point dp_mplay=pcdata.st_dp_mplay enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress sp_clear_mission_clear=pcdata.st_sp_clear_mission_clear sp_clear_mission_level=pcdata.st_sp_clear_mission_level sp_dj_mission_clear=pcdata.st_sp_dj_mission_clear sp_dj_mission_level=pcdata.st_sp_dj_mission_level sp_level=pcdata.st_sp_level sp_mission_point=pcdata.st_sp_mission_point sp_mplay=pcdata.st_sp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} achievements(last_weekly=pcdata.achi_lastweekly pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp rival_crush=pcdata.achi_rivalcrush visit_flg=pcdata.achi_visitflg weekly_num=pcdata.achi_weeklynum) trophy(__type="s64" __count="20") #{pcdata.achi_trophy[0]} #{pcdata.achi_trophy[1]} #{pcdata.achi_trophy[2]} #{pcdata.achi_trophy[3]} #{pcdata.achi_trophy[4]} #{pcdata.achi_trophy[5]} #{pcdata.achi_trophy[6]} #{pcdata.achi_trophy[7]} #{pcdata.achi_trophy[8]} #{pcdata.achi_trophy[9]} #{pcdata.achi_trophy[10]} #{pcdata.achi_trophy[11]} #{pcdata.achi_trophy[12]} #{pcdata.achi_trophy[13]} #{pcdata.achi_trophy[14]} #{pcdata.achi_trophy[15]} #{pcdata.achi_trophy[16]} #{pcdata.achi_trophy[17]} #{pcdata.achi_trophy[18]} #{pcdata.achi_trophy[19]} deller(deller=pcdata.deller rate="1") orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) leggendaria_semi_open(flg="-1") arena_data(play_num="2" play_num_dp="1" play_num_sp="1") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="20") - cube_data(cube="0" season_id="0") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="20") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="20") chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") is_chat_0(__type="bool") 1 is_chat_1(__type="bool") 1 diff --git a/iidx@asphyxia/pug/LDJ/28pcget.pug b/iidx@asphyxia/pug/LDJ/28pcget.pug index cbc055d..99da6d4 100644 --- a/iidx@asphyxia/pug/LDJ/28pcget.pug +++ b/iidx@asphyxia/pug/LDJ/28pcget.pug @@ -55,15 +55,14 @@ IIDX28pc(status="0") radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(dp_clear_mission_clear=pcdata.st_dp_clear_mission_clear dp_clear_mission_level=pcdata.st_dp_clear_mission_level dp_dj_mission_clear=pcdata.st_dp_dj_mission_clear dp_dj_mission_level=pcdata.st_dp_dj_mission_level dp_level=pcdata.st_dp_level dp_mission_point=pcdata.st_dp_mission_point dp_mplay=pcdata.st_dp_mplay enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress sp_clear_mission_clear=pcdata.st_sp_clear_mission_clear sp_clear_mission_level=pcdata.st_sp_clear_mission_level sp_dj_mission_clear=pcdata.st_sp_dj_mission_clear sp_dj_mission_level=pcdata.st_sp_dj_mission_level sp_level=pcdata.st_sp_level sp_mission_point=pcdata.st_sp_mission_point sp_mplay=pcdata.st_sp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} achievements(last_weekly=pcdata.achi_lastweekly pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp rival_crush=pcdata.achi_rivalcrush visit_flg=pcdata.achi_visitflg weekly_num=pcdata.achi_weeklynum) trophy(__type="s64" __count="20") #{pcdata.achi_trophy[0]} #{pcdata.achi_trophy[1]} #{pcdata.achi_trophy[2]} #{pcdata.achi_trophy[3]} #{pcdata.achi_trophy[4]} #{pcdata.achi_trophy[5]} #{pcdata.achi_trophy[6]} #{pcdata.achi_trophy[7]} #{pcdata.achi_trophy[8]} #{pcdata.achi_trophy[9]} #{pcdata.achi_trophy[10]} #{pcdata.achi_trophy[11]} #{pcdata.achi_trophy[12]} #{pcdata.achi_trophy[13]} #{pcdata.achi_trophy[14]} #{pcdata.achi_trophy[15]} #{pcdata.achi_trophy[16]} #{pcdata.achi_trophy[17]} #{pcdata.achi_trophy[18]} #{pcdata.achi_trophy[19]} deller(deller=pcdata.deller rate="1") orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) - arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="20" prev_best_class_dp="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="0" rating_value="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="1" rating_value="20") - cube_data(cube="0" season_id="0") + arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="19" prev_best_class_dp="19") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="0" rating_value="20") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="1" rating_value="20") chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") is_chat_0(__type="bool") 1 is_chat_1(__type="bool") 1 diff --git a/iidx@asphyxia/pug/LDJ/29pcget.pug b/iidx@asphyxia/pug/LDJ/29pcget.pug index 539b6aa..d4401de 100644 --- a/iidx@asphyxia/pug/LDJ/29pcget.pug +++ b/iidx@asphyxia/pug/LDJ/29pcget.pug @@ -55,15 +55,14 @@ IIDX29pc(status="0") radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress total_point=pcdata.st_total_point enemy_defeat_flg=pcdata.st_enemy_defeat_flg sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level mission_clear_num=pcdata.st_mission_clear_num sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} achievements(last_weekly=pcdata.achi_lastweekly pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp rival_crush=pcdata.achi_rivalcrush visit_flg=pcdata.achi_visitflg weekly_num=pcdata.achi_weeklynum) trophy(__type="s64" __count="20") #{pcdata.achi_trophy[0]} #{pcdata.achi_trophy[1]} #{pcdata.achi_trophy[2]} #{pcdata.achi_trophy[3]} #{pcdata.achi_trophy[4]} #{pcdata.achi_trophy[5]} #{pcdata.achi_trophy[6]} #{pcdata.achi_trophy[7]} #{pcdata.achi_trophy[8]} #{pcdata.achi_trophy[9]} #{pcdata.achi_trophy[10]} #{pcdata.achi_trophy[11]} #{pcdata.achi_trophy[12]} #{pcdata.achi_trophy[13]} #{pcdata.achi_trophy[14]} #{pcdata.achi_trophy[15]} #{pcdata.achi_trophy[16]} #{pcdata.achi_trophy[17]} #{pcdata.achi_trophy[18]} #{pcdata.achi_trophy[19]} deller(deller=pcdata.deller rate="1") orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) - arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="20" prev_best_class_dp="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="0" rating_value="20") - achieve_data(arena_class="20" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="1" rating_value="20") - cube_data(cube="0" season_id="0") + arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="19" prev_best_class_dp="19") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="0" rating_value="20") + achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" counterattack_num="0" play_style="1" rating_value="20") chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") is_chat_0(__type="bool") 1 is_chat_1(__type="bool") 1 diff --git a/iidx@asphyxia/pug/LDJ/30pcget.pug b/iidx@asphyxia/pug/LDJ/30pcget.pug index 6e00673..0318b5d 100644 --- a/iidx@asphyxia/pug/LDJ/30pcget.pug +++ b/iidx@asphyxia/pug/LDJ/30pcget.pug @@ -49,17 +49,16 @@ IIDX30pc(status="0") radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress total_point=pcdata.st_total_point enemy_defeat_flg=pcdata.st_enemy_defeat_flg sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level sp_fluctuation=pcdata.st_sp_fluctuation dp_fluctuation=pcdata.st_dp_fluctuation mission_clear_num=pcdata.st_mission_clear_num sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} achievements(last_weekly=pcdata.achi_lastweekly pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp rival_crush=pcdata.achi_rivalcrush visit_flg=pcdata.achi_visitflg weekly_num=pcdata.achi_weeklynum) //- i have no idea why this now needs to be 10 instead of 20 trophy(__type="s64" __count="10") #{pcdata.achi_trophy[0]} #{pcdata.achi_trophy[1]} #{pcdata.achi_trophy[2]} #{pcdata.achi_trophy[3]} #{pcdata.achi_trophy[4]} #{pcdata.achi_trophy[5]} #{pcdata.achi_trophy[6]} #{pcdata.achi_trophy[7]} #{pcdata.achi_trophy[8]} #{pcdata.achi_trophy[9]} deller(deller=pcdata.deller rate="1") orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) old_linkage_secret_flg(song_battle="-1") - arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="20" prev_best_class_dp="20") - achieve_data(play_style="0" arena_class="20" rating_value="20" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") - achieve_data(play_style="1" arena_class="20" rating_value="20" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") - cube_data(cube="0" season_id="0") + arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="19" prev_best_class_dp="19") + achieve_data(play_style="0" arena_class="19" rating_value="20" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") + achieve_data(play_style="1" arena_class="19" rating_value="20" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") is_chat_0(__type="bool") 1 is_chat_1(__type="bool") 1 diff --git a/iidx@asphyxia/pug/LDJ/31pcget.pug b/iidx@asphyxia/pug/LDJ/31pcget.pug index ff4f999..7e26e94 100644 --- a/iidx@asphyxia/pug/LDJ/31pcget.pug +++ b/iidx@asphyxia/pug/LDJ/31pcget.pug @@ -55,16 +55,15 @@ IIDX31pc(status="0" qproback=custom.qpro_back) radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress total_point=pcdata.st_total_point enemy_defeat_flg=pcdata.st_enemy_defeat_flg sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level sp_fluctuation=pcdata.st_sp_fluctuation dp_fluctuation=pcdata.st_dp_fluctuation mission_clear_num=pcdata.st_mission_clear_num sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} packinfo(music_0="-1" music_1="-1" music_2="-1" pack_id="1") achievements(last_weekly=pcdata.achi_lastweekly pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp rival_crush=pcdata.achi_rivalcrush visit_flg=pcdata.achi_visitflg weekly_num=pcdata.achi_weeklynum) deller(deller=pcdata.deller rate="1") orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) old_linkage_secret_flg(bemani_mixup="-1" ccj_linkage="-1" triple_tribe="-1") - arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="20" prev_best_class_dp="20") - achieve_data(play_style="0" arena_class="20" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") - achieve_data(play_style="1" arena_class="20" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") - cube_data(cube="0" season_id="0") + arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="19" prev_best_class_dp="19") + achieve_data(play_style="0" arena_class="19" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") + achieve_data(play_style="1" arena_class="19" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") is_chat_0(__type="bool") 1 is_chat_1(__type="bool") 1 diff --git a/iidx@asphyxia/pug/LDJ/32pcget.pug b/iidx@asphyxia/pug/LDJ/32pcget.pug index 05c4af4..04767a6 100644 --- a/iidx@asphyxia/pug/LDJ/32pcget.pug +++ b/iidx@asphyxia/pug/LDJ/32pcget.pug @@ -55,27 +55,26 @@ IIDX32pc(status="0") qprodata(body=rd.qprodata[3] face=rd.qprodata[2] hair=rd.qprodata[0] hand=rd.qprodata[4] head=rd.qprodata[1] back=rd.qprodata[5]) shop(name=shop_data.opname) rlist_sub + - for (let rsd of rsArray) + rival(spdp=rsd.play_style id=rsd.profile[2] id_str=rsd.profile[3] djname=rsd.profile[0] pid=rsd.profile[1] sg=rsd.pcdata[0] dg=rsd.pcdata[1] sa=rsd.pcdata[2] da=rsd.pcdata[3]) + is_robo(__type="bool") 0 + qprodata(body=rsd.qprodata[3] face=rsd.qprodata[2] hair=rsd.qprodata[0] hand=rsd.qprodata[4] head=rsd.qprodata[1] back=rsd.qprodata[5]) + shop(name=shop_data.opname) notes_radar(style="0") radar_score(__type="s32" __count="6") #{pcdata.nr_spradar[0]} #{pcdata.nr_spradar[1]} #{pcdata.nr_spradar[2]} #{pcdata.nr_spradar[3]} #{pcdata.nr_spradar[4]} #{pcdata.nr_spradar[5]} notes_radar(style="1") radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} visitor(anum="10" snum="10" pnum="10" vs_flg="1") step(enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress total_point=pcdata.st_total_point enemy_defeat_flg=pcdata.st_enemy_defeat_flg sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level sp_level_h=pcdata.st_sp_level_h dp_level_h=pcdata.st_dp_level_h sp_level_exh=pcdata.st_sp_level_exh dp_level_exh=pcdata.st_dp_level_exh sp_fluctuation=pcdata.st_sp_fluctuation dp_fluctuation=pcdata.st_dp_fluctuation mission_clear_num=pcdata.st_mission_clear_num sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay tips_read_list=pcdata.st_tips_read_list) - is_track_ticket(__type="bool") #{pcdata.st_is_track_ticket} + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} packinfo(music_0="-1" music_1="-1" music_2="-1" pack_id="1") achievements(pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp last_weekly=pcdata.achi_lastweekly weekly_num=pcdata.achi_weeklynum visit_flg=pcdata.achi_visitflg rival_crush=pcdata.achi_rivalcrush) deller(deller=pcdata.deller) orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) old_linkage_secret_flg(triple_tribe="-1" triple_tribe_2="-1") - arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="20" prev_best_class_dp="20") - achieve_data(play_style="0" arena_class="20" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") - achieve_data(play_style="1" arena_class="20" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") - cube_data(cube="0" season_id="0") - //-chat_data(chat_type_0="CHAT CUSTOM 1" chat_type_1="CHAT CUSTOM 2" chat_type_2="CHAT CUSTOM 3" chat_type_3="CHAT CUSTOM 4") - is_chat_0(__type="bool") 1 - is_chat_1(__type="bool") 1 - is_chat_2(__type="bool") 1 - is_chat_3(__type="bool") 1 + arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="19" prev_best_class_dp="19") + achieve_data(play_style="0" arena_class="19" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") + achieve_data(play_style="1" arena_class="19" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") default_chat skin_customize_flg(skin_frame_flg="-1" skin_turntable_flg="-1" skin_bomb_flg="-1" skin_bgm_flg="-1" skin_lane_flg0="-1" skin_lane_flg1="-1" skin_lane_flg2="-1" skin_lane_flg3="-1" skin_lane_flg4="-1" skin_lane_flg5="-1" skin_notes_flg="-1" skin_fullcombo_flg="-1" skin_keybeam_flg="-1" skin_judgestring_flg="-1") tdjskin_customize_flg(skin_submonitor_flg="-1" skin_subbg_flg="-1") diff --git a/iidx@asphyxia/pug/LDJ/33pcget.pug b/iidx@asphyxia/pug/LDJ/33pcget.pug new file mode 100644 index 0000000..ca4462f --- /dev/null +++ b/iidx@asphyxia/pug/LDJ/33pcget.pug @@ -0,0 +1,170 @@ +IIDX33pc(status="0") + pcdata(id=profile.id idstr=profile.idstr name=profile.name pid=profile.pid spnum=pcdata.spnum dpnum=pcdata.dpnum sach=pcdata.sach dach=pcdata.dach mode=pcdata.mode category=pcdata.category pmode=pcdata.pmode ngrade=pcdata.ngrade rtype=pcdata.rtype naviflg=pcdata.naviflg bgnasst=pcdata.bgnasst player_kind=pcdata.player_kind sp_opt=pcdata.sp_opt dp_opt=pcdata.dp_opt dp_opt2=pcdata.dp_opt2 gpos=pcdata.gpos s_sorttype=pcdata.s_sorttype d_sorttype=pcdata.d_sorttype s_pace=pcdata.s_pace d_pace=pcdata.d_pace s_gno=pcdata.s_gno d_gno=pcdata.d_gno s_sub_gno=pcdata.s_sub_gno d_sub_gno=pcdata.d_sub_gno s_gtype=pcdata.s_gtype d_gtype=pcdata.d_gtype s_sdlen=pcdata.s_sdlen d_sdlen=pcdata.d_sdlen s_sdtype=pcdata.s_sdtype d_sdtype=pcdata.d_sdtype s_timing=pcdata.s_timing d_timing=pcdata.d_timing s_notes=pcdata.s_notes d_notes=pcdata.d_notes s_judge=pcdata.s_judge d_judge=pcdata.d_judge s_judgeAdj=pcdata.s_judgeAdj d_judgeAdj=pcdata.d_judgeAdj s_hispeed=pcdata.s_hispeed d_hispeed=pcdata.d_hispeed s_liflen=pcdata.s_liflen d_liflen=pcdata.d_liflen s_disp_judge=pcdata.s_disp_judge d_disp_judge=pcdata.d_disp_judge s_opstyle=pcdata.s_opstyle d_opstyle=pcdata.d_opstyle s_graph_score=pcdata.s_graph_score d_graph_score=pcdata.d_graph_score s_auto_scrach=pcdata.s_auto_scrach d_auto_scrach=pcdata.d_auto_scrach s_gauge_disp=pcdata.s_gauge_disp d_gauge_disp=pcdata.d_gauge_disp s_lane_brignt=pcdata.s_lane_brignt d_lane_brignt=pcdata.d_lane_brignt s_camera_layout=pcdata.s_camera_layout d_camera_layout=pcdata.d_camera_layout s_ghost_score=pcdata.s_ghost_score d_ghost_score=pcdata.d_ghost_score s_tsujigiri_disp=pcdata.s_tsujigiri_disp d_tsujigiri_disp=pcdata.d_tsujigiri_disp s_auto_adjust=pcdata.s_auto_adjust d_auto_adjust=pcdata.d_auto_adjust s_timing_split=pcdata.s_timing_split d_timing_split=pcdata.d_timing_split s_visualization=pcdata.s_visualization d_visualization=pcdata.d_visualization s_classic_hispeed=pcdata.s_classic_hispeed d_classic_hispeed=pcdata.d_classic_hispeed movie_thumbnail=pcdata.movie_thumbnail s_laneobj_brignt=pcdata.s_laneobj_brignt d_laneobj_brignt=pcdata.d_laneobj_brignt) + lightning_play_data(dpnum=lm_playdata.dp_num spnum=lm_playdata.sp_num) + lightning_setting(headphone_vol=lm_settings.headphone_vol resistance_dp_left=lm_settings.resistance_dp_left resistance_dp_right=lm_settings.resistance_dp_right resistance_sp_left=lm_settings.resistance_sp_left resistance_sp_right=lm_settings.resistance_sp_right keyboard_kind=lm_settings.keyboard_kind brightness_bg=lm_settings.brightness brightness_concentration=lm_settings.brightness_concent assistant_disp_type=lm_settings.assistant_disp_type assistant_last_tab=lm_settings.assistant_last_tab assistant_chara=lm_settings.assistant_chara) + slider(__type="s32" __count="7") #{lm_settings.slider[0]} #{lm_settings.slider[1]} #{lm_settings.slider[2]} #{lm_settings.slider[3]} #{lm_settings.slider[4]} #{lm_settings.slider[5]} #{lm_settings.slider[6]} + light(__type="bool" __count="10") #{lm_settings.light[0]} #{lm_settings.light[1]} #{lm_settings.light[2]} #{lm_settings.light[3]} #{lm_settings.light[4]} #{lm_settings.light[5]} #{lm_settings.light[6]} #{lm_settings.light[7]} #{lm_settings.light[8]} #{lm_settings.light[9]} + concentration(__type="bool") #{lm_settings.concentration} + spdp_rival(flg="-1") + bind_eaappli + ea_premium_course + dellar_bonus(rate="100") + secret + flg1(__type="s64" __count="3") -1 -1 -1 + flg2(__type="s64" __count="3") -1 -1 -1 + flg3(__type="s64" __count="3") -1 -1 -1 + flg4(__type="s64" __count="3") -1 -1 -1 + flg5(__type="s64" __count="3") -1 -1 -1 + leggendaria + flg1(__type="s64" __count="3") -1 -1 -1 + flg2(__type="s64" __count="3") -1 -1 -1 + music_memo + - for (let m of mArray) + folder(play_style=m.play_style folder_id=m.folder_idx name=m.folder_name) + music_id(__type="s32" __count="10") #{m.music_ids[0]} #{m.music_ids[1]} #{m.music_ids[2]} #{m.music_ids[3]} #{m.music_ids[4]} #{m.music_ids[5]} #{m.music_ids[6]} #{m.music_ids[7]} #{m.music_ids[8]} #{m.music_ids[9]} + music_filter + - for (let f of fArray) + folder(play_style=f.play_style folder_id=f.folder_id filter_id=f.filter_id value0=f.value0 value1=f.value1) + is_valid(__type="bool") #{f.is_valid} + - for (let fs of fsArray) + sort(play_style=fs.play_style folder_id=fs.folder_id sort=fs.sort) + qpro_secret + head(__type="s64" __count="7") #{custom.qpro_secret_head[0]} #{custom.qpro_secret_head[1]} #{custom.qpro_secret_head[2]} #{custom.qpro_secret_head[3]} #{custom.qpro_secret_head[4]} #{custom.qpro_secret_head[5]} #{custom.qpro_secret_head[6]} + hair(__type="s64" __count="7") #{custom.qpro_secret_hair[0]} #{custom.qpro_secret_hair[1]} #{custom.qpro_secret_hair[2]} #{custom.qpro_secret_hair[3]} #{custom.qpro_secret_hair[4]} #{custom.qpro_secret_hair[5]} #{custom.qpro_secret_hair[6]} + face(__type="s64" __count="7") #{custom.qpro_secret_face[0]} #{custom.qpro_secret_face[1]} #{custom.qpro_secret_face[2]} #{custom.qpro_secret_face[3]} #{custom.qpro_secret_face[4]} #{custom.qpro_secret_face[5]} #{custom.qpro_secret_face[6]} + body(__type="s64" __count="7") #{custom.qpro_secret_body[0]} #{custom.qpro_secret_body[1]} #{custom.qpro_secret_body[2]} #{custom.qpro_secret_body[3]} #{custom.qpro_secret_body[4]} #{custom.qpro_secret_body[5]} #{custom.qpro_secret_body[6]} + hand(__type="s64" __count="7") #{custom.qpro_secret_hand[0]} #{custom.qpro_secret_hand[1]} #{custom.qpro_secret_hand[2]} #{custom.qpro_secret_hand[3]} #{custom.qpro_secret_hand[4]} #{custom.qpro_secret_hand[5]} #{custom.qpro_secret_hand[6]} + back(__type="s64" __count="7") #{custom.qpro_secret_back[0]} #{custom.qpro_secret_back[1]} #{custom.qpro_secret_back[2]} #{custom.qpro_secret_back[3]} #{custom.qpro_secret_back[4]} #{custom.qpro_secret_back[5]} #{custom.qpro_secret_back[6]} + grade(sgid=pcdata.sgid dgid=pcdata.dgid) + - for (let d of dArray) + g(__type="u8" __count="4") #{d[0]} #{d[1]} #{d[2]} #{d[3]} + kiwami_data + - for (let ed of eArray) + detail(grade_type=ed.grade_type grade_id=ed.grade_id option=ed.option stage_num=ed.stage_num clear_type=ed.clear_type) + past(__type="s32" __count="3") #{ed.past[0]} #{ed.past[1]} #{ed.past[2]} + selected_course(__type="s32" __count="3") #{ed.selected_course[0]} #{ed.selected_course[1]} #{ed.selected_course[2]} + max_past(__type="s32" __count="3") #{ed.max_past[0]} #{ed.max_past[1]} #{ed.max_past[2]} + max_selected_course(__type="s32" __count="3") #{ed.max_selected_course[0]} #{ed.max_selected_course[1]} #{ed.max_selected_course[2]} + pskin(__type="s32" __count="22") #{appendsettings} #{custom.note_burst} #{custom.bomb_size} #{custom.turntable} #{custom.judge_font} #{custom.note_skin} #{custom.note_size} #{Number(custom.disable_musicpreview)} #{Number(custom.vefx_lock)} #{custom.effect} #{custom.menu_music} #{Number(custom.disable_hcn_color)} #{custom.first_note_preview} #{custom.lane_cover} #{custom.pacemaker_cover} #{custom.lift_cover} #{custom.note_beam} #{custom.note_beam_size} #{custom.full_combo_splash} #{custom.frame} #{custom.cn_color} #{custom.cn_size} + vskin(__type="s32" __count="4") #{lm_custom.premium_skin} #{lm_custom.premium_bg} #{lm_custom.premium_bg_concent} #{lm_custom.entry_bg} + vskin_customize_setting(entry_bg_brightness=lm_custom.entry_bg_brightness) + qprodata(__type="u32" __count="6") #{custom.qpro_head} #{custom.qpro_hair} #{custom.qpro_face} #{custom.qpro_hand} #{custom.qpro_body} #{custom.qpro_back} + rlist + - for (let rd of rArray) + rival(spdp=rd.play_style id=rd.profile[2] id_str=rd.profile[3] djname=rd.profile[0] pid=rd.profile[1] sg=rd.pcdata[0] dg=rd.pcdata[1] sa=rd.pcdata[2] da=rd.pcdata[3]) + is_robo(__type="bool") 0 + qprodata(body=rd.qprodata[3] face=rd.qprodata[2] hair=rd.qprodata[0] hand=rd.qprodata[4] head=rd.qprodata[1] back=rd.qprodata[5]) + shop(name=shop_data.opname) + rlist_sub + - for (let rsd of rsArray) + rival(spdp=rsd.play_style id=rsd.profile[2] id_str=rsd.profile[3] djname=rsd.profile[0] pid=rsd.profile[1] sg=rsd.pcdata[0] dg=rsd.pcdata[1] sa=rsd.pcdata[2] da=rsd.pcdata[3]) + is_robo(__type="bool") 0 + qprodata(body=rsd.qprodata[3] face=rsd.qprodata[2] hair=rsd.qprodata[0] hand=rsd.qprodata[4] head=rsd.qprodata[1] back=rsd.qprodata[5]) + shop(name=shop_data.opname) + notes_radar(style="0") + radar_score(__type="s32" __count="6") #{pcdata.nr_spradar[0]} #{pcdata.nr_spradar[1]} #{pcdata.nr_spradar[2]} #{pcdata.nr_spradar[3]} #{pcdata.nr_spradar[4]} #{pcdata.nr_spradar[5]} + notes_radar(style="1") + radar_score(__type="s32" __count="6") #{pcdata.nr_dpradar[0]} #{pcdata.nr_dpradar[1]} #{pcdata.nr_dpradar[2]} #{pcdata.nr_dpradar[3]} #{pcdata.nr_dpradar[4]} #{pcdata.nr_dpradar[5]} + dj_training + sp(tier="0" step="0") + if djtraining_sp != null + each tiers, tierId in djtraining_sp + each content, partId in tiers + folder(index=partId-1 tier=tierId part=partId) + each mid, musicIdx in content.mid + music(index=musicIdx music_id=mid class_id=content.diff[musicIdx] clear_type=content.cflg[musicIdx]) + dp(tier="0" step="0") + if djtraining_dp != null + each tiers, tierId in djtraining_dp + each content, partId in tiers + folder(index=partId-1 tier=tierId part=partId) + each mid, musicIdx in content.mid + music(index=musicIdx music_id=mid class_id=content.diff[musicIdx] clear_type=content.cflg[musicIdx]) + krank(season_id="0" end_time="4102326000" element_get="0" element_use="0") + enable_element_get(__type="bool") 1 + reset(__type="bool") 0 + sp(prev_season_skill="0" now_season_skill="0") + //-music(index="" klevel="" music_id="" class_id="" clear_type="" play_num_best="" play_num_now="" play_num_total="") [loop] + reset(__type="bool") + dp(prev_season_skill="0" now_season_skill="0") + //-music(index="" klevel="" music_id="" class_id="" clear_type="" play_num_best="" play_num_now="" play_num_total="") [loop] + reset(__type="bool") + visitor(anum="10" snum="10" pnum="10" vs_flg="1") + step(enemy_damage=pcdata.st_enemy_damage progress=pcdata.st_progress total_point=pcdata.st_total_point enemy_defeat_flg=pcdata.st_enemy_defeat_flg sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level sp_level_h=pcdata.st_sp_level_h dp_level_h=pcdata.st_dp_level_h sp_level_exh=pcdata.st_sp_level_exh dp_level_exh=pcdata.st_dp_level_exh sp_fluctuation=pcdata.st_sp_fluctuation dp_fluctuation=pcdata.st_dp_fluctuation mission_clear_num=pcdata.st_mission_clear_num sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay tips_read_list=pcdata.st_tips_read_list) + is_track_ticket(__type="bool") #{Number(pcdata.st_is_track_ticket)} + packinfo(music_0="-1" music_1="-1" music_2="-1" pack_id="1") + achievements(pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp last_weekly=pcdata.achi_lastweekly weekly_num=pcdata.achi_weeklynum visit_flg=pcdata.achi_visitflg rival_crush=pcdata.achi_rivalcrush) + deller(deller=pcdata.deller) + orb_data(rest_orb=pcdata.orb present_orb=pcdata.present_orb) + old_linkage_secret_flg(triple_tribe_2="-1" triple_tribe_3="-1" triple_tribe_4="-1") + arena_data(play_num="2" play_num_dp="1" play_num_sp="1" prev_best_class_sp="19" prev_best_class_dp="19") + achieve_data(play_style="0" arena_class="19" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") + achieve_data(play_style="1" arena_class="19" rating_value="20" now_top_class_continuing="0" best_top_class_continuing="0" win_count="0" now_winning_streak_count="0" best_winning_streak_count="0" perfect_win_count="0" counterattack_num="0" mission_clear_num="0") + default_chat + pskin_customize_flg(skin_frame_flg="-1" skin_turntable_flg="-1" skin_bomb_flg="-1" skin_bgm_flg="-1" skin_lane_flg0="-1" skin_lane_flg1="-1" skin_lane_flg2="-1" skin_lane_flg3="-1" skin_lane_flg4="-1" skin_lane_flg5="-1" skin_lane_flg6="-1" skin_notes_flg="-1" skin_fullcombo_flg="-1" skin_keybeam_flg="-1" skin_judgestring_flg="-1") + vskin_customize_flg(skin_subicon_flg="-1" skin_subbg_flg0="-1" skin_subbg_flg1="-1" skin_entry_flg0="-1" skin_entry_flg1="-1") + event_1(event_play_num=pcdata.event_play_num last_select_room_id=pcdata.event_last_select_id) + if pcdata.event_skip == true + is_skip + - for (let evt of sparkle_fl_room) + room_data(room_id=evt.room_id play_num=evt.play_num play_num_uc=evt.play_num_uc play_num_ub=evt.play_num_ub clear_num=evt.clear_num last_select_crop_index=evt.last_select_crop_index room_prog=evt.room_prog) + soul(__type="bool") #{evt.soul} + - for (let evt2 of sparkle_fl_crop) + room_crop_data(room_id=evt2.room_id index=evt2.index act_normal=evt2.act_normal act_shin=evt2.act_shin act_gi=evt2.act_gi act_tai=evt2.act_tai first_type=evt2.first_type) + ultimate_mobile_link(music_list="-1") + link_flag + valkyrie_linkage(music_list_1="-1" music_list_2="-1" music_list_3="-1") + popn_cheers(music_list="65535") + triple_tribe_5(music_list="65535") + triple_tribe_6(music_list="65535") + bemani_summer(music_list="65535") + language_setting(language=profile.language) + movie_agreement(agreement_version="1") + movie_setting + hide_name(__type="bool") 0 + if sparkle_extra_boss != null + extra_boss_event(phase=sparkle_extra_boss.phase progress=sparkle_extra_boss.progress progress_point_score=sparkle_extra_boss.progress_point_score progress_point_miss=sparkle_extra_boss.progress_point_miss unlock_point=sparkle_extra_boss.unlock_point) + - for (let ebp of sparkle_extra_boss_play) + extra_boss_play(phase=ebp.phase gauge_level=ebp.gauge_level extra_play_num=ebp.extra_play_num extra_clear_num=ebp.extra_clear_num onemore_play_num=ebp.onemore_play_num onemore_clear_num=ebp.onemore_clear_num) + world_tourism + - for (let wd of wArray) + tour_data(tour_id=wd.tour_id progress=wd.progress) + world_tourism_secret_flg + flg1(__type="s64" __count="3") -1 -1 -1 + flg2(__type="s64" __count="3") -1 -1 -1 + world_tourism_setting + booster(__type="bool") 1 + badge + - for (let b of bArray) + badge_data(category_id=b.id badge_flg_id=b.flg_id badge_flg=b.flg) + activity + today(day_id=activityDayId date=activityTimestamp) + if activityTodaySP != null + today_data(play_style=activityTodaySP.play_style music_num=activityTodaySP.music_num play_time=activityTodaySP.play_time keyboard_num=activityTodaySP.keyboard_num scratch_num=activityTodaySP.scratch_num) + clear_update_num(__type="s32" __count="13") #{activityTodaySP.clear_update_num[0]} #{activityTodaySP.clear_update_num[1]} #{activityTodaySP.clear_update_num[2]} #{activityTodaySP.clear_update_num[3]} #{activityTodaySP.clear_update_num[4]} #{activityTodaySP.clear_update_num[5]} #{activityTodaySP.clear_update_num[6]} #{activityTodaySP.clear_update_num[7]} #{activityTodaySP.clear_update_num[8]} #{activityTodaySP.clear_update_num[9]} #{activityTodaySP.clear_update_num[10]} #{activityTodaySP.clear_update_num[11]} #{activityTodaySP.clear_update_num[12]} + score_update_num(__type="s32" __count="13") #{activityTodaySP.score_update_num[0]} #{activityTodaySP.score_update_num[1]} #{activityTodaySP.score_update_num[2]} #{activityTodaySP.score_update_num[3]} #{activityTodaySP.score_update_num[4]} #{activityTodaySP.score_update_num[5]} #{activityTodaySP.score_update_num[6]} #{activityTodaySP.score_update_num[7]} #{activityTodaySP.score_update_num[8]} #{activityTodaySP.score_update_num[9]} #{activityTodaySP.score_update_num[10]} #{activityTodaySP.score_update_num[11]} #{activityTodaySP.score_update_num[12]} + if activityTodayDP != null + today_data(play_style=activityTodayDP.play_style music_num=activityTodayDP.music_num play_time=activityTodayDP.play_time keyboard_num=activityTodayDP.keyboard_num scratch_num=activityTodayDP.scratch_num) + clear_update_num(__type="s32" __count="13") #{activityTodayDP.clear_update_num[0]} #{activityTodayDP.clear_update_num[1]} #{activityTodayDP.clear_update_num[2]} #{activityTodayDP.clear_update_num[3]} #{activityTodayDP.clear_update_num[4]} #{activityTodayDP.clear_update_num[5]} #{activityTodayDP.clear_update_num[6]} #{activityTodayDP.clear_update_num[7]} #{activityTodayDP.clear_update_num[8]} #{activityTodayDP.clear_update_num[9]} #{activityTodayDP.clear_update_num[10]} #{activityTodayDP.clear_update_num[11]} #{activityTodayDP.clear_update_num[12]} + score_update_num(__type="s32" __count="13") #{activityTodayDP.score_update_num[0]} #{activityTodayDP.score_update_num[1]} #{activityTodayDP.score_update_num[2]} #{activityTodayDP.score_update_num[3]} #{activityTodayDP.score_update_num[4]} #{activityTodayDP.score_update_num[5]} #{activityTodayDP.score_update_num[6]} #{activityTodayDP.score_update_num[7]} #{activityTodayDP.score_update_num[8]} #{activityTodayDP.score_update_num[9]} #{activityTodayDP.score_update_num[10]} #{activityTodayDP.score_update_num[11]} #{activityTodayDP.score_update_num[12]} + weekly + week_data(play_style="0") + - for (let a of activityWeekSP) + week(week_index=a.week_index week_id=a.week_id date=a.date music_num=a.music_num play_time=a.play_time keyboard_num=a.keyboard_num scratch_num=a.scratch_num) + clear_update_num(__type="s32" __count="13") #{a.clear_update_num[0]} #{a.clear_update_num[1]} #{a.clear_update_num[2]} #{a.clear_update_num[3]} #{a.clear_update_num[4]} #{a.clear_update_num[5]} #{a.clear_update_num[6]} #{a.clear_update_num[7]} #{a.clear_update_num[8]} #{a.clear_update_num[9]} #{a.clear_update_num[10]} #{a.clear_update_num[11]} #{a.clear_update_num[12]} + score_update_num(__type="s32" __count="13") #{a.score_update_num[0]} #{a.score_update_num[1]} #{a.score_update_num[2]} #{a.score_update_num[3]} #{a.score_update_num[4]} #{a.score_update_num[5]} #{a.score_update_num[6]} #{a.score_update_num[7]} #{a.score_update_num[8]} #{a.score_update_num[9]} #{a.score_update_num[10]} #{a.score_update_num[11]} #{a.score_update_num[12]} + week_data(play_style="1") + - for (let b of activityWeekDP) + week(week_index=b.week_index week_id=b.week_id date=b.date music_num=b.music_num play_time=b.play_time keyboard_num=b.keyboard_num scratch_num=b.scratch_num) + clear_update_num(__type="s32" __count="13") #{b.clear_update_num[0]} #{b.clear_update_num[1]} #{b.clear_update_num[2]} #{b.clear_update_num[3]} #{b.clear_update_num[4]} #{b.clear_update_num[5]} #{b.clear_update_num[6]} #{b.clear_update_num[7]} #{b.clear_update_num[8]} #{b.clear_update_num[9]} #{b.clear_update_num[10]} #{b.clear_update_num[11]} #{b.clear_update_num[12]} + score_update_num(__type="s32" __count="13") #{b.score_update_num[0]} #{b.score_update_num[1]} #{b.score_update_num[2]} #{b.score_update_num[3]} #{b.score_update_num[4]} #{b.score_update_num[5]} #{b.score_update_num[6]} #{b.score_update_num[7]} #{b.score_update_num[8]} #{b.score_update_num[9]} #{b.score_update_num[10]} #{b.score_update_num[11]} #{b.score_update_num[12]} + mynews + - for (let a of activityMynews) + detail(play_style=a.play_style kind=a.kind news_no=a.news_no index=a.index day_id=a.day_id music_id=a.music_id note_id=a.note_id best_score=a.best_score now_score=a.now_score now_clear=a.now_clear news_time=a.news_time) + best_result + - for (let a of activityMybest) + best_data(play_style=a.play_style kind=a.kind play_side=a.play_side music_id=a.music_id note_id=a.note_id target_graph=a.target_graph target_score=a.target_score pacemaker=a.pacemaker best_clear=a.best_clear best_score=a.best_score best_misscount=a.best_misscount now_clear=a.now_clear now_score=a.now_score now_misscount=a.now_misscount now_pgreat=a.now_pgreat now_great=a.now_great now_good=a.now_good now_bad=a.now_bad now_poor=a.now_poor now_combo=a.now_combo now_fast=a.now_fast now_slow=a.now_slow option=a.option option2=a.option_2 gauge_type=a.gauge_type result_type=a.result_type update_date=a.update_date) + ghost_gauge_data(__type="bin") #{a.ghost_gauge_data} + is_special_result(__type="bool") #{a.is_special_result} + if sparkle_vocalo != null + event_v(event_play_num=sparkle_vocalo.play_num last_select_music=sparkle_vocalo.last_select_music point_get=sparkle_vocalo.point_get point_use_0=sparkle_vocalo.point_use_0 point_use_1=sparkle_vocalo.point_use_1 booster_get=sparkle_vocalo.booster_get booster_use_0=sparkle_vocalo.booster_use_0 booster_use_1=sparkle_vocalo.booster_use_1) diff --git a/iidx@asphyxia/util.ts b/iidx@asphyxia/util.ts index c292444..c1b1770 100644 --- a/iidx@asphyxia/util.ts +++ b/iidx@asphyxia/util.ts @@ -88,26 +88,22 @@ export function NumArrayToString(bits: number[], numArray: number[]): string { return result; } -export function GetVersion(info: EamuseInfo) { - let version = -1; - switch (info.model.slice(0, 3)) { - case "GLD": return 14; - case "HDD": return 15; - case "I00": return 16; - case "JDJ": return 17; - case "JDZ": return 18; - case "KDZ": return 19; - case "LDJ": - if (info.module.startsWith("IIDX")) { - version = Number(info.module.slice(4, 6)); - if (_.isNaN(version) || version < 20) version = 20; - } else { - version = 20; - } - break; +export function NumArrayToHex(bits: number[], numArray: number[]): string { + let packed = 0; + let totalBits = 0; + + for (let i = 0; i < bits.length; i++) { + const radix = Math.pow(2, bits[i]); + const value = Math.trunc(numArray[i]); + + packed = packed * radix + ((value % radix) + radix) % radix; + totalBits += bits[i]; } - return version; + return packed + .toString(16) + .padStart(totalBits / 4, "0") + .toUpperCase(); } export function appendSettingConverter( @@ -245,6 +241,36 @@ export async function ReftoQPRO(refid: string, version: number) { return qpro_data; } -export function GetWeekId(date: Date) { - return Math.ceil((((date.getTime() - Date.UTC(date.getFullYear(), 0, 1)) / 86400000) + new Date(date.getFullYear(), 0, 1).getDay()) / 7); +export function GetVersion(info: EamuseInfo) { + let version = -1; + switch (info.model.slice(0, 3)) { + case "C02": return 9; + case "D01": return 10; + case "E11": return 11; + case "ECO": return 12; + case "FDD": return 13; + case "GLD": return 14; + case "HDD": return 15; + case "I00": return 16; + case "JDJ": return 17; + case "JDZ": return 18; + case "KDZ": return 19; + case "LDJ": + version = Number(info.module.slice(4, 6)); + if (_.isNaN(version) || version == 0) version = 20; + break; + } + + return version; +} + +export function GetModel(info: EamuseInfo) { + return info.model.slice(0, 3); +} + +export function GetCommand(data: any) { + let command = $(data).attr().command; + if (_.isNil(command)) return null; + + return command.split(' '); } diff --git a/iidx@asphyxia/webui/asset/js/setting.js b/iidx@asphyxia/webui/asset/js/setting.js index b1ac8f2..929664c 100644 --- a/iidx@asphyxia/webui/asset/js/setting.js +++ b/iidx@asphyxia/webui/asset/js/setting.js @@ -31,7 +31,7 @@ $("#version").on("change", function () { $("#effect").val(data["custom"].effect); $("#bomb_size").val(data["custom"].bomb_size); $("#disable_hcn_color").prop("checked", data["custom"].disable_hcn_color); - $("#first_note_preview").val(data["custom"].first_note_preview); + $("#first_note_preview").prop("checked", Number(data["custom"].first_note_preview) === 1); if (data["custom"].note_size == undefined) $("#note_size").val(0); else $("#note_size").val(data["custom"].note_size); @@ -39,6 +39,10 @@ $("#version").on("change", function () { else $("#lift_cover").val(data["custom"].lift_cover); if (data["custom"].note_beam_size == undefined) $("#note_beam_size").val(0); else $("#note_beam_size").val(data["custom"].note_beam_size); + if (data["custom"].cn_color == undefined) $("#cn_color").val(0); + else $("#cn_color").val(data["custom"].cn_color); + if (data["custom"].cn_size == undefined) $("#cn_size").val(0); + else $("#cn_size").val(data["custom"].cn_size); $("#rank_folder").prop("checked", data["custom"].rank_folder); $("#clear_folder").prop("checked", data["custom"].clear_folder); @@ -68,9 +72,19 @@ $("#version").on("change", function () { if (data["lm_custom"] == null) { $("#lm_skin").val(0); $("#lm_bg").val(0); + $("#lm_bg_2").val(0); + $("#lm_entry_bg").val(0); + $("#lm_entry_bg_bright").val(0); } else { $("#lm_skin").val(data["lm_custom"].premium_skin); $("#lm_bg").val(data["lm_custom"].premium_bg); + + if (data["lm_custom"].premium_bg_concent == undefined) $("#lm_bg_2").val(0); + else $("#lm_bg_2").val(data["lm_custom"].premium_bg_concent); + if (data["lm_custom"].entry_bg == undefined) $("#lm_entry_bg").val(0); + else $("#lm_entry_bg").val(data["lm_custom"].entry_bg); + if (data["lm_custom"].entry_bg_brightness == undefined) $("#lm_entry_bg_bright").val(0); + else $("#lm_entry_bg_bright").val(data["lm_custom"].entry_bg_brightness); } }, error: function () { diff --git a/iidx@asphyxia/webui/profile_-----detail.pug b/iidx@asphyxia/webui/profile_-----detail.pug index 945e645..e86a49c 100644 --- a/iidx@asphyxia/webui/profile_-----detail.pug +++ b/iidx@asphyxia/webui/profile_-----detail.pug @@ -4,6 +4,10 @@ - const version = [ + 10, + 11, + 12, + 13, 14, 15, 16, @@ -22,7 +26,8 @@ 29, 30, 31, - 32 + 32, + 33 ]; div diff --git a/iidx@asphyxia/webui/profile_----setting.pug b/iidx@asphyxia/webui/profile_----setting.pug index a962e28..ea15809 100644 --- a/iidx@asphyxia/webui/profile_----setting.pug +++ b/iidx@asphyxia/webui/profile_----setting.pug @@ -6,6 +6,10 @@ - const version = [ + 10, + 11, + 12, + 13, 14, 15, 16, @@ -24,7 +28,8 @@ 29, 30, 31, - 32 + 32, + 33 ]; div @@ -53,54 +58,1271 @@ div .control input.input(type="text" name="name", id="name", value=profile.name) //- SKIN - .field - label.label Frame - .control - input.input(type="number" name="frame", id="frame", value=custom.frame) - .field - label.label Turntable - .control - input.input(type="number" name="turntable", id="turntable", value=custom.turntable) - .field - label.label Note Burst - .control - input.input(type="number" name="note_burst", id="note_burst", value=custom.note_burst) .field label.label Menu Music .control input.input(type="number" name="menu_music", id="menu_music", value=custom.menu_music) - .field - label.label Lane Cover - .control - input.input(type="number" name="lane_cover", id="lane_cover", value=custom.lane_cover) .field label.label Category Voice .control input.input(type="number" name="category_vox", id="category_vox", value=custom.category_vox) + .field + label.label Frame + .control + input.input(type="number" name="frame", id="frame", value=custom.frame) + .field + label.label Turntable + .control + .select + select(name="turntable", id="turntable") + - + const turntable_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'Tran'}, + {val: 2, name: 'JOJO'}, + {val: 3, name: 'delta'}, + {val: 4, name: 'orange disc'}, + {val: 5, name: 'DistorteD'}, + {val: 6, name: 'GOLD'}, + {val: 7, name: 'DJ TROOPERS'}, + {val: 8, name: 'EMPRESS'}, + {val: 9, name: 'SIRIUS'}, + {val: 10, name: 'Resort Anthem'}, + {val: 11, name: 'Lincle'}, + {val: 12, name: 'tricoro'}, + {val: 13, name: 'SPADA'}, + {val: 14, name: '灼熱 (shakunetsu)'}, + {val: 15, name: 'only one record'}, + {val: 16, name: 'PENDUAL'}, + {val: 17, name: 'copula'}, + {val: 18, name: 'SINOBUZ'}, + {val: 19, name: 'キャノンボーラーズ (CB)'}, + {val: 20, name: 'Rootage'}, + {val: 21, name: 'HEROIC VERSE'}, + {val: 22, name: 'CastHour'}, + {val: 23, name: 'RESIDENT'}, + {val: 24, name: 'いちご (strawberry)'}, + {val: 25, name: 'EPOLIS'}, + {val: 26, name: 'Pinky Crush'} + ] + each item in turntable_types + option(value=item.val, selected=(custom.turntable == item.val)) #{item.name} + .field + label.label Note Burst + .control + .select + select(name="note_burst", id="note_burst") + - + const note_burst_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: '初代 (first gen)'}, + {val: 2, name: '9th Style'}, + {val: 3, name: 'IIDX RED'}, + {val: 4, name: 'HAPPY SKY'}, + {val: 5, name: 'DistorteD'}, + {val: 6, name: 'GOLD'}, + {val: 7, name: 'DJ TROOPERS'}, + {val: 8, name: 'EMPRESS'}, + {val: 9, name: 'SIRIUS'}, + {val: 10, name: 'Resort Anthem'}, + {val: 11, name: 'Lincle'}, + {val: 12, name: 'tricoro'}, + {val: 13, name: 'SPADA'}, + {val: 14, name: 'オンリーワンボム (only one bomb)'}, + {val: 15, name: 'PENDUAL'}, + {val: 16, name: 'copula'}, + {val: 17, name: 'SINOBUZ'}, + {val: 18, name: 'キャノンスパーク (cannon spark)'}, + {val: 19, name: 'Rootage'}, + {val: 20, name: 'HEROIC VERSE'}, + {val: 21, name: 'BISTROVERボム (BISTROVER bomb)'}, + {val: 22, name: 'いいねフラッシュ (Like👍 flash)'}, + {val: 23, name: 'RESIDENT'}, + {val: 24, name: 'EPOLIS'}, + {val: 25, name: 'Pinky Crush'} + ] + each item in note_burst_types + option(value=item.val, selected=(custom.note_burst == item.val)) #{item.name} + .field + label.label Note Burst Size + .control + .select + select(name="bomb_size", id="bomb_size") + - + const bomb_size_types = [ + {val: 0, name: 'Default (100%)'}, + {val: 1, name: '70%'}, + {val: 2, name: '80%'}, + {val: 3, name: '90%'}, + {val: 4, name: '110%'}, + {val: 5, name: '120%'}, + {val: 6, name: '130%'}, + ] + each item in bomb_size_types + option(value=item.val, selected=(custom.bomb_size == item.val)) #{item.name} .field label.label Note Skin .control - input.input(type="number" name="note_skin", id="note_skin", value=custom.note_skin) + .select + select(name="note_skin", id="note_skin") + - + const note_skin_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'Gorgeous'}, + {val: 2, name: 'Aqua'}, + {val: 3, name: 'Gyaru'}, + {val: 4, name: 'Photon'}, + {val: 5, name: 'Pastel'}, + {val: 6, name: 'Simple'}, + {val: 7, name: 'Light'}, + {val: 8, name: 'Tricoro'}, + {val: 9, name: 'Bubble'} + ] + each ns in note_skin_types + option(value=ns.val, selected=(custom.note_skin == ns.val)) #{ns.name} .field - label.label Full Combo Splash + label.label Note Size .control - input.input(type="number" name="full_combo_splash", id="full_combo_splash", value=custom.full_combo_splash) + .select + select(name="note_size", id="note_size") + - + const note_size_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'Short'}, + {val: 2, name: 'Very Short'} + ] + each item in note_size_types + option(value=item.val, selected=(custom.note_size == item.val)) #{item.name} .field label.label Note Beam .control - input.input(type="number" name="note_beam", id="note_beam", value=custom.note_beam) + .select + select(name="note_beam", id="note_beam") + - + const note_beam_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'オレンジ (orange)'}, + {val: 2, name: 'ピンク (pink)'}, + {val: 3, name: 'モノクロ (monochrome)'}, + {val: 4, name: 'ライトニング (lightning)'}, + {val: 5, name: 'オンリーワンビーム (only one beam)'}, + {val: 6, name: 'コピュライト (copula-light)'}, + {val: 7, name: 'CBビーム (CB Beam)'}, + {val: 8, name: 'HEROIC VERSE'}, + {val: 9, name: 'BISTROVER BURNER'}, + {val: 10, name: 'フレネルビーム (Fresnel beam)'}, + {val: 11, name: 'RESIDENT'}, + {val: 12, name: 'EPOLIS'}, + {val: 13, name: 'Pinky Crush'} + ] + each item in note_beam_types + option(value=item.val, selected=(custom.note_beam == item.val)) #{item.name} .field - label.label Judgement Font + label.label Note Beam Size .control - input.input(type="number" name="judge_font", id="judge_font", value=custom.judge_font) + .select + select(name="note_beam_size", id="note_beam_size") + - + const beam_sizes = [ + {val: 0, name: 'Default'}, + {val: 2, name: 'Very Short'}, + {val: 3, name: 'Long'} + ] + each b in beam_sizes + option(value=b.val, selected=(custom.note_beam_size == b.val)) #{b.name} .field - label.label Disable Music Preview + label.label Lane Cover .control - input(type="checkbox" name="disable_musicpreview", id="disable_musicpreview", checked=Boolean(custom.disable_musicpreview)) + .select + select(name="lane_cover", id="lane_cover") + - + const lane_cover_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'sigsig'}, + {val: 2, name: '内部フレーム'}, + {val: 3, name: '空'}, + {val: 4, name: 'KAMAITACHI'}, + {val: 5, name: 'タオル'}, + {val: 6, name: 'コスモス'}, + {val: 7, name: '度胸兄弟'}, + {val: 8, name: 'Blind Justice'}, + {val: 9, name: '迷彩'}, + {val: 10, name: 'bloomin feeling'}, + {val: 11, name: 'Marie Antoinette'}, + {val: 12, name: 'Elisha'}, + {val: 13, name: 'Kung-fu Empire'}, + {val: 14, name: 'Tune of beat#3'}, + {val: 15, name: 'EMPRESS'}, + {val: 16, name: 'Programmed World'}, + {val: 17, name: '3y3s'}, + {val: 18, name: 'UMEGIRI'}, + {val: 19, name: 'KANZAKI'}, + {val: 20, name: 'Rock Da House'}, + {val: 21, name: 'THE DOOR INTO RAINBOW'}, + {val: 22, name: 'Aegis'}, + {val: 23, name: 'Vermillion'}, + {val: 24, name: 'Phoenix'}, + {val: 25, name: 'Lucky Days'}, + {val: 26, name: 'Almace'}, + {val: 27, name: 'DIAMOND CROSSING'}, + {val: 28, name: 'Mamonis'}, + {val: 29, name: 'Ashemu'}, + {val: 30, name: 'Bulluvegola'}, + {val: 31, name: 'Beridzebeth'}, + {val: 32, name: 'Levaslater'}, + {val: 33, name: 'STN'}, + {val: 34, name: 'Rche'}, + {val: 35, name: 'Neulakyussra'}, + {val: 36, name: 'Cybele'}, + {val: 37, name: 'Cuvelia'}, + {val: 38, name: 'Liberation'}, + {val: 39, name: 'Praludium'}, + {val: 40, name: '少女アリスと箱庭幻想コンチェルト'}, + {val: 41, name: 'ReGENERATION'}, + {val: 42, name: '20 system bg'}, + {val: 43, name: '旋律のドグマ~Miserables~/TYPE A'}, + {val: 44, name: '旋律のドグマ~Miserables~/TYPE B'}, + {val: 45, name: 'Elektrick U-Phoria'}, + {val: 46, name: 'MAGIC & LOVE'}, + {val: 47, name: 'スパーダレリーフ'}, + {val: 48, name: 'S!ck'}, + {val: 49, name: 'CONCEPTUAL'}, + {val: 50, name: 'ΕΛΠΙΣ'}, + {val: 51, name: 'rumrum triplets'}, + {val: 52, name: 'SYNC-ANTHEM'}, + {val: 53, name: 'Thor\'s Hammer'}, + {val: 54, name: 'Plan 8'}, + {val: 55, name: '仮想空間の旅人たち'}, + {val: 56, name: '8bit Princess'}, + {val: 57, name: 'planarian'}, + {val: 58, name: 'Dynamite'}, + {val: 59, name: '龍と少女とデコヒーレンス'}, + {val: 60, name: 'トリカゴノ鳳凰'}, + {val: 61, name: 'Proof of the existence'}, + {val: 62, name: 'BRAVE GLOW/機動怪獣リングール'}, + {val: 63, name: 'BRAVE GLOW/トリコロイダー'}, + {val: 64, name: 'VEGA/VEGAうさぎ'}, + {val: 65, name: 'VEGA/中のひと'}, + {val: 66, name: 'カジノファイヤーことみちゃん'}, + {val: 67, name: 'New Lights'}, + {val: 68, name: '灼熱くんやきそば'}, + {val: 69, name: '即席!脳直★ミュージックシステム'}, + {val: 70, name: 'キャトられ恋はモ~モク'}, + {val: 71, name: 'オンリーワンカバー'}, + {val: 72, name: 'ジザル'}, + {val: 73, name: 'ジャックティーロ'}, + {val: 74, name: 'ジャックハンス'}, + {val: 75, name: 'イェンス'}, + {val: 76, name: 'アムドゥシアン'}, + {val: 77, name: 'マクスウェリオン'}, + {val: 78, name: 'ラプラシア'}, + {val: 79, name: 'ルシェ'}, + {val: 80, name: 'スモモ'}, + {val: 81, name: 'ファウラ'}, + {val: 82, name: 'ベリゼベス'}, + {val: 83, name: 'エルピス・キラ'}, + {val: 84, name: 'フェリーラ'}, + {val: 85, name: 'オールパトナ'}, + {val: 86, name: 'あいむちゃん'}, + {val: 87, name: '人魚のPrim'}, + {val: 88, name: 'アヤカシ二人'}, + {val: 89, name: 'SHELTER OF THE MIND'}, + {val: 90, name: 'Acid Pumper'}, + {val: 91, name: 'X'}, + {val: 92, name: 'ハーティー'}, + {val: 93, name: 'Nightmare before oversleep'}, + {val: 94, name: 'Highcharge Divolt'}, + {val: 95, name: 'Godspeed(少年)'}, + {val: 96, name: '車掌イージス'}, + {val: 97, name: 'GENERATE'}, + {val: 98, name: 'Dynamite'}, + {val: 99, name: '格闘乙女'}, + {val: 100, name: 'レル DX2300系'}, + {val: 101, name: 'つゆ太'}, + {val: 102, name: 'La dolce primavera'}, + {val: 103, name: 'AO-1'}, + {val: 104, name: '真 地獄超特急 -HELL or HELL-'}, + {val: 105, name: 'モード'}, + {val: 106, name: 'ミニョンヌ鉄道兄弟'}, + {val: 107, name: '冬椿'}, + {val: 108, name: 'PAPAYAPA BASS'}, + {val: 109, name: '鴉'}, + {val: 110, name: 'AsiaN distractive'}, + {val: 111, name: 'TOGAKUSHI'}, + {val: 112, name: 'Modular Technology'}, + {val: 113, name: '獅子霞麗ノ舞'}, + {val: 114, name: 'Music is The Answer'}, + {val: 115, name: '!Viva!'}, + {val: 116, name: 'SINOBUZ UI'}, + {val: 117, name: 'ChaserXX'}, + {val: 118, name: 'Amor De Verao'}, + {val: 119, name: 'エディブルフラワーの独白'}, + {val: 120, name: 'ハイ*ビスカス ft. Kanae Asaba'}, + {val: 121, name: 'Midnight Lady'}, + {val: 122, name: 'FUTURE is Dead'}, + {val: 123, name: 'Break Stasis'}, + {val: 124, name: '草原の王女-軌跡を辿って-'}, + {val: 125, name: '25UI'}, + {val: 126, name: '焔極OVERKILL'}, + {val: 127, name: 'Breakin\' Chain'}, + {val: 128, name: '津軽雪'}, + {val: 129, name: 'Exhaust Hype'}, + {val: 130, name: 'Yellow Sketch(RX-Ver.S.P.L.)'}, + {val: 131, name: 'Steel Edge'}, + {val: 132, name: 'Go Ahead!!'}, + {val: 133, name: 'Sky High'}, + {val: 134, name: 'イザナミノナゲキ'}, + {val: 135, name: 'GuNGNiR'}, + {val: 136, name: 'ディッシュウォッシャー◎彡おいわちゃん'}, + {val: 137, name: 'BroGamer'}, + {val: 138, name: 'FUZIN RIZIN'}, + {val: 139, name: 'Mare Nectaris'}, + {val: 140, name: 'Quakes'}, + {val: 141, name: 'Rave Cannon'}, + {val: 142, name: 'ECHIDNA'}, + {val: 143, name: 'Snakey Kung-fu'}, + {val: 144, name: '刃図羅'}, + {val: 145, name: '忍恋花'}, + {val: 146, name: '法具「バズラ」'}, + {val: 147, name: 'HADES'}, + {val: 148, name: 'DEATH†ZIGOQ'}, + {val: 149, name: '東京神話'}, + {val: 150, name: 'Initiation'}, + {val: 151, name: 'EMERALDAS'}, + {val: 152, name: 'Chemical Cookie'}, + {val: 153, name: 'ナイトシティー・アヴァンチュール'}, + {val: 154, name: 'シムルグの目醒め'}, + {val: 155, name: 'n\'pa pa BBQ'}, + {val: 156, name: 'ANCHOR'}, + {val: 157, name: 'IIDX AIR RACE'}, + {val: 158, name: 'THE DAY OF JUBILATIONS'}, + {val: 159, name: 'HEISEI'}, + {val: 160, name: 'IDC feat.REVERBEE (Mo\'Cuts Ver)'}, + {val: 161, name: 'Yum Yum Jelly'}, + {val: 162, name: '夏の匂い。キミの残像。 ft. Kanae Asaba'}, + {val: 163, name: 'Hurry Hurry'}, + {val: 164, name: 'OVERTIME'}, + {val: 165, name: 'ミストレス・アンに花束を'}, + {val: 166, name: 'Ember Lights'}, + {val: 167, name: 'Rootage'}, + {val: 168, name: 'Urban Constellations'}, + {val: 169, name: '金野火織の金色提言'}, + {val: 170, name: '龍王の霊廟(Mausoleum Of The Primal Dragon)'}, + {val: 171, name: 'Painful Fate'}, + {val: 172, name: 'Drastic Dramatic'}, + {val: 173, name: '抱きしめてモナムール'}, + {val: 174, name: 'Trill auf G'}, + {val: 175, name: 'Lethal Weapon'}, + {val: 176, name: 'HEROIC VERSE'}, + {val: 177, name: 'Primitive Vibes'}, + {val: 178, name: 'Calvados Queen'}, + {val: 179, name: 'Ska-sh All Neurons!!'}, + {val: 180, name: 'Moving on'}, + {val: 181, name: 'Hyper Drive feat. ぷにぷに電機'}, + {val: 182, name: 'THE BRAVE MUST DIE'}, + {val: 183, name: '曼荼羅恋々'}, + {val: 184, name: 'Silly Love'}, + {val: 185, name: 'Change Yourself'}, + {val: 186, name: 'Virus Funk'}, + {val: 187, name: 'lane187'}, + {val: 188, name: 'lane188'}, + {val: 189, name: 'lane189'}, + {val: 190, name: 'lane190'}, + {val: 191, name: 'lane191'}, + {val: 192, name: 'lane192'}, + {val: 193, name: 'lane193'}, + {val: 194, name: '涙のテ・エストラーニョ・ムーチョ'}, + {val: 195, name: '∀'}, + {val: 196, name: 'S-Bahn'}, + {val: 197, name: 'Vitrum'}, + {val: 198, name: '水無月の雫'}, + {val: 199, name: 'Lovely Howdy Cowboy!!'}, + {val: 200, name: 'WAKE UP NOW'}, + {val: 201, name: '魔法のかくれんぼ'}, + {val: 202, name: 'POLKAMAИIA'}, + {val: 203, name: 'POLKAMAИIA<2>'}, + {val: 204, name: '犬に雨傘'}, + {val: 205, name: 'Ah Hah Yeah'}, + {val: 206, name: 'HIGH VOLTAGE'}, + {val: 207, name: 'IIDX28汎用'}, + {val: 208, name: 'Chewingood!!!'}, + {val: 209, name: 'がっつり陰キャ!? 怪盗いいんちょの億劫'}, + {val: 210, name: 'がっつり陰キャ!? 怪盗いいんちょの億劫<2>'}, + {val: 211, name: '魅惑のYUMMYスイーツ'}, + {val: 212, name: '度胸兄弟'}, + {val: 213, name: 'STOIC HYPOTHESIS'}, + {val: 214, name: 'GHOST'}, + {val: 215, name: 'GIGA VIOLATE'}, + {val: 216, name: 'Crank It'}, + {val: 217, name: 'Horizons of Promise'}, + {val: 218, name: 'Backyard Stars'}, + {val: 219, name: 'Smashing Wedge'}, + {val: 220, name: 'HEROIC VERSE Shutter'}, + {val: 221, name: 'LIGHTNING MODEL'}, + {val: 222, name: 'ARENA UI 2.0'}, + {val: 223, name: '華麗なる大犬円舞曲'}, + {val: 224, name: 'lane224'}, + {val: 225, name: 'lane225'}, + {val: 226, name: '召しませ!BISTROVER'}, + {val: 227, name: 'ピンシェフくん'}, + {val: 228, name: 'バッド・スイーツ、バッド・ドリーム'}, + {val: 229, name: 'Sinus Iridum'}, + {val: 230, name: 'ジェイ君とドゥイさん'}, + {val: 231, name: 'あまいじかん'}, + {val: 232, name: 'リフレナ'}, + {val: 233, name: 'THE PEERLESS UNDER HEAVEN'}, + {val: 234, name: '二人ノ廃城幽踊宴'}, + {val: 235, name: '乱膳の舞姫'}, + {val: 236, name: 'ハイテックトキオ'}, + {val: 237, name: '月とミルク'}, + {val: 238, name: 'Ariah'}, + {val: 239, name: 'LIVE DRIVING!! feat. 花たん'}, + {val: 240, name: 'Wonderful Escape'}, + {val: 241, name: 'GiGaGaHell'}, + {val: 242, name: 'オールトの雲'}, + {val: 243, name: 'Ventriloquist'}, + {val: 244, name: 'DREAM OF SPACE UFO ABDUCTION'}, + {val: 245, name: 'Skreaming for Salvation'}, + {val: 246, name: 'lane246'}, + {val: 247, name: 'lane247'}, + {val: 248, name: 'lane248'}, + {val: 249, name: 'lane249'}, + {val: 250, name: 'lane250'}, + {val: 251, name: 'lane251'}, + {val: 252, name: 'lane252'}, + {val: 253, name: 'lane253'}, + {val: 254, name: 'lane254'}, + {val: 255, name: 'lane255'}, + {val: 256, name: 'lane256'}, + {val: 257, name: 'もにに'}, + {val: 258, name: 'ピカグレ御守'}, + {val: 259, name: 'ふるこんぼ御守'}, + {val: 260, name: 'ANEMONE'}, + {val: 261, name: 'お肉'}, + {val: 262, name: 'WHA'}, + {val: 263, name: 'ABSOLUTE EVIL'}, + {val: 264, name: 'RAGE feat.H14 of LEONAIR'}, + {val: 265, name: 'RESIDENT UI'}, + {val: 266, name: 'B.O.D.Y.'}, + {val: 267, name: 'Shadow World'}, + {val: 268, name: 'TECHNOPHOBIA'}, + {val: 269, name: 'Programmed Genom'}, + {val: 270, name: 'C-C-C-N-N-N'}, + {val: 271, name: '儚キ戀ノ幻想譚'}, + {val: 272, name: 'きゅんです。'}, + {val: 273, name: 'Summerblue'}, + {val: 274, name: '罪過の聖堂'}, + {val: 275, name: 'CUE CUE RESCUE'}, + {val: 276, name: 'Sunny Day Vibes'}, + {val: 277, name: 'lane277'}, + {val: 278, name: 'lane278'}, + {val: 279, name: 'lane279'}, + {val: 280, name: 'lane280'}, + {val: 281, name: 'lane281'}, + {val: 282, name: 'lane282'}, + {val: 283, name: 'lane283'}, + {val: 284, name: 'lane284'}, + {val: 285, name: 'lane285'}, + {val: 286, name: 'Beyond Evolution'}, + {val: 287, name: 'AWA AWA'}, + {val: 288, name: 'BIGWAVERS'}, + {val: 289, name: 'ONE AND ONLY'}, + {val: 290, name: '■□模様'}, + {val: 291, name: 'ちょえちょえまぎか'}, + {val: 292, name: '栄冠のカンパネラ'}, + {val: 293, name: 'Xerulean'}, + {val: 294, name: 'STRAIGHT TO THE STARS'}, + {val: 295, name: 'JUSTICE/GUILTY'}, + {val: 296, name: 'EPOLIS UI'}, + {val: 297, name: 'Dahlia'}, + {val: 298, name: 'シンデレラ'}, + {val: 299, name: 'れとりば!'}, + {val: 300, name: '夢縁'}, + {val: 301, name: 'SOLAR ECLIPSE'}, + {val: 302, name: 'Ghost Pulse'}, + {val: 303, name: 'Iris'}, + {val: 304, name: 'Get Higher'}, + {val: 305, name: 'アタシ完全絶対正義ちゃん!'}, + {val: 306, name: 'lane306'}, + {val: 307, name: 'lane307'}, + {val: 308, name: 'lane308'}, + {val: 309, name: 'lane309'}, + {val: 310, name: 'lane310'}, + {val: 311, name: 'lane311'}, + {val: 312, name: 'lane312'}, + {val: 313, name: 'lane313'}, + {val: 314, name: 'INHERITANCE'}, + {val: 315, name: 'CADENZA'}, + {val: 316, name: 'Cult Invitation'}, + {val: 317, name: '電子になりたい'}, + {val: 318, name: 'MAXIMUM CHEAT GIRL'}, + {val: 319, name: 'Out of Control'}, + {val: 320, name: 'Glitch N Ride'}, + {val: 321, name: '惑星鉄道'}, + {val: 322, name: 'COUNTING SHEEP'}, + {val: 323, name: 'マイポリスデザイナー'}, + {val: 324, name: 'Pinky Crush'}, + {val: 325, name: 'PIT A PAT'}, + {val: 326, name: '最強頂戴girl'}, + {val: 327, name: 'Vibing! Shake it!'}, + {val: 328, name: 'FERMI PARADOX'}, + {val: 329, name: '灼熱 Lost Summer Dayz'}, + {val: 330, name: 'get set mind'}, + {val: 331, name: 'Raspberry Potion'}, + {val: 332, name: 'Secret Rouge'} + ] + each item in lane_cover_types + option(value=item.val, selected=(custom.lane_cover == item.val)) #{item.name} + .field + label.label Lift Cover + .control + .select + select(name="lift_cover", id="lift_cover") + - + const lift_cover_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'sigsig'}, + {val: 2, name: '内部フレーム'}, + {val: 3, name: '空'}, + {val: 4, name: 'KAMAITACHI'}, + {val: 5, name: 'タオル'}, + {val: 6, name: 'コスモス'}, + {val: 7, name: '度胸兄弟'}, + {val: 8, name: 'Blind Justice'}, + {val: 9, name: '迷彩'}, + {val: 10, name: 'bloomin feeling'}, + {val: 11, name: 'Marie Antoinette'}, + {val: 12, name: 'Elisha'}, + {val: 13, name: 'Kung-fu Empire'}, + {val: 14, name: 'Tune of beat#3'}, + {val: 15, name: 'EMPRESS'}, + {val: 16, name: 'Programmed World'}, + {val: 17, name: '3y3s'}, + {val: 18, name: 'UMEGIRI'}, + {val: 19, name: 'KANZAKI'}, + {val: 20, name: 'Rock Da House'}, + {val: 21, name: 'THE DOOR INTO RAINBOW'}, + {val: 22, name: 'Aegis'}, + {val: 23, name: 'Vermillion'}, + {val: 24, name: 'Phoenix'}, + {val: 25, name: 'Lucky Days'}, + {val: 26, name: 'Almace'}, + {val: 27, name: 'DIAMOND CROSSING'}, + {val: 28, name: 'Mamonis'}, + {val: 29, name: 'Ashemu'}, + {val: 30, name: 'Bulluvegola'}, + {val: 31, name: 'Beridzebeth'}, + {val: 32, name: 'Levaslater'}, + {val: 33, name: 'STN'}, + {val: 34, name: 'Rche'}, + {val: 35, name: 'Neulakyussra'}, + {val: 36, name: 'Cybele'}, + {val: 37, name: 'Cuvelia'}, + {val: 38, name: 'Liberation'}, + {val: 39, name: 'Praludium'}, + {val: 40, name: '少女アリスと箱庭幻想コンチェルト'}, + {val: 41, name: 'ReGENERATION'}, + {val: 42, name: '20 system bg'}, + {val: 43, name: '旋律のドグマ~Miserables~/TYPE A'}, + {val: 44, name: '旋律のドグマ~Miserables~/TYPE B'}, + {val: 45, name: 'Elektrick U-Phoria'}, + {val: 46, name: 'MAGIC & LOVE'}, + {val: 47, name: 'スパーダレリーフ'}, + {val: 48, name: 'S!ck'}, + {val: 49, name: 'CONCEPTUAL'}, + {val: 50, name: 'ΕΛΠΙΣ'}, + {val: 51, name: 'rumrum triplets'}, + {val: 52, name: 'SYNC-ANTHEM'}, + {val: 53, name: 'Thor\'s Hammer'}, + {val: 54, name: 'Plan 8'}, + {val: 55, name: '仮想空間の旅人たち'}, + {val: 56, name: '8bit Princess'}, + {val: 57, name: 'planarian'}, + {val: 58, name: 'Dynamite'}, + {val: 59, name: '龍と少女とデコヒーレンス'}, + {val: 60, name: 'トリカゴノ鳳凰'}, + {val: 61, name: 'Proof of the existence'}, + {val: 62, name: 'BRAVE GLOW/機動怪獣リングール'}, + {val: 63, name: 'BRAVE GLOW/トリコロイダー'}, + {val: 64, name: 'VEGA/VEGAうさぎ'}, + {val: 65, name: 'VEGA/中のひと'}, + {val: 66, name: 'カジノファイヤーことみちゃん'}, + {val: 67, name: 'New Lights'}, + {val: 68, name: '灼熱くんやきそば'}, + {val: 69, name: '即席!脳直★ミュージックシステム'}, + {val: 70, name: 'キャトられ恋はモ~モク'}, + {val: 71, name: 'オンリーワンカバー'}, + {val: 72, name: 'ジザル'}, + {val: 73, name: 'ジャックティーロ'}, + {val: 74, name: 'ジャックハンス'}, + {val: 75, name: 'イェンス'}, + {val: 76, name: 'アムドゥシアン'}, + {val: 77, name: 'マクスウェリオン'}, + {val: 78, name: 'ラプラシア'}, + {val: 79, name: 'ルシェ'}, + {val: 80, name: 'スモモ'}, + {val: 81, name: 'ファウラ'}, + {val: 82, name: 'ベリゼベス'}, + {val: 83, name: 'エルピス・キラ'}, + {val: 84, name: 'フェリーラ'}, + {val: 85, name: 'オールパトナ'}, + {val: 86, name: 'あいむちゃん'}, + {val: 87, name: '人魚のPrim'}, + {val: 88, name: 'アヤカシ二人'}, + {val: 89, name: 'SHELTER OF THE MIND'}, + {val: 90, name: 'Acid Pumper'}, + {val: 91, name: 'X'}, + {val: 92, name: 'ハーティー'}, + {val: 93, name: 'Nightmare before oversleep'}, + {val: 94, name: 'Highcharge Divolt'}, + {val: 95, name: 'Godspeed(少年)'}, + {val: 96, name: '車掌イージス'}, + {val: 97, name: 'GENERATE'}, + {val: 98, name: 'Dynamite'}, + {val: 99, name: '格闘乙女'}, + {val: 100, name: 'レル DX2300系'}, + {val: 101, name: 'つゆ太'}, + {val: 102, name: 'La dolce primavera'}, + {val: 103, name: 'AO-1'}, + {val: 104, name: '真 地獄超特急 -HELL or HELL-'}, + {val: 105, name: 'モード'}, + {val: 106, name: 'ミニョンヌ鉄道兄弟'}, + {val: 107, name: '冬椿'}, + {val: 108, name: 'PAPAYAPA BASS'}, + {val: 109, name: '鴉'}, + {val: 110, name: 'AsiaN distractive'}, + {val: 111, name: 'TOGAKUSHI'}, + {val: 112, name: 'Modular Technology'}, + {val: 113, name: '獅子霞麗ノ舞'}, + {val: 114, name: 'Music is The Answer'}, + {val: 115, name: '!Viva!'}, + {val: 116, name: 'SINOBUZ UI'}, + {val: 117, name: 'ChaserXX'}, + {val: 118, name: 'Amor De Verao'}, + {val: 119, name: 'エディブルフラワーの独白'}, + {val: 120, name: 'ハイ*ビスカス ft. Kanae Asaba'}, + {val: 121, name: 'Midnight Lady'}, + {val: 122, name: 'FUTURE is Dead'}, + {val: 123, name: 'Break Stasis'}, + {val: 124, name: '草原の王女-軌跡を辿って-'}, + {val: 125, name: '25UI'}, + {val: 126, name: '焔極OVERKILL'}, + {val: 127, name: 'Breakin\' Chain'}, + {val: 128, name: '津軽雪'}, + {val: 129, name: 'Exhaust Hype'}, + {val: 130, name: 'Yellow Sketch(RX-Ver.S.P.L.)'}, + {val: 131, name: 'Steel Edge'}, + {val: 132, name: 'Go Ahead!!'}, + {val: 133, name: 'Sky High'}, + {val: 134, name: 'イザナミノナゲキ'}, + {val: 135, name: 'GuNGNiR'}, + {val: 136, name: 'ディッシュウォッシャー◎彡おいわちゃん'}, + {val: 137, name: 'BroGamer'}, + {val: 138, name: 'FUZIN RIZIN'}, + {val: 139, name: 'Mare Nectaris'}, + {val: 140, name: 'Quakes'}, + {val: 141, name: 'Rave Cannon'}, + {val: 142, name: 'ECHIDNA'}, + {val: 143, name: 'Snakey Kung-fu'}, + {val: 144, name: '刃図羅'}, + {val: 145, name: '忍恋花'}, + {val: 146, name: '法具「バズラ」'}, + {val: 147, name: 'HADES'}, + {val: 148, name: 'DEATH†ZIGOQ'}, + {val: 149, name: '東京神話'}, + {val: 150, name: 'Initiation'}, + {val: 151, name: 'EMERALDAS'}, + {val: 152, name: 'Chemical Cookie'}, + {val: 153, name: 'ナイトシティー・アヴァンチュール'}, + {val: 154, name: 'シムルグの目醒め'}, + {val: 155, name: 'n\'pa pa BBQ'}, + {val: 156, name: 'ANCHOR'}, + {val: 157, name: 'IIDX AIR RACE'}, + {val: 158, name: 'THE DAY OF JUBILATIONS'}, + {val: 159, name: 'HEISEI'}, + {val: 160, name: 'IDC feat.REVERBEE (Mo\'Cuts Ver)'}, + {val: 161, name: 'Yum Yum Jelly'}, + {val: 162, name: '夏の匂い。キミの残像。 ft. Kanae Asaba'}, + {val: 163, name: 'Hurry Hurry'}, + {val: 164, name: 'OVERTIME'}, + {val: 165, name: 'ミストレス・アンに花束を'}, + {val: 166, name: 'Ember Lights'}, + {val: 167, name: 'Rootage'}, + {val: 168, name: 'Urban Constellations'}, + {val: 169, name: '金野火織の金色提言'}, + {val: 170, name: '龍王の霊廟(Mausoleum Of The Primal Dragon)'}, + {val: 171, name: 'Painful Fate'}, + {val: 172, name: 'Drastic Dramatic'}, + {val: 173, name: '抱きしめてモナムール'}, + {val: 174, name: 'Trill auf G'}, + {val: 175, name: 'Lethal Weapon'}, + {val: 176, name: 'HEROIC VERSE'}, + {val: 177, name: 'Primitive Vibes'}, + {val: 178, name: 'Calvados Queen'}, + {val: 179, name: 'Ska-sh All Neurons!!'}, + {val: 180, name: 'Moving on'}, + {val: 181, name: 'Hyper Drive feat. ぷにぷに電機'}, + {val: 182, name: 'THE BRAVE MUST DIE'}, + {val: 183, name: '曼荼羅恋々'}, + {val: 184, name: 'Silly Love'}, + {val: 185, name: 'Change Yourself'}, + {val: 186, name: 'Virus Funk'}, + {val: 187, name: 'lane187'}, + {val: 188, name: 'lane188'}, + {val: 189, name: 'lane189'}, + {val: 190, name: 'lane190'}, + {val: 191, name: 'lane191'}, + {val: 192, name: 'lane192'}, + {val: 193, name: 'lane193'}, + {val: 194, name: '涙のテ・エストラーニョ・ムーチョ'}, + {val: 195, name: '∀'}, + {val: 196, name: 'S-Bahn'}, + {val: 197, name: 'Vitrum'}, + {val: 198, name: '水無月の雫'}, + {val: 199, name: 'Lovely Howdy Cowboy!!'}, + {val: 200, name: 'WAKE UP NOW'}, + {val: 201, name: '魔法のかくれんぼ'}, + {val: 202, name: 'POLKAMAИIA'}, + {val: 203, name: 'POLKAMAИIA<2>'}, + {val: 204, name: '犬に雨傘'}, + {val: 205, name: 'Ah Hah Yeah'}, + {val: 206, name: 'HIGH VOLTAGE'}, + {val: 207, name: 'IIDX28汎用'}, + {val: 208, name: 'Chewingood!!!'}, + {val: 209, name: 'がっつり陰キャ!? 怪盗いいんちょの億劫'}, + {val: 210, name: 'がっつり陰キャ!? 怪盗いいんちょの億劫<2>'}, + {val: 211, name: '魅惑のYUMMYスイーツ'}, + {val: 212, name: '度胸兄弟'}, + {val: 213, name: 'STOIC HYPOTHESIS'}, + {val: 214, name: 'GHOST'}, + {val: 215, name: 'GIGA VIOLATE'}, + {val: 216, name: 'Crank It'}, + {val: 217, name: 'Horizons of Promise'}, + {val: 218, name: 'Backyard Stars'}, + {val: 219, name: 'Smashing Wedge'}, + {val: 220, name: 'HEROIC VERSE Shutter'}, + {val: 221, name: 'LIGHTNING MODEL'}, + {val: 222, name: 'ARENA UI 2.0'}, + {val: 223, name: '華麗なる大犬円舞曲'}, + {val: 224, name: 'lane224'}, + {val: 225, name: 'lane225'}, + {val: 226, name: '召しませ!BISTROVER'}, + {val: 227, name: 'ピンシェフくん'}, + {val: 228, name: 'バッド・スイーツ、バッド・ドリーム'}, + {val: 229, name: 'Sinus Iridum'}, + {val: 230, name: 'ジェイ君とドゥイさん'}, + {val: 231, name: 'あまいじかん'}, + {val: 232, name: 'リフレナ'}, + {val: 233, name: 'THE PEERLESS UNDER HEAVEN'}, + {val: 234, name: '二人ノ廃城幽踊宴'}, + {val: 235, name: '乱膳の舞姫'}, + {val: 236, name: 'ハイテックトキオ'}, + {val: 237, name: '月とミルク'}, + {val: 238, name: 'Ariah'}, + {val: 239, name: 'LIVE DRIVING!! feat. 花たん'}, + {val: 240, name: 'Wonderful Escape'}, + {val: 241, name: 'GiGaGaHell'}, + {val: 242, name: 'オールトの雲'}, + {val: 243, name: 'Ventriloquist'}, + {val: 244, name: 'DREAM OF SPACE UFO ABDUCTION'}, + {val: 245, name: 'Skreaming for Salvation'}, + {val: 246, name: 'lane246'}, + {val: 247, name: 'lane247'}, + {val: 248, name: 'lane248'}, + {val: 249, name: 'lane249'}, + {val: 250, name: 'lane250'}, + {val: 251, name: 'lane251'}, + {val: 252, name: 'lane252'}, + {val: 253, name: 'lane253'}, + {val: 254, name: 'lane254'}, + {val: 255, name: 'lane255'}, + {val: 256, name: 'lane256'}, + {val: 257, name: 'もにに'}, + {val: 258, name: 'ピカグレ御守'}, + {val: 259, name: 'ふるこんぼ御守'}, + {val: 260, name: 'ANEMONE'}, + {val: 261, name: 'お肉'}, + {val: 262, name: 'WHA'}, + {val: 263, name: 'ABSOLUTE EVIL'}, + {val: 264, name: 'RAGE feat.H14 of LEONAIR'}, + {val: 265, name: 'RESIDENT UI'}, + {val: 266, name: 'B.O.D.Y.'}, + {val: 267, name: 'Shadow World'}, + {val: 268, name: 'TECHNOPHOBIA'}, + {val: 269, name: 'Programmed Genom'}, + {val: 270, name: 'C-C-C-N-N-N'}, + {val: 271, name: '儚キ戀ノ幻想譚'}, + {val: 272, name: 'きゅんです。'}, + {val: 273, name: 'Summerblue'}, + {val: 274, name: '罪過の聖堂'}, + {val: 275, name: 'CUE CUE RESCUE'}, + {val: 276, name: 'Sunny Day Vibes'}, + {val: 277, name: 'lane277'}, + {val: 278, name: 'lane278'}, + {val: 279, name: 'lane279'}, + {val: 280, name: 'lane280'}, + {val: 281, name: 'lane281'}, + {val: 282, name: 'lane282'}, + {val: 283, name: 'lane283'}, + {val: 284, name: 'lane284'}, + {val: 285, name: 'lane285'}, + {val: 286, name: 'Beyond Evolution'}, + {val: 287, name: 'AWA AWA'}, + {val: 288, name: 'BIGWAVERS'}, + {val: 289, name: 'ONE AND ONLY'}, + {val: 290, name: '■□模様'}, + {val: 291, name: 'ちょえちょえまぎか'}, + {val: 292, name: '栄冠のカンパネラ'}, + {val: 293, name: 'Xerulean'}, + {val: 294, name: 'STRAIGHT TO THE STARS'}, + {val: 295, name: 'JUSTICE/GUILTY'}, + {val: 296, name: 'EPOLIS UI'}, + {val: 297, name: 'Dahlia'}, + {val: 298, name: 'シンデレラ'}, + {val: 299, name: 'れとりば!'}, + {val: 300, name: '夢縁'}, + {val: 301, name: 'SOLAR ECLIPSE'}, + {val: 302, name: 'Ghost Pulse'}, + {val: 303, name: 'Iris'}, + {val: 304, name: 'Get Higher'}, + {val: 305, name: 'アタシ完全絶対正義ちゃん!'}, + {val: 306, name: 'lane306'}, + {val: 307, name: 'lane307'}, + {val: 308, name: 'lane308'}, + {val: 309, name: 'lane309'}, + {val: 310, name: 'lane310'}, + {val: 311, name: 'lane311'}, + {val: 312, name: 'lane312'}, + {val: 313, name: 'lane313'}, + {val: 314, name: 'INHERITANCE'}, + {val: 315, name: 'CADENZA'}, + {val: 316, name: 'Cult Invitation'}, + {val: 317, name: '電子になりたい'}, + {val: 318, name: 'MAXIMUM CHEAT GIRL'}, + {val: 319, name: 'Out of Control'}, + {val: 320, name: 'Glitch N Ride'}, + {val: 321, name: '惑星鉄道'}, + {val: 322, name: 'COUNTING SHEEP'}, + {val: 323, name: 'マイポリスデザイナー'}, + {val: 324, name: 'Pinky Crush'}, + {val: 325, name: 'PIT A PAT'}, + {val: 326, name: '最強頂戴girl'}, + {val: 327, name: 'Vibing! Shake it!'}, + {val: 328, name: 'FERMI PARADOX'}, + {val: 329, name: '灼熱 Lost Summer Dayz'}, + {val: 330, name: 'get set mind'}, + {val: 331, name: 'Raspberry Potion'}, + {val: 332, name: 'Secret Rouge'} + ] + each item in lift_cover_types + option(value=item.val, selected=(custom.lift_cover == item.val)) #{item.name} .field label.label Pacemaker Cover .control - input.input(type="number" name="pacemaker_cover", id="pacemaker_cover", value=custom.pacemaker_cover) + .select + select(name="pacemaker_cover", id="pacemaker_cover") + - + const pacemaker_cover_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'sigsig'}, + {val: 2, name: '内部フレーム'}, + {val: 3, name: '空'}, + {val: 4, name: 'KAMAITACHI'}, + {val: 5, name: 'タオル'}, + {val: 6, name: 'コスモス'}, + {val: 7, name: '度胸兄弟'}, + {val: 8, name: 'Blind Justice'}, + {val: 9, name: '迷彩'}, + {val: 10, name: 'bloomin feeling'}, + {val: 11, name: 'Marie Antoinette'}, + {val: 12, name: 'Elisha'}, + {val: 13, name: 'Kung-fu Empire'}, + {val: 14, name: 'Tune of beat#3'}, + {val: 15, name: 'EMPRESS'}, + {val: 16, name: 'Programmed World'}, + {val: 17, name: '3y3s'}, + {val: 18, name: 'UMEGIRI'}, + {val: 19, name: 'KANZAKI'}, + {val: 20, name: 'Rock Da House'}, + {val: 21, name: 'THE DOOR INTO RAINBOW'}, + {val: 22, name: 'Aegis'}, + {val: 23, name: 'Vermillion'}, + {val: 24, name: 'Phoenix'}, + {val: 25, name: 'Lucky Days'}, + {val: 26, name: 'Almace'}, + {val: 27, name: 'DIAMOND CROSSING'}, + {val: 28, name: 'Mamonis'}, + {val: 29, name: 'Ashemu'}, + {val: 30, name: 'Bulluvegola'}, + {val: 31, name: 'Beridzebeth'}, + {val: 32, name: 'Levaslater'}, + {val: 33, name: 'STN'}, + {val: 34, name: 'Rche'}, + {val: 35, name: 'Neulakyussra'}, + {val: 36, name: 'Cybele'}, + {val: 37, name: 'Cuvelia'}, + {val: 38, name: 'Liberation'}, + {val: 39, name: 'Praludium'}, + {val: 40, name: '少女アリスと箱庭幻想コンチェルト'}, + {val: 41, name: 'ReGENERATION'}, + {val: 42, name: '20 system bg'}, + {val: 43, name: '旋律のドグマ~Miserables~/TYPE A'}, + {val: 44, name: '旋律のドグマ~Miserables~/TYPE B'}, + {val: 45, name: 'Elektrick U-Phoria'}, + {val: 46, name: 'MAGIC & LOVE'}, + {val: 47, name: 'スパーダレリーフ'}, + {val: 48, name: 'S!ck'}, + {val: 49, name: 'CONCEPTUAL'}, + {val: 50, name: 'ΕΛΠΙΣ'}, + {val: 51, name: 'rumrum triplets'}, + {val: 52, name: 'SYNC-ANTHEM'}, + {val: 53, name: 'Thor\'s Hammer'}, + {val: 54, name: 'Plan 8'}, + {val: 55, name: '仮想空間の旅人たち'}, + {val: 56, name: '8bit Princess'}, + {val: 57, name: 'planarian'}, + {val: 58, name: 'Dynamite'}, + {val: 59, name: '龍と少女とデコヒーレンス'}, + {val: 60, name: 'トリカゴノ鳳凰'}, + {val: 61, name: 'Proof of the existence'}, + {val: 62, name: 'BRAVE GLOW/機動怪獣リングール'}, + {val: 63, name: 'BRAVE GLOW/トリコロイダー'}, + {val: 64, name: 'VEGA/VEGAうさぎ'}, + {val: 65, name: 'VEGA/中のひと'}, + {val: 66, name: 'カジノファイヤーことみちゃん'}, + {val: 67, name: 'New Lights'}, + {val: 68, name: '灼熱くんやきそば'}, + {val: 69, name: '即席!脳直★ミュージックシステム'}, + {val: 70, name: 'キャトられ恋はモ~モク'}, + {val: 71, name: 'オンリーワンカバー'}, + {val: 72, name: 'ジザル'}, + {val: 73, name: 'ジャックティーロ'}, + {val: 74, name: 'ジャックハンス'}, + {val: 75, name: 'イェンス'}, + {val: 76, name: 'アムドゥシアン'}, + {val: 77, name: 'マクスウェリオン'}, + {val: 78, name: 'ラプラシア'}, + {val: 79, name: 'ルシェ'}, + {val: 80, name: 'スモモ'}, + {val: 81, name: 'ファウラ'}, + {val: 82, name: 'ベリゼベス'}, + {val: 83, name: 'エルピス・キラ'}, + {val: 84, name: 'フェリーラ'}, + {val: 85, name: 'オールパトナ'}, + {val: 86, name: 'あいむちゃん'}, + {val: 87, name: '人魚のPrim'}, + {val: 88, name: 'アヤカシ二人'}, + {val: 89, name: 'SHELTER OF THE MIND'}, + {val: 90, name: 'Acid Pumper'}, + {val: 91, name: 'X'}, + {val: 92, name: 'ハーティー'}, + {val: 93, name: 'Nightmare before oversleep'}, + {val: 94, name: 'Highcharge Divolt'}, + {val: 95, name: 'Godspeed(少年)'}, + {val: 96, name: '車掌イージス'}, + {val: 97, name: 'GENERATE'}, + {val: 98, name: 'Dynamite'}, + {val: 99, name: '格闘乙女'}, + {val: 100, name: 'レル DX2300系'}, + {val: 101, name: 'つゆ太'}, + {val: 102, name: 'La dolce primavera'}, + {val: 103, name: 'AO-1'}, + {val: 104, name: '真 地獄超特急 -HELL or HELL-'}, + {val: 105, name: 'モード'}, + {val: 106, name: 'ミニョンヌ鉄道兄弟'}, + {val: 107, name: '冬椿'}, + {val: 108, name: 'PAPAYAPA BASS'}, + {val: 109, name: '鴉'}, + {val: 110, name: 'AsiaN distractive'}, + {val: 111, name: 'TOGAKUSHI'}, + {val: 112, name: 'Modular Technology'}, + {val: 113, name: '獅子霞麗ノ舞'}, + {val: 114, name: 'Music is The Answer'}, + {val: 115, name: '!Viva!'}, + {val: 116, name: 'SINOBUZ UI'}, + {val: 117, name: 'ChaserXX'}, + {val: 118, name: 'Amor De Verao'}, + {val: 119, name: 'エディブルフラワーの独白'}, + {val: 120, name: 'ハイ*ビスカス ft. Kanae Asaba'}, + {val: 121, name: 'Midnight Lady'}, + {val: 122, name: 'FUTURE is Dead'}, + {val: 123, name: 'Break Stasis'}, + {val: 124, name: '草原の王女-軌跡を辿って-'}, + {val: 125, name: '25UI'}, + {val: 126, name: '焔極OVERKILL'}, + {val: 127, name: 'Breakin\' Chain'}, + {val: 128, name: '津軽雪'}, + {val: 129, name: 'Exhaust Hype'}, + {val: 130, name: 'Yellow Sketch(RX-Ver.S.P.L.)'}, + {val: 131, name: 'Steel Edge'}, + {val: 132, name: 'Go Ahead!!'}, + {val: 133, name: 'Sky High'}, + {val: 134, name: 'イザナミノナゲキ'}, + {val: 135, name: 'GuNGNiR'}, + {val: 136, name: 'ディッシュウォッシャー◎彡おいわちゃん'}, + {val: 137, name: 'BroGamer'}, + {val: 138, name: 'FUZIN RIZIN'}, + {val: 139, name: 'Mare Nectaris'}, + {val: 140, name: 'Quakes'}, + {val: 141, name: 'Rave Cannon'}, + {val: 142, name: 'ECHIDNA'}, + {val: 143, name: 'Snakey Kung-fu'}, + {val: 144, name: '刃図羅'}, + {val: 145, name: '忍恋花'}, + {val: 146, name: '法具「バズラ」'}, + {val: 147, name: 'HADES'}, + {val: 148, name: 'DEATH†ZIGOQ'}, + {val: 149, name: '東京神話'}, + {val: 150, name: 'Initiation'}, + {val: 151, name: 'EMERALDAS'}, + {val: 152, name: 'Chemical Cookie'}, + {val: 153, name: 'ナイトシティー・アヴァンチュール'}, + {val: 154, name: 'シムルグの目醒め'}, + {val: 155, name: 'n\'pa pa BBQ'}, + {val: 156, name: 'ANCHOR'}, + {val: 157, name: 'IIDX AIR RACE'}, + {val: 158, name: 'THE DAY OF JUBILATIONS'}, + {val: 159, name: 'HEISEI'}, + {val: 160, name: 'IDC feat.REVERBEE (Mo\'Cuts Ver)'}, + {val: 161, name: 'Yum Yum Jelly'}, + {val: 162, name: '夏の匂い。キミの残像。 ft. Kanae Asaba'}, + {val: 163, name: 'Hurry Hurry'}, + {val: 164, name: 'OVERTIME'}, + {val: 165, name: 'ミストレス・アンに花束を'}, + {val: 166, name: 'Ember Lights'}, + {val: 167, name: 'Rootage'}, + {val: 168, name: 'Urban Constellations'}, + {val: 169, name: '金野火織の金色提言'}, + {val: 170, name: '龍王の霊廟(Mausoleum Of The Primal Dragon)'}, + {val: 171, name: 'Painful Fate'}, + {val: 172, name: 'Drastic Dramatic'}, + {val: 173, name: '抱きしめてモナムール'}, + {val: 174, name: 'Trill auf G'}, + {val: 175, name: 'Lethal Weapon'}, + {val: 176, name: 'HEROIC VERSE'}, + {val: 177, name: 'Primitive Vibes'}, + {val: 178, name: 'Calvados Queen'}, + {val: 179, name: 'Ska-sh All Neurons!!'}, + {val: 180, name: 'Moving on'}, + {val: 181, name: 'Hyper Drive feat. ぷにぷに電機'}, + {val: 182, name: 'THE BRAVE MUST DIE'}, + {val: 183, name: '曼荼羅恋々'}, + {val: 184, name: 'Silly Love'}, + {val: 185, name: 'Change Yourself'}, + {val: 186, name: 'Virus Funk'}, + {val: 187, name: 'lane187'}, + {val: 188, name: 'lane188'}, + {val: 189, name: 'lane189'}, + {val: 190, name: 'lane190'}, + {val: 191, name: 'lane191'}, + {val: 192, name: 'lane192'}, + {val: 193, name: 'lane193'}, + {val: 194, name: '涙のテ・エストラーニョ・ムーチョ'}, + {val: 195, name: '∀'}, + {val: 196, name: 'S-Bahn'}, + {val: 197, name: 'Vitrum'}, + {val: 198, name: '水無月の雫'}, + {val: 199, name: 'Lovely Howdy Cowboy!!'}, + {val: 200, name: 'WAKE UP NOW'}, + {val: 201, name: '魔法のかくれんぼ'}, + {val: 202, name: 'POLKAMAИIA'}, + {val: 203, name: 'POLKAMAИIA<2>'}, + {val: 204, name: '犬に雨傘'}, + {val: 205, name: 'Ah Hah Yeah'}, + {val: 206, name: 'HIGH VOLTAGE'}, + {val: 207, name: 'IIDX28汎用'}, + {val: 208, name: 'Chewingood!!!'}, + {val: 209, name: 'がっつり陰キャ!? 怪盗いいんちょの億劫'}, + {val: 210, name: 'がっつり陰キャ!? 怪盗いいんちょの億劫<2>'}, + {val: 211, name: '魅惑のYUMMYスイーツ'}, + {val: 212, name: '度胸兄弟'}, + {val: 213, name: 'STOIC HYPOTHESIS'}, + {val: 214, name: 'GHOST'}, + {val: 215, name: 'GIGA VIOLATE'}, + {val: 216, name: 'Crank It'}, + {val: 217, name: 'Horizons of Promise'}, + {val: 218, name: 'Backyard Stars'}, + {val: 219, name: 'Smashing Wedge'}, + {val: 220, name: 'HEROIC VERSE Shutter'}, + {val: 221, name: 'LIGHTNING MODEL'}, + {val: 222, name: 'ARENA UI 2.0'}, + {val: 223, name: '華麗なる大犬円舞曲'}, + {val: 224, name: 'lane224'}, + {val: 225, name: 'lane225'}, + {val: 226, name: '召しませ!BISTROVER'}, + {val: 227, name: 'ピンシェフくん'}, + {val: 228, name: 'バッド・スイーツ、バッド・ドリーム'}, + {val: 229, name: 'Sinus Iridum'}, + {val: 230, name: 'ジェイ君とドゥイさん'}, + {val: 231, name: 'あまいじかん'}, + {val: 232, name: 'リフレナ'}, + {val: 233, name: 'THE PEERLESS UNDER HEAVEN'}, + {val: 234, name: '二人ノ廃城幽踊宴'}, + {val: 235, name: '乱膳の舞姫'}, + {val: 236, name: 'ハイテックトキオ'}, + {val: 237, name: '月とミルク'}, + {val: 238, name: 'Ariah'}, + {val: 239, name: 'LIVE DRIVING!! feat. 花たん'}, + {val: 240, name: 'Wonderful Escape'}, + {val: 241, name: 'GiGaGaHell'}, + {val: 242, name: 'オールトの雲'}, + {val: 243, name: 'Ventriloquist'}, + {val: 244, name: 'DREAM OF SPACE UFO ABDUCTION'}, + {val: 245, name: 'Skreaming for Salvation'}, + {val: 246, name: 'lane246'}, + {val: 247, name: 'lane247'}, + {val: 248, name: 'lane248'}, + {val: 249, name: 'lane249'}, + {val: 250, name: 'lane250'}, + {val: 251, name: 'lane251'}, + {val: 252, name: 'lane252'}, + {val: 253, name: 'lane253'}, + {val: 254, name: 'lane254'}, + {val: 255, name: 'lane255'}, + {val: 256, name: 'lane256'}, + {val: 257, name: 'もにに'}, + {val: 258, name: 'ピカグレ御守'}, + {val: 259, name: 'ふるこんぼ御守'}, + {val: 260, name: 'ANEMONE'}, + {val: 261, name: 'お肉'}, + {val: 262, name: 'WHA'}, + {val: 263, name: 'ABSOLUTE EVIL'}, + {val: 264, name: 'RAGE feat.H14 of LEONAIR'}, + {val: 265, name: 'RESIDENT UI'}, + {val: 266, name: 'B.O.D.Y.'}, + {val: 267, name: 'Shadow World'}, + {val: 268, name: 'TECHNOPHOBIA'}, + {val: 269, name: 'Programmed Genom'}, + {val: 270, name: 'C-C-C-N-N-N'}, + {val: 271, name: '儚キ戀ノ幻想譚'}, + {val: 272, name: 'きゅんです。'}, + {val: 273, name: 'Summerblue'}, + {val: 274, name: '罪過の聖堂'}, + {val: 275, name: 'CUE CUE RESCUE'}, + {val: 276, name: 'Sunny Day Vibes'}, + {val: 277, name: 'lane277'}, + {val: 278, name: 'lane278'}, + {val: 279, name: 'lane279'}, + {val: 280, name: 'lane280'}, + {val: 281, name: 'lane281'}, + {val: 282, name: 'lane282'}, + {val: 283, name: 'lane283'}, + {val: 284, name: 'lane284'}, + {val: 285, name: 'lane285'}, + {val: 286, name: 'Beyond Evolution'}, + {val: 287, name: 'AWA AWA'}, + {val: 288, name: 'BIGWAVERS'}, + {val: 289, name: 'ONE AND ONLY'}, + {val: 290, name: '■□模様'}, + {val: 291, name: 'ちょえちょえまぎか'}, + {val: 292, name: '栄冠のカンパネラ'}, + {val: 293, name: 'Xerulean'}, + {val: 294, name: 'STRAIGHT TO THE STARS'}, + {val: 295, name: 'JUSTICE/GUILTY'}, + {val: 296, name: 'EPOLIS UI'}, + {val: 297, name: 'Dahlia'}, + {val: 298, name: 'シンデレラ'}, + {val: 299, name: 'れとりば!'}, + {val: 300, name: '夢縁'}, + {val: 301, name: 'SOLAR ECLIPSE'}, + {val: 302, name: 'Ghost Pulse'}, + {val: 303, name: 'Iris'}, + {val: 304, name: 'Get Higher'}, + {val: 305, name: 'アタシ完全絶対正義ちゃん!'}, + {val: 306, name: 'lane306'}, + {val: 307, name: 'lane307'}, + {val: 308, name: 'lane308'}, + {val: 309, name: 'lane309'}, + {val: 310, name: 'lane310'}, + {val: 311, name: 'lane311'}, + {val: 312, name: 'lane312'}, + {val: 313, name: 'lane313'}, + {val: 314, name: 'INHERITANCE'}, + {val: 315, name: 'CADENZA'}, + {val: 316, name: 'Cult Invitation'}, + {val: 317, name: '電子になりたい'}, + {val: 318, name: 'MAXIMUM CHEAT GIRL'}, + {val: 319, name: 'Out of Control'}, + {val: 320, name: 'Glitch N Ride'}, + {val: 321, name: '惑星鉄道'}, + {val: 322, name: 'COUNTING SHEEP'}, + {val: 323, name: 'マイポリスデザイナー'}, + {val: 324, name: 'Pinky Crush'}, + {val: 325, name: 'PIT A PAT'}, + {val: 326, name: '最強頂戴girl'}, + {val: 327, name: 'Vibing! Shake it!'}, + {val: 328, name: 'FERMI PARADOX'}, + {val: 329, name: '灼熱 Lost Summer Dayz'}, + {val: 330, name: 'get set mind'}, + {val: 331, name: 'Raspberry Potion'}, + {val: 332, name: 'Secret Rouge'} + ] + each item in pacemaker_cover_types + option(value=item.val, selected=(custom.pacemaker_cover == item.val)) #{item.name} + .field + label.label Full Combo Splash + .control + .select + select(name="full_combo_splash", id="full_combo_splash") + - + const full_combo_splash_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'IIDX RED'}, + {val: 2, name: 'HAPPY SKY'}, + {val: 3, name: 'DistorteD'}, + {val: 4, name: 'GOLD'}, + {val: 5, name: 'DJ TROOPERS'}, + {val: 6, name: 'EMPRESS'}, + {val: 7, name: 'SIRIUS'}, + {val: 8, name: 'Resort Anthem'}, + {val: 9, name: 'Lincle'}, + {val: 10, name: 'tricoro'}, + {val: 11, name: 'SPADA'}, + {val: 12, name: 'オンリーワンフルコンボ (only one full combo)'}, + {val: 13, name: 'PENDUAL'}, + {val: 14, name: 'copula'}, + {val: 15, name: 'SINOBUZ'}, + {val: 16, name: 'キャノンフィニッシュ (cannon finish)'}, + {val: 17, name: 'Rootage'}, + {val: 18, name: 'HEROIC VERSE'}, + {val: 19, name: 'BISTROVER SLASH'}, + {val: 20, name: 'CastHour'}, + {val: 21, name: 'RESIDENT'}, + {val: 22, name: 'EPOLIS'}, + {val: 23, name: 'Pinky Crush'} + ] + each item in full_combo_splash_types + option(value=item.val, selected=(custom.full_combo_splash == item.val)) #{item.name} + .field + label.label Judgement Font + .control + .select + select(name="judge_font", id="judge_font") + - + const judge_font_types = [ + {val: 0, name: 'Default'}, + {val: 1, name: 'デジタル (digital)'}, + {val: 2, name: 'スマート (smart)'}, + {val: 3, name: 'メタリックブルー (metallic blue)'}, + {val: 4, name: 'テクノ (techno)'}, + {val: 5, name: 'ワイヤー (wire)'}, + {val: 6, name: 'ABYSS'}, + {val: 7, name: 'SPADA'}, + {val: 8, name: 'ANCIENT'}, + {val: 9, name: 'オンリーワンジャッジ (only one judge)'}, + {val: 10, name: '電光掲示板風 (dot matrix)'}, + {val: 11, name: 'SINOBUZ'}, + {val: 12, name: 'セグメント (segment)'}, + {val: 13, name: 'Rootage'}, + {val: 14, name: 'HEROIC VERSE'}, + {val: 15, name: 'BISTROVER JUDGE'}, + {val: 16, name: 'CastHour'}, + {val: 17, name: 'RESIDENT'}, + {val: 18, name: 'EPOLIS'}, + {val: 19, name: 'Pinky Crush'} + ] + each item in judge_font_types + option(value=item.val, selected=(custom.judge_font == item.val)) #{item.name} .field label.label VEFX Lock .control @@ -108,40 +1330,41 @@ div .field label.label VEFX Lock (Effector) .control - input.input(type="number" name="effect", id="effect", value=custom.effect) - .field - label.label Note Burst Size - .control - input.input(type="number" name="bomb_size", id="bomb_size", value=custom.bomb_size) - .field - label.label Disable HCN Color - .control - input(type="checkbox" name="disable_hcn_color", id="disable_hcn_color", checked=Boolean(custom.disable_hcn_color)) + .select + select(name="effect", id="effect") + - const effect_types = [{val: 0, name: 'OFF'}, {val: 1, name: 'ECHO / REVERB'}, {val: 2, name: 'COMPRESSOR / REVERB EX'}, {val: 3, name: 'CHORUS / FLANGER'}, {val: 4, name: 'GARGLE / DISTORTION'}, {val: 5, name: 'EQ ONLY'}] + each ef in effect_types + option(value=ef.val, selected=(custom.effect == ef.val)) #{ef.name} .field label.label First Note Preview .control - input.input(type="number" name="first_note_preview", id="first_note_preview", value=custom.first_note_preview) + .select + select(name="first_note_preview", id="first_note_preview") + - const fnp_types = [{val: 0, name: 'Default'}, {val: 1, name: 'Always ON'}, {val: 2, name: 'Always OFF'}] + each fp in fnp_types + option(value=fp.val, selected=(custom.first_note_preview == fp.val)) #{fp.name} .field - label.label Note Size + label.label Charge Note Size .control - if custom.note_size === undefined - input.input(type="number" name="note_size", id="note_size", value="0") + if custom.cn_size === undefined + input.input(type="number" name="cn_size", id="cn_size", value="0") else - input.input(type="number" name="note_size", id="note_size", value=custom.note_size) + input.input(type="number" name="cn_size", id="cn_size", value=custom.cn_size) .field - label.label Lift Cover + label.label Charge Note Color .control - if custom.lift_cover === undefined - input.input(type="number" name="lift_cover", id="lift_cover", value="0") + if custom.cn_color === undefined + input.input(type="number" name="cn_color", id="cn_color", value="0") else - input.input(type="number" name="lift_cover", id="lift_cover", value=custom.lift_cover) + input.input(type="number" name="cn_color", id="cn_color", value=custom.cn_color) .field - label.label Note Beam Size + label.label Disable Music Preview .control - if custom.note_beam_size === undefined - input.input(type="number" name="note_beam_size", id="note_beam_size", value="0") - else - input.input(type="number" name="note_beam_size", id="note_beam_size", value=custom.note_beam_size) + input(type="checkbox" name="disable_musicpreview", id="disable_musicpreview", checked=Boolean(custom.disable_musicpreview)) + .field + label.label Disable HCN Color + .control + input(type="checkbox" name="disable_hcn_color", id="disable_hcn_color", checked=Boolean(custom.disable_hcn_color)) //- APPEND SETTINGS .field label.label Rank Folder @@ -230,9 +1453,33 @@ div if lm_custom != null .field label.label Premium Area Skin + .control input.input(type="number" name="lm_skin", id="lm_skin", value=lm_custom.premium_skin) + .field label.label Premium Area Background + .control input.input(type="number" name="lm_bg", id="lm_bg", value=lm_custom.premium_bg) + .field + label.label Premium Area Background (Concentration Mode) + .control + if lm_custom.premium_bg_concent === undefined + input.input(type="number" name="lm_bg_2", id="lm_bg_2", value="0") + else + input.input(type="number" name="lm_bg_2", id="lm_bg_2", value=lm_custom.premium_bg_concent) + .field + label.label Entry BG + .control + if lm_custom.entry_bg === undefined + input.input(type="number" name="lm_entry_bg", id="lm_entry_bg", value="0") + else + input.input(type="number" name="lm_entry_bg", id="lm_entry_bg", value=lm_custom.entry_bg) + .field + label.label Entry BG Brightness + .control + if lm_custom.entry_bg_brightness === undefined + input.input(type="number" name="lm_entry_bg_bright", id="lm_entry_bg_bright", value="0") + else + input.input(type="number" name="lm_entry_bg_bright", id="lm_entry_bg_bright", value=lm_custom.entry_bg_brightness) .field button.button.is-primary(type="submit") span.icon diff --git a/iidx@asphyxia/webui/profile_---rival.pug b/iidx@asphyxia/webui/profile_---rival.pug index 41c7438..601cb9e 100644 --- a/iidx@asphyxia/webui/profile_---rival.pug +++ b/iidx@asphyxia/webui/profile_---rival.pug @@ -2,6 +2,7 @@ profile: DB.FindOne(refid, { collection: "profile" }) profiles: DB.Find(null, { collection: "profile" }) rival: DB.Find(refid, { collection: "rival" }) + rival_sub: DB.Find(refid, { collection: "rival_sub" }) - let rival_list=[["", "None", "0000-0000"]]; @@ -9,11 +10,15 @@ rival_list.push([res.__refid, res.name, res.idstr]) }); - let my_sp_rival = [], my_dp_rival = []; + let my_sp_rival = [], my_dp_rival = [], my_sp_rival_sub = [], my_dp_rival_sub = []; rival.forEach((res) => { if (res.play_style == 1) my_sp_rival[res.index] = res.rival_refid; else if (res.play_style == 2) my_dp_rival[res.index] = res.rival_refid; }); + rival_sub.forEach((res) => { + if (res.play_style == 1) my_sp_rival_sub[res.index] = res.rival_refid; + else if (res.play_style == 2) my_dp_rival_sub[res.index] = res.rival_refid; + }); div .card @@ -111,6 +116,92 @@ div option(selected=i[0]==my_dp_rival[4], value=i[0]) #{i[1]} [#{i[2]}] else option(value=i[0]) #{i[1]} [#{i[2]}] + .field + label.label SP Rivals [SUB] + .body + .control + .select + select(name="sp_rival1_sub") + each i in rival_list + if my_sp_rival_sub[0] != null + option(selected=i[0]==my_sp_rival_sub[0], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="sp_rival2_sub") + each i in rival_list + if my_sp_rival_sub[1] != null + option(selected=i[0]==my_sp_rival_sub[1], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="sp_rival3_sub") + each i in rival_list + if my_sp_rival_sub[2] != null + option(selected=i[0]==my_sp_rival_sub[2], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="sp_rival4_sub") + each i in rival_list + if my_sp_rival_sub[3] != null + option(selected=i[0]==my_sp_rival_sub[3], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="sp_rival5_sub") + each i in rival_list + if my_sp_rival_sub[4] != null + option(selected=i[0]==my_sp_rival_sub[4], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .field + label.label DP Rivals [SUB] + .body + .control + .select + select(name="dp_rival1_sub") + each i in rival_list + if my_dp_rival_sub[0] != null + option(selected=i[0]==my_dp_rival_sub[0], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="dp_rival2_sub") + each i in rival_list + if my_dp_rival_sub[1] != null + option(selected=i[0]==my_dp_rival_sub[1], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="dp_rival3_sub") + each i in rival_list + if my_dp_rival_sub[2] != null + option(selected=i[0]==my_dp_rival_sub[2], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="dp_rival4_sub") + each i in rival_list + if my_dp_rival_sub[3] != null + option(selected=i[0]==my_dp_rival_sub[3], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] + .control + .select + select(name="dp_rival5_sub") + each i in rival_list + if my_dp_rival_sub[4] != null + option(selected=i[0]==my_dp_rival_sub[4], value=i[0]) #{i[1]} [#{i[2]}] + else + option(value=i[0]) #{i[1]} [#{i[2]}] .field button.button.is-primary(type="submit") span.icon diff --git a/iidx@asphyxia/webui/profile_--score.pug b/iidx@asphyxia/webui/profile_--score.pug index 403e716..5d04079 100644 --- a/iidx@asphyxia/webui/profile_--score.pug +++ b/iidx@asphyxia/webui/profile_--score.pug @@ -1,25 +1,1953 @@ +//- 1. data section //DATA// score: DB.Find(refid, { collection: 'score' }) +//- 2. song db +script. + window.musicDB = { + "1000": "5.1.1.", + "1001": "GRADIUSIC CYBER", + "1003": "R3", + "1004": "Macho Gang", + "1005": "THE EARTH LIGHT", + "1006": "GAMBOL", + "1007": "gentle stress", + "1008": "GENOM SCREAMS", + "1009": "22DUNK", + "1010": "Dr.LOVE", + "1015": "deep in you", + "1017": "RUGGED ASH", + "1019": "KEEP ON MOVIN'", + "1020": "PARANOIA MAX~DIRTY MIX~", + "2000": ".59", + "2003": "Digital MinD(A/T Libra mix)", + "2005": "Electro Tuned(the SubS mix)", + "2006": "I Was The One", + "2008": "Indigo Vision(full flavour hide around mix)", + "2012": "SP-TRIP MACHINE(for beatmania II)", + "2016": "PUT YOUR FAITH IN ME(for beatmania II)", + "3000": "CAN'T STOP FALLIN'IN LOVE", + "3001": "Don't Stop!", + "3004": "era (nostalmix)", + "3005": "Holic", + "3006": "LEADING CYBER", + "3007": "Presto", + "3008": "R5", + "3009": "REINCARNATION", + "3010": "Schlagwerk", + "3011": "Skyscraper", + "3012": "Tangerine Stream", + "3013": "THE SAFARI", + "4000": "250bpm", + "4001": "ABSOLUTE", + "4002": "B4U", + "4003": "Broken My Heart", + "4004": "CHECKING YOU OUT", + "4005": "Clione", + "4006": "DXY!", + "4007": "empathy", + "4008": "era (step mix)", + "4012": "HIGHER", + "4014": "KAMIKAZE", + "4015": "LOVE WILL・・・", + "4016": "minimalian", + "4017": "Mr.T.(take me higher)", + "4020": "starmine", + "4021": "Voltage (feat. Hidemaru)", + "4023": "Hitch Hiker2", + "4025": "SWEET LAB", + "4029": "Burnin' The Floor", + "4032": "FLOWERS for ALBION", + "4033": "Jam&Marmalade", + "5000": "Abyss", + "5004": "in my eyes", + "5007": "outer wall", + "5009": "QQQ", + "5010": "Radical Faith", + "5011": "Real", + "5012": "Regulus", + "5014": "RIDE ON THE LIGHT (HI GREAT MIX)", + "5015": "RISLIM", + "5016": "Spin the disc", + "5017": "STILL IN MY HEART", + "5018": "still my words", + "5019": "sync", + "5021": "V", + "5023": "sometime", + "5024": "THE CUBE", + "5025": "LOVE AGAIN TONIGHT~for Mellisa mix~", + "5030": "THE SHINING POLARIS", + "6001": "BALLAD FOR YOU~想いの雨~", + "6003": "Blueberry Stream", + "6004": "Buffalo", + "6005": "Colors (radio edit)", + "6007": "DIVE ~INTO YOUR HEART~", + "6010": "fly through the night", + "6011": "Free Style", + "6012": "Frozen Ray (original mix)", + "6013": "G2", + "6014": "L'amour et la liberté", + "6015": "Linus", + "6016": "NEMESIS", + "6018": "rottel-da-sun", + "6019": "route 80s", + "6021": "Summer Vacation(CU mix)", + "6022": "Take It Easy", + "6023": "VJ ARMY", + "6027": "こっちを向いてよ", + "6029": "19,November", + "6031": "SOMETHING WONDERFUL", + "7002": "A", + "7003": "AVE DE RAPINA", + "7004": "Bad Routine", + "7006": "Burning Heat! (Full Option Mix)", + "7008": "Cheer Train", + "7010": "D2R", + "7011": "DESTINY", + "7014": "foreplay", + "7016": "Glorious Days", + "7018": "Happy Wedding", + "7021": "Last Message", + "7022": "Let the Snow Paint Me", + "7024": "Love Me Do", + "7026": "MAX 300", + "7031": "Somebody Like You", + "7032": "Spica", + "7034": "stoic", + "7036": "Tomorrow Perfume", + "7037": "traces", + "7038": "ZERO-ONE", + "7039": "革命", + "8000": "abstract", + "8001": "airflow", + "8003": "ALL RIGHT", + "8004": "Attitude", + "8005": "bit mania", + "8006": "Blame", + "8008": "CELEBRATE NITE", + "8009": "Colors -Y&Co. Eurobeat Remix-", + "8013": "dual control", + "8017": "Giudecca", + "8018": "Halfway of promise", + "8020": "HYPER BOUNDARY GATE", + "8023": "LAB", + "8024": "LOVE IS ORANGE", + "8025": "Luv 2 Feel Your Body", + "8026": "memories", + "8027": "Monkey Dance", + "8028": "murmur twins", + "8029": "MUSIC TO YOUR HEAD", + "8031": "PLEASE DON'T GO", + "8032": "rainbow flyer", + "8039": "symbolic", + "8040": "thunder", + "8043": "WAR GAME", + "8044": "World Wide Love", + "8045": "xenon", + "8048": "桜", + "8049": "蒼い衝動", + "9000": "lower world", + "9001": "Silvia Drive", + "9002": "lights", + "9003": "fun", + "9006": "MARIA (I believe... )", + "9008": "ADVANCE", + "9010": "Cradle", + "9011": "Make A Difference", + "9012": "moon_child", + "9015": "ライオン好き", + "9016": "真夏の花・真夏の夢", + "9018": "Golden Horn", + "9022": "Logic Board", + "9026": "Karma", + "9027": "BAD BOY BASS!! (dj Remo-con MIX)", + "9028": "quasar", + "9029": "ACT", + "9030": "SNOW", + "9033": "SWEETEST SAVAGE", + "9034": "STAR FIELD", + "9036": "ATOMIC AGE", + "9037": "rottel-the-Mercury", + "9038": "one or eight", + "9039": "Really Love", + "9042": "LOVE♡SHINE", + "9043": "PARANOIA survivor MAX", + "9044": "HYPER EUROBEAT (2DX style)", + "9045": "Sweet Sweet♡Magic", + "9046": "bag", + "9048": "e-motion 2003 -romantic extra-", + "9051": "Abyss -The Heavens Remix-", + "9052": "Distress", + "9055": "I Was The One (80's EUROBEAT STYLE)", + "9057": "RISLIM -Remix-", + "9058": "BRIGHTNESS DARKNESS", + "9059": "Quickening", + "10001": "pandora", + "10002": "BABY LOVE", + "10004": "No.13", + "10005": "desolation", + "10006": "EXE", + "10009": "SHOOTING STAR", + "10010": "CARRY ON NIGHT (English version)", + "10013": "Boundary", + "10016": "Lucy", + "10017": "システムロマンス", + "10018": "SPACE FIGHT", + "10019": "Back Into The Light", + "10020": "Rise'n Beauty", + "10022": "雪月花", + "10023": "Narcissus At Oasis", + "10024": "rainbow rainbow", + "10025": "Love Is Eternity", + "10028": "Innocent Walls", + "10031": "SCORE", + "10033": "Daisuke", + "10034": "HIGH", + "10036": "FEEL IT", + "10038": "ALIEN TEMPLE", + "10040": "1st Samurai", + "10041": "Debtty Daddy", + "10042": "Feedback", + "10046": "Freezing atmosphere", + "10047": "ASTRAL VOYAGE", + "10048": "DoLL", + "10049": "One More Lovely", + "10052": "GHOST REVIVAL", + "10053": "GRADIUS -FULL SPEED-", + "11001": "BLOCKS", + "11002": "BREATH", + "11004": "Don't be afraid myself", + "11005": "SPEEDY CAT", + "11007": "太陽~T・A・I・Y・O~", + "11008": "KEY", + "11009": "awakening", + "11010": "Sphere", + "11011": "ULTiMΛTE", + "11012": "spiral galaxy", + "11013": "ANDROMEDA", + "11014": "RESONATE 1794", + "11015": "earth scape", + "11018": "Close my Eyes for Me", + "11019": "大桟橋", + "11025": "Wonder Bullfighter", + "11026": "ピアノ協奏曲第1番”蠍火”", + "11028": "The Hope of Tomorrow", + "11030": "FAKE TIME", + "11031": "Click Again", + "11032": "RED ZONE", + "11033": "Fly Away To India", + "11034": "Secret of Love", + "11035": "Be quiet", + "11036": "AGEHA", + "11037": "gigadelic", + "11038": "HORIZON", + "11040": "AA", + "11043": "D.A.N.C.E.!", + "11050": "NEBULA GRASPER", + "11051": "Raspberry♡Heart(English version)", + "11052": "GENOCIDE", + "12000": "double thrash", + "12002": "Little Little Princess", + "12003": "ヒマワリ", + "12004": "冥", + "12005": "MOON RACE", + "12006": "LESSON 5", + "12007": "rage against usual", + "12008": "INAZUMA", + "12009": "HAPPY☆ANGEL", + "12010": "EDEN", + "12011": "CaptivAte~浄化~", + "12012": "Catch Me", + "12013": "月光", + "12014": "Under the Sky", + "12015": "Xepher", + "12016": "Twelfth Style", + "12018": "I am", + "12019": "合体せよ!ストロングイェーガー!! (Ryu☆ remix)", + "12020": "garden", + "12021": "Agnus Dei", + "12022": "Tizona d'El Cid", + "12023": "EMPTY OF THE SKY", + "12025": "100% minimoo-G", + "12026": "PLASMA", + "12027": "in motion", + "12028": "SigSig", + "12029": "ラクエン", + "12030": "POODLE", + "12031": "Pollinosis", + "12034": "Get'em up to R.A.V.E", + "12036": "alla turca con passione", + "12037": "オレはビートマニア!お前は何マニア?", + "12038": "We are Disっ娘よっつ打ち命", + "12039": "Don't let it go", + "12040": "vault of heaven", + "12041": "Love Magic", + "12043": "First Resolution", + "12044": "GREEN EYES", + "12045": "SCREAM SQUAD", + "12046": "mind the gap", + "12049": "Aurora", + "12050": "Votum stellarum", + "12051": "Pink Rose", + "12052": "Scripted Connection⇒ N mix", + "12053": "Scripted Connection⇒ H mix", + "12054": "Scripted Connection⇒ A mix", + "13000": "華蝶風雪", + "13001": "タシカナモノ", + "13002": "The Dirty of Loudness", + "13003": "D.C.fish", + "13005": "嘆きの樹", + "13009": "Bloody Tears(IIDX EDITION)", + "13010": "CONTRACT", + "13011": "INFERNO", + "13012": "DEEP ROAR", + "13013": "Leaving...", + "13014": "ALFARSHEAR 双神威に廻る夢", + "13015": "Why did you go away", + "13017": "Apocalypse ~dirge of swans~", + "13019": "Heavenly Sun (IIDX VERSION)", + "13021": "with you…", + "13024": "This is Love", + "13025": "罠", + "13026": "Ganymede", + "13028": "BALLAD THE FEATHERS", + "13029": "Sun Field", + "13031": "DUE TOMORROW", + "13032": "BOOM BOOM DISCO NIGHT", + "13035": "Power of Love", + "13037": "So Fabulous !!", + "13038": "waxing and wanding", + "13039": "Harmony and Lovely", + "13040": "MINT", + "13041": "EURO-ROMANCE", + "13044": "TYPE MARS(G-Style Mix)", + "13046": "Broadbanded", + "13047": "Double♡♡Loving Heart", + "13048": "Zenius -I- vanisher", + "13050": "WISH(EUROBEAT MIX)", + "13051": "tripping contact(teranoid&MC Natsack Remix)", + "13052": "MOON", + "13053": "虹色", + "13054": "Concertino in Blue", + "13055": "カゴノトリ~弐式~", + "14000": "リグレット", + "14001": "INORI", + "14002": "PHOTONGENIC", + "14003": "Love Again...", + "14004": "TRANOID", + "14005": "Candy Galy", + "14006": "never…", + "14007": "GOLD RUSH", + "14008": "CaptivAte~誓い~", + "14009": "VANESSA", + "14011": "星をこの手に", + "14012": "零 - ZERO -", + "14014": "Blind Justice ~Torn souls, Hurt Faiths ~", + "14015": "Air Bell", + "14016": "ヨシダさん", + "14018": "ANDROMEDA II", + "14019": "Cyber Force", + "14020": "smile", + "14021": "LASER CRUSTER", + "14022": "GRID KNIGHT", + "14023": "CROSSROAD ~Left Story~", + "14028": "花吹雪 ~ IIDX LIMITED ~", + "14029": "電人、暁に斃れる。", + "14030": "FIRE FIRE", + "14031": "the shadow", + "14033": "Second Heaven", + "14035": "Sense 2007", + "14036": "2hot2eat", + "14037": "Make Me Your Own", + "14038": "heaven above", + "14039": "With your Smile", + "14040": "Roulette", + "14044": "op.31 叙情", + "14046": "KAMAITACHI", + "14047": "METALLIC MIND", + "14049": "CaptivAte~裁き~", + "14050": "High School Love", + "14051": "The Smile of You", + "14052": "Fascination MAXX", + "14053": "snow storm", + "14055": "four-leaf", + "14056": "クルクル☆ラブ~Opioid Peptide MIX~", + "14058": "Watch out!!", + "15000": "Anisakis -somatic mutation type\"Forza\"-", + "15001": "MENDES", + "15002": "Darling my LUV", + "15003": "MAX LOVE", + "15004": "Blue Rain", + "15005": "four pieces of heaven", + "15006": "走馬灯 -The Last Song-", + "15007": "THE DEEP STRIKER", + "15008": "STEEL NEEDLE", + "15009": "SOUND OF GIALLARHORN", + "15010": "REMINISCENCE", + "15011": "PROMISE FOR LIFE", + "15012": "高高度降下低高度開傘", + "15013": "oratio", + "15014": "Ristaccia", + "15015": "NEW GENERATION -もう、お前しか見えない-", + "15016": "TROOPERS", + "15018": "マチ子の唄", + "15019": "beatonic nation", + "15020": "State Of The Art", + "15021": "end of world", + "15023": "ICARUS", + "15024": "Dazzlin' Darlin", + "15025": "Do it!! Do it!!", + "15026": "Time to Air", + "15027": "avant-guerre", + "15028": "Digitank System", + "15029": "エコ爺", + "15030": "2 tribe 4 K", + "15031": "madrugada", + "15032": "MENTAL MELTDOWN", + "15036": "soldier's waltz", + "15038": "the trigger of innocence", + "15039": "少年A", + "15040": "scar in the earth", + "15041": "Be OK", + "15043": "Kick Out 仮面", + "15044": "satfinal", + "15045": "Wanna Party?", + "15048": "Freeway Shuffle", + "15049": "PARANOiA ~HADES~", + "15050": "TRIP MACHINE PhoeniX", + "15052": "Rising in the Sun(original mix)", + "15054": "華爛漫 -Flowers-", + "15055": "switch", + "15056": "ミラージュ・レジデンス", + "15057": "in the Sky", + "15058": "LOVELY STORM", + "15059": "satellite020712 from \"CODED ARMS\"", + "15061": "Übertreffen", + "16000": "CaptivAte2~覚醒~", + "16001": "翼", + "16002": "B4U(BEMANI FOR YOU MIX)", + "16003": "Colorful Cookie", + "16004": "V2", + "16005": "天空脳番長危機十六連打", + "16006": "不沈艦CANDY", + "16008": "HYPERION", + "16009": "BITTER CHOCOLATE STRIKER", + "16010": "Fly Above", + "16011": "Arabian Rave Night", + "16013": "山岡晃の「クイズ!家事都合!」", + "16014": "Queen's Tragedy", + "16015": "Kung-fu Empire", + "16016": "ミッドナイト堕天使", + "16017": "ALL MY TURN -このターンに、オレの全てを賭ける-", + "16018": "Marie Antoinette", + "16019": "Turii ~Panta rhei~", + "16020": "卑弥呼", + "16021": "smooooch・∀・", + "16022": "Flash Back 90's", + "16023": "Programmed World", + "16024": "まほろば", + "16025": "Mind Mapping", + "16026": "3y3s", + "16027": "Monkey Dance '09", + "16028": "Y&Co. is dead or alive", + "16029": "ALL I NEED YOUR LOVE", + "16030": "NΦ CRIME", + "16031": "naughty girl@Queen's Palace", + "16032": "BRIDAL FESTIVAL !!!", + "16034": "Punch Love♡仮面", + "16035": "I'm Screaming LOVE", + "16036": "鉄甲乙女-under the steel-", + "16037": "You'll say \"Now!\"", + "16038": "Secrets", + "16039": "ハリツヤランデヴー", + "16040": "neogenesis", + "16041": "THE SHINING POLARIS(kors k mix)", + "16042": "Bahram Attack-猫叉Master Remix-", + "16043": "Cyber Force -DJ Yoshitaka Remix-", + "16045": "THANK YOU FOR PLAYING", + "16047": "thunder HOUSE NATION Remix", + "16049": "Jack", + "16050": "凛として咲く花の如く", + "16051": "Go Beyond!!", + "16052": "SOLITON BEAM", + "16053": "Just a Little Smile", + "17000": "Elisha", + "17001": "たからもの", + "17002": "MIRACLE MEETS", + "17003": "NoN-Fiction Story!", + "17004": "DROP", + "17005": "Roots of my way!", + "17006": "G59", + "17007": "DOMINION", + "17008": "GALGALIM", + "17009": "EXUSIA", + "17012": "being torn the sky", + "17013": "She is my wife", + "17014": "NEW SENSATION -もう、あなたしか見えない-", + "17015": "Raison d'être~交差する宿命~", + "17016": "Almagest", + "17017": "ワルツ第17番 ト短調”大犬のワルツ”", + "17020": "バビロニア", + "17021": "Last Burning", + "17022": "Bad Maniacs", + "17023": "Programmed Sun", + "17024": "D", + "17025": "bloomin' feeling", + "17026": "Light Shine", + "17027": "DESIRE", + "17028": "AIR RAID FROM THA UNDAGROUND", + "17032": "Red. by Full Metal Jacket", + "17033": "コスモス", + "17034": "かずあそび", + "17035": "beatchic☆仮面~好き、でいさせて~", + "17037": "未来のプリズム", + "17039": "Keep it-秋葉工房mix-", + "17040": "Dazzlin' Darlin-秋葉工房mix-", + "17041": "Session 1 -Genesis-", + "17042": "Do Back Burn", + "17043": "Hydrogen Blueback", + "17044": "mosaic", + "17046": "Empire State Glory", + "17050": "CaptivAte~裁き~(SUBLIME TECHNO MIX)", + "17051": "bass 2 bass", + "17052": "IN THE NAME OF LOVE", + "17053": "Special One", + "17054": "Evans", + "17055": "水上の提督(Short mix from \"幻想水滸伝V\")", + "17056": "eRAseRmOToRpHAntOM", + "17057": "DAWN -THE NEXT ENDEAVOUR-", + "17058": "サヨナラ・ヘヴン", + "17059": "quell~the seventh slave~", + "17060": "SOLID STATE SQUAD", + "17061": "GOLDEN CROSS", + "17062": "The Story Begins", + "17063": "BEAUTIFUL ANGEL", + "17064": "THE LAST STRIKER", + "17065": "Sorrows", + "18000": "Stay my side", + "18001": "Watch Out Pt.2", + "18002": "Tropical April", + "18003": "DAYDREAMER", + "18004": "perditus†paradisus", + "18005": "THE DOOR INTO RAINBOW", + "18006": "XANADU OF TWO", + "18008": "THE BLACK KNIGHT", + "18009": "PARADISE LOST", + "18010": "Never Fade Away", + "18011": "おおきなこえで", + "18012": "Destiny Sword", + "18013": "Aegis", + "18014": "ZETA~素数の世界と超越者~", + "18015": "旅人リラン", + "18017": "Dances with Snow Fairies", + "18018": "I FIGHT ME", + "18019": "Vermillion", + "18020": "Programmed Life", + "18021": "Kailua", + "18022": "Bounce Bounce Bounce", + "18023": "Mermaid girl", + "18024": "passionate fate", + "18025": "Golden Palms", + "18026": "New Castle Legions", + "18027": "BLUST OF WIND", + "18028": "BROKEN EDEN", + "18029": "かげぬい ~ Ver.BENIBOTAN ~", + "18030": "Rock Da House", + "18032": "灼熱Beach Side Bunny", + "18035": "Answer", + "18036": "WISE UP!", + "18039": "Session 9 -Chronicles-", + "18040": "Space Time", + "18042": "夕焼け ~Fading Day~", + "18043": "Believe In Me", + "18044": "Let The Track Flow", + "18045": "Energy Drive", + "18047": "Breaking the ground", + "18050": "reunion", + "18051": "ANTHEM LANDING", + "18053": "Medicine of love", + "18054": "Eternal Tears", + "18055": "Fantasia", + "18056": "SABER WING", + "18057": "DM STAR~関西 energy style~", + "18059": "ALBIDA", + "18060": "黒髪乱れし修羅となりて", + "18061": "sakura storm", + "18062": "Everlasting Resort", + "18064": "STELLAR WIND", + "18066": "Sakura Reflection", + "18067": "THE FALLEN", + "18068": "Broken", + "18069": "Wuv U", + "18071": "SPECIAL SUMMER CAMPAIGN!", + "18072": "中華急行", + "19001": "Snake Stick", + "19002": "天空の夜明け", + "19003": "F", + "19004": "In the Blackest Den", + "19005": "恋する☆宇宙戦争っ!!", + "19006": "ANAGRAMS I to Y", + "19007": "YAKSHA", + "19008": "DIAVOLO", + "19009": "Scharfrichter", + "19010": "Lucky Days", + "19011": "CALL", + "19013": "Several Words", + "19014": "SA.YO.NA.RA. SUPER STAR", + "19015": "蛇神", + "19016": "Todestrieb", + "19017": "GIGANT", + "19018": "prompt", + "19019": "衰色小町メランコリア", + "19020": "Quick Silver", + "19022": "君のハートにロックオン", + "19024": "Almace", + "19025": "Drive Me Crazy", + "19026": "The Sampling Paradise", + "19027": "Release The Music", + "19028": "Thunderbolt", + "19029": "Follow Tomorrow", + "19030": "NNRT", + "19031": "SHADE", + "19032": "24th Century BOY", + "19033": "The Limbo", + "19034": "Miami Sunset Drive", + "19035": "A MINSTREL ~ ver. short-scape ~", + "19036": "LAX5 feat.Ryota Yoshinari", + "19037": "BLACK.by X-Cross Fade", + "19038": "Yellow Sunrise", + "19039": "陽炎", + "19040": "Mermaid girl-秋葉工房 MIX-", + "19042": "聖人の塔", + "19045": "Express Emotion", + "19046": "突撃!ガラスのニーソ姫!", + "19047": "Liquid Crystal Girl feat. echo", + "19048": "Round and Round", + "19049": "Star Trail", + "19050": "LOVE B.B.B", + "19051": "Voxane", + "19052": "Change the World", + "19053": "ユミル", + "19054": "Phoenix", + "19055": "RESISTANCE", + "19056": "LETHEBOLG ~双神威に斬り咲けり~", + "19058": "I'm so Happy", + "19059": "Snow Goose", + "19060": "Far east nightbird", + "19062": "Infinite cave", + "19063": "QUANTUM TELEPORTATION", + "19064": "fffff", + "19065": "子供の落書き帳", + "19067": "yellow head joe", + "19068": "WONDER WALKER", + "19069": "532nm", + "19070": "ビューティフルレシート", + "19071": "quaver♪", + "19072": "Castle on the Moon", + "19073": "Flip Flap", + "19074": "TITANS RETURN", + "19075": "HAERETICUS", + "20000": "planarian", + "20002": "Liberation", + "20003": "ΕΛΠΙΣ", + "20004": "狂イ咲ケ焔ノ華", + "20005": "BLUE STRAGGLER", + "20006": "トリカゴノ鳳凰", + "20007": "キャトられ♥恋はモ~モク", + "20008": "Confiserie", + "20009": "POINT ZERO", + "20011": "connective", + "20012": "Proof of the existence", + "20013": "Rainbow after snow", + "20015": "Re:GENERATION", + "20016": "In Heaven", + "20017": "GRADIUS 2012", + "20018": "CONCEPTUAL", + "20019": "龍と少女とデコヒーレンス", + "20020": "Elemental Creation", + "20021": "8bit Princess", + "20022": "下弦の月", + "20023": "New Lights", + "20024": "Howling", + "20025": "VEGA", + "20027": "Präludium", + "20028": "rumrum triplets", + "20029": "Thor's Hammer", + "20030": "BRAVE GLOW", + "20031": "Illegal Function Call", + "20032": "Ascalon", + "20033": "I know You know", + "20035": "S!ck", + "20036": "405nm (Ryu☆mix)", + "20037": "Fly you to the star", + "20038": "Plan 8", + "20039": "仮想空間の旅人たち", + "20040": "Light and Cyber…", + "20041": "SYNC-ANTHEM", + "20043": "ラキラキ", + "20044": "Beastie Starter", + "20046": "Little Star", + "20047": "†渚の小悪魔ラヴリィ~レイディオ†(IIDX EDIT)", + "20048": "アストライアの双皿", + "20049": "Sol Cosine Job 2", + "20051": "ILIAS", + "20052": "即席!脳直★ミュージックシステム", + "20053": "FLOWER", + "20054": "カジノファイヤーことみちゃん", + "20055": "True Blue", + "20058": "Take My Life", + "20059": "STULTI", + "20061": "メイメツ、フラグメンツ", + "20062": "Shining World", + "20063": "Devilz Staircase", + "20064": "ZED", + "20065": "Timepiece phase II", + "20066": "Neonlights", + "20067": "Timepiece phase II (CN Ver.)", + "20068": "LUV CAN SAVE U", + "20070": "DAY DREAM", + "20071": "JOMANDA", + "20072": "New Decade IIDX Edition", + "20073": "Hollywood Galaxy", + "20074": "neu", + "20076": "Reflection Into the EDEN", + "20082": "Time To Empress", + "20083": "たまゆら", + "20086": "Saturn", + "20087": "Cookie Bouquets", + "20088": "mnemoniq", + "20089": "お米の美味しい炊き方、そしてお米を食べることによるその効果。", + "20090": "創世ノート", + "20091": "Synergy For Angels", + "20093": "GAIA", + "20094": "Zirkfied", + "20095": "examination leave", + "20096": "VALLIS-NERIA", + "20097": "Valanga", + "20098": "梅雪夜", + "20099": "音楽", + "20100": "朧", + "20101": "シュレーディンガーの猫", + "20102": "SHION", + "21001": "rainbow guitar weeps", + "21002": "旋律のドグマ~Misérables~", + "21003": "EXTREME MACH COLLIDER", + "21004": "Element of SPADA", + "21005": "DARK LEGACY", + "21006": "牧神笛吹きて", + "21007": "Critical Crystal", + "21008": "Insane Techniques", + "21011": "罪と罰", + "21012": "Close the World feat.a☆ru", + "21013": "Devilz Sacrifice -贖罪の羊-", + "21014": "MAGIC & LOVE", + "21015": "Miracle 5ympho X", + "21016": "Elektrick U-Phoria", + "21018": "Overload Frontier", + "21019": "Adularia", + "21020": "Valgus", + "21021": "Odin", + "21022": "MAD ATTACK", + "21024": "Funny shuffle", + "21025": "NPC World", + "21026": "Lighting Shower", + "21027": "m1dy Deluxe", + "21029": "廿", + "21030": "超!!遠距離らぶ♡メ~ル", + "21032": "煉獄のエルフェリア", + "21033": "INSOMNIA", + "21034": "Wonder Girl feat. Kanae Asaba", + "21035": "RISE", + "21037": "ALBA -黎明-", + "21038": "お願いアインシュタイン", + "21039": "into the battlefield", + "21041": "diagram", + "21042": "refractive index", + "21043": "Hypersonik", + "21044": "BLUE DRAGON(雷龍RemixIIDX)", + "21045": "Last Dance", + "21047": "ra'am", + "21048": "疾風迅雷", + "21050": "Verflucht", + "21051": "BRAVE OUT", + "21052": "Feel The Beat", + "21053": "Pharaoh", + "21055": "Idola", + "21056": "I will be back -オレは帰ってきた-", + "21058": "アルストロメリア", + "21059": "Sigmund", + "21060": "ÆTHER", + "21061": "M.D.Injection", + "21062": "VOX UP", + "21063": "BRAINSTORM", + "21064": "Recollection", + "21065": "Claiomh Solais", + "21066": "Unicorn tail", + "21067": "RIZING YOU UP", + "21068": "THE DETONATOR", + "21069": "Ancient Scapes", + "21073": "invoker", + "21076": "PUNISHER", + "21077": "HYENA", + "21078": "Squeeze", + "21079": "デッドボヲルdeホームラン", + "21081": "轟け!恋のビーンボール!!", + "21082": "IX", + "21083": "Engraved Mark", + "21084": "バンブーソード・ガール", + "21085": "Cleopatrysm", + "21087": "KHAMEN BREAK", + "21088": "海神", + "21089": "KAISER PHOENIX", + "21090": "SCHWARZSCHILD FIELD", + "22001": "Broken Sword", + "22002": "Line 4 Ruin", + "22003": "Rave*it!! Rave*it!!", + "22004": "Shooting Fireball", + "22005": "Say YEEEAHH", + "22006": "Cosmic Cat", + "22007": "Reflux", + "22008": "CHRONO DIVER -NORNIR-", + "22009": "表裏一体!?怪盗いいんちょの悩み♥", + "22010": "もっと!モット!ときめき feat. 松下", + "22011": "NEO GENERATOR SEVEN", + "22012": "共鳴遊戯の華", + "22013": "chrono diver -fragment-", + "22014": "AFRO KNUCKLE", + "22015": "Despair of ELFERIA", + "22016": "Flashes", + "22017": "Symmetry", + "22018": "FANTASTIC THREE", + "22019": "illuminate", + "22024": "恋は白帯、サンシロー", + "22025": "Chain of pain", + "22026": "白露の風", + "22027": "Beat Radiance", + "22028": "GUILTY", + "22029": "COLOSSEUM", + "22031": "超青少年ノ為ノ超多幸ナ超古典的超舞曲", + "22032": "リリーゼと炎龍レーヴァテイン", + "22033": "cinder", + "22034": "Realize Maze", + "22035": "X↑X↓", + "22037": "十六夜セツナ", + "22038": "紅牡丹", + "22039": "BLUE MIRAGE", + "22040": "#The_Relentless", + "22041": "Blaze it UP!", + "22042": "Sweet Radar", + "22043": "IMPLANTATION", + "22044": "Night sky", + "22046": "SAMSARA", + "22047": "時空トラベローグ", + "22048": "ぷろぐれっしぶ時空少女!うらしまたろ子ちゃん!", + "22049": "HELL SCAPER -Last Escape Remix-", + "22052": "IXION", + "22053": "Gravigazer", + "22054": "Chrono Diver -PENDULUMs-", + "22055": "SpaceLand☆TOYBOX", + "22056": "TA・DA ☆ YO・SHI", + "22057": "Vulkan", + "22058": "Scars of FAUNA", + "22059": "ベィスドロップ・フリークス", + "22060": "Sakura Mirage", + "22061": "Hello Happiness", + "22062": "打打打打打打打打打打", + "22063": "No Tears", + "22064": "鬼天", + "22065": "entelecheia", + "22067": "とろぴかる倶楽部", + "22068": "Beyond The Earth", + "22069": "The Least 100sec", + "22070": "fallen leaves -IIDX edition-", + "22073": "Monopole.", + "22074": "TOXIC VIBRATION", + "22075": "Erosion Mark", + "22077": "ZZ", + "22079": "TIEFSEE", + "22080": "We're so Happy (P*Light Remix) IIDX ver.", + "22083": "千年ノ理", + "22084": "妖隠し -あやかしかくし-", + "22085": "取り残された美術(Arranged:HiZuMi)", + "22086": "Scarlet Moon", + "22087": "それは花火のような恋", + "22088": "パ→ピ→プ→Yeah!", + "22089": "EBONY & IVORY", + "22090": "In The Breeze", + "22091": "Sounds Of Summer", + "22092": "Chronos", + "22093": "少年は空を辿る", + "22094": "ドッキン☆サマーあばんちゅーる", + "22095": "夏色DIARY - L.E.D.-G STYLE MIX -", + "22098": "Discloze", + "22099": "Invitation from Mr.C", + "22100": "PENDUAL TALISMAN", + "23000": "DIAMOND CROSSING", + "23001": "駅猫のワルツ", + "23002": "SHELTER OF THE MIND", + "23003": "か・し・ま・し☆PUMP UP!", + "23004": "ギョギョっと人魚 爆婚ブライダル", + "23005": "Nightmare before oversleep", + "23007": "Highcharge Divolt", + "23008": "Uh-Oh", + "23009": "M4K3 1T B0UNC3", + "23010": "Donkey Donk", + "23011": "Everlasting Last", + "23012": "オルタネイトβ", + "23013": "refrain", + "23015": "Central Station", + "23016": "少女アリスと箱庭幻想コンチェルト", + "23017": "Outbreak", + "23018": "X", + "23019": "セロトニン", + "23021": "Daily Lunch Special", + "23022": "明鏡止水", + "23026": "Go Faraway", + "23027": "Dynamite", + "23028": "Aublia", + "23029": "Musik LoverZ", + "23030": "Routing", + "23031": "STARLIGHT DANCEHALL", + "23032": "追想快晴テーマパーク", + "23033": "Set U Free feat. Kanae Asaba", + "23034": "SURVIVOR", + "23035": "星屑ディスタンシア", + "23036": "NANAIRO", + "23037": "AO-1", + "23038": "Nowhere", + "23039": "do the thing feat. Kanae Asaba", + "23041": "真 地獄超特急 -HELL or HELL-", + "23043": "Rock It", + "23044": "Violet Rose", + "23045": "めいさいアイドル☆あいむちゃん♪", + "23046": "量子の海のリントヴルム", + "23047": "シュッパツシンコウ・シサカンコ", + "23048": "麗 ~うらら~", + "23049": "NO LIMIT -オレ達に限界は無い-", + "23050": "朝焼けから始まるボクらの小さな旅", + "23051": "灼熱 Pt.2 Long Train Running", + "23052": "Inner Spirit", + "23053": "On the FM", + "23054": "Damage Per Second", + "23055": "199024club -Re:BounceKiller-", + "23056": "Arcana", + "23057": "Acid Pumper", + "23058": "Exchange Place", + "23060": "quick master (reform version)", + "23061": "Devil's Gear", + "23062": "Tori-no-kimochi", + "23063": "Blue Spring Express", + "23066": "GOBBLE", + "23067": "GENERATE feat.綾倉盟", + "23068": "chaos eater -IIDX edition-", + "23069": "Battle Train -IIDX Edition-", + "23070": "Welcome", + "23072": "Konzert V", + "23073": "Derelict Star feat. Ryu*", + "23074": "POSSESSION", + "23075": "Godspeed", + "23076": "La dolce primavera", + "23078": "Glitch Nerds", + "23079": "NINJA IS DEAD IIDX ver.", + "23080": "Violet Pulse", + "23082": "STARLiGHT", + "23083": "紫陽花 -AZISAI-", + "23084": "Journey", + "23085": "CODE:1 [revision1.0.1]", + "23087": "Super Duper Racers", + "23088": "NZM", + "23090": "Grand Chariot", + "23091": "Sephirot", + "23092": "StrayedCatz", + "23093": "Angelic Jelly", + "23094": "Triple Counter", + "23095": "ZEPHYRANTHES", + "24000": "鴉", + "24001": "焔極OVERKILL", + "24003": "イザナミノナゲキ", + "24004": "AsiaN distractive", + "24005": "Super Rush", + "24006": "Rave Cannon", + "24007": "Caterpillar", + "24008": "¡Viva!", + "24009": "OOO", + "24010": "Mare Nectaris", + "24011": "冬椿 ft. Kanae Asaba", + "24012": "TOGAKUSHI", + "24013": "SINOBUZ Fantasy", + "24014": "津軽雪", + "24015": "Modular Technology", + "24016": "Honey Trap", + "24017": "ROTTERDAM SHOGUN", + "24018": "DORNWALD ~Junge~", + "24019": "獅子霞麗ノ舞", + "24020": "ECHIDNA", + "24021": "Quakes", + "24022": "PAPAYAPA BASS", + "24023": "焱影", + "24024": "SAY BAY", + "24025": "(This Is Not) The Angels", + "24026": "Selfish Sweet", + "24027": "Be A Star", + "24028": "Egret and Willow", + "24029": "禍根", + "24030": "Sarutobi Champion is 拙者", + "24031": "次葉 -turn the page-", + "24032": "AO-∞", + "24033": "忍恋花", + "24034": "Go Ahead!!", + "24036": "#MAGiCVLGiRL_TRVP_B3VTZ", + "24037": "The Commanders", + "24038": "Umbral", + "24039": "Steel Edge", + "24040": "Music is The Answer", + "24041": "Amazing Mirage", + "24043": "XINOBIKILL", + "24044": "FUZIN RIZIN", + "24045": "ディッシュウォッシャー◎彡おいわちゃん", + "24046": "ちらちら・はらはら", + "24047": "Believe in you", + "24049": "Breakin' Chain", + "24050": "GuNGNiR", + "24051": "HADES", + "24052": "Remedy feat. Kanae Asaba", + "24054": "Beyond The Seven", + "24055": "elemental bender feat. Kanae Asaba", + "24056": "Seaside Labyrinth", + "24057": "SAMURAI-Scramble", + "24058": "Warrior", + "24060": "Piano Samurai", + "24061": "Sweet Clapper", + "24063": "BREAK OVER", + "24065": "OTENAMI Hurricane", + "24066": "Magical", + "24067": "Yellow Sketch(RX-Ver.S.P.L.)", + "24068": "shuriken", + "24069": "yamabiko (SINOBUZ Edition)", + "24070": "九尾狐夜行", + "24071": "Around The Galaxy", + "24072": "Sky High", + "24073": "Snakey Kung-fu", + "24074": "月雪に舞う華のように", + "24075": "INVISIBLE STRIX", + "24076": "RAIN", + "24077": "刃図羅", + "24078": "〆", + "24079": "BabeL ~Grand Story~", + "24080": "BroGamer", + "24081": "Beat Juggling Mix", + "24082": "SEQUENCE CAT", + "24083": "nostos", + "24084": "crew", + "24085": "Macuilxochitl", + "24086": "Summerlights(IIDX Edition)", + "24087": "HAPPY★RUSH", + "24088": "Surf on the Light", + "24089": "Venom", + "24090": "Cyber True Color", + "24091": "恋はどう?モロ◎波動OK☆方程式!!", + "24092": "Vermilion", + "24093": "Lost wing at.0", + "24094": "童話回廊", + "24095": "Apocalypse", + "25000": "神謳 -RESONANCE-", + "25001": "THE CANNONBALLER", + "25002": "ナイトシティー・アヴァンチュール", + "25003": "DEATH†ZIGOQ ~怒りの高速爆走野郎~", + "25004": "Initiation", + "25005": "ChaserXX", + "25006": "純真可憐デザイア", + "25007": "EMERALDAS", + "25008": "ANCHOR", + "25009": "AA -rebuild-", + "25010": "I Love You", + "25011": "バスルーム ロマンス", + "25012": "COSMIC☆WONDER☆REVOLUTION", + "25013": "ACCELERATE", + "25014": "Expanded !!", + "25015": "Life Is A Game ft.DD\"ナカタ\"Metal", + "25016": "Back Spin Sweeper", + "25017": "シムルグの目醒め", + "25018": "Abraxas", + "25019": "Papilio ulysses", + "25021": "東京神話", + "25024": "草原の王女-軌跡を辿って-", + "25026": "O/D*20", + "25027": "255", + "25028": "Battleground", + "25029": "Boomy and The Boost", + "25030": "ANAGMA", + "25031": "ハイ*ビスカス ft. Kanae Asaba", + "25032": "Alpheratz", + "25033": "Amor De Verão", + "25034": "LUV DRIVE", + "25035": "HAT TRICK", + "25036": "Break Stasis", + "25037": "エディブルフラワーの独白", + "25038": "Exhaust Hype", + "25039": "FREEDOM", + "25040": "Slipstream", + "25041": "Best of Me", + "25042": "Around the Future", + "25043": "FUTURE is Dead", + "25045": "1001 -ESCAPE-", + "25046": "共犯ヘヴンズコード", + "25047": "うさ☆かめ 大戦争!", + "25048": "Nothing but Theory", + "25049": "Illusionary Waterlily", + "25050": "n'pa pa BBQ", + "25051": "Temple of Anubis", + "25052": "Persephone", + "25053": "No Limit 2 dAnce feat. 大山愛未", + "25054": "Hella Deep", + "25055": "Static State", + "25056": "Get Up! feat. Kanae Asaba", + "25057": "Midnight Lady", + "25058": "The Chase", + "25059": "UMMU", + "25061": "Chemical Cookie", + "25063": "Xperanza", + "25068": "ラストセンチュリーメランコリック", + "25069": "Eine Haube ~聖地の果てにあるもの~", + "25070": "Only for now", + "25071": "From Time To Time", + "25073": "Fervidex", + "25074": "DEADHEAT", + "25075": "Arca", + "25076": "SPEED DEMON", + "25078": "命の標本", + "25079": "Be a Hero!", + "25080": "Raspberry Railgun", + "25081": "STARLIGHT JUNCTION", + "25082": "Usual Days-remix", + "25083": "Antigravity", + "25084": "バ→ビ→ブ→Bomb!", + "25085": "NITROUS CANNON", + "25086": "パラドキシカル・タイムリープトライアル(Short Ver.)", + "25088": "encounter", + "25089": "HYPE THE CORE", + "25090": "City Never Sleeps (IIDX Edition)", + "25091": "Rampage", + "25092": "REVOLVER", + "25093": "DropZ-Line-", + "25094": "Sleepless days", + "25095": "MAXIVCORD", + "26000": "THE DAY OF JUBILATIONS", + "26001": "KILL EACH OTHER", + "26003": "抱きしめてモナムール", + "26004": "UNDERWORLD HOLOGRAPHY", + "26005": "R∞tAge", + "26007": "X-DEN", + "26009": "HEISEI", + "26010": "Drastic Dramatic", + "26011": "GENE", + "26012": "Painful Fate", + "26015": "Lift Us High", + "26016": "CODE:0", + "26017": "BLO§OM", + "26018": "ZENDEGI DANCE", + "26019": "Psycho Sheep Riddim", + "26020": "COSMIC CYBER", + "26023": "Garuda", + "26024": "グラナダの風", + "26025": "Unbelief", + "26026": "CoMAAAAAAA", + "26027": "深愛のリグレット", + "26028": "Wonderland", + "26029": "Mächö Mönky", + "26030": "Glory", + "26031": "夏の匂い。キミの残像。 ft. Kanae Asaba", + "26033": "Catch Our Fire!", + "26034": "dAuntl3ss", + "26036": "Wing of Hearts", + "26037": "Carmina", + "26038": "L.F.O", + "26039": "The Rebellion of Sequencer", + "26040": "泰東ノ翠霞", + "26041": "花冠 feat.Aikapin", + "26042": "セカンドピアス", + "26043": "Dr. Chemical & Killing Machine", + "26044": "ハードベース・フェスタ", + "26046": "IDC feat.REVERBEE (Mo'Cuts Ver)", + "26047": "Red. by Jack Trance", + "26048": "Twilight Warp", + "26049": "ROCK女 feat. 大山愛未, Ken", + "26050": "Yum Yum Jelly", + "26051": "LADYBIRD", + "26052": "Cranberry City ft. Luschel", + "26053": "& Intelligence", + "26054": "Hurry Hurry", + "26055": "Ember Lights", + "26058": "Urban Constellations", + "26059": "ONIGOROSHI", + "26060": "爆ゼニ☆がってんワーカー", + "26063": "The Best of Both Worlds", + "26064": "GIGA THRASH", + "26066": "ミストレス・アンに花束を", + "26067": "SPEED ROCKER", + "26068": "IDOL syndrome.", + "26069": "OVER TIME", + "26070": "Xlø", + "26071": "Let me be your cure", + "26072": "Level One", + "26074": "Next Tales 2 Oath (IIDX 20th Anniv \"Ring\" Theme)", + "26076": "龍王の霊廟(Mausoleum Of The Primal Dragon)", + "26077": "Wolf 1061", + "26078": "金野火織の金色提言", + "26079": "EVANESCENT", + "26080": "LOST TECHNOLOGIE", + "26081": "XENON II ~TOMOYUKIの野望~", + "26082": "REPLAY", + "26083": "DRUNK MONKY", + "26084": "Playing With Fire", + "26085": "Lethal Weapon", + "26086": "GO OVER WITH GLARE -ROOTAGE 26-", + "26087": "お菓子の王国", + "26088": "50th Memorial Songs -Beginning Story-", + "26089": "50th Memorial Songs -二人の時 ~under the cherry blossoms~-", + "26090": "50th Memorial Songs -Flagship medley-", + "26091": "50th Memorial Songs -The BEMANI History-", + "26092": "Night! Night! Night!", + "26093": "ruin of opals", + "26094": "Technicolour Dreams", + "26095": "Carry Me Away", + "26097": "ToyCube Pf.(RX-Ver.S.P.L.)", + "26099": "Necroxis Girl", + "26101": "Geirskögul", + "26102": "Please Welcome Mr.C", + "26104": "HARD BRAIN", + "26106": "Visterhv", + "26107": "Trill auf G", + "26108": "voltississimo", + "26109": "toy boxer", + "26110": "最小三倍完全数", + "26112": "おーまい!らぶりー!すうぃーてぃ!だーりん!", + "26113": "Afterimage d'automne", + "26114": "BLACK JACKAL", + "26115": "ミッドナイト☆WAR", + "27000": "THE BRAVE MUST DIE", + "27001": "UNITE THE HEART", + "27002": "PHASE SHIFT MANEUVER", + "27003": "がっつり陰キャ!? 怪盗いいんちょの億劫^^;", + "27004": "Dans la nuit de l'éternité", + "27005": "VALKYRIAS -英雄誕生-", + "27007": "LIGHTNING STRIKES", + "27008": "EROICA", + "27009": "TECHNO Style Essentials", + "27010": "27th style", + "27011": "rough percussionythm", + "27012": "LASER CRUSTER (IGNITE REMIX)", + "27013": "錬成人間トリコロイダー", + "27014": "Like+it!", + "27015": "Hold My Hand", + "27016": "STOIC HYPOTHESIS", + "27017": "Fly Above (Vicissitude Remix)", + "27018": "華麗なる大犬円舞曲", + "27019": "AKASHIC BREAK", + "27020": "Everlasting Message", + "27021": "Queen Kaguya", + "27022": "Do What You Want", + "27023": "Lost Souls", + "27024": "曼荼羅恋々", + "27025": "OUTER PLANETS", + "27026": "魅惑のYUMMYスイーツ", + "27029": "Nasty Techniques", + "27030": "Rave Patroller", + "27031": "Sugar Drippin'", + "27032": "セピアの軌跡 ft. 天宮みや(少女フラクタル)", + "27033": "Bow shock!!", + "27034": "T-REX vs Velociraptor (In the Far east euphoria)", + "27035": "Artist", + "27036": "GHOST", + "27037": "The Sky of Sadness", + "27039": "Lords Of The Roundtable", + "27041": "Rainstorm", + "27043": "Primitive Vibes", + "27044": "Double Dribble", + "27045": "Virus Funk", + "27046": "Override", + "27047": "Voo Doo Bamboleo", + "27048": "Infinity Mirror", + "27049": "灼熱Beach Side Bunny (Masayoshi Iimori Remix)", + "27050": "Volcanic Dragon", + "27051": "Ska-sh All Neurons!!", + "27052": "SCREW // owo // SCREW", + "27053": "Calvados Queen", + "27054": "深淵に捧ぐレクイエム", + "27056": "Matt Silver", + "27058": "Moving on", + "27059": "TRIUMPH", + "27060": "BEAT PRISONER", + "27061": "Change Yourself", + "27062": "NEWALONE", + "27063": "beatAffection", + "27064": "Friction[!]Function", + "27065": "GIGA VIOLATE", + "27066": "Crank It", + "27069": "S!ck (Nhato Remix)", + "27070": "Beautiful Harmony (IIDX Mix)", + "27071": "俺ら東京さ行ぐだ", + "27073": "ガヴリールドロップキック", + "27074": "fairy cocktail", + "27075": "Mel", + "27076": "Hyper Drive feat. ぷにぷに電機", + "27077": "Theory", + "27078": "Level 2", + "27079": "And-RoiD", + "27080": "ランカーキラーガール", + "27081": "VIBRΛ", + "27083": "Silly Love", + "27084": "Inferno of Fomalhaut", + "27087": "開きたまえ!Next stAge!", + "27088": "ピアノ協奏曲第1番”蠍火” (BlackY Remix)", + "27089": "Horizons of Promise", + "27090": "Shiva", + "27092": "Backyard Stars", + "27094": "THE F∀UST", + "27095": "Smashing Wedge", + "27096": "Advent Infamous", + "27100": "If", + "27101": "take me higher", + "27102": "Vinculum stellarum", + "27103": "眠りの国のステラ", + "27105": "ラブキラ☆スプラッシュ", + "27106": "Sparkle Smilin'", + "27107": "狂水一華", + "27108": "Into The Madness", + "27109": "ORCA", + "27110": "バッドエンド・シンドローム", + "27112": "Forgetting Machine", + "27113": "シャムシールの舞", + "27114": "Megalara Garuda", + "27116": "Ypsilon", + "28000": "涙のテ・エストラーニョ・ムーチョ", + "28001": "Romanticが止まらない", + "28002": "THE PEERLESS UNDER HEAVEN", + "28004": "無意識のフィロソフィア", + "28005": "∀", + "28007": "LOCUS OF THE TRAVEL", + "28008": "ディスコルディア", + "28009": "of the first magnitude", + "28010": "X-ray binary", + "28011": "-65℃", + "28014": "Euphoric Lagoon", + "28015": "儚き恋の華", + "28016": "水鏡の異界", + "28017": "Pārvatī", + "28018": "S-Bahn", + "28019": "COSMIC RAY", + "28020": "乱膳の舞姫", + "28021": "Vitrum", + "28022": "霧幻メモリア", + "28023": "Winner's Proof ft. KANASA from bless4", + "28024": "Sinus Iridum", + "28025": "Empire of Fury", + "28027": "Tiempo Loco", + "28028": "水無月の雫 ft. 小林まな", + "28029": "Rubrum Piano", + "28030": "閠槞彁の願い", + "28031": "Midnight Drive", + "28032": "Lovely Howdy Cowboy!!", + "28033": "Frisk And Squeak", + "28035": "MEGAERA", + "28036": "Here We Are", + "28037": "IIDX RED Ending (Ryu☆Remix)", + "28038": "The Wind of China Express(The 4th Mashup)", + "28039": "WAKE UP NOW", + "28040": "As You Want", + "28041": "Rowdy", + "28042": "Swarm Of Scarabs", + "28043": "魔法のかくれんぼ", + "28044": "Don't Stop The Music feat. Kanae Asaba", + "28045": "Dawn Saga", + "28046": "AMRITA -不滅ノ花-", + "28047": "Farewell to Marrakech", + "28048": "Danza Aestas", + "28049": "Ritual of Anubis", + "28050": "POLꞰAMAИIA", + "28051": "ASIAN VIRTUAL REALITIES (MELTING TOGETHER IN DAZZLING DARKNESS)", + "28052": "犬に雨傘", + "28053": "innocent revolver", + "28055": "Viridian", + "28056": "Jungle Eater", + "28057": "LAST DAY", + "28058": "BIGソムタム", + "28059": "Burning Flame", + "28060": "GIGA RAID", + "28061": "rommmo", + "28062": "Para siempre", + "28064": "Ah Hah Yeah", + "28065": "apo:llioth", + "28066": "Explorer feat. ぷにぷに電機", + "28067": "Overslept", + "28069": "Tell me what you wish feat.らっぷびと", + "28070": "Ocean Blue feat. Luschel", + "28071": "Rosa azuL", + "28072": "When I Met U", + "28073": "BLACK or WHITE?", + "28074": "新宝島", + "28076": "Zenith", + "28077": "HIGH VOLTAGE", + "28079": "Chewingood!!!", + "28080": "Crazy Jackpot", + "28081": "二人ノ廃城幽踊宴", + "28082": "Sugarplum", + "28083": "That Feeling", + "28084": "Ignis†Iræ", + "28085": "OTOKOZAKA", + "28086": "Neo Heritage", + "28087": "SOLID STATE SQUAD -RISEN RELIC REMIX-", + "28088": "ABSOLUTE (kors k Remix)", + "28089": "smooooch・∀・ (Snail's House Remix)", + "28090": "バッド・スイーツ、バッド・ドリーム", + "28091": "世界の果てに約束の凱歌を -ReUnion-", + "28092": "ここからよろしく大作戦143", + "28093": "伐折羅-vajra-", + "28096": "Level 3", + "28098": "BEMANI PRO LEAGUE Theme", + "28100": "Fire Beat", + "28101": "Playball", + "28102": "DENIM", + "28109": "MA・TSU・RI", + "28110": "MOVE! (We Keep It Movin')", + "28111": "LIKE A VAMPIRE", + "28112": "スーパー戦湯ババンバーン", + "28113": "Globe Glitter", + "28114": "DUAL STRIKER", + "28117": "Rejection Girl", + "29000": "LIVE DRIVING!! feat. 花たん", + "29001": "SOLID WYVERN", + "29002": "GRAVITON", + "29003": "PLASMA SOUL NIGHT feat. Nana Takahashi / 709sec.", + "29005": "HEARTACHE", + "29006": "Onyx", + "29007": "ALTERNATOR", + "29008": "ANEMONE", + "29009": "Tail Lights", + "29010": "Binary Black Hole", + "29011": "Divine Heaven", + "29012": "ハイテックトキオ", + "29013": "AMICABLE", + "29014": "ILAYZA", + "29015": "ウツシミウツシ", + "29016": "SPARK IN THE NIGHT", + "29017": "ピアノ独奏無言歌 \"灰燼\"", + "29018": "DISPARATE", + "29019": "Pout", + "29020": "DREAM OF SPACE UFO ABDUCTION", + "29021": "Lawes's Parotia", + "29022": "PIRATES BLADE", + "29024": "Prohibited Props", + "29025": "Purple Perplex", + "29026": "kors k's How to make OTOGE CORE", + "29027": "2 Beasts Unchained", + "29028": "愛しくてラヴィンユー ft. マナ", + "29029": "Fegrix", + "29030": "GiGaGaHell", + "29033": "Xyndrome", + "29035": "Wonderful Escape", + "29036": "FINALLY BLAZE", + "29037": "Victory Of Ravers", + "29038": "青の洞窟", + "29039": "Banger Banger Banger Banger", + "29040": "Get set, Go! feat.Kanae Asaba", + "29041": "天邪鬼", + "29042": "RAGE feat.H14 of LEONAIR", + "29043": "Fantastic Merry-Go-Round", + "29044": "Blue Bird feat. Kanae Asaba", + "29045": "禊", + "29046": "Ariah", + "29047": "Nocturnal 2097", + "29049": "Flying Castle", + "29050": "WHA", + "29051": "N.O.", + "29052": "烽火連天の刃", + "29053": "オールトの雲", + "29054": "Smalt #28598F", + "29055": "Ergosphere", + "29056": "EMOTiON TRiPPER", + "29057": "808monkey", + "29058": "10000 MILES AWAY", + "29060": "口カラ凸ゲキ", + "29061": "n/a", + "29062": "Angel's Ladder", + "29063": "Ventriloquist", + "29064": "Non Stop Rock", + "29065": "ナイトフィクション", + "29066": "hard-wired", + "29068": "雪上断火", + "29069": "No Day But Today!", + "29070": "Arkadia", + "29074": "アクマフカ", + "29075": "シル・ヴ・プレジデント", + "29076": "Don't believe the hype", + "29077": "P.O.W.E.R.", + "29078": "ABSOLUTE EVIL", + "29079": "月とミルク", + "29080": "めでてえ", + "29081": "怪物", + "29082": "ミュージック・アワー", + "29084": "Silver Bullet", + "29085": "オドループ", + "29086": "《GRANDMASTER》", + "29087": "Game Changers", + "29088": "Hat Surprise", + "29089": "TOMAHAWK", + "29090": "One for All", + "29091": "Brave Spirits", + "29092": "Triple Cross", + "29093": "Aftermath", + "29094": "逆月", + "29095": "Souhait bleu", + "29096": "Harmonia", + "29097": "Stepper", + "29098": "Push on Beats!~音ゲの国のeX-ストリーマー~", + "29099": "黒紅掬い", + "29100": "Emera", + "29101": "VR - Virtual Reality (prod.by Snail's House)", + "29102": "グッバイ宣言", + "29103": "あいつら全員同窓会", + "30000": "B.O.D.Y.", + "30001": "湘南ロンリーMIDNIGHT RAIN", + "30002": "LOUDER ROLLING THUNDER", + "30003": "mathematical good-bye", + "30004": "Shadow World", + "30005": "TECHNOPHOBIA", + "30006": "[ ]DENTITY", + "30007": "VØID", + "30008": "FLARE -炎舞- ft.Nana Takahashi", + "30009": "No Border", + "30010": "輪廻の鴉", + "30011": "STRAIGHT TO THE STARS", + "30012": "Xerulean", + "30013": "Peng-Ging Sky High!!", + "30014": "サヨナラ・ヘヴン-Celtic Chip Dance Mix-", + "30015": "VOLAQUAS", + "30016": "7 Colors", + "30017": "少年リップルズ", + "30018": "■□模様", + "30019": "LADS", + "30020": "Meissa", + "30022": "雨のちパノラマセカイ", + "30024": "Bad Encryption", + "30025": "Beyond Evolution", + "30026": "Programmed Genom", + "30027": "kors k's How to make OTOGE CORE 「LONG」", + "30028": "suspicions", + "30029": "≡+≡", + "30030": "Caldwell 99", + "30031": "月と夢の跡 ft. マナ", + "30032": "Ambush Ace", + "30033": "C-C-C-N-N-N", + "30034": "Peaktime Booster", + "30035": "Move UR Body", + "30036": "儚キ戀ノ幻想譚", + "30037": "Always We Trust In You", + "30038": "With You", + "30039": "3V0", + "30040": "Driver", + "30041": "きゅんです。", + "30042": "Ruler or Loser", + "30043": "Rewind Time", + "30044": "anthracene", + "30045": "wanna be a \"BAD GIRL\" feat. Nana Takahashi", + "30046": "Fading Stars", + "30047": "Seraph", + "30048": "Perfect Plan", + "30049": "Swing My Wonderland", + "30050": "DIAMOND JACKAL", + "30051": "Summerblue", + "30052": "Somnidiscotheque", + "30053": "罪過の聖堂", + "30054": "栄冠のカンパネラ", + "30055": "dica dica", + "30056": "Super Freak", + "30057": "楽園追放", + "30058": "#CMFLG", + "30059": "神のシナリオ", + "30060": "glacia", + "30061": "EXODUS SIGN", + "30062": "響花水月", + "30063": "GET UP AGAIN", + "30064": "チェイスチェイスジョーカーズのうた (オニスタイルリミックス)", + "30065": "BIGWAVERS", + "30066": "VOLCANIC BIGBEAT", + "30067": "Dreaming Dream", + "30068": "THE TIME MACHINE", + "30069": "ONE AND ONLY", + "30070": "CUE CUE RESCUE", + "30072": "あるビー! feat.ころねぽち", + "30073": "真夜中のバベル", + "30074": "Luna Plena", + "30075": "Sunny Day Vibes", + "30076": "The Clown of 24stairs", + "30077": "ZEИITH", + "30078": "ぞうしょく!?マイデンティティ", + "30079": "Level 4", + "30080": "Chaotoxin", + "30081": "昏き甲鉄のヴェルガ", + "30082": "おとせサンダー", + "30084": "生きるよすが", + "30086": "《ORDERBREAKER》", + "30087": "OVER VOLTAGE", + "30088": "Hat Surprise (Season 2)", + "30089": "Ōu Legends", + "30090": "Red Soul", + "30091": "STAR BEAT", + "30092": "Get On Your Feet", + "30093": "Next Level", + "30094": "24h Endurance Race", + "30095": "I", + "30096": "RINИE", + "30097": "パーフェクトイーター", + "30098": "恋愛=精度×認識力", + "30099": "AWA AWA", + "30100": "ちょえちょえまぎか", + "30101": "神っぽいな", + "30102": "KING", + "30104": "新時代", + "30105": "マツケンサンバII", + "30106": "CODE -CRiMSON-", + "30107": "MAX 360", + "30108": "異心前進♪ぴょんぴょんぴょん", + "30109": "惑星☆ロリポップ", + "30111": "Shamshir", + "30114": "Stylus", + "31000": "JUSTICE/GUILTY feat. Nana Takahashi & 709sec.", + "31001": "CADENZA", + "31003": "The Last Apocalypse", + "31004": "Iris", + "31005": "電子になりたい", + "31006": "Riff//rain", + "31007": "Vulnerability", + "31008": "Time Distortion pt.2(IIDX Edit)", + "31009": "frequent", + "31010": "Cult Invitation", + "31011": "Chemical Colours", + "31012": "Speculation", + "31013": "めうめうぺったんたん!! (ZAQUVA Remix)", + "31014": "WaterCube Pf.(RX-Ver.S.P.L.)", + "31015": "Sword of Vengeance", + "31016": "Psychedelic Intelligence", + "31017": "ポラリスノウタ", + "31018": "終焔のClaudia", + "31019": "Get Higher", + "31020": "Amethyst", + "31021": "アイドル", + "31023": "ちゅ、多様性。", + "31024": "酔いどれ知らず", + "31025": "寝起きヤシの木", + "31026": "Mukade", + "31027": "Glitch N Ride", + "31028": "See You Again", + "31029": "winkle 2 winkle", + "31030": "灼熱Beach Side Bunny (かめりあ's \"Summertime D'n'B\" Remix)", + "31031": "果たせぬ約束 ft. 小林マナ", + "31032": "COUNTING SHEEP ft. Kanae Asaba", + "31033": "Tripping Jumping", + "31034": "Out of Control", + "31035": "Echoes of Sunfall", + "31036": "今宵、ロマンス横丁。", + "31037": "Stereo Beasts", + "31038": "Bitter & Lucky", + "31039": "Dahlia", + "31040": "Jumper", + "31041": "アタシ完全絶対正義ちゃん!", + "31042": "シンデレラ", + "31043": "摩天楼", + "31044": "惑星鉄道", + "31045": "センチメンタル・サマー", + "31046": "Demon March", + "31047": "Aeterna", + "31048": "Deep Sea Mystery", + "31049": "Submerge Serenade", + "31050": "INHERITANCE", + "31051": "MAXIMUM CHEAT GIRL", + "31052": "Resonant", + "31053": "れとりば!", + "31054": "Vermilion Carol", + "31055": "This Is Club Musik feat. 大久保紅葉", + "31057": "神様、つれない。", + "31058": "GLORIOUS HAMMER", + "31059": "Level 5", + "31060": "ZEROIN ON THE LIGHT", + "31061": "電腦都市", + "31062": "夢縁", + "31063": "Shapeshifter", + "31064": "Ghost Pulse", + "31065": "閉塞的フレーション", + "31066": "GAME ON", + "31067": "DAZZLE ATTACK", + "31068": "SOLAR ECLIPSE", + "31069": "TRIP THE DEEP", + "31070": "夏風邪デスコ", + "31071": "out of disk space", + "31072": "ないないルーティン", + "31073": "My Sweet Bird?", + "31074": "Too Late Snow", + "31075": "ACTØ", + "31076": "GloriosA", + "31077": "流桜ノ門", + "31078": "20XX", + "31079": "TITANIUM RIDERS", + "31080": "Just Gimme", + "31081": "Million Dollar", + "31083": "Xb10r", + "31084": "Monkey Business", + "31085": "Ambivalent Vermilia", + "31086": "《PL|RAYER》", + "31087": "電光", + "31088": "Hat Surprise (Season 3)", + "31089": "i-ii", + "31090": "Red Determination", + "31091": "Sirius", + "31092": "Hard Breaker", + "31093": "Get Wicked", + "31097": "デビルじゃないもん", + "31098": "可愛くてごめん", + "31099": "フォニイ", + "31100": "唱", + "31101": "勇者", + "31102": "マーシャル・マキシマイザー", + "31103": "雫", + "31104": "squall", + "31105": "BLAZING_LAZER", + "31106": "CODE:2", + "31107": "残像ニ繋ガレタ追憶ノHIDEAWAY", + "31108": "PILGRIM", + "31109": "NEEDLESS MY LOVE FOR YOU", + "31110": "Akatsuki", + "31111": "So What", + "31112": "ラビットホール", + "31113": "愛包ダンスホール", + "31115": "Seven Times Four", + "31116": "T.R.O.L.L.", + "31117": "The Onlyonez", + "31118": "リメンバーリメンバー", + "31119": "未完成ノ蒸氣驅動乙女", + "32000": "スパークリング☆彡ハイパーチューン!!", + "32001": "ADAMANT", + "32002": "スキッテイエェエエェ!!!!", + "32003": "IN BETWEEN", + "32004": "KOTONOHA ft. Kotoha", + "32005": "NOIXIA", + "32006": "uən", + "32007": "SISYPHUS", + "32008": "天使のカンタータ -Cantata of Angels-", + "32009": "destination", + "32010": "Pinky Happy Crazy", + "32011": "Digital Radiance", + "32012": "lowercase lifetime", + "32013": "Without Heaven", + "32014": "最強頂戴girl♡", + "32015": "ハルイロメロディー", + "32016": "Arcanos", + "32017": "Slumber☆Party", + "32019": "きゅうくらりん", + "32020": "Galaxy Collapse", + "32021": "hora de verdad", + "32022": "PERFECT HUMAN", + "32023": "MVP", + "32024": "Roar of Chronos", + "32025": "爆ぜりゃんせ", + "32026": "Bring The Fire", + "32027": "Bang-Boo Bumble", + "32028": "u gotta beat", + "32029": "Mighty Cutie", + "32030": "everlastingeuphoria:", + "32031": "Chasing After YOU ~夢の欠片~ ft. 小林マナ", + "32032": "Stargazing Trip ~星 探す旅~ ft. 小林マナ", + "32033": "Vibing! Shake it!", + "32034": "Flämingo", + "32035": "Drop Syndicate", + "32036": "1116", + "32037": "Lycoris", + "32038": "Aqvion", + "32039": "FERMI♡PARADOX", + "32040": "Space In Time", + "32041": "消極的セツナイズム", + "32042": "Constellation", + "32043": "ELYSIUM", + "32044": "PASTELISM", + "32045": "Dreamship", + "32046": "きみのせかい", + "32047": "Eleanor", + "32048": "Fiery Stallion", + "32049": "オッド♡ラヴィ", + "32050": "PIT A PAT", + "32051": "MARLIN", + "32052": "God Mind", + "32053": "DIVINE JUDGEMENT", + "32054": "Shirdal", + "32055": "Mid-Corner (Magic Maker)", + "32056": "Show Me All Your Love", + "32057": "弾幕信仰", + "32058": "EX-MASSIVE FIGHTER", + "32059": "無双", + "32060": "SUPER HEROINE!!", + "32061": "FlyAway", + "32062": "Satellite Burst", + "32063": "ロマンシングエスケープ", + "32064": "アラビアン ハイパー ナイト", + "32065": "Butterfly Twist", + "32066": "灼熱 Lost Summer Dayz", + "32067": "RAVE SYNDROME", + "32068": "SμG@R RU$#", + "32069": "TECHNO RUMBLE", + "32070": "断罪の一花", + "32071": "get set mind", + "32072": "ドリムチウ", + "32073": "PopなEDEN", + "32074": "CHAOTIC SUNBIRD", + "32075": "Raspberry Potion (feat.あれたん♡ & ぎゃるのしん☆)", + "32076": "Here We Go Now", + "32077": "Secret Rouge", + "32078": "飴玉", + "32079": "我ら完全無敵のアイドル!!", + "32080": "えだまめカレークッキング", + "32081": "ゲシュタルト", + "32082": "ビビデバ", + "32083": "メズマライザー", + "32084": "Bling-Bang-Bang-Born", + "32085": "イガク", + "32093": "Lightspeed", + "32094": "ファイナルレター", + "32095": "COSMIC V3LOCITY", + "32096": "ドーナツホール 2024", + "32097": "ハオ", + "32098": "オブソミート", + "32099": "Skratch Education Lv-1", + "32100": "Uaigh Gealaí", + "32101": "進捗ダメダメです", + "32102": "ギャ・ギャ・ギャ・ギャラクシー!", + "32103": "エクスプロウル", + "32104": "覚悟せよ!エンタンメ~ン ~より身の切り売り自暴自棄版~", + "32105": "朱と碧のランページ", + "32106": "Plea Per Phase", + "32107": "Cross Fire", + "32108": "XHRONOXAPSULΞ", + "32109": "EYE OF THE HEAVEN", + "32110": "Plazma", + "32111": "キスキツネ", + "32112": "Good Looking" + }; + +- + const diffNames = ["SP Beginner", "SP Normal", "SP Hyper", "SP Another", "SP Leggendaria", "DP Normal", "DP Hyper", "DP Another", "DP Leggendaria"]; + + const getLamp = (val) => { + if (val === 7) return "FULL COMBO"; + if (val === 6) return "EX-HARD"; + if (val === 5) return "HARD CLEAR"; + if (val === 4) return "CLEAR"; + if (val === 3) return "EASY CLEAR"; + if (val === 2) return "ASSIST CLEAR"; + if (val === 1) return "FAILED"; + return "NO PLAY"; + }; + div .card - .card-header + .card-header(style="display: flex; justify-content: space-between; align-items: center; padding-right: 1rem;") p.card-header-title span.icon - i.mdi.mdi-account-edit - | Score + i.mdi.mdi-format-list-bulleted + | Score List (Pinky Crush) + .select.is-small + select(id="score-sort-filter") + option(value="recent") Recently Played + option(value="mid") Music ID + option(value="title") Music Title + option(value="lamp") Clear Lamp .card-content - table.table + table.table.is-striped.is-fullwidth.is-hoverable thead tr - th Music ID - th EXSCORE [SPB~DPL] - th Miss Count [SPB~DPL] - th Clear Lamp [SPB~DPL] + th Music Title + th Difficulty + th Clear Lamp + th EX Score + th BP tbody each i in score - tr - td #{i.mid} - td #{i.esArray} - td #{i.mArray} - td #{i.cArray} + - for (let d = 0; d < 9; d++) { + - let lamp = i.cArray[d]; + - let ex = i.esArray[d]; + - let miss = i.mArray[d]; + + - if (lamp > 0 || ex > 0 || miss > -1) { + - const updateTime = i.updatedAt ? new Date(i.updatedAt).getTime() : 0; + tr(data-mid=i.mid data-updated=updateTime data-lamp=lamp data-ex=ex) + //- A space for the title instead of the ID + td.music-title(data-mid=i.mid) + strong #{i.mid} + td + span.tag.is-info.is-light #{diffNames[d]} + td + strong #{getLamp(lamp)} + td #{ex} + td #{miss === -1 ? 0 : miss} + - } + - } + +//- 3. run Title Replacement +script. + $(document).ready(function() { + // Cache music title text attributes for each row + $('tbody tr').each(function() { + const mid = String($(this).data('mid')); + const title = (window.musicDB && window.musicDB[mid]) ? window.musicDB[mid] : mid; + $(this).attr('data-title', title); + }); + + // Define sorting function + function sortScoreTable(sortType) { + const $tbody = $('tbody'); + const $rows = $tbody.find('tr').get(); + + $rows.sort(function(a, b) { + const midA = Number($(a).data('mid')) || 0; + const midB = Number($(b).data('mid')) || 0; + const updatedA = Number($(a).data('updated')) || 0; + const updatedB = Number($(b).data('updated')) || 0; + const lampA = Number($(a).data('lamp')) || 0; + const lampB = Number($(b).data('lamp')) || 0; + const exA = Number($(a).data('ex')) || 0; + const exB = Number($(b).data('ex')) || 0; + const titleA = $(a).attr('data-title') || ''; + const titleB = $(b).attr('data-title') || ''; + + switch (sortType) { + case 'recent': // Recently Played (most recent first / descending) + return updatedB - updatedA || midA - midB; + case 'mid': // Music ID (ascending) + return midA - midB; + case 'title': // Music Title (alphabetical / A-Z) + return titleA.localeCompare(titleB); + case 'lamp': // Clear Lamp (higher lamp first -> tie-breaker: higher EX score) + if (lampB !== lampA) return lampB - lampA; + return exB - exA; + default: + return 0; + } + }); + + $.each($rows, function(index, row) { + $tbody.append(row); + }); + } + + // Execute default sort (Recently Played) and bind change event + sortScoreTable($('#score-sort-filter').val()); + $('#score-sort-filter').on('change', function() { + sortScoreTable($(this).val()); + }); + $('.music-title').each(function() { + const $cell = $(this); + const mid = String($cell.data('mid')); + + if (window.musicDB && window.musicDB[mid]) { + $cell.find('strong').text(window.musicDB[mid]); + } + }); + }); \ No newline at end of file