Modifier logging

This commit is contained in:
RedstonewolfX 2024-09-26 11:35:05 -04:00
parent c012e83e33
commit e4f25e44c5
2 changed files with 33 additions and 18 deletions

View File

@ -34,6 +34,8 @@ const useMaxWeightForOutput = false;
type Modifier = Modifiers.Modifier; type Modifier = Modifiers.Modifier;
const doModifierLogging: boolean = false;
export enum ModifierPoolType { export enum ModifierPoolType {
PLAYER, PLAYER,
WILD, WILD,
@ -1035,7 +1037,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator {
return new AttackTypeBoosterModifierType(pregenArgs[0] as Type, 20); return new AttackTypeBoosterModifierType(pregenArgs[0] as Type, 20);
} }
console.log("Generating item: Attack Type Booster") if (doModifierLogging) console.log("Generating item: Attack Type Booster")
const attackMoveTypes = party.map(p => p.getMoveset().map(m => m?.getMove()).filter(m => m instanceof AttackMove).map(m => m.type)).flat(); const attackMoveTypes = party.map(p => p.getMoveset().map(m => m?.getMove()).filter(m => m instanceof AttackMove).map(m => m.type)).flat();
if (!attackMoveTypes.length) { if (!attackMoveTypes.length) {
@ -1063,7 +1065,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator {
let type: Type; let type: Type;
const randInt = Utils.randSeedInt(totalWeight, undefined, "Generating a move type booster"); const randInt = Utils.randSeedInt(totalWeight, undefined, doModifierLogging ? "Generating a move type booster" : "%HIDE");
let weight = 0; let weight = 0;
var fullweights: integer[] = [] var fullweights: integer[] = []
@ -1104,7 +1106,7 @@ class BaseStatBoosterModifierTypeGenerator extends ModifierTypeGenerator {
if (pregenArgs) { if (pregenArgs) {
return new BaseStatBoosterModifierType(pregenArgs[0]); return new BaseStatBoosterModifierType(pregenArgs[0]);
} }
const randStat: PermanentStat = Utils.randSeedInt(Stat.SPD + 1, undefined, "Randomly generating a Vitamin"); const randStat: PermanentStat = Utils.randSeedInt(Stat.SPD + 1, undefined, doModifierLogging ? "Randomly generating a Vitamin" : "%HIDE");
return new BaseStatBoosterModifierType(randStat); return new BaseStatBoosterModifierType(randStat);
}); });
} }
@ -1125,7 +1127,7 @@ class TempStatStageBoosterModifierTypeGenerator extends ModifierTypeGenerator {
if (pregenArgs && (pregenArgs.length === 1) && TEMP_BATTLE_STATS.includes(pregenArgs[0])) { if (pregenArgs && (pregenArgs.length === 1) && TEMP_BATTLE_STATS.includes(pregenArgs[0])) {
return new TempStatStageBoosterModifierType(pregenArgs[0]); return new TempStatStageBoosterModifierType(pregenArgs[0]);
} }
const randStat: TempBattleStat = Utils.randSeedInt(Stat.ACC, Stat.ATK, "Randomly choosing an X item"); const randStat: TempBattleStat = Utils.randSeedInt(Stat.ACC, Stat.ATK, doModifierLogging ? "Randomly choosing an X item" : "%HIDE");
return new TempStatStageBoosterModifierType(randStat); return new TempStatStageBoosterModifierType(randStat);
}); });
} }
@ -1190,7 +1192,7 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator {
} }
if (totalWeight !== 0) { if (totalWeight !== 0) {
const randInt = Utils.randSeedInt(totalWeight, 1, "Randomly choosing a species booster"); const randInt = Utils.randSeedInt(totalWeight, 1, doModifierLogging ? "Randomly choosing a species booster" : "HIDE");
let weight = 0; let weight = 0;
var fullweights: integer[] = [] var fullweights: integer[] = []
@ -1225,7 +1227,7 @@ class TmModifierTypeGenerator extends ModifierTypeGenerator {
return new TmModifierType(pregenArgs[0] as Moves, tier); return new TmModifierType(pregenArgs[0] as Moves, tier);
} }
console.log("Generating item: TM (Tier: " + Utils.getEnumKeys(ModifierTier)[tier].toLowerCase() + ")") if (doModifierLogging) console.log("Generating item: TM (Tier: " + Utils.getEnumKeys(ModifierTier)[tier].toLowerCase() + ")")
const partyMemberCompatibleTms = party.map(p => (p as PlayerPokemon).compatibleTms.filter(tm => !p.moveset.find(m => m?.moveId === tm))); const partyMemberCompatibleTms = party.map(p => (p as PlayerPokemon).compatibleTms.filter(tm => !p.moveset.find(m => m?.moveId === tm)));
const tierUniqueCompatibleTms = partyMemberCompatibleTms.flat().filter(tm => tmPoolTiers[tm] === tier).filter(tm => !allMoves[tm].name.endsWith(" (N)")).filter((tm, i, array) => array.indexOf(tm) === i); const tierUniqueCompatibleTms = partyMemberCompatibleTms.flat().filter(tm => tmPoolTiers[tm] === tier).filter(tm => !allMoves[tm].name.endsWith(" (N)")).filter((tm, i, array) => array.indexOf(tm) === i);
@ -1233,7 +1235,7 @@ class TmModifierTypeGenerator extends ModifierTypeGenerator {
return null; return null;
} }
//console.log(tierUniqueCompatibleTms.map((v, i) => i == randTmIndex ? `> ${Utils.getEnumKeys(Moves)[v].toUpperCase() + Utils.getEnumKeys(Moves)[v].substring(1).toLowerCase()} <` : `${Utils.getEnumKeys(Moves)[v].toUpperCase() + Utils.getEnumKeys(Moves)[v].substring(1).toLowerCase()}`)) //console.log(tierUniqueCompatibleTms.map((v, i) => i == randTmIndex ? `> ${Utils.getEnumKeys(Moves)[v].toUpperCase() + Utils.getEnumKeys(Moves)[v].substring(1).toLowerCase()} <` : `${Utils.getEnumKeys(Moves)[v].toUpperCase() + Utils.getEnumKeys(Moves)[v].substring(1).toLowerCase()}`))
const randTmIndex = Utils.randSeedInt(tierUniqueCompatibleTms.length, undefined, "Choosing a TM to give"); const randTmIndex = Utils.randSeedInt(tierUniqueCompatibleTms.length, undefined, doModifierLogging ? "Choosing a TM to give" : "%HIDE");
return new TmModifierType(tierUniqueCompatibleTms[randTmIndex], tier); return new TmModifierType(tierUniqueCompatibleTms[randTmIndex], tier);
}); });
} }
@ -1246,7 +1248,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator {
return new EvolutionItemModifierType(pregenArgs[0] as EvolutionItem); return new EvolutionItemModifierType(pregenArgs[0] as EvolutionItem);
} }
console.log("Generating item: Evolution Item") if (doModifierLogging) console.log("Generating item: Evolution Item")
const evolutionItemPool = [ const evolutionItemPool = [
party.filter(p => pokemonEvolutions.hasOwnProperty(p.species.speciesId)).map(p => { party.filter(p => pokemonEvolutions.hasOwnProperty(p.species.speciesId)).map(p => {
@ -1263,7 +1265,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator {
return null; return null;
} }
return new EvolutionItemModifierType(evolutionItemPool[Utils.randSeedInt(evolutionItemPool.length, undefined, "Choosing an evolution item")]!); // TODO: is the bang correct? return new EvolutionItemModifierType(evolutionItemPool[Utils.randSeedInt(evolutionItemPool.length, undefined, doModifierLogging ? "Choosing an evolution item" : "%HIDE")]!); // TODO: is the bang correct?
}); });
} }
} }
@ -1275,7 +1277,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator {
return new FormChangeItemModifierType(pregenArgs[0] as FormChangeItem); return new FormChangeItemModifierType(pregenArgs[0] as FormChangeItem);
} }
console.log("Generating item: Form Change Item") if (doModifierLogging) console.log("Generating item: Form Change Item")
const formChangeItemPool = [...new Set(party.filter(p => pokemonFormChanges.hasOwnProperty(p.species.speciesId)).map(p => { const formChangeItemPool = [...new Set(party.filter(p => pokemonFormChanges.hasOwnProperty(p.species.speciesId)).map(p => {
const formChanges = pokemonFormChanges[p.species.speciesId]; const formChanges = pokemonFormChanges[p.species.speciesId];
@ -1319,7 +1321,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator {
return null; return null;
} }
return new FormChangeItemModifierType(formChangeItemPool[Utils.randSeedInt(formChangeItemPool.length, undefined, "Choosing a form change item")]); return new FormChangeItemModifierType(formChangeItemPool[Utils.randSeedInt(formChangeItemPool.length, undefined, doModifierLogging ? "Choosing a form change item" : "%HIDE")]);
}); });
} }
} }
@ -2580,6 +2582,12 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo
let r = 0; let r = 0;
const aT = candidate?.alternates const aT = candidate?.alternates
const aT2 = candidate?.advancedAlternates const aT2 = candidate?.advancedAlternates
const retryPool: string[] = []
if (candidate) {
retryPool.push(candidate!.type.name)
} else {
retryPool.push("undefined")
}
while (options.length && ++r < retryCount && options.filter(o => o.type?.name === candidate?.type?.name || o.type?.group === candidate?.type?.group).length) { while (options.length && ++r < retryCount && options.filter(o => o.type?.name === candidate?.type?.name || o.type?.group === candidate?.type?.group).length) {
//if (options.filter(o => o.type?.name === candidate?.type?.name)) //if (options.filter(o => o.type?.name === candidate?.type?.name))
//console.error(options.filter(o => o.type?.name === candidate?.type?.name).map((v, q) => v.type.name + " (" + v.type.group + ") - conflicting name").join("\n")) //console.error(options.filter(o => o.type?.name === candidate?.type?.name).map((v, q) => v.type.name + " (" + v.type.group + ") - conflicting name").join("\n"))
@ -2587,17 +2595,23 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo
//console.error(options.filter(o => o.type?.group === candidate?.type?.group).map((v, q) => v.type.name + " (" + v.type.group + ") - conflicting group").join("\n")) //console.error(options.filter(o => o.type?.group === candidate?.type?.group).map((v, q) => v.type.name + " (" + v.type.group + ") - conflicting group").join("\n"))
candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, candidate?.type?.tier, candidate?.upgradeCount, undefined, scene, shutUpBro, generateAltTiers, advanced); candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, candidate?.type?.tier, candidate?.upgradeCount, undefined, scene, shutUpBro, generateAltTiers, advanced);
//console.log(" Retrying - attempt " + r, candidate?.type.name) //console.log(" Retrying - attempt " + r, candidate?.type.name)
if (candidate) {
retryPool.push(candidate!.type.name)
} else {
retryPool.push("undefined")
}
} }
if (options.length && options.filter(o => o.type?.name === candidate?.type?.name || o.type?.group === candidate?.type?.group).length) { if (options.length && options.filter(o => o.type?.name === candidate?.type?.name || o.type?.group === candidate?.type?.group).length) {
console.log(" Item " + (i+1) + "/" + count + " (+" + r + ")", candidate?.type.name, "(Out of retries)") console.log(" Item " + (i+1) + "/" + count + " (" + r + " attempts or more)", candidate?.type.name, retryPool)
} else { } else {
console.log(" Item " + (i+1) + "/" + count + " (+" + r + ")", candidate?.type.name) console.log(" Item " + (i+1) + "/" + count + " (" + r + " attempt" + (r == 1 ? "" : "s") + ")", candidate?.type.name, retryPool)
} }
if (candidate && candidate.alternates == undefined) { if (candidate && candidate.alternates == undefined) {
candidate.alternates = aT candidate.alternates = aT
candidate.advancedAlternates = aT2 candidate.advancedAlternates = aT2
} }
if (candidate) { if (candidate) {
candidate.retriesList = retryPool;
options.push(candidate); options.push(candidate);
} }
}); });
@ -2890,7 +2904,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
const tierThresholds = Object.keys(thresholds[tier]); const tierThresholds = Object.keys(thresholds[tier]);
const totalWeight = parseInt(tierThresholds[tierThresholds.length - 1]); const totalWeight = parseInt(tierThresholds[tierThresholds.length - 1]);
const value = Utils.randSeedInt(totalWeight, undefined, "Weighted modifier selection (total " + totalWeight + ")"); const value = Utils.randSeedInt(totalWeight, undefined, doModifierLogging ? "Weighted modifier selection (total " + totalWeight + ")" : "%HIDE");
let index: integer | undefined; let index: integer | undefined;
for (const t of tierThresholds) { for (const t of tierThresholds) {
const threshold = parseInt(t); const threshold = parseInt(t);
@ -2906,7 +2920,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
if (player) { if (player) {
if (!shutUpBro) { if (!shutUpBro) {
console.log(index, ignoredPoolIndexes[tier].filter(i => i <= index).length, ignoredPoolIndexes[tier].filter(i => i <= index).length) //console.log(index, ignoredPoolIndexes[tier].filter(i => i <= index).length, ignoredPoolIndexes[tier].filter(i => i <= index).length)
//console.log("Index ", index); //console.log("Index ", index);
//console.log("# of ignored items for this tier", ignoredPoolIndexes[tier].filter(i => i <= index).length) //console.log("# of ignored items for this tier", ignoredPoolIndexes[tier].filter(i => i <= index).length)
//console.log("Ignored items for this tier", ignoredPoolIndexes[tier].map((v, i) => [ignoredPoolNames[i], v]).flat()) //console.log("Ignored items for this tier", ignoredPoolIndexes[tier].map((v, i) => [ignoredPoolNames[i], v]).flat())
@ -2922,7 +2936,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
//console.error("Null Modifier - regenerating") //console.error("Null Modifier - regenerating")
return getNewModifierTypeOption(party, poolType, tier, upgradeCount, ++retryCount, scene, shutUpBro, generateAltTiers); return getNewModifierTypeOption(party, poolType, tier, upgradeCount, ++retryCount, scene, shutUpBro, generateAltTiers);
} else { } else {
console.log("Generated type", modifierType) if (doModifierLogging) console.log("Generated type", modifierType)
} }
} }
@ -2998,6 +3012,7 @@ export class ModifierTypeOption {
public alternates?: integer[]; public alternates?: integer[];
public netprice: integer; public netprice: integer;
public advancedAlternates?: string[]; public advancedAlternates?: string[];
public retriesList: string[];
constructor(type: ModifierType, upgradeCount: integer, cost: number = 0) { constructor(type: ModifierType, upgradeCount: integer, cost: number = 0) {
this.type = type; this.type = type;

View File

@ -327,7 +327,7 @@ export class SelectModifierPhase extends BattlePhase {
// costTiers // costTiers
console.log("Rerolls: " + r + (this.costTiers[r] != 0 ? " - ₽" + this.costTiers[r] : "")) console.log("Rerolls: " + r + (this.costTiers[r] != 0 ? " - ₽" + this.costTiers[r] : ""))
mp.forEach((m, i) => { mp.forEach((m, i) => {
console.log(" " + m.type!.name + (m.netprice != this.costTiers[r] ? " - ₽" + m.netprice : "")) console.log(" " + m.type!.name + (m.netprice != this.costTiers[r] ? " - ₽" + m.netprice : "") + " (" + (m.retriesList.length) + " tr" + (m.retriesList.length == 1 ? "y" : "ies") + ")")
if (m.eviolite) { if (m.eviolite) {
console.log(" With Eviolite unlocked: " + m.eviolite.name) console.log(" With Eviolite unlocked: " + m.eviolite.name)
} }
@ -348,7 +348,7 @@ export class SelectModifierPhase extends BattlePhase {
showedLuckFlag = true showedLuckFlag = true
console.log(" Your luck: " + getPartyLuckValue(party) + " (" + getLuckString(getPartyLuckValue(party)) + ")") console.log(" Your luck: " + getPartyLuckValue(party) + " (" + getLuckString(getPartyLuckValue(party)) + ")")
} }
console.log(" At " + j + " luck (" + getLuckString(j) + "): " + LoggerTools.tierNames[currentTier] + "-tier item (failed to generate item)") console.log(" At " + j + " luck (" + getLuckString(j) + "): " + LoggerTools.tierNames[currentTier] + "-tier item")// (failed to generate item)
} }
} }
} }