playlist-data-engine 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +352 -0
- package/dist/__vite-browser-external-DYxpcVy9.js +4 -0
- package/dist/constants/DefaultClasses.d.ts +46 -0
- package/dist/constants/DefaultClasses.d.ts.map +1 -0
- package/dist/constants/DefaultEnchantments.d.ts +337 -0
- package/dist/constants/DefaultEnchantments.d.ts.map +1 -0
- package/dist/constants/DefaultEnemies.d.ts +83 -0
- package/dist/constants/DefaultEnemies.d.ts.map +1 -0
- package/dist/constants/DefaultEquipment.d.ts +23 -0
- package/dist/constants/DefaultEquipment.d.ts.map +1 -0
- package/dist/constants/DefaultFeatures.d.ts +22 -0
- package/dist/constants/DefaultFeatures.d.ts.map +1 -0
- package/dist/constants/DefaultRaces.d.ts +102 -0
- package/dist/constants/DefaultRaces.d.ts.map +1 -0
- package/dist/constants/DefaultSkills.d.ts +26 -0
- package/dist/constants/DefaultSkills.d.ts.map +1 -0
- package/dist/constants/DefaultSpells.d.ts +41 -0
- package/dist/constants/DefaultSpells.d.ts.map +1 -0
- package/dist/constants/EncounterBalance.d.ts +208 -0
- package/dist/constants/EncounterBalance.d.ts.map +1 -0
- package/dist/constants/EnemyEquipment.d.ts +71 -0
- package/dist/constants/EnemyEquipment.d.ts.map +1 -0
- package/dist/constants/EnemyRarity.d.ts +79 -0
- package/dist/constants/EnemyRarity.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Construct.d.ts +63 -0
- package/dist/constants/EnemyTemplates/Construct.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Dragon.d.ts +68 -0
- package/dist/constants/EnemyTemplates/Dragon.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Elemental.d.ts +64 -0
- package/dist/constants/EnemyTemplates/Elemental.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Fiend.d.ts +62 -0
- package/dist/constants/EnemyTemplates/Fiend.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Monstrosity.d.ts +63 -0
- package/dist/constants/EnemyTemplates/Monstrosity.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Undead.d.ts +61 -0
- package/dist/constants/EnemyTemplates/Undead.d.ts.map +1 -0
- package/dist/constants/ItemTemplates.d.ts +40 -0
- package/dist/constants/ItemTemplates.d.ts.map +1 -0
- package/dist/constants/MagicItems.d.ts +30 -0
- package/dist/constants/MagicItems.d.ts.map +1 -0
- package/dist/constants/SpellSlots.d.ts +30 -0
- package/dist/constants/SpellSlots.d.ts.map +1 -0
- package/dist/constants/StatScaling.d.ts +113 -0
- package/dist/constants/StatScaling.d.ts.map +1 -0
- package/dist/core/analysis/AudioAnalyzer.d.ts +599 -0
- package/dist/core/analysis/AudioAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/ColorExtractor.d.ts +64 -0
- package/dist/core/analysis/ColorExtractor.d.ts.map +1 -0
- package/dist/core/analysis/EssentiaPitchDetector.d.ts +282 -0
- package/dist/core/analysis/EssentiaPitchDetector.d.ts.map +1 -0
- package/dist/core/analysis/LevelSerializer.d.ts +265 -0
- package/dist/core/analysis/LevelSerializer.d.ts.map +1 -0
- package/dist/core/analysis/MelodyContourAnalyzer.d.ts +283 -0
- package/dist/core/analysis/MelodyContourAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/MultiBandAnalyzer.d.ts +214 -0
- package/dist/core/analysis/MultiBandAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/MusicClassifier.d.ts +524 -0
- package/dist/core/analysis/MusicClassifier.d.ts.map +1 -0
- package/dist/core/analysis/PitchAnalyzer.d.ts +266 -0
- package/dist/core/analysis/PitchAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/PitchDetector.d.ts +251 -0
- package/dist/core/analysis/PitchDetector.d.ts.map +1 -0
- package/dist/core/analysis/SpectrumScanner.d.ts +52 -0
- package/dist/core/analysis/SpectrumScanner.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatInterpolator.d.ts +477 -0
- package/dist/core/analysis/beat/BeatInterpolator.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatMapGenerator.d.ts +170 -0
- package/dist/core/analysis/beat/BeatMapGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatStream.d.ts +316 -0
- package/dist/core/analysis/beat/BeatStream.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatSubdivider.d.ts +205 -0
- package/dist/core/analysis/beat/BeatSubdivider.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatTracker.d.ts +137 -0
- package/dist/core/analysis/beat/BeatTracker.d.ts.map +1 -0
- package/dist/core/analysis/beat/CompositeStreamGenerator.d.ts +180 -0
- package/dist/core/analysis/beat/CompositeStreamGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/DensityAnalyzer.d.ts +246 -0
- package/dist/core/analysis/beat/DensityAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/DifficultyVariantGenerator.d.ts +1082 -0
- package/dist/core/analysis/beat/DifficultyVariantGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/GrooveAnalyzer.d.ts +192 -0
- package/dist/core/analysis/beat/GrooveAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/OnsetStrengthEnvelope.d.ts +133 -0
- package/dist/core/analysis/beat/OnsetStrengthEnvelope.d.ts.map +1 -0
- package/dist/core/analysis/beat/PhraseAnalyzer.d.ts +230 -0
- package/dist/core/analysis/beat/PhraseAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/RhythmQuantizer.d.ts +399 -0
- package/dist/core/analysis/beat/RhythmQuantizer.d.ts.map +1 -0
- package/dist/core/analysis/beat/RhythmicBalancer.d.ts +262 -0
- package/dist/core/analysis/beat/RhythmicBalancer.d.ts.map +1 -0
- package/dist/core/analysis/beat/StreamScorer.d.ts +275 -0
- package/dist/core/analysis/beat/StreamScorer.d.ts.map +1 -0
- package/dist/core/analysis/beat/TempoAwareQuantizer.d.ts +256 -0
- package/dist/core/analysis/beat/TempoAwareQuantizer.d.ts.map +1 -0
- package/dist/core/analysis/beat/TempoDetector.d.ts +220 -0
- package/dist/core/analysis/beat/TempoDetector.d.ts.map +1 -0
- package/dist/core/analysis/beat/TransientDetector.d.ts +303 -0
- package/dist/core/analysis/beat/TransientDetector.d.ts.map +1 -0
- package/dist/core/analysis/beat/beatKeyHelpers.d.ts +180 -0
- package/dist/core/analysis/beat/beatKeyHelpers.d.ts.map +1 -0
- package/dist/core/analysis/beat/index.d.ts +41 -0
- package/dist/core/analysis/beat/index.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/audioUtils.d.ts +204 -0
- package/dist/core/analysis/beat/utils/audioUtils.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/beatInterpolationDebug.d.ts +404 -0
- package/dist/core/analysis/beat/utils/beatInterpolationDebug.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/subdivideBeatMap.d.ts +61 -0
- package/dist/core/analysis/beat/utils/subdivideBeatMap.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/unifyBeatMap.d.ts +33 -0
- package/dist/core/analysis/beat/utils/unifyBeatMap.d.ts.map +1 -0
- package/dist/core/analysis/index.d.ts +18 -0
- package/dist/core/analysis/index.d.ts.map +1 -0
- package/dist/core/combat/AI/AICombatRunner.d.ts +108 -0
- package/dist/core/combat/AI/AICombatRunner.d.ts.map +1 -0
- package/dist/core/combat/AI/CombatAI.d.ts +179 -0
- package/dist/core/combat/AI/CombatAI.d.ts.map +1 -0
- package/dist/core/combat/AI/CombatMetricsTracker.d.ts +30 -0
- package/dist/core/combat/AI/CombatMetricsTracker.d.ts.map +1 -0
- package/dist/core/combat/Analysis/BalanceValidator.d.ts +170 -0
- package/dist/core/combat/Analysis/BalanceValidator.d.ts.map +1 -0
- package/dist/core/combat/Analysis/ComparativeAnalyzer.d.ts +231 -0
- package/dist/core/combat/Analysis/ComparativeAnalyzer.d.ts.map +1 -0
- package/dist/core/combat/Analysis/DifficultyCalculator.d.ts +203 -0
- package/dist/core/combat/Analysis/DifficultyCalculator.d.ts.map +1 -0
- package/dist/core/combat/Analysis/ParameterSweep.d.ts +201 -0
- package/dist/core/combat/Analysis/ParameterSweep.d.ts.map +1 -0
- package/dist/core/combat/AttackResolver.d.ts +220 -0
- package/dist/core/combat/AttackResolver.d.ts.map +1 -0
- package/dist/core/combat/CombatEngine.d.ts +388 -0
- package/dist/core/combat/CombatEngine.d.ts.map +1 -0
- package/dist/core/combat/DiceRoller.d.ts +115 -0
- package/dist/core/combat/DiceRoller.d.ts.map +1 -0
- package/dist/core/combat/InitiativeRoller.d.ts +62 -0
- package/dist/core/combat/InitiativeRoller.d.ts.map +1 -0
- package/dist/core/combat/PartyAnalyzer.d.ts +215 -0
- package/dist/core/combat/PartyAnalyzer.d.ts.map +1 -0
- package/dist/core/combat/SeededDiceRoller.d.ts +120 -0
- package/dist/core/combat/SeededDiceRoller.d.ts.map +1 -0
- package/dist/core/combat/Simulation/CombatSimulator.d.ts +366 -0
- package/dist/core/combat/Simulation/CombatSimulator.d.ts.map +1 -0
- package/dist/core/combat/SpellCaster.d.ts +113 -0
- package/dist/core/combat/SpellCaster.d.ts.map +1 -0
- package/dist/core/config/index.d.ts +24 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/progressionConfig.d.ts +73 -0
- package/dist/core/config/progressionConfig.d.ts.map +1 -0
- package/dist/core/config/sensorConfig.d.ts +134 -0
- package/dist/core/config/sensorConfig.d.ts.map +1 -0
- package/dist/core/equipment/BoxOpener.d.ts +175 -0
- package/dist/core/equipment/BoxOpener.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentEffectApplier.d.ts +189 -0
- package/dist/core/equipment/EquipmentEffectApplier.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentModifier.d.ts +327 -0
- package/dist/core/equipment/EquipmentModifier.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentSpawnHelper.d.ts +246 -0
- package/dist/core/equipment/EquipmentSpawnHelper.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentValidator.d.ts +173 -0
- package/dist/core/equipment/EquipmentValidator.d.ts.map +1 -0
- package/dist/core/extensions/ExtensionManager.d.ts +517 -0
- package/dist/core/extensions/ExtensionManager.d.ts.map +1 -0
- package/dist/core/extensions/WeightedSelector.d.ts +156 -0
- package/dist/core/extensions/WeightedSelector.d.ts.map +1 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/initializeDefaults.d.ts +170 -0
- package/dist/core/extensions/initializeDefaults.d.ts.map +1 -0
- package/dist/core/features/FeatureEffectApplier.d.ts +102 -0
- package/dist/core/features/FeatureEffectApplier.d.ts.map +1 -0
- package/dist/core/features/FeatureQuery.d.ts +368 -0
- package/dist/core/features/FeatureQuery.d.ts.map +1 -0
- package/dist/core/features/FeatureTypes.d.ts +199 -0
- package/dist/core/features/FeatureTypes.d.ts.map +1 -0
- package/dist/core/features/FeatureValidator.d.ts +149 -0
- package/dist/core/features/FeatureValidator.d.ts.map +1 -0
- package/dist/core/features/index.d.ts +12 -0
- package/dist/core/features/index.d.ts.map +1 -0
- package/dist/core/generation/AbilityScoreCalculator.d.ts +83 -0
- package/dist/core/generation/AbilityScoreCalculator.d.ts.map +1 -0
- package/dist/core/generation/AppearanceGenerator.d.ts +32 -0
- package/dist/core/generation/AppearanceGenerator.d.ts.map +1 -0
- package/dist/core/generation/BeatConverter.d.ts +127 -0
- package/dist/core/generation/BeatConverter.d.ts.map +1 -0
- package/dist/core/generation/ButtonMapper.d.ts +346 -0
- package/dist/core/generation/ButtonMapper.d.ts.map +1 -0
- package/dist/core/generation/ButtonPatternLibrary.d.ts +92 -0
- package/dist/core/generation/ButtonPatternLibrary.d.ts.map +1 -0
- package/dist/core/generation/CRLevelConverter.d.ts +242 -0
- package/dist/core/generation/CRLevelConverter.d.ts.map +1 -0
- package/dist/core/generation/CharacterGenerator.d.ts +194 -0
- package/dist/core/generation/CharacterGenerator.d.ts.map +1 -0
- package/dist/core/generation/ClassSuggester.d.ts +184 -0
- package/dist/core/generation/ClassSuggester.d.ts.map +1 -0
- package/dist/core/generation/EnemyEquipmentGenerator.d.ts +151 -0
- package/dist/core/generation/EnemyEquipmentGenerator.d.ts.map +1 -0
- package/dist/core/generation/EnemyGenerator.d.ts +595 -0
- package/dist/core/generation/EnemyGenerator.d.ts.map +1 -0
- package/dist/core/generation/EquipmentGenerator.d.ts +204 -0
- package/dist/core/generation/EquipmentGenerator.d.ts.map +1 -0
- package/dist/core/generation/LegendaryGenerator.d.ts +213 -0
- package/dist/core/generation/LegendaryGenerator.d.ts.map +1 -0
- package/dist/core/generation/LevelGenerator.d.ts +390 -0
- package/dist/core/generation/LevelGenerator.d.ts.map +1 -0
- package/dist/core/generation/NamingEngine.d.ts +136 -0
- package/dist/core/generation/NamingEngine.d.ts.map +1 -0
- package/dist/core/generation/PitchBeatLinker.d.ts +150 -0
- package/dist/core/generation/PitchBeatLinker.d.ts.map +1 -0
- package/dist/core/generation/RaceSelector.d.ts +58 -0
- package/dist/core/generation/RaceSelector.d.ts.map +1 -0
- package/dist/core/generation/RhythmGenerator.d.ts +597 -0
- package/dist/core/generation/RhythmGenerator.d.ts.map +1 -0
- package/dist/core/generation/SkillAssigner.d.ts +78 -0
- package/dist/core/generation/SkillAssigner.d.ts.map +1 -0
- package/dist/core/generation/SpellManager.d.ts +132 -0
- package/dist/core/generation/SpellManager.d.ts.map +1 -0
- package/dist/core/generation/SpellcastingGenerator.d.ts +255 -0
- package/dist/core/generation/SpellcastingGenerator.d.ts.map +1 -0
- package/dist/core/generation/index.d.ts +41 -0
- package/dist/core/generation/index.d.ts.map +1 -0
- package/dist/core/parser/MetadataExtractor.d.ts +66 -0
- package/dist/core/parser/MetadataExtractor.d.ts.map +1 -0
- package/dist/core/parser/PlaylistParser.d.ts +45 -0
- package/dist/core/parser/PlaylistParser.d.ts.map +1 -0
- package/dist/core/playback/SubdivisionPlaybackController.d.ts +333 -0
- package/dist/core/playback/SubdivisionPlaybackController.d.ts.map +1 -0
- package/dist/core/playback/index.d.ts +5 -0
- package/dist/core/playback/index.d.ts.map +1 -0
- package/dist/core/progression/CharacterUpdater.d.ts +203 -0
- package/dist/core/progression/CharacterUpdater.d.ts.map +1 -0
- package/dist/core/progression/LevelUpProcessor.d.ts +234 -0
- package/dist/core/progression/LevelUpProcessor.d.ts.map +1 -0
- package/dist/core/progression/PrestigeSystem.d.ts +217 -0
- package/dist/core/progression/PrestigeSystem.d.ts.map +1 -0
- package/dist/core/progression/RhythmXPCalculator.d.ts +182 -0
- package/dist/core/progression/RhythmXPCalculator.d.ts.map +1 -0
- package/dist/core/progression/SessionTracker.d.ts +169 -0
- package/dist/core/progression/SessionTracker.d.ts.map +1 -0
- package/dist/core/progression/XPCalculator.d.ts +128 -0
- package/dist/core/progression/XPCalculator.d.ts.map +1 -0
- package/dist/core/progression/stat/StatIncreaseStrategy.d.ts +97 -0
- package/dist/core/progression/stat/StatIncreaseStrategy.d.ts.map +1 -0
- package/dist/core/progression/stat/StatManager.d.ts +179 -0
- package/dist/core/progression/stat/StatManager.d.ts.map +1 -0
- package/dist/core/sensors/EnvironmentalSensors.d.ts +301 -0
- package/dist/core/sensors/EnvironmentalSensors.d.ts.map +1 -0
- package/dist/core/sensors/GamingPlatformSensors.d.ts +162 -0
- package/dist/core/sensors/GamingPlatformSensors.d.ts.map +1 -0
- package/dist/core/sensors/GeolocationProvider.d.ts +156 -0
- package/dist/core/sensors/GeolocationProvider.d.ts.map +1 -0
- package/dist/core/sensors/MotionDetector.d.ts +58 -0
- package/dist/core/sensors/MotionDetector.d.ts.map +1 -0
- package/dist/core/sensors/SteamAPIClient.d.ts +108 -0
- package/dist/core/sensors/SteamAPIClient.d.ts.map +1 -0
- package/dist/core/sensors/WeatherAPIClient.d.ts +360 -0
- package/dist/core/sensors/WeatherAPIClient.d.ts.map +1 -0
- package/dist/core/sensors/schemas/weather.schema.d.ts +144 -0
- package/dist/core/sensors/schemas/weather.schema.d.ts.map +1 -0
- package/dist/core/skills/SkillQuery.d.ts +159 -0
- package/dist/core/skills/SkillQuery.d.ts.map +1 -0
- package/dist/core/skills/SkillTypes.d.ts +233 -0
- package/dist/core/skills/SkillTypes.d.ts.map +1 -0
- package/dist/core/skills/SkillValidator.d.ts +146 -0
- package/dist/core/skills/SkillValidator.d.ts.map +1 -0
- package/dist/core/skills/index.d.ts +11 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/spells/SpellQuery.d.ts +194 -0
- package/dist/core/spells/SpellQuery.d.ts.map +1 -0
- package/dist/core/spells/SpellTypes.d.ts +71 -0
- package/dist/core/spells/SpellTypes.d.ts.map +1 -0
- package/dist/core/spells/SpellValidator.d.ts +129 -0
- package/dist/core/spells/SpellValidator.d.ts.map +1 -0
- package/dist/core/spells/index.d.ts +11 -0
- package/dist/core/spells/index.d.ts.map +1 -0
- package/dist/core/types/AudioProfile.d.ts +143 -0
- package/dist/core/types/AudioProfile.d.ts.map +1 -0
- package/dist/core/types/BeatMap.d.ts +1825 -0
- package/dist/core/types/BeatMap.d.ts.map +1 -0
- package/dist/core/types/ButtonMapping.d.ts +345 -0
- package/dist/core/types/ButtonMapping.d.ts.map +1 -0
- package/dist/core/types/Character.d.ts +397 -0
- package/dist/core/types/Character.d.ts.map +1 -0
- package/dist/core/types/ChartedBeatMap.d.ts +169 -0
- package/dist/core/types/ChartedBeatMap.d.ts.map +1 -0
- package/dist/core/types/Combat.d.ts +268 -0
- package/dist/core/types/Combat.d.ts.map +1 -0
- package/dist/core/types/CombatAI.d.ts +143 -0
- package/dist/core/types/CombatAI.d.ts.map +1 -0
- package/dist/core/types/Enemy.d.ts +447 -0
- package/dist/core/types/Enemy.d.ts.map +1 -0
- package/dist/core/types/Environmental.d.ts +213 -0
- package/dist/core/types/Environmental.d.ts.map +1 -0
- package/dist/core/types/Equipment.d.ts +309 -0
- package/dist/core/types/Equipment.d.ts.map +1 -0
- package/dist/core/types/ISessionTracker.d.ts +48 -0
- package/dist/core/types/ISessionTracker.d.ts.map +1 -0
- package/dist/core/types/LevelExport.d.ts +366 -0
- package/dist/core/types/LevelExport.d.ts.map +1 -0
- package/dist/core/types/Playlist.d.ts +70 -0
- package/dist/core/types/Playlist.d.ts.map +1 -0
- package/dist/core/types/Prestige.d.ts +94 -0
- package/dist/core/types/Prestige.d.ts.map +1 -0
- package/dist/core/types/Progression.d.ts +214 -0
- package/dist/core/types/Progression.d.ts.map +1 -0
- package/dist/core/types/RhythmXP.d.ts +398 -0
- package/dist/core/types/RhythmXP.d.ts.map +1 -0
- package/dist/core/utils/AbilityConstants.d.ts +31 -0
- package/dist/core/utils/AbilityConstants.d.ts.map +1 -0
- package/dist/core/utils/EffectApplierUtils.d.ts +56 -0
- package/dist/core/utils/EffectApplierUtils.d.ts.map +1 -0
- package/dist/core/utils/ImageValidator.d.ts +66 -0
- package/dist/core/utils/ImageValidator.d.ts.map +1 -0
- package/dist/core/utils/PrerequisiteValidator.d.ts +88 -0
- package/dist/core/utils/PrerequisiteValidator.d.ts.map +1 -0
- package/dist/essentia-wasm.es-BUEnKUts.js +2990 -0
- package/dist/essentia.js-model.es-CGA0xotH.js +306 -0
- package/dist/index.d.ts +176 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/playlist-data-engine.js +124 -0
- package/dist/playlist-data-engine.mjs +49251 -0
- package/dist/utils/EnchantmentLibrary.d.ts +378 -0
- package/dist/utils/EnchantmentLibrary.d.ts.map +1 -0
- package/dist/utils/arweaveGatewayManager.d.ts +485 -0
- package/dist/utils/arweaveGatewayManager.d.ts.map +1 -0
- package/dist/utils/arweaveUtils.d.ts +118 -0
- package/dist/utils/arweaveUtils.d.ts.map +1 -0
- package/dist/utils/constants.d.ts +439 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/equipmentConstants.d.ts +60 -0
- package/dist/utils/equipmentConstants.d.ts.map +1 -0
- package/dist/utils/hash.d.ts +33 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +192 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/magicItemExamples.d.ts +46 -0
- package/dist/utils/magicItemExamples.d.ts.map +1 -0
- package/dist/utils/playlistUtils.d.ts +149 -0
- package/dist/utils/playlistUtils.d.ts.map +1 -0
- package/dist/utils/random.d.ts +34 -0
- package/dist/utils/random.d.ts.map +1 -0
- package/dist/utils/sensorDashboard.d.ts +60 -0
- package/dist/utils/sensorDashboard.d.ts.map +1 -0
- package/dist/utils/validators.d.ts +189 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Level Export Types
|
|
3
|
+
*
|
|
4
|
+
* Types for exporting and importing rhythm game levels in a format compatible
|
|
5
|
+
* with the playlist-data-showcase app's import/export functionality.
|
|
6
|
+
*
|
|
7
|
+
* This format supports both:
|
|
8
|
+
* - Procedurally generated levels (from LevelGenerator)
|
|
9
|
+
* - Manually charted levels (from showcase app chart editor)
|
|
10
|
+
*
|
|
11
|
+
* Part of the Pitch Detection & Button Mapping pipeline - Phase 4.2
|
|
12
|
+
*/
|
|
13
|
+
import type { SubdivisionType, BeatSource } from './BeatMap.js';
|
|
14
|
+
import type { Band } from '../generation/RhythmGenerator.js';
|
|
15
|
+
/**
|
|
16
|
+
* Chart style determining key layout
|
|
17
|
+
* - 'ddr': 4-key dance pad style (up, down, left, right)
|
|
18
|
+
* - 'guitar': 5-fret guitar hero style (1, 2, 3, 4, 5)
|
|
19
|
+
*/
|
|
20
|
+
export type ChartStyle = 'ddr' | 'guitar' | 'tap';
|
|
21
|
+
/**
|
|
22
|
+
* A detected beat in the full beat map export format
|
|
23
|
+
*/
|
|
24
|
+
export interface FullExportDetectedBeat {
|
|
25
|
+
/** Timestamp in seconds */
|
|
26
|
+
timestamp: number;
|
|
27
|
+
/** Position within the measure */
|
|
28
|
+
beatInMeasure: number;
|
|
29
|
+
/** Whether this is a downbeat */
|
|
30
|
+
isDownbeat: boolean;
|
|
31
|
+
/** Measure number */
|
|
32
|
+
measureNumber: number;
|
|
33
|
+
/** Onset intensity (0-1) */
|
|
34
|
+
intensity: number;
|
|
35
|
+
/** Detection confidence (0-1) */
|
|
36
|
+
confidence: number;
|
|
37
|
+
/** Optional required key for rhythm game */
|
|
38
|
+
requiredKey?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A merged beat (detected or interpolated) in the full beat map export format
|
|
42
|
+
*/
|
|
43
|
+
export interface FullExportMergedBeat {
|
|
44
|
+
/** Timestamp in seconds */
|
|
45
|
+
timestamp: number;
|
|
46
|
+
/** Position within the measure */
|
|
47
|
+
beatInMeasure: number;
|
|
48
|
+
/** Whether this is a downbeat */
|
|
49
|
+
isDownbeat: boolean;
|
|
50
|
+
/** Measure number */
|
|
51
|
+
measureNumber: number;
|
|
52
|
+
/** Onset intensity (0-1) */
|
|
53
|
+
intensity: number;
|
|
54
|
+
/** Detection confidence (0-1) */
|
|
55
|
+
confidence: number;
|
|
56
|
+
/** Optional required key for rhythm game */
|
|
57
|
+
requiredKey?: string;
|
|
58
|
+
/** Whether this beat was detected or interpolated */
|
|
59
|
+
source: BeatSource;
|
|
60
|
+
/** Distance to nearest detected beat (for interpolated beats) */
|
|
61
|
+
distanceToAnchor?: number;
|
|
62
|
+
/** Timestamp of nearest detected beat (for interpolated beats) */
|
|
63
|
+
nearestAnchorTimestamp?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Metadata about the interpolation process
|
|
67
|
+
*/
|
|
68
|
+
export interface InterpolatedMetadataJSON {
|
|
69
|
+
/** Quarter note interval in seconds */
|
|
70
|
+
quarterNoteInterval: number;
|
|
71
|
+
/** Quarter note BPM (60 / quarterNoteInterval) */
|
|
72
|
+
quarterNoteBpm: number;
|
|
73
|
+
/** Confidence of quarter note detection */
|
|
74
|
+
quarterNoteConfidence: number;
|
|
75
|
+
/** Total detected beats count */
|
|
76
|
+
detectedBeatCount: number;
|
|
77
|
+
/** Total merged beats count (detected + interpolated) */
|
|
78
|
+
mergedBeatCount: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Subdivision configuration in JSON-serializable format
|
|
82
|
+
*/
|
|
83
|
+
export interface SubdivisionConfigJSON {
|
|
84
|
+
/** Subdivision assignments as array of [beatIndex, subdivisionType] tuples */
|
|
85
|
+
beatSubdivisions: [number, SubdivisionType][];
|
|
86
|
+
/** Default subdivision for beats not in the array */
|
|
87
|
+
defaultSubdivision: SubdivisionType;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Metadata about the subdivision process
|
|
91
|
+
*/
|
|
92
|
+
export interface SubdivisionMetadataJSON {
|
|
93
|
+
/** Original beat count before subdivision */
|
|
94
|
+
originalBeatCount: number;
|
|
95
|
+
/** Beat count after subdivision */
|
|
96
|
+
subdividedBeatCount: number;
|
|
97
|
+
/** Average density multiplier */
|
|
98
|
+
averageDensityMultiplier: number;
|
|
99
|
+
/** Number of explicitly subdivided beats */
|
|
100
|
+
explicitBeatCount: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A subdivided beat in the full beat map export format
|
|
104
|
+
* Includes procedural extensions for procedurally generated levels
|
|
105
|
+
*/
|
|
106
|
+
export interface FullExportSubdividedBeat {
|
|
107
|
+
/** Timestamp in seconds */
|
|
108
|
+
timestamp: number;
|
|
109
|
+
/** Position within the measure (decimal for subdivisions) */
|
|
110
|
+
beatInMeasure: number;
|
|
111
|
+
/** Whether this is a downbeat */
|
|
112
|
+
isDownbeat: boolean;
|
|
113
|
+
/** Measure number */
|
|
114
|
+
measureNumber: number;
|
|
115
|
+
/** Onset intensity (0-1) */
|
|
116
|
+
intensity: number;
|
|
117
|
+
/** Detection confidence (0-1) */
|
|
118
|
+
confidence: number;
|
|
119
|
+
/** Required key for this beat */
|
|
120
|
+
requiredKey?: string;
|
|
121
|
+
/** Whether this beat was originally detected */
|
|
122
|
+
isDetected: boolean;
|
|
123
|
+
/** Index of original beat in UnifiedBeatMap */
|
|
124
|
+
originalBeatIndex?: number;
|
|
125
|
+
/** The subdivision type that created this beat */
|
|
126
|
+
subdivisionType: SubdivisionType;
|
|
127
|
+
/** Index into the original quarter note (procedural only) */
|
|
128
|
+
quarterNoteIndex?: number;
|
|
129
|
+
/** Position within the quarter note (procedural only) */
|
|
130
|
+
subdivisionPosition?: number;
|
|
131
|
+
/** Which frequency band this beat originated from (procedural only) */
|
|
132
|
+
sourceBand?: Band;
|
|
133
|
+
/** Quantization error in milliseconds (procedural only) */
|
|
134
|
+
quantizationError?: number;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Complete subdivision data for export
|
|
138
|
+
*/
|
|
139
|
+
export interface SubdivisionExportData {
|
|
140
|
+
/** Subdivision configuration */
|
|
141
|
+
config: SubdivisionConfigJSON;
|
|
142
|
+
/** Subdivided beats with keys assigned */
|
|
143
|
+
beats: FullExportSubdividedBeat[];
|
|
144
|
+
/** Subdivision metadata */
|
|
145
|
+
metadata: SubdivisionMetadataJSON;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Chart metadata for export
|
|
149
|
+
*/
|
|
150
|
+
export interface ChartExportData {
|
|
151
|
+
/** Chart style (ddr or guitar) */
|
|
152
|
+
style: ChartStyle;
|
|
153
|
+
/** Number of keys/frets used */
|
|
154
|
+
keyCount: number;
|
|
155
|
+
/** Array of keys used in this chart */
|
|
156
|
+
usedKeys: string[];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Metadata specific to procedurally generated levels
|
|
160
|
+
* Only present when generationSource is 'procedural'
|
|
161
|
+
*/
|
|
162
|
+
export interface ProceduralGenerationMetadata {
|
|
163
|
+
/** Difficulty preset used */
|
|
164
|
+
difficulty: string;
|
|
165
|
+
/** Weight given to pitch analysis (0-1) */
|
|
166
|
+
pitchInfluenceWeight: number;
|
|
167
|
+
/** Button patterns used in generation */
|
|
168
|
+
patternsUsed: string[];
|
|
169
|
+
/** Controller mode used */
|
|
170
|
+
controllerMode: 'ddr' | 'guitar_hero' | 'tap';
|
|
171
|
+
/** Seed used for reproducibility */
|
|
172
|
+
seed?: string;
|
|
173
|
+
/** Generation timestamp */
|
|
174
|
+
generatedAt: string;
|
|
175
|
+
/** Direction statistics from melody contour analysis */
|
|
176
|
+
directionStats?: {
|
|
177
|
+
up: number;
|
|
178
|
+
down: number;
|
|
179
|
+
stable: number;
|
|
180
|
+
none: number;
|
|
181
|
+
};
|
|
182
|
+
/** Interval statistics from melody contour analysis */
|
|
183
|
+
intervalStats?: {
|
|
184
|
+
unison: number;
|
|
185
|
+
small: number;
|
|
186
|
+
medium: number;
|
|
187
|
+
large: number;
|
|
188
|
+
very_large: number;
|
|
189
|
+
};
|
|
190
|
+
/** Rhythm metadata summary */
|
|
191
|
+
rhythmMetadata?: {
|
|
192
|
+
difficulty: string;
|
|
193
|
+
bandsAnalyzed: Band[];
|
|
194
|
+
transientsDetected: number;
|
|
195
|
+
averageDensity: number;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Complete beat map data for export/import
|
|
200
|
+
*
|
|
201
|
+
* This is the unified format that supports both:
|
|
202
|
+
* - Procedurally generated levels (from LevelGenerator)
|
|
203
|
+
* - Manually charted levels (from showcase app chart editor)
|
|
204
|
+
*
|
|
205
|
+
* The showcase app ignores extra fields, so procedural-specific fields
|
|
206
|
+
* can be safely added without breaking compatibility.
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* // Export a generated level
|
|
211
|
+
* const exportData = LevelSerializer.toExportData(generatedLevel);
|
|
212
|
+
* const json = JSON.stringify(exportData);
|
|
213
|
+
*
|
|
214
|
+
* // Import a level
|
|
215
|
+
* const data = JSON.parse(json) as FullBeatMapExportData;
|
|
216
|
+
* const level = LevelSerializer.fromExportData(data);
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
export interface FullBeatMapExportData {
|
|
220
|
+
/** Format version (always 1) */
|
|
221
|
+
version: 1;
|
|
222
|
+
/** Format identifier (always 'full-beatmap') */
|
|
223
|
+
format: 'full-beatmap';
|
|
224
|
+
/** Unique identifier for the audio source */
|
|
225
|
+
audioId: string;
|
|
226
|
+
/** Optional audio title for display purposes */
|
|
227
|
+
audioTitle?: string;
|
|
228
|
+
/** Unix timestamp when this level was exported */
|
|
229
|
+
exportedAt: number;
|
|
230
|
+
/** Duration of the audio in seconds */
|
|
231
|
+
duration: number;
|
|
232
|
+
/** Quarter note BPM (60 / quarterNoteInterval) */
|
|
233
|
+
quarterNoteBpm: number;
|
|
234
|
+
/** Confidence of quarter note detection (0-1) */
|
|
235
|
+
quarterNoteConfidence: number;
|
|
236
|
+
/** Original detected beats from audio analysis */
|
|
237
|
+
detectedBeats: FullExportDetectedBeat[];
|
|
238
|
+
/** Merged beats (detected + interpolated) */
|
|
239
|
+
mergedBeats: FullExportMergedBeat[];
|
|
240
|
+
/** Metadata about the interpolation process */
|
|
241
|
+
interpolatedMetadata: InterpolatedMetadataJSON;
|
|
242
|
+
/** Subdivision data (null if no subdivision applied) */
|
|
243
|
+
subdivision: SubdivisionExportData | null;
|
|
244
|
+
/** Chart style and key information (null if no chart) */
|
|
245
|
+
chart: ChartExportData | null;
|
|
246
|
+
/**
|
|
247
|
+
* Identifies the song this level was created for.
|
|
248
|
+
* Absent in v1 exports for backward compatibility.
|
|
249
|
+
*/
|
|
250
|
+
trackReference?: TrackReference;
|
|
251
|
+
/** Source of this level (manual or procedural) */
|
|
252
|
+
generationSource?: 'manual' | 'procedural';
|
|
253
|
+
/** Additional metadata for procedurally generated levels */
|
|
254
|
+
generationMetadata?: ProceduralGenerationMetadata;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Result of attempting to import a beat map
|
|
258
|
+
*/
|
|
259
|
+
export interface FullBeatMapImportResult {
|
|
260
|
+
/** Whether the import was successful */
|
|
261
|
+
success: boolean;
|
|
262
|
+
/** The imported data if successful */
|
|
263
|
+
data?: FullBeatMapExportData;
|
|
264
|
+
/** Error message if import failed */
|
|
265
|
+
error?: string;
|
|
266
|
+
/** Validation warnings (non-fatal issues) */
|
|
267
|
+
warnings?: string[];
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Identifies the song that a level was created for.
|
|
271
|
+
* Embedded in exported level files so the UI can validate the correct song
|
|
272
|
+
* is selected on import and tell the user which playlist/track to switch to.
|
|
273
|
+
*/
|
|
274
|
+
export interface TrackReference {
|
|
275
|
+
/** Arweave transaction ID of the playlist that contains this track */
|
|
276
|
+
playlistTxId?: string;
|
|
277
|
+
/** Display name of the playlist */
|
|
278
|
+
playlistName?: string;
|
|
279
|
+
/** Track ID (e.g. "ethereum-0xContract-1" or "AR-{tx_id}") */
|
|
280
|
+
trackId: string;
|
|
281
|
+
/** Unique instance ID for the game engine */
|
|
282
|
+
trackUuid: string;
|
|
283
|
+
/** 0-based index of the track within the playlist */
|
|
284
|
+
trackIndex: number;
|
|
285
|
+
/** Arweave transaction ID for the track's audio (only for AR tracks) */
|
|
286
|
+
txId?: string;
|
|
287
|
+
/** Track title */
|
|
288
|
+
title: string;
|
|
289
|
+
/** Track artist */
|
|
290
|
+
artist: string;
|
|
291
|
+
/** URL to the audio file */
|
|
292
|
+
audioUrl: string;
|
|
293
|
+
/** URL to the track's cover image (optional) */
|
|
294
|
+
imageUrl?: string;
|
|
295
|
+
/** Duration of the audio in seconds */
|
|
296
|
+
duration: number;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Result of validating whether the currently selected track matches the
|
|
300
|
+
* track referenced in an imported level file.
|
|
301
|
+
*/
|
|
302
|
+
export interface TrackMatchResult {
|
|
303
|
+
/** True when the current track is the one the level was built for */
|
|
304
|
+
matches: boolean;
|
|
305
|
+
/** Human-readable details about any mismatch (empty when matches is true) */
|
|
306
|
+
mismatchDetails: string[];
|
|
307
|
+
/** When mismatched, describes the track the user needs to switch to */
|
|
308
|
+
requiredTrack?: {
|
|
309
|
+
title: string;
|
|
310
|
+
artist: string;
|
|
311
|
+
playlistName?: string;
|
|
312
|
+
trackIndex: number;
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Validate whether the currently selected track matches the track reference
|
|
317
|
+
* embedded in a level file.
|
|
318
|
+
*
|
|
319
|
+
* Matching strategy:
|
|
320
|
+
* 1. Compare by `trackId` (exact)
|
|
321
|
+
* 2. Fall back to `title + artist` (case-insensitive)
|
|
322
|
+
*
|
|
323
|
+
* @param levelTrackRef - The track reference from the imported level file
|
|
324
|
+
* @param currentTrack - The track currently selected in the showcase app
|
|
325
|
+
* @returns Match result with details about any mismatch
|
|
326
|
+
*/
|
|
327
|
+
export declare function validateTrackMatch(levelTrackRef: TrackReference, currentTrack: {
|
|
328
|
+
id: string;
|
|
329
|
+
title: string;
|
|
330
|
+
artist: string;
|
|
331
|
+
playlist_index: number;
|
|
332
|
+
tx_id?: string;
|
|
333
|
+
}): TrackMatchResult;
|
|
334
|
+
/**
|
|
335
|
+
* Check if an unknown value is a valid FullBeatMapExportData
|
|
336
|
+
*/
|
|
337
|
+
export declare function isFullBeatMapExportData(value: unknown): value is FullBeatMapExportData;
|
|
338
|
+
/**
|
|
339
|
+
* A collection of difficulty levels for the same song, exported as a single file.
|
|
340
|
+
*
|
|
341
|
+
* Each difficulty is a full FullBeatMapExportData so it can be independently
|
|
342
|
+
* deserialized. The pack-level trackReference applies to all difficulties.
|
|
343
|
+
*/
|
|
344
|
+
export interface LevelPackExport {
|
|
345
|
+
/** Format version (always 1) */
|
|
346
|
+
version: 1;
|
|
347
|
+
/** Format identifier (always 'level-pack') */
|
|
348
|
+
format: 'level-pack';
|
|
349
|
+
/** Unix timestamp when this pack was exported */
|
|
350
|
+
exportedAt: number;
|
|
351
|
+
/** Track reference identifying the song (shared across all difficulties) */
|
|
352
|
+
trackReference?: TrackReference;
|
|
353
|
+
/** Per-difficulty level data. Keys that exist have generated levels. */
|
|
354
|
+
difficulties: {
|
|
355
|
+
natural?: FullBeatMapExportData;
|
|
356
|
+
easy?: FullBeatMapExportData;
|
|
357
|
+
medium?: FullBeatMapExportData;
|
|
358
|
+
hard?: FullBeatMapExportData;
|
|
359
|
+
custom?: FullBeatMapExportData;
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Check if an unknown value is a valid LevelPackExport.
|
|
364
|
+
*/
|
|
365
|
+
export declare function isLevelPackExport(value: unknown): value is LevelPackExport;
|
|
366
|
+
//# sourceMappingURL=LevelExport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LevelExport.d.ts","sourceRoot":"","sources":["../../../src/core/types/LevelExport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playlist-related type definitions
|
|
3
|
+
* Based on specs/001-core-engine/SPEC.md
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* ServerlessPlaylist - The playlist container
|
|
7
|
+
* This is the structure of the JSON file fetched directly from Arweave
|
|
8
|
+
*/
|
|
9
|
+
export interface ServerlessPlaylist {
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
image: string;
|
|
13
|
+
creator: string;
|
|
14
|
+
genre?: string;
|
|
15
|
+
tags?: string[];
|
|
16
|
+
tracks: PlaylistTrack[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* PlaylistTrack - Single source of truth for a track
|
|
20
|
+
* Result of merging "Outer Shell" (Blockchain Data) with "Inner Core" (Parsed Metadata)
|
|
21
|
+
*/
|
|
22
|
+
export interface PlaylistTrack {
|
|
23
|
+
id: string;
|
|
24
|
+
uuid: string;
|
|
25
|
+
playlist_index: number;
|
|
26
|
+
chain_name: string;
|
|
27
|
+
token_address?: string;
|
|
28
|
+
token_id?: string;
|
|
29
|
+
tx_id?: string;
|
|
30
|
+
platform: string;
|
|
31
|
+
title: string;
|
|
32
|
+
artist: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
album?: string;
|
|
35
|
+
image_url: string;
|
|
36
|
+
/** Optional thumbnail URL extracted from image_thumb or image_thumb_url fields */
|
|
37
|
+
image_thumb_url?: string;
|
|
38
|
+
audio_url: string;
|
|
39
|
+
/** Optional uncompressed audio URL for high-fidelity playback */
|
|
40
|
+
audio_url_lossless?: string;
|
|
41
|
+
duration: number;
|
|
42
|
+
genre: string;
|
|
43
|
+
tags: string[];
|
|
44
|
+
bpm?: number;
|
|
45
|
+
key?: string;
|
|
46
|
+
attributes?: Record<string, string | number>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* RawArweavePlaylist - The raw input schema
|
|
50
|
+
* This is what the engine receives from Arweave before parsing
|
|
51
|
+
*/
|
|
52
|
+
export interface RawArweavePlaylist {
|
|
53
|
+
name: string;
|
|
54
|
+
image: string;
|
|
55
|
+
creator: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
genre?: string;
|
|
58
|
+
tags?: string[];
|
|
59
|
+
tracks: Array<{
|
|
60
|
+
chain_name: string;
|
|
61
|
+
token_address?: string;
|
|
62
|
+
token_id?: string;
|
|
63
|
+
tx_id?: string;
|
|
64
|
+
platform: string;
|
|
65
|
+
id?: string;
|
|
66
|
+
uuid?: string;
|
|
67
|
+
metadata: string;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=Playlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Playlist.d.ts","sourceRoot":"","sources":["../../../src/core/types/Playlist.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAE/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAGhB,MAAM,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAE1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IAGjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAGjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QAEV,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QAGd,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACN"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prestige System Types
|
|
3
|
+
*
|
|
4
|
+
* The Prestige System allows players to reset their character after mastering a track
|
|
5
|
+
* in exchange for a visual badge upgrade. Uses 1.5x scaling per prestige level for
|
|
6
|
+
* both plays AND XP requirements.
|
|
7
|
+
*
|
|
8
|
+
* Mastery Requirements (Dual System):
|
|
9
|
+
* - Must meet BOTH plays AND XP thresholds to unlock mastery
|
|
10
|
+
* - Base: 10 plays + 1,000 XP
|
|
11
|
+
* - 1.5x scaling per prestige level
|
|
12
|
+
* - Dual requirement prevents "cheesing" (play/pause spam) since XP requires actual engagement
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Prestige level type (0-10, where 0 = no prestige, 1-10 = Roman numerals I-X)
|
|
16
|
+
*/
|
|
17
|
+
export type PrestigeLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
|
|
18
|
+
/**
|
|
19
|
+
* Roman numeral representations for prestige levels
|
|
20
|
+
*/
|
|
21
|
+
export declare const PRESTIGE_ROMAN_NUMERALS: Record<PrestigeLevel, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Maximum prestige level achievable
|
|
24
|
+
*/
|
|
25
|
+
export declare const MAX_PRESTIGE_LEVEL: 10;
|
|
26
|
+
/**
|
|
27
|
+
* Base number of plays required to master a track at prestige level 0
|
|
28
|
+
*/
|
|
29
|
+
export declare const BASE_PLAYS_THRESHOLD: 10;
|
|
30
|
+
/**
|
|
31
|
+
* Base XP required to master a track at prestige level 0
|
|
32
|
+
*/
|
|
33
|
+
export declare const BASE_XP_THRESHOLD: 1000;
|
|
34
|
+
/**
|
|
35
|
+
* Scaling factor per prestige level (1.5x)
|
|
36
|
+
*/
|
|
37
|
+
export declare const PRESTIGE_SCALING_FACTOR: 1.5;
|
|
38
|
+
/**
|
|
39
|
+
* Custom thresholds for a prestige level (allows overriding defaults)
|
|
40
|
+
* null means use calculated value, undefined means no override set
|
|
41
|
+
*/
|
|
42
|
+
export interface CustomThresholds {
|
|
43
|
+
/** Custom plays threshold, or null to use calculated value */
|
|
44
|
+
playsThreshold?: number | null;
|
|
45
|
+
/** Custom XP threshold, or null to use calculated value */
|
|
46
|
+
xpThreshold?: number | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Complete prestige information for a character/track combination
|
|
50
|
+
*/
|
|
51
|
+
export interface PrestigeInfo {
|
|
52
|
+
/** Current prestige level (0-10) */
|
|
53
|
+
prestigeLevel: PrestigeLevel;
|
|
54
|
+
/** Current number of plays for this track */
|
|
55
|
+
currentPlays: number;
|
|
56
|
+
/** Current XP earned for this track */
|
|
57
|
+
currentXP: number;
|
|
58
|
+
/** Required plays to master at current prestige level */
|
|
59
|
+
playsThreshold: number;
|
|
60
|
+
/** Required XP to master at current prestige level */
|
|
61
|
+
xpThreshold: number;
|
|
62
|
+
/** Progress toward plays requirement (0-1) */
|
|
63
|
+
playsProgress: number;
|
|
64
|
+
/** Progress toward XP requirement (0-1) */
|
|
65
|
+
xpProgress: number;
|
|
66
|
+
/** Whether track is mastered (meets BOTH plays AND XP thresholds) */
|
|
67
|
+
isMastered: boolean;
|
|
68
|
+
/** Whether character can prestige (mastered AND not at max prestige) */
|
|
69
|
+
canPrestige: boolean;
|
|
70
|
+
/** Whether character is at max prestige level */
|
|
71
|
+
isMaxPrestige: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Result of a prestige operation
|
|
75
|
+
*/
|
|
76
|
+
export interface PrestigeResult {
|
|
77
|
+
/** Whether the prestige operation succeeded */
|
|
78
|
+
success: boolean;
|
|
79
|
+
/** New prestige level after operation */
|
|
80
|
+
newPrestigeLevel: PrestigeLevel;
|
|
81
|
+
/** Previous prestige level before operation */
|
|
82
|
+
previousPrestigeLevel: PrestigeLevel;
|
|
83
|
+
/** Human-readable result message */
|
|
84
|
+
message: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Type guard to check if a value is a valid PrestigeLevel
|
|
88
|
+
*/
|
|
89
|
+
export declare function isPrestigeLevel(value: unknown): value is PrestigeLevel;
|
|
90
|
+
/**
|
|
91
|
+
* Convert a number to a PrestigeLevel (clamped to valid range)
|
|
92
|
+
*/
|
|
93
|
+
export declare function toPrestigeLevel(value: number): PrestigeLevel;
|
|
94
|
+
//# sourceMappingURL=Prestige.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Prestige.d.ts","sourceRoot":"","sources":["../../../src/core/types/Prestige.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAYxD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAG,EAAW,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAG,EAAW,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAG,IAAa,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAG,GAAY,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,oCAAoC;IACpC,aAAa,EAAE,aAAa,CAAC;IAC7B,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,UAAU,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,gBAAgB,EAAE,aAAa,CAAC;IAChC,+CAA+C;IAC/C,qBAAqB,EAAE,aAAa,CAAC;IACrC,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAKtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAG5D"}
|