@haelp/teto
Version:
A typescript-based controllable TETR.IO client.
1 lines • 7.63 kB
Source Map (JSON)
{"version":3,"sources":["../../../../src/engine/utils/damageCalc/index.ts"],"sourcesContent":["import { Mino, type SpinType } from \"../..\";\n\nexport const garbageData = {\n single: 0,\n double: 1,\n triple: 2,\n quad: 4,\n penta: 5,\n tspinMini: 0,\n tspin: 0,\n tspinMiniSingle: 0,\n tspinSingle: 2,\n tspinMiniDouble: 1,\n tspinMiniTriple: 2,\n tspinDouble: 4,\n tspinTriple: 6,\n tspinQuad: 10,\n tspinPenta: 12,\n backtobackBonus: 1,\n backtobackBonusLog: 0.8,\n comboMinifier: 1,\n comboMinifierLog: 1.25,\n comboBonus: 0.25,\n allClear: 10,\n comboTable: {\n none: [0],\n \"classic guideline\": [0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5],\n \"modern guideline\": [0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4]\n }\n} as const;\n\nexport const garbageCalcV2 = (\n data: {\n lines: number;\n spin?: SpinType;\n piece: Mino;\n b2b: number;\n combo: number;\n enemies: number;\n },\n config: {\n spinBonuses: string;\n comboTable: keyof (typeof garbageData)[\"comboTable\"] | \"multiplier\";\n garbageTargetBonus: \"none\" | \"normal\" | string;\n b2b: {\n chaining: boolean;\n charging: boolean;\n };\n }\n) => {\n let garbage = 0;\n const { spin: rawSpin, lines, piece, combo, b2b, enemies } = data;\n const {\n spinBonuses,\n comboTable,\n garbageTargetBonus,\n b2b: b2bOptions\n } = config;\n\n const spin: \"mini\" | \"normal\" | null | undefined =\n rawSpin === \"none\" ? null : rawSpin;\n\n switch (lines) {\n case 0:\n garbage =\n spin === \"mini\"\n ? garbageData.tspinMini\n : spin === \"normal\"\n ? garbageData.tspin\n : 0;\n break;\n case 1:\n garbage =\n spin === \"mini\"\n ? garbageData.tspinMiniSingle\n : spin === \"normal\"\n ? garbageData.tspinSingle\n : garbageData.single;\n break;\n case 2:\n garbage =\n spin === \"mini\"\n ? garbageData.tspinMiniDouble\n : spin === \"normal\"\n ? garbageData.tspinDouble\n : garbageData.double;\n break;\n case 3:\n garbage =\n spin === \"mini\"\n ? garbageData.tspinMiniTriple\n : spin === \"normal\"\n ? garbageData.tspinTriple\n : garbageData.triple;\n break;\n case 4:\n garbage = spin ? garbageData.tspinQuad : garbageData.quad;\n break;\n case 5:\n garbage = spin ? garbageData.tspinPenta : garbageData.penta;\n break;\n default: {\n const t = lines - 5;\n garbage = spin ? garbageData.tspinPenta + 2 * t : garbageData.penta + t;\n break;\n }\n }\n\n if (spin && spinBonuses === \"handheld\" && piece.toUpperCase() !== \"T\") {\n garbage /= 2;\n }\n\n if (lines > 0 && b2b > 0) {\n if (b2bOptions.chaining) {\n const b2bGains =\n garbageData.backtobackBonus *\n (Math.floor(1 + Math.log1p(b2b * garbageData.backtobackBonusLog)) +\n (b2b == 1\n ? 0\n : (1 + (Math.log1p(b2b * garbageData.backtobackBonusLog) % 1)) /\n 3));\n garbage += b2bGains;\n } else {\n garbage += garbageData.backtobackBonus;\n }\n }\n\n if (combo > 0) {\n if (comboTable === \"multiplier\") {\n garbage *= 1 + garbageData.comboBonus * combo;\n if (combo > 1) {\n garbage = Math.max(\n Math.log1p(\n garbageData.comboMinifier * combo * garbageData.comboMinifierLog\n ),\n garbage\n );\n }\n } else {\n const comboTableData = garbageData.comboTable[comboTable] || [0];\n garbage +=\n comboTableData[\n Math.max(0, Math.min(combo - 1, comboTableData.length - 1))\n ];\n }\n }\n\n let garbageBonus = 0;\n if (lines > 0 && garbageTargetBonus !== \"none\") {\n let targetBonus = 0;\n switch (enemies) {\n case 0:\n case 1:\n break;\n case 2:\n targetBonus += 1;\n break;\n case 3:\n targetBonus += 3;\n break;\n case 4:\n targetBonus += 5;\n break;\n case 5:\n targetBonus += 7;\n break;\n default:\n targetBonus += 9;\n }\n\n if (garbageTargetBonus === \"normal\") {\n garbage += targetBonus;\n } else {\n garbageBonus = targetBonus;\n }\n }\n\n // TODO: how to bonus\n return {\n garbage,\n bonus: garbageBonus\n };\n};\n"],"names":["garbageData","single","double","triple","quad","penta","tspinMini","tspin","tspinMiniSingle","tspinSingle","tspinMiniDouble","tspinMiniTriple","tspinDouble","tspinTriple","tspinQuad","tspinPenta","backtobackBonus","backtobackBonusLog","comboMinifier","comboMinifierLog","comboBonus","allClear","comboTable","none","garbageCalcV2","data","config","garbage","spin","rawSpin","lines","piece","combo","b2b","enemies","spinBonuses","garbageTargetBonus","b2bOptions","t","toUpperCase","chaining","b2bGains","Math","floor","log1p","max","comboTableData","min","length","garbageBonus","targetBonus","bonus"],"mappings":"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"}