diff --git a/scripts/validate.js b/scripts/validate.js index db534d18f..45e8ac223 100644 --- a/scripts/validate.js +++ b/scripts/validate.js @@ -8,7 +8,7 @@ const dataFiles = [ 'a20.json' ]; -const hasError = false; +let hasError = false; for (const dataFile of dataFiles) { const songData = require(`../src/songs/${dataFile}`); const result = validateJSONSchema(songData, songsSchema, { diff --git a/songs.schema.json b/songs.schema.json index 25991a347..fa9f1c476 100644 --- a/songs.schema.json +++ b/songs.schema.json @@ -94,7 +94,6 @@ "required": [ "name", "artist", - "genre", "double", "artist_translation", "bpm", @@ -128,6 +127,9 @@ }, "extra_exclusive": { "type": "boolean" + }, + "unlock": { + "type": "boolean" } }, "required": ["difficulty", "step", "shock", "freeze"] diff --git a/src/assets/i18n.json b/src/assets/i18n.json index 82eb6f697..470a97ce7 100644 --- a/src/assets/i18n.json +++ b/src/assets/i18n.json @@ -23,7 +23,7 @@ "hide": "Hide Controls", "invalid": "Couldn't draw anything with current settings!", "unlock": "Unlockable songs", - "tempUnlock": "Formerly unlockable (SDVX)", + "tempUnlock": "Formerly unlockable (SDVX, DRS, etc)", "goldExclusive": "20th Gold Cab Exclusive", "extraExclusive": "Final/Extra Exclusive", "usLocked": "Japan-only songs", diff --git a/src/assets/jackets/Afterimage_d'automne.jpg b/src/assets/jackets/Afterimage_d'automne.jpg new file mode 100644 index 000000000..2b169b50c Binary files /dev/null and b/src/assets/jackets/Afterimage_d'automne.jpg differ diff --git a/src/assets/jackets/BLACK_JACKAL.jpg b/src/assets/jackets/BLACK_JACKAL.jpg new file mode 100644 index 000000000..588697c6f Binary files /dev/null and b/src/assets/jackets/BLACK_JACKAL.jpg differ diff --git a/src/assets/jackets/Crazy_Shuffle.png b/src/assets/jackets/Crazy_Shuffle.png new file mode 100644 index 000000000..defc1cbf7 Binary files /dev/null and b/src/assets/jackets/Crazy_Shuffle.png differ diff --git a/src/assets/jackets/DOWNER_&_UPPER.png b/src/assets/jackets/DOWNER_&_UPPER.png new file mode 100644 index 000000000..c08006fc4 Binary files /dev/null and b/src/assets/jackets/DOWNER_&_UPPER.png differ diff --git a/src/assets/jackets/Haunted_maid_lunch.png b/src/assets/jackets/Haunted_maid_lunch.png new file mode 100644 index 000000000..d3c0cb6a0 Binary files /dev/null and b/src/assets/jackets/Haunted_maid_lunch.png differ diff --git a/src/assets/jackets/Midnight_WAR.png b/src/assets/jackets/Midnight_WAR.png new file mode 100644 index 000000000..e8540a9f7 Binary files /dev/null and b/src/assets/jackets/Midnight_WAR.png differ diff --git a/src/assets/jackets/Mikansei_no_jouki_kudou_otome.png b/src/assets/jackets/Mikansei_no_jouki_kudou_otome.png new file mode 100644 index 000000000..12af16d32 Binary files /dev/null and b/src/assets/jackets/Mikansei_no_jouki_kudou_otome.png differ diff --git a/src/assets/jackets/Oh_my!_Lovely!_Sweety!_Darling!.jpg b/src/assets/jackets/Oh_my!_Lovely!_Sweety!_Darling!.jpg new file mode 100644 index 000000000..31bbd99df Binary files /dev/null and b/src/assets/jackets/Oh_my!_Lovely!_Sweety!_Darling!.jpg differ diff --git a/src/assets/jackets/OurMemories.png b/src/assets/jackets/OurMemories.png new file mode 100644 index 000000000..06424502e Binary files /dev/null and b/src/assets/jackets/OurMemories.png differ diff --git a/src/assets/jackets/Rampage_Hero.png b/src/assets/jackets/Rampage_Hero.png new file mode 100644 index 000000000..8577f0fd8 Binary files /dev/null and b/src/assets/jackets/Rampage_Hero.png differ diff --git a/src/assets/jackets/SWEET_HOME_PARTY.png b/src/assets/jackets/SWEET_HOME_PARTY.png new file mode 100644 index 000000000..8c4d38305 Binary files /dev/null and b/src/assets/jackets/SWEET_HOME_PARTY.png differ diff --git a/src/assets/jackets/Saishou_sanbai_kanzensuu.jpg b/src/assets/jackets/Saishou_sanbai_kanzensuu.jpg new file mode 100644 index 000000000..9e91738e2 Binary files /dev/null and b/src/assets/jackets/Saishou_sanbai_kanzensuu.jpg differ diff --git a/src/assets/jackets/Six_String_Proof.jpg b/src/assets/jackets/Six_String_Proof.jpg new file mode 100644 index 000000000..9f2e82a9c Binary files /dev/null and b/src/assets/jackets/Six_String_Proof.jpg differ diff --git a/src/assets/jackets/Small_Steps.png b/src/assets/jackets/Small_Steps.png new file mode 100644 index 000000000..dd41b19c7 Binary files /dev/null and b/src/assets/jackets/Small_Steps.png differ diff --git a/src/assets/jackets/The_World_Ends_Now.png b/src/assets/jackets/The_World_Ends_Now.png new file mode 100644 index 000000000..2cdf06dfa Binary files /dev/null and b/src/assets/jackets/The_World_Ends_Now.png differ diff --git a/src/assets/jackets/Toy_boxer.jpg b/src/assets/jackets/Toy_boxer.jpg new file mode 100644 index 000000000..0d6d61d8d Binary files /dev/null and b/src/assets/jackets/Toy_boxer.jpg differ diff --git a/src/assets/jackets/Trill_auf_G.jpg b/src/assets/jackets/Trill_auf_G.jpg new file mode 100644 index 000000000..520cf0426 Binary files /dev/null and b/src/assets/jackets/Trill_auf_G.jpg differ diff --git a/src/assets/jackets/Une_mage_blanche.png b/src/assets/jackets/Une_mage_blanche.png new file mode 100644 index 000000000..a53c86cae Binary files /dev/null and b/src/assets/jackets/Une_mage_blanche.png differ diff --git a/src/assets/jackets/Voltississimo.jpg b/src/assets/jackets/Voltississimo.jpg new file mode 100644 index 000000000..adbc9867a Binary files /dev/null and b/src/assets/jackets/Voltississimo.jpg differ diff --git a/src/card-draw.js b/src/card-draw.js index fbfec5a07..45103642c 100644 --- a/src/card-draw.js +++ b/src/card-draw.js @@ -48,6 +48,7 @@ export function draw(songs, configData) { if ( !chart || // no chart for difficulty !difficulties.has(key) || // don't want this difficulty + (!inclusions.has("unlock") && chart["unlock"]) || // chart must be individually unlocked (!inclusions.has("usLocked") && chart["us_locked"]) || // chart is locked for us (!inclusions.has("extraExclusive") && chart["extra_exclusive"]) || // chart is extra/final exclusive +chart.difficulty < lowerBound || // too easy diff --git a/src/footer.jsx b/src/footer.jsx index a5e65f158..f081d7776 100644 --- a/src/footer.jsx +++ b/src/footer.jsx @@ -21,7 +21,8 @@ function Icon({ src, title }) { } const lastUpdate = new Intl.DateTimeFormat(detectedLanguage).format( - new Date(2019, 8, 15) + // note that month is zero-indexed for date constructor :) + new Date(2019, 9, 22) ); export function Footer() { diff --git a/src/song-card.css b/src/song-card.css index 6e3b52c99..b476bfb6d 100644 --- a/src/song-card.css +++ b/src/song-card.css @@ -8,7 +8,7 @@ cursor: pointer; display: flex; flex-direction: column; - min-height: 100px; + min-height: 130px; color: white; text-shadow: 0px 0px 10px black, 1px 1px 1px black; font-family: Evogria, 'Russo One', Arial, 'Helvetica Neue', Helvetica, sans-serif; diff --git a/src/songs/a20.json b/src/songs/a20.json index bf97f77ef..7380f209c 100644 --- a/src/songs/a20.json +++ b/src/songs/a20.json @@ -1,4 +1,1047 @@ [ + { + "name": "未完成ノ蒸氣驅動乙女", + "name_translation": "Mikansei no jouki kudou otome", + "jacket": "Mikansei_no_jouki_kudou_otome.png", + "bpm": "85-170", + "artist": "U1 overground", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "5", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "unlock": true, + "gold_exclusive": true, + "name": "SWEET HOME PARTY", + "name_translation": "", + "jacket": "SWEET_HOME_PARTY.png", + "bpm": "70-180", + "artist": "劇団レコード", + "artist_translation": "Tomoaki Hirono", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "5", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "name": "Une mage blanche", + "name_translation": "", + "jacket": "Une_mage_blanche.png", + "bpm": "193", + "artist": "Dormir", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "name": "ホーンテッド★メイドランチ", + "name_translation": "Haunted maid lunch", + "jacket": "Haunted_maid_lunch.png", + "bpm": "188", + "artist": "日向美ビタースイーツ♪", + "artist_translation": "Hinata Bitter Sweets ♪", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "unlock": true, + "gold_exclusive": true, + "name": "Rampage Hero", + "name_translation": "", + "jacket": "Rampage_Hero.png", + "bpm": "200", + "artist": "DJ Shimamura", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "unlock": true, + "gold_exclusive": true, + "name": "The World Ends Now", + "name_translation": "", + "jacket": "The_World_Ends_Now.png", + "bpm": "200", + "artist": "Akira Complex", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "Crazy Shuffle", + "name_translation": "", + "jacket": "Crazy_Shuffle.png", + "bpm": "128", + "artist": "Yooh", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "2", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "5", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "5", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "DOWNER & UPPER", + "name_translation": "", + "jacket": "DOWNER_&_UPPER.png", + "bpm": "140", + "artist": "BEMANI Sound Team \"DJ TOTTO\"", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "3", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "6", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "6", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "Small Steps", + "name_translation": "", + "jacket": "Small_Steps.png", + "bpm": "106", + "artist": "かめりあ", + "artist_translation": "Camellia", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "1", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "10", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "ミッドナイト☆WAR", + "name_translation": "Midnight WAR", + "jacket": "Midnight_WAR.jpg", + "bpm": "156", + "artist": "いちか", + "artist_translation": "Ichika", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "3", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "おーまい!らぶりー!すうぃーてぃ!だーりん!", + "name_translation": "Oh my! Lovely! Sweety! Darling!", + "jacket": "Oh_my!_Lovely!_Sweety!_Darling!.jpg", + "bpm": "170", + "artist": "BEMANI Sound Team \"PON\" feat.NU-KO", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "3", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "voltississimo", + "name_translation": "", + "jacket": "Voltississimo.jpg", + "bpm": "113-225", + "artist": "BEMANI Sound Team \"PHQUASE\"", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "5", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "13", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "Trill auf G", + "name_translation": "", + "jacket": "Trill_auf_G.jpg", + "bpm": "188", + "artist": "BEMANI Sound Team \"dj TAKA\"", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "Toy boxer", + "name_translation": "", + "jacket": "Toy_boxer.jpg", + "bpm": "190", + "artist": "BEMANI Sound Team \"S-C-U & SYUNN\"", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "16", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "Six String Proof", + "name_translation": "", + "jacket": "Six_String_Proof.jpg", + "bpm": "130", + "artist": "BEMANI Sound Team \"Yvya × Mutsuhiko Izumi\"", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "2", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "BLACK JACKAL", + "name_translation": "", + "jacket": "BLACK_JACKAL.jpg", + "bpm": "150", + "artist": "Akira Complex", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "3", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "7", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "temp_unlock": true, + "name": "Afterimage d'automne", + "name_translation": "", + "jacket": "Afterimage_d'automne.jpg", + "bpm": "232", + "artist": "BEMANI Sound Team \"猫叉劇団\"", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "4", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "8", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, + { + "name": "最小三倍完全数", + "name_translation": "the smallest 3-perfect number", + "jacket": "Saishou_sanbai_kanzensuu.jpg", + "bpm": "55-440", + "artist": "DJ TECHNORCH", + "artist_translation": "", + "folder": "DanceDanceRevolution A20", + "single": { + "beginner": { + "difficulty": "5", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "15", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, { "us_locked": true, "name": "PUT YOUR FAITH IN ME (DA's Twinkly Disco Remix)", @@ -3567,10 +4610,8 @@ "challenge": null } }, - - { - "us_locked": false, + "us_locked": true, "unlock": false, "name": "The Light", "artist": "W&W ft. Kizuna AI", @@ -4371,6 +5412,77 @@ "challenge": null } }, + { + "unlock": true, + "name": "#OurMemories", + "artist": "DDR ALL FANS", + "jacket": "OurMemories.png", + "folder": "DanceDanceRevolution A", + "artist_translation": "", + "name_translation": "", + "genre": "", + "bpm": "140", + "single": { + "beginner": { + "difficulty": "3", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "6", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": { + "unlock": true, + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + } + }, + "double": { + "basic": { + "difficulty": "6", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": { + "unlock": true, + "difficulty": "11", + "step": "-", + "shock": "0", + "freeze": "-" + } + } + }, { "unlock": true, "name": "MAX 360", @@ -4406,7 +5518,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "19", + "step": "-", + "shock": "0", + "freeze": "-" + } }, "double": { "basic": { @@ -4427,7 +5545,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "19", + "step": "-", + "shock": "0", + "freeze": "-" + } } }, { @@ -4465,7 +5589,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + } }, "double": { "basic": { @@ -4486,7 +5616,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "17", + "step": "-", + "shock": "0", + "freeze": "-" + } } }, { @@ -4524,7 +5660,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "18", + "step": "-", + "shock": "55", + "freeze": "-" + } }, "double": { "basic": { @@ -4545,7 +5687,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "18", + "step": "-", + "shock": "132", + "freeze": "-" + } } }, { @@ -4583,7 +5731,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + } }, "double": { "basic": { @@ -4604,7 +5758,13 @@ "shock": "0", "freeze": "-" }, - "challenge": null + "challenge": { + "unlock": true, + "difficulty": "14", + "step": "-", + "shock": "0", + "freeze": "-" + } } }, { @@ -7446,7 +8606,7 @@ "folder": "DanceDanceRevolution A" }, { - "us_locked": false, + "us_locked": true, "name": "初音ミクの消失", "artist": "cosMo@暴走P feat. 初音ミク", "genre": "", @@ -7515,7 +8675,7 @@ "folder": "DanceDanceRevolution A" }, { - "us_locked": false, + "us_locked": true, "name": "脳漿炸裂ガール", "artist": "れるりり", "genre": "", @@ -7584,7 +8744,7 @@ "folder": "DanceDanceRevolution A" }, { - "us_locked": false, + "us_locked": true, "name": "幸せになれる隠しコマンドがあるらしい", "artist": "うたたP feat. 結月ゆかり", "genre": "", @@ -30263,7 +31423,7 @@ "folder": "DanceDanceRevolution X3 vs 2nd MIX" }, { - "us_locked": false, + "us_locked": true, "name": "ロストワンの号哭", "artist": "Neru", "genre": "", diff --git a/src/songs/ace.json b/src/songs/ace.json index 3ff9e9d19..fba57cff0 100644 --- a/src/songs/ace.json +++ b/src/songs/ace.json @@ -1526,6 +1526,65 @@ "challenge": null } }, + { + "unlock": true, + "name": "#OurMemories", + "artist": "DDR ALL FANS", + "jacket": "OurMemories.png", + "folder": "DanceDanceRevolution A", + "bpm": "140", + "artist_translation": "", + "name_translation": "", + "genre": "", + "single": { + "beginner": { + "difficulty": "3", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "basic": { + "difficulty": "6", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + }, + "double": { + "basic": { + "difficulty": "6", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "difficult": { + "difficulty": "9", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "expert": { + "difficulty": "12", + "step": "-", + "shock": "0", + "freeze": "-" + }, + "challenge": null + } + }, { "unlock": true, "name": "MAX 360",