feat: IIDX 32 support (#1230)

* fix: iidx-mdb-parse: search terms were discarded for new songs

* feat: initial iidx32 support through 20241210

* fix: forgot folders/tables for iidx32
This commit is contained in:
GRIM657
2025-01-08 01:27:20 +00:00
committed by GitHub
parent 6cd05cbc1a
commit c6ee2010fa
8 changed files with 28961 additions and 10532 deletions
+1
View File
@@ -256,6 +256,7 @@ export const IIDX_SP_CONF = {
"29": "CastHour",
"30": "Resident",
"31": "Epolis",
"32": "Pinky Crush",
"26-omni": "ROOTAGE Omnimix",
"27-omni": "HEROIC VERSE Omnimix",
"28-omni": "BISTROVER Omnimix",
File diff suppressed because it is too large Load Diff
+312
View File
@@ -17413,6 +17413,19 @@
"title": "Level 1 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "1",
"versions": "32"
},
"folderID": "F2b2fcda94a766584618391be7c46b9dac6b7914f92386ad0171b97403a4f849f",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 1 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "1",
@@ -17868,6 +17881,19 @@
"title": "Level 10 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "10",
"versions": "32"
},
"folderID": "Ff7de366cce345e873c464922e6d9ac098dc90cc6790896b11a5170c0842b0ae6",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 10 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "10",
@@ -18323,6 +18349,19 @@
"title": "Level 11 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "11",
"versions": "32"
},
"folderID": "F2f12724378cd72e4d55d309bf8168f9313f9b5d1f65a06ca7a1b12be4f48a4fe",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 11 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "11",
@@ -18778,6 +18817,19 @@
"title": "Level 12 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "12",
"versions": "32"
},
"folderID": "F7fffb3d5ebf0d000d1c8d8aa9e3fe6190e940286e623870d38b11edc9502502a",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 12 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "12",
@@ -19233,6 +19285,19 @@
"title": "Level 2 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "2",
"versions": "32"
},
"folderID": "F166cfacd26723310870e4efc93341af713135145284b054b9020270245e8c5cb",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 2 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "2",
@@ -19688,6 +19753,19 @@
"title": "Level 3 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "3",
"versions": "32"
},
"folderID": "Fc1dfd93347e8b69cbf964684e89cf8aebd18413841e43a64d53f9004d0a349e4",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 3 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "3",
@@ -20143,6 +20221,19 @@
"title": "Level 4 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "4",
"versions": "32"
},
"folderID": "Fc3dde78cc02ca22ffcf1e20ea6673f7d55f5a1595a61fc96028097ec32fa9d57",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 4 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "4",
@@ -20598,6 +20689,19 @@
"title": "Level 5 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "5",
"versions": "32"
},
"folderID": "Fb98a7db6546c42f3c015a5ba2bc846b5363dccaf1c9ef2804de81a16290d5c03",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 5 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "5",
@@ -21053,6 +21157,19 @@
"title": "Level 6 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "6",
"versions": "32"
},
"folderID": "F623a451f7495805159079174a46fca394252b49ad9e2b96fbd8c9c79b39cc32c",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 6 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "6",
@@ -21508,6 +21625,19 @@
"title": "Level 7 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "7",
"versions": "32"
},
"folderID": "F7fbee99fdeffde18a9691ba4889b728eedb26d6bdfd62ae7dca7d2ebd843db9c",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 7 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "7",
@@ -21963,6 +22093,19 @@
"title": "Level 8 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "8",
"versions": "32"
},
"folderID": "Fb8af9c89a5c1403788857a49a6adc33b498cbb992661149b27ebfe5dfce87d3b",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 8 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "8",
@@ -22418,6 +22561,19 @@
"title": "Level 9 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "9",
"versions": "32"
},
"folderID": "F05f2f8e88514747d601ed0f62fe9774267741222ed9680a9f05388e788d270c6",
"game": "iidx",
"inactive": false,
"playtype": "DP",
"searchTerms": [],
"title": "Level 9 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "9",
@@ -22873,6 +23029,19 @@
"title": "Level 1 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "1",
"versions": "32"
},
"folderID": "F414a38ddc83bbe981e09331b7f254c3163520e4357286039fe8c33da64808545",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 1 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "1",
@@ -23328,6 +23497,19 @@
"title": "Level 10 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "10",
"versions": "32"
},
"folderID": "F9360022ed3e9a10d14765ce461a23d63b11cd0b9e51a1698d0bba33e1ddb5c7f",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 10 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "10",
@@ -23783,6 +23965,19 @@
"title": "Level 11 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "11",
"versions": "32"
},
"folderID": "F57b065b790f15c0ff80b1f608f2ce470a380788d1a66c555e26c8eb5ffd72130",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 11 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "11",
@@ -24238,6 +24433,19 @@
"title": "Level 12 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "12",
"versions": "32"
},
"folderID": "F9792eaf29418651dd05d6b6a9b98d470d3b3b637247c65237d8344ba662517f4",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 12 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "12",
@@ -24693,6 +24901,19 @@
"title": "Level 2 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "2",
"versions": "32"
},
"folderID": "Fc08cb877c833790324ccb0afac9bca1dc88d4d46f105826bf8ff4bbb59aedc74",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 2 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "2",
@@ -25148,6 +25369,19 @@
"title": "Level 3 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "3",
"versions": "32"
},
"folderID": "Fabda68ee64002b6f5df4438f85b90c664c92553aee52c69a181f9e1f3183ee0b",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 3 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "3",
@@ -25603,6 +25837,19 @@
"title": "Level 4 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "4",
"versions": "32"
},
"folderID": "F3b8224cb7b11dde3ca4db9fcdc2e368afbbd10605bf6de6d7674df1338708c44",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 4 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "4",
@@ -26058,6 +26305,19 @@
"title": "Level 5 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "5",
"versions": "32"
},
"folderID": "F7a3a7de4e067bd524ae191f6597923c692f30909708afe6f72bfc5c8dc6477d5",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 5 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "5",
@@ -26513,6 +26773,19 @@
"title": "Level 6 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "6",
"versions": "32"
},
"folderID": "F0d502fb445f73dd3c432f4ab75a092a84131975b4bd851b071cafe215c74e149",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 6 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "6",
@@ -26968,6 +27241,19 @@
"title": "Level 7 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "7",
"versions": "32"
},
"folderID": "F7b540271711dae047bb3c2359338d917ec30d607279e094c2fe3d246a408b59f",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 7 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "7",
@@ -27423,6 +27709,19 @@
"title": "Level 8 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "8",
"versions": "32"
},
"folderID": "F877376c9f0b76da0be8b85fca69d608d4274fc7da595bb87c955e2d02746e892",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 8 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "8",
@@ -27878,6 +28177,19 @@
"title": "Level 9 (PENDUAL)",
"type": "charts"
},
{
"data": {
"level": "9",
"versions": "32"
},
"folderID": "Fd9bf1060d183a680bc80892ab83cbb6a63f0288d8db7093eba3e2d6d659f4af8",
"game": "iidx",
"inactive": false,
"playtype": "SP",
"searchTerms": [],
"title": "Level 9 (Pinky Crush)",
"type": "charts"
},
{
"data": {
"level": "9",
+621
View File
@@ -26834,5 +26834,626 @@
"KIYARORA EISEI NO KISEKI"
],
"title": "キヤロラ衛星の軌跡"
},
{
"altTitles": [],
"artist": "Machico",
"data": {
"displayVersion": "32",
"genre": "EUROBEAT"
},
"id": 2399,
"searchTerms": [
"SPARKLING HYPER TUNE"
],
"title": "スパークリング☆彡ハイパーチューン!!"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"L.E.D.-G\"",
"data": {
"displayVersion": "32",
"genre": "HARDCORE"
},
"id": 2400,
"searchTerms": [],
"title": "ADAMANT"
},
{
"altTitles": [],
"artist": "EmoCosine × BEMANI Sound Team \"HuΣeR\"",
"data": {
"displayVersion": "32",
"genre": "EMOISM FUTURE POP"
},
"id": 2401,
"searchTerms": [],
"title": "KOTONOHA ft. Kotoha"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"HuΣeR\"",
"data": {
"displayVersion": "32",
"genre": "STYLISH ELECTRO"
},
"id": 2402,
"searchTerms": [],
"title": "NOIXIA"
},
{
"altTitles": [],
"artist": "One Round Rabbits",
"data": {
"displayVersion": "32",
"genre": "TRANCECORE"
},
"id": 2403,
"searchTerms": [],
"title": "destination"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"Sota Fujimori\" feat. S.B.Z.",
"data": {
"displayVersion": "32",
"genre": "COLOUR TECH"
},
"id": 2404,
"searchTerms": [],
"title": "Digital Radiance"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"ZAQUVA\"",
"data": {
"displayVersion": "32",
"genre": "HYPERFLIP"
},
"id": 2405,
"searchTerms": [],
"title": "lowercase lifetime"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"TATSUYA\" feat. ななひら",
"data": {
"displayVersion": "32",
"genre": "TWINKLE POP"
},
"id": 2406,
"searchTerms": [
"Saikyo Chodai girl"
],
"title": "最強頂戴girl♡"
},
{
"altTitles": [],
"artist": "DJ Totoriott",
"data": {
"displayVersion": "32",
"genre": "NOSTALGIC ARTCORE"
},
"id": 2407,
"searchTerms": [],
"title": "Arcanos"
},
{
"altTitles": [],
"artist": "Remixed by Ryu☆ feat. BEMANI Sound Team \"PON\"",
"data": {
"displayVersion": "32",
"genre": "IIDX EDITION"
},
"id": 2408,
"searchTerms": [],
"title": "PERFECT HUMAN"
},
{
"altTitles": [],
"artist": "PRIDASK",
"data": {
"displayVersion": "32",
"genre": "HARD TRAP"
},
"id": 2409,
"searchTerms": [],
"title": "MVP"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"KE!JU\"",
"data": {
"displayVersion": "32",
"genre": "DIAMOND CORE"
},
"id": 2410,
"searchTerms": [],
"title": "Roar of Chronos"
},
{
"altTitles": [],
"artist": "敦姫",
"data": {
"displayVersion": "32",
"genre": "繚乱呂句"
},
"id": 2411,
"searchTerms": [
"Hazeryanse"
],
"title": "爆ぜりゃんせ"
},
{
"altTitles": [],
"artist": "kors k",
"data": {
"displayVersion": "32",
"genre": "SPEED RAVE"
},
"id": 2412,
"searchTerms": [],
"title": "Bring The Fire"
},
{
"altTitles": [],
"artist": "二代目白虎",
"data": {
"displayVersion": "32",
"genre": "BANGIN' TECHNO"
},
"id": 2413,
"searchTerms": [],
"title": "Bang-Boo Bumble"
},
{
"altTitles": [],
"artist": "KARUT",
"data": {
"displayVersion": "32",
"genre": "TECHCORE"
},
"id": 2414,
"searchTerms": [],
"title": "u gotta beat"
},
{
"altTitles": [],
"artist": "Xceon",
"data": {
"displayVersion": "32",
"genre": "Y2K 2000 J-POP DANCE"
},
"id": 2415,
"searchTerms": [],
"title": "Chasing After YOU ~夢の欠片~ ft. 小林マナ"
},
{
"altTitles": [],
"artist": "らっぷびと Prod. by RoughSketch & NUE",
"data": {
"displayVersion": "32",
"genre": "SOCA/HARD DANCE"
},
"id": 2416,
"searchTerms": [],
"title": "Vibing! Shake it!"
},
{
"altTitles": [],
"artist": "Seventhrun × nora2r",
"data": {
"displayVersion": "32",
"genre": "MOOMBAHCORE / DRUM'N BASS"
},
"id": 2417,
"searchTerms": [],
"title": "Drop Syndicate"
},
{
"altTitles": [],
"artist": "BlackY feat. Risa Yuzuki",
"data": {
"displayVersion": "32",
"genre": "COSMIC HAPPY TUNE"
},
"id": 2418,
"searchTerms": [
"FERMI PARADOX"
],
"title": "FERMI♡PARADOX"
},
{
"altTitles": [],
"artist": "Masayoshi Iimori",
"data": {
"displayVersion": "32",
"genre": "FUTURE‘N’BASS"
},
"id": 2419,
"searchTerms": [],
"title": "Space In Time"
},
{
"altTitles": [],
"artist": "Pizuya's Cell",
"data": {
"displayVersion": "32",
"genre": "ROCK"
},
"id": 2420,
"searchTerms": [
"shokyokutekisetsunaizumu"
],
"title": "消極的セツナイズム"
},
{
"altTitles": [],
"artist": "Snail's House",
"data": {
"displayVersion": "32",
"genre": "RANDOM ACCESS MEMORIES"
},
"id": 2421,
"searchTerms": [],
"title": "ELYSIUM"
},
{
"altTitles": [],
"artist": "Nhato feat. Kanae Asaba",
"data": {
"displayVersion": "32",
"genre": "ELECTRO POP"
},
"id": 2422,
"searchTerms": [],
"title": "Dreamship"
},
{
"altTitles": [],
"artist": "satella feat. nayuta",
"data": {
"displayVersion": "32",
"genre": "UNNAMED FIESTA"
},
"id": 2423,
"searchTerms": [],
"title": "Eleanor"
},
{
"altTitles": [],
"artist": "Dirty Androids",
"data": {
"displayVersion": "32",
"genre": "80'S SYNTHWAVE ROCK"
},
"id": 2424,
"searchTerms": [],
"title": "Fiery Stallion"
},
{
"altTitles": [],
"artist": "lapix feat. PANXI",
"data": {
"displayVersion": "32",
"genre": "LOVELY TECHCORE"
},
"id": 2425,
"searchTerms": [
"Odd Lovey"
],
"title": "オッド♡ラヴィ"
},
{
"altTitles": [],
"artist": "Zekk",
"data": {
"displayVersion": "32",
"genre": "NEO CANDY RAVE"
},
"id": 2426,
"searchTerms": [],
"title": "PIT A PAT"
},
{
"altTitles": [],
"artist": "OSTER project",
"data": {
"displayVersion": "32",
"genre": "SYMPHONIC BREAK BEATS"
},
"id": 2427,
"searchTerms": [],
"title": "DIVINE JUDGEMENT"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"L.E.D.-G\"",
"data": {
"displayVersion": "32",
"genre": "HYBRID HARDSTYLE"
},
"id": 2428,
"searchTerms": [],
"title": "EX-MASSIVE FIGHTER"
},
{
"altTitles": [],
"artist": "SOUND HOLIC Vs. VENUS feat. Nana Takahashi",
"data": {
"displayVersion": "32",
"genre": "SENGOKU LEGENDS"
},
"id": 2429,
"searchTerms": [
"MUSOU"
],
"title": "無双"
},
{
"altTitles": [],
"artist": "xi",
"data": {
"displayVersion": "32",
"genre": "HARD SYMPHONIC"
},
"id": 2430,
"searchTerms": [],
"title": "Satellite Burst"
},
{
"altTitles": [],
"artist": "DJ Mass MAD Izm* feat.すみはね",
"data": {
"displayVersion": "32",
"genre": "DRUM'N'BASS"
},
"id": 2431,
"searchTerms": [
"Shakunetsu Lost Summer Dayz"
],
"title": "灼熱 Lost Summer Dayz"
},
{
"altTitles": [],
"artist": "Yuta Imai",
"data": {
"displayVersion": "32",
"genre": "REVERSE BASS"
},
"id": 2432,
"searchTerms": [],
"title": "RAVE SYNDROME"
},
{
"altTitles": [],
"artist": "Len feat.mochari",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2433,
"searchTerms": [
"Flower of Judgement"
],
"title": "断罪の一花"
},
{
"altTitles": [],
"artist": "TORIENA",
"data": {
"displayVersion": "32",
"genre": "TORIENA LAND"
},
"id": 2434,
"searchTerms": [],
"title": "get set mind"
},
{
"altTitles": [],
"artist": "YASUHIRO(康寛) feat.橘田ほのか",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2435,
"searchTerms": [
"PopEDEN"
],
"title": "PopなEDEN"
},
{
"altTitles": [],
"artist": "Tanchiky",
"data": {
"displayVersion": "32",
"genre": "ULTRA SAM-BASS"
},
"id": 2436,
"searchTerms": [],
"title": "CHAOTIC SUNBIRD"
},
{
"altTitles": [],
"artist": "Tatsunoshin & 藍良あれれ",
"data": {
"displayVersion": "32",
"genre": "LOVE♡CORE"
},
"id": 2437,
"searchTerms": [],
"title": "Raspberry Potion (feat.あれたん♡ & ぎゃるのしん☆)"
},
{
"altTitles": [],
"artist": "Whac-A-Me",
"data": {
"displayVersion": "32",
"genre": "HARD PSY"
},
"id": 2438,
"searchTerms": [],
"title": "Here We Go Now"
},
{
"altTitles": [],
"artist": "ハレトキドキ",
"data": {
"displayVersion": "32",
"genre": "DIGITAL J-POP"
},
"id": 2439,
"searchTerms": [],
"title": "Secret Rouge"
},
{
"altTitles": [],
"artist": "CYNHN",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2440,
"searchTerms": [
"DROPS"
],
"title": "飴玉"
},
{
"altTitles": [],
"artist": "B小町",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2441,
"searchTerms": [
"Warera Kanzenmutekino Idol!!"
],
"title": "我ら完全無敵のアイドル!!"
},
{
"altTitles": [],
"artist": "OSTER project feat. ずんだもん & 春日部つむぎ",
"data": {
"displayVersion": "32",
"genre": "ZUNTSUMU TEETEE"
},
"id": 2442,
"searchTerms": [
"Edamame Curry Cooking"
],
"title": "えだまめカレークッキング"
},
{
"altTitles": [],
"artist": "花譜",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2443,
"searchTerms": [
"gestalt"
],
"title": "ゲシュタルト"
},
{
"altTitles": [],
"artist": "星街すいせい",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2444,
"searchTerms": [
"BIBBIDIBA"
],
"title": "ビビデバ"
},
{
"altTitles": [],
"artist": "サツキ feat.初音ミク・重音テトSV",
"data": {
"displayVersion": "32",
"genre": "HAPPY HARDCORE"
},
"id": 2445,
"searchTerms": [
"Mesmerizer"
],
"title": "メズマライザー"
},
{
"altTitles": [],
"artist": "Covered by uno(IOSYS) feat. Fra",
"data": {
"displayVersion": "32",
"genre": "IIDX EDITION"
},
"id": 2446,
"searchTerms": [],
"title": "Bling-Bang-Bang-Born"
},
{
"altTitles": [],
"artist": "原口沙輔 feat.重音テト",
"data": {
"displayVersion": "32",
"genre": "ボーカロイド・J-POP・ダンス"
},
"id": 2447,
"searchTerms": [
"Medicine"
],
"title": "イガク"
},
{
"altTitles": [],
"artist": "Tanukichi",
"data": {
"displayVersion": "32",
"genre": "FRENCHCORE"
},
"id": 2448,
"searchTerms": [],
"title": "Lightspeed"
},
{
"altTitles": [],
"artist": "かねこちはる",
"data": {
"displayVersion": "32",
"genre": "MELODIOUS WATER PIANO"
},
"id": 2449,
"searchTerms": [
"FINAL LETTER"
],
"title": "ファイナルレター"
},
{
"altTitles": [],
"artist": "BEMANI Sound Team \"Coyaan & KE!JU & ZAQUVA\"",
"data": {
"displayVersion": "32",
"genre": "UCHIAGE CORE"
},
"id": 2450,
"searchTerms": [],
"title": "COSMIC V3LOCITY"
},
{
"altTitles": [],
"artist": "ハチ",
"data": {
"displayVersion": "32",
"genre": "J-POP"
},
"id": 2451,
"searchTerms": [
"DONUT HOLE 2024"
],
"title": "ドーナツホール 2024"
}
]
+46
View File
@@ -2533,6 +2533,29 @@
"tableID": "iidx-DP-22-levels",
"title": "beatmania IIDX (DP) (PENDUAL)"
},
{
"default": false,
"description": "Levels for beatmania IIDX (DP) in Pinky Crush.",
"folders": [
"F2b2fcda94a766584618391be7c46b9dac6b7914f92386ad0171b97403a4f849f",
"F166cfacd26723310870e4efc93341af713135145284b054b9020270245e8c5cb",
"Fc1dfd93347e8b69cbf964684e89cf8aebd18413841e43a64d53f9004d0a349e4",
"Fc3dde78cc02ca22ffcf1e20ea6673f7d55f5a1595a61fc96028097ec32fa9d57",
"Fb98a7db6546c42f3c015a5ba2bc846b5363dccaf1c9ef2804de81a16290d5c03",
"F623a451f7495805159079174a46fca394252b49ad9e2b96fbd8c9c79b39cc32c",
"F7fbee99fdeffde18a9691ba4889b728eedb26d6bdfd62ae7dca7d2ebd843db9c",
"Fb8af9c89a5c1403788857a49a6adc33b498cbb992661149b27ebfe5dfce87d3b",
"F05f2f8e88514747d601ed0f62fe9774267741222ed9680a9f05388e788d270c6",
"Ff7de366cce345e873c464922e6d9ac098dc90cc6790896b11a5170c0842b0ae6",
"F2f12724378cd72e4d55d309bf8168f9313f9b5d1f65a06ca7a1b12be4f48a4fe",
"F7fffb3d5ebf0d000d1c8d8aa9e3fe6190e940286e623870d38b11edc9502502a"
],
"game": "iidx",
"inactive": false,
"playtype": "DP",
"tableID": "iidx-DP-32-levels",
"title": "beatmania IIDX (DP) (Pinky Crush)"
},
{
"default": false,
"description": "Levels for beatmania IIDX (DP) in Resident Omnimix.",
@@ -3338,6 +3361,29 @@
"tableID": "iidx-SP-22-levels",
"title": "beatmania IIDX (SP) (PENDUAL)"
},
{
"default": false,
"description": "Levels for beatmania IIDX (SP) in Pinky Crush.",
"folders": [
"F414a38ddc83bbe981e09331b7f254c3163520e4357286039fe8c33da64808545",
"Fc08cb877c833790324ccb0afac9bca1dc88d4d46f105826bf8ff4bbb59aedc74",
"Fabda68ee64002b6f5df4438f85b90c664c92553aee52c69a181f9e1f3183ee0b",
"F3b8224cb7b11dde3ca4db9fcdc2e368afbbd10605bf6de6d7674df1338708c44",
"F7a3a7de4e067bd524ae191f6597923c692f30909708afe6f72bfc5c8dc6477d5",
"F0d502fb445f73dd3c432f4ab75a092a84131975b4bd851b071cafe215c74e149",
"F7b540271711dae047bb3c2359338d917ec30d607279e094c2fe3d246a408b59f",
"F877376c9f0b76da0be8b85fca69d608d4274fc7da595bb87c955e2d02746e892",
"Fd9bf1060d183a680bc80892ab83cbb6a63f0288d8db7093eba3e2d6d659f4af8",
"F9360022ed3e9a10d14765ce461a23d63b11cd0b9e51a1698d0bba33e1ddb5c7f",
"F57b065b790f15c0ff80b1f608f2ce470a380788d1a66c555e26c8eb5ffd72130",
"F9792eaf29418651dd05d6b6a9b98d470d3b3b637247c65237d8344ba662517f4"
],
"game": "iidx",
"inactive": false,
"playtype": "SP",
"tableID": "iidx-SP-32-levels",
"title": "beatmania IIDX (SP) (Pinky Crush)"
},
{
"default": false,
"description": "Levels for beatmania IIDX (SP) in Resident Omnimix.",
@@ -1,3 +1,4 @@
/* eslint-disable no-control-regex */
import fs, { mkdirSync } from "fs";
import path from "path";
import iconv from "iconv-lite";
@@ -7,8 +8,25 @@ import logger from "../../../logger";
import { IIDXConvertOutput } from "./dot-one-parser/types";
import { integer } from "tachi-common";
function sjisHack(b: Buffer, i: number) {
return iconv.decode(b.slice(i, i + 64).filter((e) => e !== 0) as Buffer, "shift_jis");
function readSjisName(b: Buffer, offset: number, length = 0x40): string {
return iconv.decode(
b.slice(offset, offset + length).filter((e) => e !== 0) as Buffer,
"shift_jis"
);
}
function readAsciiName(b: Buffer, offset: number, length = 0x40): string {
return b
.slice(offset, offset + length)
.filter((e) => e !== 0)
.toString();
}
function readUtf16Name(b: Buffer, offset: number, length: number): string {
return b
.slice(offset, offset + length)
.toString("utf16le")
.replace(/\x00/gu, "");
}
// where to store extracted IFS output
@@ -50,9 +68,11 @@ export async function ParseIIDXData(
throw new Error("Invalid MDB File.");
}
const start = buffer.readInt16LE(0xa) * 2 + 0x10;
let start: integer, structSize: integer, levelsOffset: integer;
let structSize: integer;
// mdb format: [16 byte header][songID bank][song structs]
// the length of the 2nd part is (num of available entries * num bytes per songID)
// so our starting offset for song metadata is that + (header length)
switch (buffer[4]) {
case 27:
@@ -60,7 +80,14 @@ export async function ParseIIDXData(
case 29:
case 30:
case 31:
start = buffer.readUInt16LE(0xa) * 2 + 0x10;
structSize = 0x52c;
levelsOffset = 0x120;
break;
case 32:
start = buffer.readUInt16LE(0xc) * 4 + 0x10;
structSize = 0x7f8;
levelsOffset = 0x3ec;
break;
default:
throw new Error("Unknown version of MDB.");
@@ -76,7 +103,8 @@ export async function ParseIIDXData(
const struct = buffer.slice(curLoc, curLoc + structSize);
// laziest hack
const levels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((e) => struct.readUInt8(288 + e));
// eslint-disable-next-line prettier/prettier
const levels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((e) => struct.readUInt8(levelsOffset + e));
// remember that i get paid real money to program in this language
const [spb, spn, sph, spa, spl, _dpb, dpn, dph, dpa, dpl] = levels as [
@@ -92,13 +120,28 @@ export async function ParseIIDXData(
number
];
const songID = struct.readUInt16LE(944);
let songID: integer,
title: string,
marquee: string,
genre: string,
artist: string,
folder: integer;
const title = sjisHack(struct, 0);
const marquee = sjisHack(struct, 64);
const genre = sjisHack(struct, 128);
const artist = sjisHack(struct, 192);
const folder = struct.readUInt8(280);
if (buffer[4] < 32) {
songID = struct.readUInt16LE(0x3b0);
title = readSjisName(struct, 0x0);
marquee = readAsciiName(struct, 0x40);
genre = readSjisName(struct, 0x80);
artist = readSjisName(struct, 0xc0);
folder = struct.readUInt8(0x118);
} else {
songID = struct.readUInt16LE(0x67c);
title = readUtf16Name(struct, 0x0, 256);
marquee = readAsciiName(struct, 0x100);
genre = readUtf16Name(struct, 0x140, 128);
artist = readUtf16Name(struct, 0x1c0, 256);
folder = struct.readUInt8(0x3dc);
}
const notecounts: Record<string, number> = {};
@@ -163,7 +163,7 @@ async function ParseIIDXMDB() {
}
}
const searchTerms = [inp.genre];
const searchTerms: string[] = [];
if (inp.marquee.toLowerCase() !== inp.title.toLowerCase()) {
searchTerms.push(inp.marquee);
}
@@ -176,7 +176,7 @@ async function ParseIIDXMDB() {
genre: inp.genre,
displayVersion: inp.folder.toString(),
},
searchTerms: [],
searchTerms: searchTerms,
altTitles: [],
};
@@ -39,6 +39,7 @@ export enum EAM_VERSION_NAMES {
"CastHour" = 29,
"RESIDENT" = 30,
"EPOLIS" = 31,
"Pinky Crush" = 32,
}
const PRE_HV_HEADER_COUNT = 27;