feat: some initial quests and goals

This commit is contained in:
zkldi
2022-11-22 16:12:50 +00:00
parent 7613d4de47
commit 2a76c90bdd
6 changed files with 3045 additions and 9 deletions
+2 -5
View File
@@ -455,8 +455,7 @@ function GetChartDataForGPT(idString: IDStrings): PrudenceSchema {
export const PR_GOAL_SCHEMA = {
game: p.isIn(games),
playtype: isValidPlaytype,
timeAdded: p.isPositive,
title: "string",
name: "string",
goalID: "string",
criteria: p.or(
{
@@ -644,12 +643,10 @@ const PRE_SCHEMAS = {
name: "string",
desc: "string",
questID: "string",
group: "?string",
groupINdex: p.nullable(p.isInteger),
questData: [
{
title: "string",
desc: "string",
desc: "*string",
goals: [{ goalID: "string", note: "*string" }],
},
],
+1 -2
View File
@@ -353,7 +353,6 @@ export type Ratings = Record<Game, Record<Playtype, number>>;
export interface BaseGoalDocument extends MongoDBDocument {
game: Game;
playtype: Playtype;
timeAdded: integer;
name: string;
goalID: string;
criteria: GoalCountCriteria | GoalSingleCriteria;
@@ -623,7 +622,7 @@ interface QuestGoalReference {
interface QuestSection {
title: string;
desc: string;
desc?: string;
goals: Array<QuestGoalReference>;
}
File diff suppressed because it is too large Load Diff
+825 -1
View File
@@ -1 +1,825 @@
[]
[
{
"desc": "These goals are around 13.1 KtLampRating and 5-10BPI.",
"game": "iidx",
"name": "Post-Kaiden II",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G76c0bbc3a0fe6317ca7df70dc434019649e2688b8ea837b53ab2746c50a9e6f9",
"note": "It's all in the earth power."
},
{
"goalID": "G791f6d82168c328f1cc2e2969259395a5ef45e5e3a5b707741a1f4daa51b624e",
"note": "It's all in the speed."
},
{
"goalID": "G619aa77d55ea4bcc640f417c89dcececf2b27cffa668bbc3c426ca3ca7c08fd9",
"note": "It's all in the soflan."
},
{
"goalID": "Ge3dfee446e5a637cec50289cb155491867169d160df111f216c3d3c5b83983c8",
"note": "It's all in the turntable."
},
{
"goalID": "Gcc568ff893af52f198a9a44923935316a2493a860f490daabd1f2d04b73fa611",
"note": "It's all in the uhh..."
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G7b1d40f6c387b9b7f9e526be5dda00eb58e6ed3d460199a2e45b8c2c38b8e028",
"note": "This is a classic landmark for timing ability. Push through the intro and don't let nerves trip you!"
},
{
"goalID": "Gc8810aee9f6a72665481caf696bc2ac4d8e18ecead4c5f7578cb42afb969a1d5"
},
{
"goalID": "G5deff029c3b74dda741fc9f1ca4b31b73fa4fab545e9da42b856a233753213d8"
},
{
"goalID": "G1022f0dd6ea1431dda59337a7de9fdec00299064c0ca64f8f12aab7a99448b17"
},
{
"goalID": "G1b3c51e5777c2b03d2217d905692cb3f9f56ba44b49737942cddaae423d6eeb0"
},
{
"goalID": "G48b37635cef52936fca85eb2b67de9f59e6d2acdae03c3c3d25b56baf18339f5",
"note": "Depending on your proficiency at weird stuff, you might be able to get this *way* sooner... or way later."
},
{
"goalID": "G003f2d03f54c43e569459e4b7c669ba1b221970c77be995c66d2a2e0757278f8",
"note": "This might be the hardest one here. Good luck."
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G6e20c550080d65cff94a78b7a3543eebb3bb6d2cb3822a67da7a167f92098057",
"note": "This isn't actually that hard, it's more to make sure you're playing a wide variety of stuff. Don't get tunnel vision!"
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Gf3afc4929a494d103185095f7f9bb2853b9c20ea4de66bf3921da63e5b830712",
"note": "Use the tierlist to find the easier ones!"
}
]
}
],
"questID": "dec92ca49bae7fd805102c8836e09680b64971f0"
},
{
"desc": "Good luck, it's only harder from here on. On the bright side, you don't have to play dans anymore. These goals are around 13.0 KtLampRating and 0BPI.",
"game": "iidx",
"name": "Post-Kaiden I",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G309ba94b9ef699c805703bcc1852e5662bc9cc30997f8cc8736c6e436820be5a"
},
{
"goalID": "G08ec759ebc5f9559d3ad5a1d8e1c0079b38f40fdd46828ba93e4e9d3db1ba0fa"
},
{
"goalID": "G75f05f32f219df7fd185c5042bb3ea5b7ad20e2f45399fa089674a96a210de11",
"note": "Depending on your CN proficiency, this could be way easier."
},
{
"goalID": "G3c17272dc2855aa5ea0e0ee96bdcae1d3c940c33d6dc5cc78c78dba5ddd0622d"
},
{
"goalID": "G6cf560b08e8cd998b81de772b7ae013e8f5be079528db1fd1762c785d3a6f837"
},
{
"goalID": "Gc6a8310d512c3c0a2f56e5039350a903d2d29bc866f6c0878194f57fdec37468"
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G3eedf757708ac87215081499949a4bea21ed18ed0f878ca3d85dcef2234b1d60"
},
{
"goalID": "G36a982fb3b53103e00000d5ae72cd968eb9b94f267e34d7fcf54abdd8ee31cfd",
"note": "Don't get nervous, but the ending is the scary bit."
},
{
"goalID": "G16f38b156d78627a574d00ed8720a21bcac5d6ddd235b802e2588903ad75ce07",
"note": "what is it then?"
},
{
"goalID": "G4a0d00f6ddb7491c0115a10411eba6a5019d3fe69c459f566a44fc0722ccddba",
"note": "Huge milestone for timing ability."
},
{
"goalID": "G35f07fcdaa2da151fc84cfaa9191f7eba8fc148e99d986f8becd937b22461478"
},
{
"goalID": "G2762543ba7088eff22a3b1ff6d355a02400425ac33dc82b09b687a2e2b3c33bc",
"note": "This is MAX-60. "
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G29320115c04f85df9a57c16d6919b3c4d2478611348dd70a03976443ca98d4dd",
"note": "This isn't actually that hard. It's more to make sure you're playing a wide variety of stuff. Don't get tunnel vision!"
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G104639bcdc79b84e6f198cd34cc1719d4e1b35b548a920d6312efdf8f8b88806",
"note": "Use the tierlist to find the easier ones!"
},
{
"goalID": "G35f9e219fdf60668867508b928f48cd147ba5f5f04097bf9bf0d70993a9971fb"
}
]
}
],
"questID": "eff21aac99bdc4429ed6ea2ddfbe3435d09c30dc"
},
{
"desc": "These goals are around 13.2 KtLampRating and 10-20BPI.",
"game": "iidx",
"name": "Post-Kaiden III",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Gbacd149fd5b031dd229e87cc686ff3dccbaa6e7aad5821190aa97a4193ddfc31",
"note": "At least it's not SAMURAI-Scramble..."
},
{
"goalID": "Gba5ad7f9d804d759b0b859c2c48769abe02539c0884c21916633ea2bf6c06c5a",
"note": "At least it's not 疾風迅雷 [L]..."
},
{
"goalID": "G04a620fa063f9532158db346190c943e6ac17564872f8a1b3451f100cd35f637",
"note": "Welp."
},
{
"goalID": "G928b54946d75193a1db4a561009b5a3ab7129121c347efbbea85f100094bcdd2",
"note": "You know what's messed up? This is the most normal chart in this list."
},
{
"goalID": "G10f34f70a30353e7eb541e01b9667983465d78d26b0a199bf6cef9acf2374e74"
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G213bc0e8ac3417d2ef07b965ef099abbefa04fe413b33bda52bbc50448144cda",
"note": "If you can hit it this should be remarkably straightforward."
},
{
"goalID": "G65fd49da69245f2042f415770dbdfab2b0e4821221bb75ac9df97f507e8b1f08"
},
{
"goalID": "G49eaff99d808df0ce1c2ab84833e8ddb128f8f8c438ab54ad779ea9208aa2a3f",
"note": "flex those muscles"
},
{
"goalID": "G17f8d5932be1dc5a16beca10ec79693be87bacf4c42b01f7630ca7094ff683d8"
},
{
"goalID": "G9b422b6264f23a43e14f58977ac26ab30feb42d22bf07641d618bfeb546092c1",
"note": "Fun Fact: This is the first scratch timing goal in the entire questline. Funner Fact: Some of you will find this the hardest goal here."
},
{
"goalID": "G1cb8a9d389dd5f0aaa7d52abb0d59121a94a565bb4ce412e8338909344f8fd79",
"note": "eeeeeeeeeee"
},
{
"goalID": "G193426e3a621f4768504bb100e00ed684e00ddceb169799bb440c1f5dd80f820",
"note": "It's back!"
},
{
"goalID": "G95f683e538a1b4aa121752a55c2553a74bd30c2a06aa2d1331419f0a9a51f42a",
"note": "(MAX-15) we're all having fun, right?"
},
{
"goalID": "Gbe5d4b3e05f185b18773d276e075ba4718eb02eb2a0b73f09ab71d3fd6c1358b"
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G4ed65a10684bc8281e30d72ebbfb31e0683972771778566a348ee4ddf59d1612",
"note": "Show mastery."
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Ge525b8f85b5da68c09b75f58b0ab104b86c60b1f404604def89f67b52aa2a07d",
"note": "I plucked 30% out of thin air. Complain to me on discord."
}
]
}
],
"questID": "4cc3b3465fdd02f1c2e0e63344eec0d07c2eed7c"
},
{
"desc": "These goals are around 13.3 KtLampRating and 20-30BPI.",
"game": "iidx",
"name": "Post-Kaiden IV",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G583ebbb166ada040a5ab26118d95b6d14965b10223862cc22feb18987ec3e417"
},
{
"goalID": "Gdf49bf791333551b698792802ae6f082dc2f2e9b8c9516e307f4f6221b0392d0"
},
{
"goalID": "G2f0429b33a981444cda23580a06be1f43e2136e91956ab226948d88520a80ff1"
},
{
"goalID": "G5509b5a81cefdc3e5e1f61738fd9fa4c1b02cb3eb4d974c707b7d1252a4113ad",
"note": "Veni..."
},
{
"goalID": "G985b9802ff3b6a0d670ad92de7db3f5ac44f8f56ab5654ba79efb1f5f54fb2fc",
"note": "...vidi..."
},
{
"goalID": "Ge4b62ba8b2896c00fce77bf29ed756bf52188add5fa2bc3b0426db061a29a6c4",
"note": "...vici."
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G2903acfccb8f099626342e58cbf0e212aea83e0ac87c6ba8e38fdc265d2829c9"
},
{
"goalID": "G3f8689001f29d808a1611c35462f62f661337b24c89443c5a92d038e479a1e68",
"note": "habbening"
},
{
"goalID": "G421d5e17fd9bc4980b2e493ad2ac61e06cbea80e0fe96875bcfc508b1e3bd8a4"
},
{
"goalID": "G891d47c9a01ca7aac100f2a0fb74661138d0e2cfbfa7ba0da037d59b6e035a33",
"note": "le fast jacks have appeared"
},
{
"goalID": "G223f55faaf36ba721074e2b3375519562a9f8470b975324c996077a5755875d8"
},
{
"goalID": "Ga80d64b4b8cc748984f3d65f83cc8334711c47443e2abba1ea59270decdd8ab1"
},
{
"goalID": "G17a6da212d87a3cf87efc46dd25a821ee301663172ac9e91142f5671908f377b",
"note": "And it wont be the last time you play this chart!"
},
{
"goalID": "G3a7d606ae07db1088c19a9c70bcc8d5fe4506fd0de0ddbe694f22cb436f8d9b9",
"note": "welp."
},
{
"goalID": "G723c0e84bc15714335c9582dd3e7821842a89ea5f90bff055daf2a20fbbfc539"
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Gcb184f515f8bd6b20eae7eef38efe72f09d43ec1cceebbd42ac7c37d1f766fbd",
"note": "To be honest, if you can hard clear the other things in this quest, this'll happen naturally."
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G5bd7588891bccd9d03bc5f76b894316a2605a4ea32f769b1a7df35f5fdddd4e1",
"note": "Better get working on it!"
},
{
"goalID": "G3c1543f42198284cddab993ed3e89613a5e5a9545b54714829913114ecfb03b5"
}
]
}
],
"questID": "fba16fe77f11905a39f5f2134b28dad2d149c18f"
},
{
"desc": "This is the end of the line, for now. Good luck.",
"game": "iidx",
"name": "Post-Kaiden VI",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G0dd0a061b24cf543792bc6df8e072f57171a32511ac95871610f2a4aae025808"
},
{
"goalID": "G0ea1a66e8af507c52370a9a23b2e31a8b92e9094d87b24a13e3d0349af105e84",
"note": "EX-VENI..."
},
{
"goalID": "Gc1741e461b755d34e9c95e0ffb07f58404fd40926015c43e3b9eda2cdd70d252",
"note": "...EX-VIDI..."
},
{
"goalID": "Gf22db09848edccdf484a8e7bc86414cdbf36e78004fb1fffe88ffe5ad10165e8",
"note": "...EX-VICI."
},
{
"goalID": "Gbe7c8b7de120c68ecc4ad62ab616a7f73ad2fde574308d125a728c57680d3b3e",
"note": "I'm skeptical of putting any FULL COMBO goals in quests, but this seemed thematically appropriate."
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Gde38896c606b0585e96ff21616e0a4bfadc338acf554e618d41f9a9fc33e57e4",
"note": "Hope you're not tired of this chart!"
},
{
"goalID": "Gd6e61546b5957a2dddd8a67cab0f8fd81bd58e2c1a0c4580052a470821a73257"
},
{
"goalID": "G140d69d5f063f5c1374a89b9a2cfc230f71a4f2aac2bff34186346f89c8d4d06",
"note": "I hope you've been practicing!"
},
{
"goalID": "Gf5efcedc1ff4074ac7f250144ce48408beb61033baf7543f144df52ad40df2a4"
}
]
},
{
"title": "General Clear Goals",
"desc": "That's all! You've got the all-HC. Play BMS.",
"goals": []
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Gac6fee7c3554f11dd40725889969648b1a26a014022c7ba52b9e34e717ba0195",
"note": "Leave no stone unturned."
},
{
"goalID": "G12beea1bc937115e33631e8eb71acd6926dac4b04325cf3da9115062302464f6",
"note": "(Ok, you can leave some stones unturned.)"
}
]
}
],
"questID": "496b195a80a46156627c14d36aa939dc9d67b36f"
},
{
"desc": "These goals are around 13.5 KtLampRating and 30-50BPI.",
"game": "iidx",
"name": "Post-Kaiden V",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Gd770c9c0687473c3fca80f6f8f1c435e683dba30ea7f95770b6c5e53d92ff8bd"
},
{
"goalID": "G73b8d71a7b5e60f846e58af8393b6d1919240ce314894663d13415bbc43b59e4",
"note": "Hope you've been playing BMS!"
},
{
"goalID": "G53d98a6a8599562e877a14c063f6d30b58e2c5688651a738cde4c45dbbebb579"
},
{
"goalID": "G220c1d0061f79a8b00fc173b2225f2005e754868d4de55f5d94db29692909fc8",
"note": "This is stupid. There's not much else in the game at this point though. Have fun!"
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G1ed429454468835596b0a19fb69fcd5a7d12437672e05966d7a6c44db24517e0",
"note": "Congratulations if you get this far. This is huge."
},
{
"goalID": "G53f3e650dbba5580c114e2a48042171e91c60c0a8b7b98e7a1af8bb5ae046da6"
},
{
"goalID": "Ga228c6b215dcf91af11ee4710e96e105387e29cf5e1990cd9e94a1b1bccfca6a"
},
{
"goalID": "G8ac206ea81144d524a1e5c33e3e552beb7471b194f3308e47bbcd09e13cc5c6b"
}
]
},
{
"title": "General Clear Goals",
"desc": "That's all! You've got the all-HC. Play BMS.",
"goals": []
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G16de948ebb0c125d575cafc03f2a1cf66389edfe21a756a018162c5985edc51c"
},
{
"goalID": "G542b3aa58ca288f20a3cb56ab70b8c39936c3cbb841b77a89437184c30531fdb"
}
]
}
],
"questID": "fc3c2836e30cab42c8604ede7436b8e2f92f2a13"
},
{
"desc": "These goals are aimed at players roughly between Chuuden and Kaiden.",
"game": "iidx",
"name": "Approaching Kaiden",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Gc36cd646ca44e072738eda25a9bd5dfaa96646ca7502f2f3b311beb37e81c2b6",
"note": "BAD"
},
{
"goalID": "G6cd32322170187ad657685a13b01103248a10ac229b3468f054aaeca747dcc47",
"note": "MEN"
},
{
"goalID": "G67a054178c34bee552152d968cf05abff9af1b8e09e415570f5267303de18561",
"note": "QUEL"
},
{
"goalID": "Gd42d0e628b4c0dbd7e6ebf7410d32d16b85d95ac6e5c7d94e0deae668c4b4380",
"note": "TEN"
},
{
"goalID": "G2dd3389b4157d3a4551f43c0c45d9c519b8bc93fa927c2f3412f334bc5b19ce9",
"note": "HAE. Badmenqueltenhae!"
},
{
"goalID": "Gd0e1308bde6a5945befb8ceb8f128a51bec23bc8434c8c86daf443b572c7824f",
"note": "Don't lose focus for a second at the end. If you're good at scratching, you'll find the notes the hardest part of this chart!"
},
{
"goalID": "G4b4b1166f68816a954dae2170978205ec178894f49ca17d40caaa94117e633a9",
"note": "This is honestly more than enough scratch power to get through BSB."
},
{
"goalID": "G045e652f3fd5ad8f587d43217517f5722ff428094589f3dc33e37e0c36cece39",
"note": "Huh? This is a secret trick: Play this chart until you can full combo it **without floating**. Congrats, you're now good enough to get through Mei!"
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G3868194e08fcee70f561c28e91845effac4f61eef31e7b748b00fc02f4a19c3b",
"note": "It's the easiest 12 to AAA. Good luck!"
},
{
"goalID": "G1d6ebdedee6185eb08a6bcbcb12a604bcad5eea5f8c585d9d26c01cd39031b13"
},
{
"goalID": "G528446c5607084431ea70dd799d2da982faccc8e115bcf8aab20428ef9b05be3",
"note": "Watch out for the subtle BPM change!"
},
{
"goalID": "G7660c6abd4fb3bc2452d49df9dd9448b7270215de746f2adfa4e925b67191fd0"
},
{
"goalID": "G48fb74cd7294822bf6faf102c12a319739dac3b044f5a9769f81a58bedf08814",
"note": "warning: song slaps"
},
{
"goalID": "G489a4f93beb8c60d9754be05df3f0f334e2281064c4bb01307076ef3536c163a"
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Ge144e1928be9ce454699d7230cecb8a97d610d2894a7f77b1c0cf7dad56c9714",
"note": "Not as hard as it sounds. This should encorage you to play a wide variety of stuff!"
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Gc6fae0d887270e21c67d20fbd5db50f8c24c115effd233c687d7c59f6feff265"
},
{
"goalID": "Gffb740d2e0344df26a4d8d3fa936e31207c290c7bfc8387e3698137ab9e0726c",
"note": "This isn't as hard as it sounds. Find some charts you're good at in the folder and focus hard on timing in your warmups!"
}
]
}
],
"questID": "ad98165639ea879151d7ef8799aaf3d196bee6b5"
},
{
"desc": "These goals are aimed at players roughly between 10th Dan and Chuuden.",
"game": "iidx",
"name": "Approaching Chuuden",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Gde97674cd535f89d1cd73293c9ae5dcf3c13ba844f614b752ee2aa43f5e1532f",
"note": "Won't be the last time you see this chart. The intro is the hardest bit! Power through it."
},
{
"goalID": "G1a2ae738966c073fd83661cd44de134195eb2171b5f9a23cd9de8fdacfad1fb0",
"note": "Don't get filtered by the jacks."
},
{
"goalID": "G25c92c1f8961d5887c9c462641fee3733117cd4ff0c579887b6277da825f47f8",
"note": "go fast. go hard."
},
{
"goalID": "G76b421184aff629a7cc062e60c579146d0d5b4454ceeb9d7dd3e56844066d480",
"note": "Make sure your scratching is up to... scratch. Heh."
},
{
"goalID": "G5db368bcdf7c6bbf7fdc04e3afc573f4e3e0b86ec8c5b8a9545a32f9c1510659",
"note": "it's worth getting good at janky stuff. it only gets more janky from here..."
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Ga628861faaf636eaeadb4f8348719cdc7c432a1d8bc4f6bf17439565aa7fafa8"
},
{
"goalID": "G291fa5f2e28da0544a9f3a457677714a266186caf7f0eaf64162d7c551aef4fb"
},
{
"goalID": "G0b377588fa6c31472a7207123d759879f92ca047db0110c96479de2255a69350",
"note": "You might prefer nonran for this."
},
{
"goalID": "G3c27708736385f0389268325675de1079dbf3e7380ac50444561c75cbede9708"
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G422f6fcc8a3f73c1fbbafbd118d8df50f2bab274037b2f947c0938dab4f4db02",
"note": "Use the tierlist to pluck out the easier ones. You'll be pushing 12C's. Make sure to play a variety of stuff!"
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Gb772449aeed60af88481317d3142144cabbf2a4c60b96243299c04c5ff184d70",
"note": "There's a bunch of easy contenders for this, but you'll need to build up the ability to time 16ths well. Good luck!"
},
{
"goalID": "G3c6c4f5d0ec2ea922a7b29fc017a0a7ba830f5a1e4fcc4f5be68b42d68dfc23e"
}
]
}
],
"questID": "b4d52224375a7d9010c1171a89aa10038383b1ae"
},
{
"desc": "These goals are aimed at players roughly between 9th and 10th Dan.",
"game": "iidx",
"name": "Approaching 10th Dan",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Ga9de767754b2b9320949f3a9b57b17b7fc502de57857d089f6b94b15ba13649d"
},
{
"goalID": "G2dcef4cab3dfad94bc1bfff207243fa26d4c23f4453b061e9b61d5e5368bb15e"
},
{
"goalID": "G8af34fa5d40b5273b77763838606c5d7c8288d1ba12ea77596783c80b22fecce"
},
{
"goalID": "G1abe46c0cd2620e78977688aea147cc06270d027e48d49a9766935141c341220"
},
{
"goalID": "G7b8615d1efb89539e673cc3491d6a66f883cfae44264dbeac5775e222b2b495b",
"note": "(ok, let's go)"
},
{
"goalID": "Gc6bcbde716d58bd81f8bdb7bc2a7c33b6084ab933837ee01da3092e9c0d2900d",
"note": "The stream is brutal. Hold yourself through it and recover afterwards."
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G02009ddce4f507f4a0135d3c82bd1c82b6f78e44bdfc55316014943451ec6f96"
},
{
"goalID": "Gfceaa0ce05372836f20a818fc424ad603524a844c506bb84e256e394cd693bda"
},
{
"goalID": "G72cd75373c2c1bc0260c4796c50f4250aa177f10ffda4bec09e9e95c7902dbe3"
},
{
"goalID": "Geb3d34194c0c16417d7ef47d6852976264787bab347b8e1cd96f3c3e5a748927",
"note": "Hey, it's not 8ths!"
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "Gc358218d7967c35ad2a76f09055426412a22bea509d0db0dae1f34b33714a051",
"note": "Use the tierlist to find the easier charts. Make sure you're playing a wide variety of stuff!"
},
{
"goalID": "G59bdcf8a9874c0209046cdf2f0d14f171249b829da7d1bfe0ed90d8a11cec1c0",
"note": "Keep the HARD CLEARs up, they're useful for training your consistency!"
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G494945da02e2718318a0884d4a940e50eedace0127820c2f61275576b84d1a0c"
}
]
}
],
"questID": "b8c80d5d5f2bc84c59ccd3bbb7fb063839c4ca08"
},
{
"desc": "These goals are aimed at players roughly between 8th and 9th Dan. Simultaneously, you'll be breaking into 12s around this time. Good luck!",
"game": "iidx",
"name": "Approaching 9th Dan",
"playtype": "SP",
"questData": [
{
"title": "Specific Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G750c6011e0dc0e95215cf2fa00c3d38fbeb46ca22b93b8558234eaf9caed6c00",
"note": "It's time to really get good at chordstreams."
},
{
"goalID": "G187781b42d220c0e2cc3b2180f4f277fdee721c7372ae8ad0dcf8a4e36dfaf58",
"note": "The scratches are much, much slower than you think."
},
{
"goalID": "Gd04342eac2113aee1ae97a038c2aa1a4afffdcef86f7fee7ecd15777b0293f43",
"note": "Arguably the least infuriating \"easy 12\". No gimmicks, no nonsense, just density."
},
{
"goalID": "Ged23213f8125a89e1e4a1bd2e60616e2dc691b746d036800627c356506202c90"
},
{
"goalID": "G911dd951a0cfe755e42ceb25532fe518afed5bcb2c2db30801e09b71b8f7f356"
},
{
"goalID": "G7f42cf226c3ec4eeafedd06655ddc36ac48dc91ea18df1f73c20b4a5e694ab3f",
"note": "Pick up one of these brutal 11s on your way to pushing early 12s."
},
{
"goalID": "G307f2c8ae08f2807075efb9ce5cffd1f1b3cf9abddc7441731898e0c984bfd72"
}
]
},
{
"title": "Specific Timing Goals",
"desc": "",
"goals": [
{
"goalID": "G9228d1ffe5cff125fd444270cb54b3f137ba33dea275e1c879489770ab999059"
},
{
"goalID": "G3d0655ab19d3992687fddd1b78c01a9a6711f8e15a7316e5df0f1af80b644700"
},
{
"goalID": "G59f31c1e5be23fd92944e3c95deaf112e3b409f1595dc01aa7621a0f203f5980"
}
]
},
{
"title": "General Clear Goals",
"desc": "",
"goals": [
{
"goalID": "G191ae15a484958fa1f55ac9ba087bcccfdba4eab9465223466ecbed8965369b7",
"note": "Use the tierlist to break into 12s and pick up the (relatively) easier ones!"
}
]
},
{
"title": "General Timing Goals",
"desc": "",
"goals": [
{
"goalID": "Ga969ef50f627363db7140d98bd478af284cde9eceb5b547184eb14c8594ae84c",
"note": "Pick up some AAAs to work on your timing. Some 9s are far easier to time than others, so try and snag those!"
}
]
}
],
"questID": "7f01dd4bb78537a37f0d06456c9153f960b1ab1c"
}
]
@@ -0,0 +1,95 @@
import { Command } from "commander";
import { CreateGoalID, CreateQuestID, MutateCollection } from "../util";
import fs from "fs";
import { QuestDocument, GoalDocument } from "tachi-common";
const program = new Command();
program.option("-f, --file <quests.json>");
program.parse(process.argv);
const options = program.opts();
// stolen from client/serc/types/tachi.ts
type RawQuestDocument = Omit<QuestDocument, "questData" | "questID"> & {
rawQuestData: Array<RawQuestSection>;
};
type RawQuestSection = {
title: string;
desc: string;
rawGoals: Array<RawQuestGoal>;
};
type RawQuestGoal = {
goal: Pick<GoalDocument, "criteria" | "charts" | "name">;
note?: string;
};
const data = JSON.parse(fs.readFileSync(options.file, "utf-8")) as Array<RawQuestDocument>;
const newGoals: Array<GoalDocument> = [];
function HydrateQuest(raw: RawQuestDocument): QuestDocument {
const questData: QuestDocument["questData"] = [];
const { game, playtype } = raw;
for (const rawQuest of raw.rawQuestData) {
const goals: Array<{ goalID: string; note?: string }> = [];
for (const rawGoal of rawQuest.rawGoals) {
const goalID = CreateGoalID(rawGoal.goal.charts, rawGoal.goal.criteria, game, playtype);
const newGoal: GoalDocument = {
charts: rawGoal.goal.charts,
criteria: rawGoal.goal.criteria,
game,
playtype,
goalID,
name: rawGoal.goal.name,
} as GoalDocument;
newGoals.push(newGoal);
goals.push({
goalID,
note: rawGoal.note,
});
}
questData.push({
title: rawQuest.title,
desc: rawQuest.desc,
goals,
});
}
return {
desc: raw.desc,
name: raw.name,
game,
playtype,
// just 20 random bytes. can't think of much more creative at the moment.
questID: CreateQuestID(),
questData,
};
}
const newQuests = data.map(HydrateQuest);
MutateCollection("quests.json", (quests) => [...quests, ...newQuests]);
MutateCollection("goals.json", (goals) => {
// don't duplicate goals
const goalIDs = new Set(goals.map((e) => e.goalID));
for (const goal of newGoals) {
if (goalIDs.has(goal.goalID)) {
continue;
}
goals.push(goal);
}
return goals;
});
+10
View File
@@ -53,6 +53,10 @@ function CreateChartID() {
return crypto.randomBytes(20).toString("hex");
}
function CreateQuestID() {
return crypto.randomBytes(20).toString("hex");
}
// this api sucks, maybe dont use it
function CreateFolderID(query, game, playtype) {
return `F${fjsh.hash(Object.assign({ game, playtype }, query), "SHA256")}`;
@@ -62,6 +66,10 @@ function CreateFolderIDFromFolder(folder) {
return CreateFolderID(folder.data, folder.game, folder.playtype);
}
function CreateGoalID(charts, criteria, game, playtype) {
return `G${fjsh.hash({ charts, criteria, game, playtype }, "sha256")}`;
}
// quick inplace deepmerge hack
// probably doesn't work for arrays, i don't care though.
function EfficientInPlaceDeepmerge(ref, apply) {
@@ -96,4 +104,6 @@ module.exports = {
EfficientInPlaceDeepmerge,
GetFreshSongIDGenerator,
CreateFolderIDFromFolder,
CreateGoalID,
CreateQuestID,
};