pogo-data-generator
Version:
Pokemon GO project data generator
604 lines (603 loc) • 24.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = generate;
exports.invasions = invasions;
const base_1 = __importDefault(require("./base"));
const Apk_1 = __importDefault(require("./classes/Apk"));
const Invasion_1 = __importDefault(require("./classes/Invasion"));
const Item_1 = __importDefault(require("./classes/Item"));
const LocationCards_1 = __importDefault(require("./classes/LocationCards"));
const Masterfile_1 = __importDefault(require("./classes/Masterfile"));
const Misc_1 = __importDefault(require("./classes/Misc"));
const Move_1 = __importDefault(require("./classes/Move"));
const PokeApi_1 = __importDefault(require("./classes/PokeApi"));
const Pokemon_1 = __importDefault(require("./classes/Pokemon"));
const Quest_1 = __importDefault(require("./classes/Quest"));
const Translations_1 = __importDefault(require("./classes/Translations"));
const Types_1 = __importDefault(require("./classes/Types"));
const Weather_1 = __importDefault(require("./classes/Weather"));
async function getApkTexts(apk, apkCache) {
const latestFilename = await apk.getLatestApkFilename();
if (!latestFilename) {
return {};
}
if (apkCache) {
const cached = await apkCache.load(latestFilename);
if (cached) {
return cached;
}
}
await apk.fetchApk(latestFilename);
await apk.extractTexts();
apk.cleanup();
if (apkCache && apk.apkFilename) {
await apkCache.save(apk.apkFilename, apk.texts);
}
return apk.texts;
}
async function generate({ template, url, translationApkUrl, translationRemoteUrl, raw, pokeApi, apkCache, test, pokeApiBaseUrl, } = {}) {
const final = {};
const urlToFetch = url ||
'https://raw.githubusercontent.com/alexelgt/game_masters/refs/heads/master/GAME_MASTER.json';
const { pokemon, types, costumes, moves, items, questTypes, questConditions, questRewardTypes, invasions, weather, translations, raids, routeTypes, teams, locationCards, } = Masterfile_1.default.templateMerger(template || base_1.default, base_1.default);
const localeCheck = translations.enabled && translations.options.masterfileLocale;
const AllPokemon = new Pokemon_1.default(pokemon.options);
const AllItems = new Item_1.default(items.options);
const AllMoves = new Move_1.default();
const AllQuests = new Quest_1.default();
const AllInvasions = new Invasion_1.default(invasions.options);
const AllTypes = new Types_1.default();
const AllWeather = new Weather_1.default();
const AllTranslations = new Translations_1.default(translations.options, translationApkUrl, translationRemoteUrl);
const AllPokeApi = new PokeApi_1.default(pokeApiBaseUrl);
const AllMisc = new Misc_1.default();
const AllLocationCards = new LocationCards_1.default(locationCards.options);
const apk = new Apk_1.default();
const enabledLocales = Object.values(translations.locales).filter(Boolean);
AllMisc.parseRaidLevels();
AllMisc.parseRouteTypes();
AllMisc.parseTeams();
if (pokeApi === true) {
await AllPokeApi.setMaxPokemonId();
AllPokemon.generations = await AllPokeApi.getGenerations();
}
if (translations.enabled && enabledLocales.length > 0) {
AllTranslations.fromApk = await getApkTexts(apk, apkCache);
}
const data = await AllPokemon.fetch(urlToFetch);
AllPokemon.addSmeargleMovesSettings({
templateId: 'SMEARGLE_MOVES_SETTINGS',
data: {
templateId: 'SMEARGLE_MOVES_SETTINGS',
smeargleMovesSettings: {
quickMoves: [
'TACKLE_FAST',
'FURY_CUTTER_FAST',
'BUG_BITE_FAST',
'BITE_FAST',
'SUCKER_PUNCH_FAST',
'DRAGON_BREATH_FAST',
'THUNDER_SHOCK_FAST',
'SPARK_FAST',
'LOW_KICK_FAST',
'KARATE_CHOP_FAST',
'EMBER_FAST',
'WING_ATTACK_FAST',
'PECK_FAST',
'LICK_FAST',
'SHADOW_CLAW_FAST',
'VINE_WHIP_FAST',
'RAZOR_LEAF_FAST',
'MUD_SHOT_FAST',
'ICE_SHARD_FAST',
'FROST_BREATH_FAST',
'QUICK_ATTACK_FAST',
'SCRATCH_FAST',
'POUND_FAST',
'CUT_FAST',
'POISON_JAB_FAST',
'ACID_FAST',
'PSYCHO_CUT_FAST',
'ROCK_THROW_FAST',
'METAL_CLAW_FAST',
'BULLET_PUNCH_FAST',
'WATER_GUN_FAST',
'SPLASH_FAST',
'MUD_SLAP_FAST',
'ZEN_HEADBUTT_FAST',
'CONFUSION_FAST',
'POISON_STING_FAST',
'BUBBLE_FAST',
'FEINT_ATTACK_FAST',
'STEEL_WING_FAST',
'FIRE_FANG_FAST',
'ROCK_SMASH_FAST',
'COUNTER_FAST',
'POWDER_SNOW_FAST',
'CHARGE_BEAM_FAST',
'VOLT_SWITCH_FAST',
'DRAGON_TAIL_FAST',
'AIR_SLASH_FAST',
'INFESTATION_FAST',
'STRUGGLE_BUG_FAST',
'ASTONISH_FAST',
'HEX_FAST',
'IRON_TAIL_FAST',
'FIRE_SPIN_FAST',
'BULLET_SEED_FAST',
'EXTRASENSORY_FAST',
'SNARL_FAST',
'HIDDEN_POWER_FAST',
'TAKE_DOWN_FAST',
'WATERFALL_FAST',
'YAWN_FAST',
'PRESENT_FAST',
'SMACK_DOWN_FAST',
'CHARM_FAST',
'LOCK_ON_FAST',
'THUNDER_FANG_FAST',
'ICE_FANG_FAST',
'GUST_FAST',
'INCINERATE_FAST',
],
cinematicMoves: [
'STRUGGLE',
'WRAP',
'HYPER_BEAM',
'DARK_PULSE',
'SLUDGE',
'VICE_GRIP',
'FLAME_WHEEL',
'MEGAHORN',
'FLAMETHROWER',
'DIG',
'CROSS_CHOP',
'PSYBEAM',
'EARTHQUAKE',
'STONE_EDGE',
'ICE_PUNCH',
'DISCHARGE',
'FLASH_CANNON',
'DRILL_PECK',
'ICE_BEAM',
'BLIZZARD',
'HEAT_WAVE',
'AERIAL_ACE',
'DRILL_RUN',
'PETAL_BLIZZARD',
'BUG_BUZZ',
'POISON_FANG',
'NIGHT_SLASH',
'BUBBLE_BEAM',
'SUBMISSION',
'LOW_SWEEP',
'AQUA_JET',
'AQUA_TAIL',
'SEED_BOMB',
'PSYSHOCK',
'ANCIENT_POWER',
'ROCK_TOMB',
'ROCK_SLIDE',
'POWER_GEM',
'SHADOW_SNEAK',
'SHADOW_PUNCH',
'OMINOUS_WIND',
'SHADOW_BALL',
'MAGNET_BOMB',
'IRON_HEAD',
'THUNDER_PUNCH',
'THUNDER',
'THUNDERBOLT',
'TWISTER',
'DRAGON_PULSE',
'DRAGON_CLAW',
'DISARMING_VOICE',
'DRAINING_KISS',
'DAZZLING_GLEAM',
'MOONBLAST',
'PLAY_ROUGH',
'CROSS_POISON',
'SLUDGE_BOMB',
'SLUDGE_WAVE',
'GUNK_SHOT',
'BONE_CLUB',
'BULLDOZE',
'MUD_BOMB',
'SIGNAL_BEAM',
'X_SCISSOR',
'FLAME_CHARGE',
'FLAME_BURST',
'FIRE_BLAST',
'WATER_PULSE',
'HYDRO_PUMP',
'PSYCHIC',
'ICY_WIND',
'FIRE_PUNCH',
'SOLAR_BEAM',
'LEAF_BLADE',
'POWER_WHIP',
'AIR_CUTTER',
'HURRICANE',
'BRICK_BREAK',
'SWIFT',
'HORN_ATTACK',
'STOMP',
'HYPER_FANG',
'BODY_SLAM',
'CLOSE_COMBAT',
'DYNAMIC_PUNCH',
'FOCUS_BLAST',
'AURORA_BEAM',
'WILD_CHARGE',
'ZAP_CANNON',
'AVALANCHE',
'BRAVE_BIRD',
'SKY_ATTACK',
'SAND_TOMB',
'ROCK_BLAST',
'SILVER_WIND',
'NIGHT_SHADE',
'GYRO_BALL',
'HEAVY_SLAM',
'OVERHEAT',
'GRASS_KNOT',
'ENERGY_BALL',
'FUTURESIGHT',
'MIRROR_COAT',
'OUTRAGE',
'CRUNCH',
'FOUL_PLAY',
'SURF',
'DRACO_METEOR',
'PSYCHO_BOOST',
'FRENZY_PLANT',
'BLAST_BURN',
'HYDRO_CANNON',
'LAST_RESORT',
'METEOR_MASH',
'BRINE',
'SCALD',
'PSYSTRIKE',
'DOOM_DESIRE',
'WEATHER_BALL_FIRE',
'WEATHER_BALL_ICE',
'WEATHER_BALL_WATER',
'SKULL_BASH',
'ACID_SPRAY',
'EARTH_POWER',
'CRABHAMMER',
'LUNGE',
'OCTAZOOKA',
'MIRROR_SHOT',
'SUPER_POWER',
'FELL_STINGER',
'LEAF_TORNADO',
'SHADOW_BONE',
'MUDDY_WATER',
'BLAZE_KICK',
'POWER_UP_PUNCH',
'GIGA_IMPACT',
'SYNCHRONOISE',
'SACRED_SWORD',
'FLYING_PRESS',
'AURA_SPHERE',
'PAYBACK',
'ROCK_WRECKER',
'AEROBLAST',
'TECHNO_BLAST_NORMAL',
'TECHNO_BLAST_BURN',
'TECHNO_BLAST_CHILL',
'TECHNO_BLAST_WATER',
'TECHNO_BLAST_SHOCK',
'FLY',
'V_CREATE',
'TRI_ATTACK',
],
},
},
});
for (let i = 0; i < data.length; i += 1) {
if (data[i]) {
if (data[i].data.formSettings) {
AllPokemon.addForm(data[i]);
}
else if (data[i].data.pokemonSettings) {
AllPokemon.addPokemon(data[i]);
}
else if (data[i].data.sourdoughMoveMappingSettings) {
AllPokemon.addSourdoughMoveMappings(data[i]);
}
else if (data[i].data.smeargleMovesSettings) {
AllPokemon.addSmeargleMovesSettings(data[i]);
}
else if (data[i].data.itemSettings) {
AllItems.addItem(data[i]);
}
else if (data[i].data.moveSettings) {
AllMoves.addMoveSettings(data[i]);
}
else if (data[i].data.combatMove) {
AllMoves.addCombatMove(data[i]);
}
else if (data[i].templateId === 'COMBAT_LEAGUE_VS_SEEKER_GREAT_LITTLE') {
AllPokemon.lcBanList = new Set(data[i].data.combatLeague.bannedPokemon);
}
else if (data[i].data.weatherAffinities) {
AllWeather.addWeather(data[i]);
}
else if (data[i].data.evolutionQuestTemplate) {
AllPokemon.addEvolutionQuest(data[i]);
}
else if (data[i].templateId === 'COMBAT_LEAGUE_VS_SEEKER_LITTLE_JUNGLE') {
AllPokemon.jungleCup(data[i]);
}
else if (data[i].data.pokemonExtendedSettings) {
AllPokemon.addExtendedStats(data[i]);
}
else if (data[i].data.locationCardSettings) {
AllLocationCards.addLocationCard(data[i]);
}
}
}
AllTypes.buildTypes();
AllPokemon.cleanExtendedStats();
AllPokemon.missingPokemon();
AllPokemon.parseCostumes();
if (pokemon.options.includeProtos || translations.options.includeProtos) {
AllPokemon.generateProtoForms();
}
AllPokemon.sortForms();
if (pokeApi === true) {
AllPokeApi.moves = AllMoves.parsedMoves;
await AllPokeApi.baseStatsApi(AllPokemon.parsedPokemon, pokemon.options.pokeApiIds);
await AllPokeApi.extraPokemon(AllPokemon.parsedPokemon);
await AllPokeApi.evoApi(AllPokemon.evolvedPokemon, AllPokemon.parsedPokemon);
await AllPokeApi.tempEvoApi(AllPokemon.parsedPokemon);
await AllPokeApi.typesApi();
}
const getDataSource = async (category) => {
if (pokeApi === true)
return AllPokeApi[category];
if (pokeApi)
return pokeApi[category];
return AllPokeApi.fetch(`https://raw.githubusercontent.com/WatWowMap/Pogo-Data-Generator/refs/heads/main/static/${category}.json`);
};
AllTypes.parsePokeApi(await getDataSource('types'));
if (pokemon.options.includeEstimatedPokemon) {
AllPokemon.parsePokeApi(await getDataSource('baseStats'), await getDataSource('tempEvos'));
}
if (pokemon.template.little) {
AllPokemon.littleCup();
}
if (pokemon.template.jungle) {
AllPokemon.jungleEligibility();
}
if (pokemon.options.processFormsSeparately) {
AllPokemon.makeFormsSeparate();
}
AllQuests.addQuest('types');
AllQuests.addQuest('rewards');
AllQuests.addQuest('conditions');
if (moves.options.includeProtos) {
AllMoves.protoMoves();
}
AllWeather.buildWeather();
if (invasions.enabled ||
translations.template.characters) {
const invasionData = await AllInvasions.fetch('https://raw.githubusercontent.com/WatWowMap/event-info/refs/heads/main/grunts/classic.json');
AllInvasions.invasions(AllInvasions.mergeInvasions(invasionData, await AllInvasions.customInvasions()));
}
if (translations.enabled) {
const availableManualTranslations = await AllTranslations.fetch('https://raw.githubusercontent.com/WatWowMap/pogo-translations/refs/heads/master/index.json');
await Promise.all(Object.entries(translations.locales).map(async (langCode) => {
const [localeCode, bool] = langCode;
if (bool) {
await AllTranslations.fetchTranslations(localeCode, availableManualTranslations);
if (translations.template.misc) {
AllTranslations.misc(localeCode);
}
if (translations.template.types) {
AllTranslations.types(localeCode);
}
if (translations.template.pokemon) {
AllTranslations.pokemon(localeCode, translations.template.pokemon, AllPokemon.parsedPokemon, AllPokemon.parsedForms, pokemon.options.unsetFormName);
}
if (translations.template.moves) {
AllTranslations.moves(localeCode);
}
if (translations.template.items) {
AllTranslations.items(localeCode);
}
if (translations.template.characters) {
AllTranslations.characters(localeCode, AllInvasions.parsedInvasions);
}
if (translations.template.gruntQuotes) {
AllTranslations.gruntQuotes(localeCode);
}
if (translations.template.weather) {
AllTranslations.weather(localeCode);
}
if (translations.template.pokemonCategories) {
AllTranslations.pokemonCategories(localeCode);
}
if (translations.template.bonuses) {
AllTranslations.bonuses(localeCode);
}
if (translations.template.quests) {
AllTranslations.quests(localeCode, {
questTypes: AllQuests.parsedQuestTypes,
questConditions: AllQuests.parsedConditions,
questRewardTypes: AllQuests.parsedRewardTypes,
});
AllTranslations.parseEvoQuests(localeCode, AllPokemon.evolutionQuests);
}
}
}));
Object.entries(translations.locales).forEach((langCode) => {
const [localeCode, bool] = langCode;
if (bool) {
AllTranslations.mergeManualTranslations(localeCode);
if (typeof translations.options.useLanguageAsRef === 'string') {
AllTranslations.languageRef(localeCode);
}
if (translations.options.mergeCategories) {
AllTranslations.mergeCategories(localeCode);
}
}
});
if (localeCheck) {
AllTranslations.translateMasterfile({
pokemon: AllPokemon.parsedPokeForms || AllPokemon.parsedPokemon,
evolutionQuests: AllPokemon.evolutionQuests,
moves: AllMoves.parsedMoves,
items: AllItems.parsedItems,
forms: AllPokemon.parsedForms,
types: AllTypes.parsedTypes,
weather: AllWeather.parsedWeather,
}, translations.options.masterfileLocale, pokemon.options.processFormsSeparately);
}
}
const localPokemon = localeCheck
? AllTranslations.masterfile.pokemon
: AllPokemon.parsedPokeForms || AllPokemon.parsedPokemon;
const localTypes = localeCheck
? AllTranslations.masterfile.types
: AllTypes.parsedTypes;
const localMoves = localeCheck
? AllTranslations.masterfile.moves
: AllMoves.parsedMoves;
const localForms = localeCheck
? AllTranslations.masterfile.forms
: AllPokemon.parsedForms;
const localItems = localeCheck
? AllTranslations.masterfile.items
: AllItems.parsedItems;
const localWeather = localeCheck
? AllTranslations.masterfile.weather
: AllWeather.parsedWeather;
const localLocationCards = AllLocationCards.parsedLocationCards;
const localEvolutionQuests = localeCheck
? AllTranslations.masterfile.evolutionQuests
: AllPokemon.evolutionQuests;
if (pokemon.enabled) {
final[pokemon.options.topLevelName || 'pokemon'] = raw
? localPokemon
: AllPokemon.templater(localPokemon, pokemon, {
quickMoves: localMoves,
chargedMoves: localMoves,
eliteQuickMoves: localMoves,
eliteChargedMoves: localMoves,
types: localTypes,
forms: localForms,
availableForms: localForms,
targetForm: localForms,
itemRequirement: localItems,
questRequirement: localEvolutionQuests,
existingMoves: localMoves,
replacementMoves: localMoves,
requiredMoves: localMoves,
fusionMove1: localMoves,
fusionMove2: localMoves,
existingLocationCard: localLocationCards,
replacementLocationCard: localLocationCards,
basePokemonLocationCard: localLocationCards,
componentPokemonLocationCard: localLocationCards,
fusionPokemonLocationCard: localLocationCards,
});
if (pokemon.options.includeRawForms || raw) {
final.forms = localForms;
}
}
if (types.enabled) {
final[types.options.topLevelName || 'types'] = raw
? localTypes
: AllTypes.templater(localTypes, types, {
strengths: localTypes,
weaknesses: localTypes,
veryWeakAgainst: localTypes,
immunes: localTypes,
weakAgainst: localTypes,
resistances: localTypes,
});
}
if (costumes.enabled) {
final[costumes.options.topLevelName || 'costumes'] = raw
? AllPokemon.parsedCostumes
: AllPokemon.templater(AllPokemon.parsedCostumes, costumes);
}
if (items.enabled) {
final[items.options.topLevelName || 'items'] = raw
? localItems
: AllItems.templater(localItems, items);
}
if (moves.enabled) {
final[moves.options.topLevelName || 'moves'] = raw
? localMoves
: AllMoves.templater(localMoves, moves, {
type: localTypes,
});
}
if (questTypes.enabled) {
final[questTypes.options.topLevelName || 'questTypes'] = raw
? AllQuests.parsedQuestTypes
: AllQuests.templater(AllQuests.parsedQuestTypes, questTypes);
}
if (questRewardTypes.enabled) {
final[questRewardTypes.options.topLevelName || 'questRewardTypes'] = raw
? AllQuests.parsedRewardTypes
: AllQuests.templater(AllQuests.parsedRewardTypes, questRewardTypes);
}
if (questConditions.enabled) {
final[questConditions.options.topLevelName || 'questConditions'] = raw
? AllQuests.parsedConditions
: AllQuests.templater(AllQuests.parsedConditions, questConditions);
}
if (invasions.enabled) {
final[invasions.options.topLevelName || 'invasions'] = raw
? AllInvasions.parsedInvasions
: AllInvasions.templater(AllInvasions.parsedInvasions, invasions);
}
if (weather.enabled) {
final[weather.options.topLevelName || 'weather'] = raw
? localWeather
: AllWeather.templater(localWeather, weather, { types: localTypes });
}
if (translations.enabled) {
final[translations.options.topLevelName || 'translations'] =
AllTranslations.parsedTranslations;
}
if (raids.enabled) {
final[raids.options.topLevelName || 'raids'] = raw
? AllMisc.raidLevels
: AllMisc.templater(AllMisc.raidLevels, raids);
}
if (locationCards.enabled) {
final[locationCards.options.topLevelName || 'locationCards'] = raw
? AllLocationCards.parsedLocationCards
: AllLocationCards.templater(AllLocationCards.parsedLocationCards, locationCards);
}
if (routeTypes.enabled) {
final[routeTypes.options.topLevelName || 'routeTypes'] = raw
? AllMisc.routeTypes
: AllMisc.templater(AllMisc.routeTypes, routeTypes);
}
if (teams.enabled) {
final[teams.options.topLevelName || 'teams'] = raw
? AllMisc.teams
: AllMisc.templater(AllMisc.teams, teams);
}
if (test && pokeApi === true) {
final.AllPokeApi = AllPokeApi;
}
return final;
}
async function invasions({ template, } = {}) {
const finalTemplate = template || base_1.default.invasions;
const AllInvasions = new Invasion_1.default(finalTemplate.options);
const invasionData = await AllInvasions.fetch('https://raw.githubusercontent.com/WatWowMap/event-info/refs/heads/main/grunts/classic.json');
AllInvasions.invasions(AllInvasions.mergeInvasions(invasionData, await AllInvasions.customInvasions(true)));
return AllInvasions.templater(AllInvasions.parsedInvasions, finalTemplate);
}