mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-26 09:19:31 +02:00
Additional fixes
god this was horrible
This commit is contained in:
parent
2c5acf6144
commit
e5a6d8df5d
@ -829,9 +829,9 @@ export default class BattleScene extends SceneBase {
|
||||
return activeOnly ? this.infoToggles.filter(t => t?.isActive()) : this.infoToggles;
|
||||
}
|
||||
|
||||
getPokemonById(pokemonId: integer): Pokemon | null {
|
||||
getPokemonById(pokemonId: integer): Pokemon | undefined {
|
||||
const findInParty = (party: Pokemon[]) => party.find(p => p.id === pokemonId);
|
||||
return (findInParty(this.getParty()) || findInParty(this.getEnemyParty())) ?? null;
|
||||
return (findInParty(this.getParty()) || findInParty(this.getEnemyParty())) || undefined;
|
||||
}
|
||||
|
||||
addPlayerPokemon(species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData, postProcess?: (playerPokemon: PlayerPokemon) => void): PlayerPokemon {
|
||||
@ -1098,10 +1098,13 @@ export default class BattleScene extends SceneBase {
|
||||
|
||||
generatePokemonForBattle(battle: Battle) {
|
||||
var totalBst = 0;
|
||||
battle.enemyLevels.forEach((level, e) => {
|
||||
battle.enemyLevels?.forEach((level, e) => {
|
||||
if (true) {
|
||||
if (battle.battleType === BattleType.TRAINER) {
|
||||
battle.enemyParty[e] = battle.trainer.genPartyMember(e);
|
||||
const P = battle.trainer?.genPartyMember(e)
|
||||
if (P != undefined) {
|
||||
battle.enemyParty[e] = P;
|
||||
}
|
||||
} else {
|
||||
LoggerTools.rarityslot[0] = e
|
||||
const enemySpecies = this.randomSpecies(battle.waveIndex, level, true);
|
||||
|
@ -47,7 +47,7 @@ export default class Battle {
|
||||
public waveIndex: integer;
|
||||
public battleType: BattleType;
|
||||
public battleSpec: BattleSpec;
|
||||
public trainer: Trainer | null;
|
||||
public trainer: Trainer | undefined;
|
||||
public enemyLevels: integer[] | undefined;
|
||||
public enemyParty: EnemyPokemon[];
|
||||
public seenEnemyPartyMemberIds: Set<integer>;
|
||||
@ -74,7 +74,7 @@ export default class Battle {
|
||||
this.gameMode = gameMode;
|
||||
this.waveIndex = waveIndex;
|
||||
this.battleType = battleType;
|
||||
this.trainer = trainer ?? null;
|
||||
this.trainer = trainer ?? undefined;
|
||||
this.initBattleSpec();
|
||||
this.enemyLevels = battleType !== BattleType.TRAINER
|
||||
? new Array(double ? 2 : 1).fill(null).map(() => this.getLevelForWave())
|
||||
@ -357,7 +357,7 @@ export default class Battle {
|
||||
return null;
|
||||
}
|
||||
|
||||
multiInt(scene: BattleScene, out: integer[], count: integer, range: integer, min: integer = 0): integer {
|
||||
multiInt(scene: BattleScene, out: integer[], count: integer, range: integer, min: integer = 0) {
|
||||
if (range <= 1) {
|
||||
return min;
|
||||
}
|
||||
|
169
src/logger.ts
169
src/logger.ts
@ -67,9 +67,9 @@ export const rarityslot = [0, ""]
|
||||
/** Stores a list of the user's battle actions in a turn.
|
||||
*
|
||||
* Its contents are printed to the current wave's actions list, separated by pipes `|`, when the turn begins playing out. */
|
||||
export const Actions = []
|
||||
export const Actions: string[] = []
|
||||
/** Used for enemy attack prediction. Stored here so that it's universally available. */
|
||||
export const enemyPlan = []
|
||||
export const enemyPlan: string[] = []
|
||||
|
||||
// Booleans
|
||||
export const isPreSwitch: Utils.BooleanHolder = new Utils.BooleanHolder(false);
|
||||
@ -89,7 +89,7 @@ export const SheetsMode = new Utils.BooleanHolder(false)
|
||||
*/
|
||||
export function downloadLogByID(i: integer) {
|
||||
console.log(i)
|
||||
var d = JSON.parse(localStorage.getItem(logs[i][1]))
|
||||
var d = JSON.parse(localStorage.getItem(logs[i][1])!)
|
||||
const blob = new Blob([ printDRPD("", "", d as DRPD) ], {type: "text/json"});
|
||||
const link = document.createElement("a");
|
||||
link.href = window.URL.createObjectURL(blob);
|
||||
@ -105,7 +105,7 @@ export function downloadLogByID(i: integer) {
|
||||
*/
|
||||
export function downloadLogByIDToSheet(i: integer) {
|
||||
console.log(i)
|
||||
var d = JSON.parse(localStorage.getItem(logs[i][1]))
|
||||
var d = JSON.parse(localStorage.getItem(logs[i][1])!)
|
||||
SheetsMode.value = true;
|
||||
const blob = new Blob([ printDRPD("", "", d as DRPD) ], {type: "text/json"});
|
||||
SheetsMode.value = false;
|
||||
@ -173,8 +173,8 @@ export function getLogs() {
|
||||
while(logs.length > 0)
|
||||
logs.pop()
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
if (localStorage.key(i).substring(0, 9) == "drpd_log:") {
|
||||
logs.push(["drpd.json", localStorage.key(i), localStorage.key(i).substring(9), "", "", ""])
|
||||
if (localStorage.key(i)!.substring(0, 9) == "drpd_log:") {
|
||||
logs.push(["drpd.json", localStorage.key(i)!, localStorage.key(i)!.substring(9), "", "", ""])
|
||||
for (var j = 0; j < 5; j++) {
|
||||
var D = parseSlotData(j)
|
||||
if (D != undefined)
|
||||
@ -267,9 +267,7 @@ export function getDRPD(scene: BattleScene): DRPD {
|
||||
D.seed = scene.seed
|
||||
localStorage.setItem(getLogID(scene), JSON.stringify(D))
|
||||
}
|
||||
var drpd: DRPD = JSON.parse(localStorage.getItem(getLogID(scene))) as DRPD;
|
||||
if (drpd == undefined || drpd == null)
|
||||
return null;
|
||||
var drpd: DRPD = JSON.parse(localStorage.getItem(getLogID(scene))!) as DRPD;
|
||||
drpd = updateLog(drpd);
|
||||
//scene.arenaFlyout.updateFieldText()
|
||||
return drpd;
|
||||
@ -364,8 +362,8 @@ function checkForPokeInBiome(species: Species, pool: (Species | SpeciesTree)[]):
|
||||
* @returns [INDEX] NAME (example: `[1] Walking Wake` is a Walking Wake in the first party slot)
|
||||
*/
|
||||
export function playerPokeName(scene: BattleScene, index: integer | Pokemon | PlayerPokemon) {
|
||||
var species = []
|
||||
var dupeSpecies = []
|
||||
var species: string[] = []
|
||||
var dupeSpecies: string[] = []
|
||||
for (var i = 0; i < scene.getParty().length; i++) {
|
||||
if (!species.includes(scene.getParty()[i].name)) {
|
||||
species.push(scene.getParty()[i].name)
|
||||
@ -396,8 +394,8 @@ export function playerPokeName(scene: BattleScene, index: integer | Pokemon | Pl
|
||||
* @returns [INDEX] NAME (example: `[2] Zigzagoon` is a Zigzagoon in the right slot (for a double battle) or in the second party slot (for a single battle against a Trainer))
|
||||
*/
|
||||
export function enemyPokeName(scene: BattleScene, index: integer | Pokemon | EnemyPokemon) {
|
||||
var species = []
|
||||
var dupeSpecies = []
|
||||
var species: string[] = []
|
||||
var dupeSpecies: string[] = []
|
||||
for (var i = 0; i < scene.getEnemyParty().length; i++) {
|
||||
if (!species.includes(scene.getEnemyParty()[i].name)) {
|
||||
species.push(scene.getEnemyParty()[i].name)
|
||||
@ -479,7 +477,7 @@ export function newDocument(name: string = "Untitled Run", authorName: string |
|
||||
seed: "",
|
||||
title: name,
|
||||
label: "",
|
||||
uuid: undefined,
|
||||
uuid: "",
|
||||
authors: (Array.isArray(authorName) ? authorName : [authorName]),
|
||||
date: new Date().getUTCFullYear() + "-" + (new Date().getUTCMonth() + 1 < 10 ? "0" : "") + (new Date().getUTCMonth() + 1) + "-" + (new Date().getUTCDate() < 10 ? "0" : "") + new Date().getUTCDate(),
|
||||
waves: new Array(50),
|
||||
@ -528,14 +526,16 @@ export function printDRPD(inData: string, indent: string, drpd: DRPD): string {
|
||||
}
|
||||
inData += ",\n" + indent + " \"starters\": [\n"
|
||||
var isFirst = true
|
||||
for (var i = 0; i < drpd.starters.length; i++) {
|
||||
if (drpd.starters[i] != undefined && drpd.starters[i] != null) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
} else {
|
||||
inData += ",\n"
|
||||
if (drpd.starters) {
|
||||
for (var i = 0; i < drpd.starters.length; i++) {
|
||||
if (drpd.starters[i] != undefined && drpd.starters[i] != null) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
} else {
|
||||
inData += ",\n"
|
||||
}
|
||||
inData = printPoke(inData, indent + " ", drpd.starters[i])
|
||||
}
|
||||
inData = printPoke(inData, indent + " ", drpd.starters[i])
|
||||
}
|
||||
}
|
||||
inData += "\n" + indent + " ]\n" + indent + "}"
|
||||
@ -565,18 +565,18 @@ function updateLog(drpd: DRPD): DRPD {
|
||||
console.log("Updated to 1.0.0a - changed item IDs to strings")
|
||||
for (var i = 0; i < drpd.waves.length; i++) {
|
||||
if (drpd.waves[i] != undefined) {
|
||||
if (drpd.waves[i].pokemon != undefined) {
|
||||
for (var j = 0; j < drpd.waves[i].pokemon.length; j++) {
|
||||
for (var k = 0; k < drpd.waves[i].pokemon[j].items.length; k++) {
|
||||
drpd.waves[i].pokemon[j].items[k].id = drpd.waves[i].pokemon[j].items[k].id.toString()
|
||||
if (drpd.waves[i].pokemon) {
|
||||
for (var j = 0; j < drpd.waves[i].pokemon!.length; j++) {
|
||||
for (var k = 0; k < drpd.waves[i].pokemon![j].items.length; k++) {
|
||||
drpd.waves[i].pokemon![j].items[k].id = drpd.waves[i].pokemon![j].items[k].id.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var j = 0; j < drpd.starters.length; j++) {
|
||||
for (var k = 0; k < drpd.starters[j].items.length; k++) {
|
||||
drpd.starters[j].items[k].id = drpd.starters[j].items[k].id.toString()
|
||||
for (var j = 0; j < drpd.starters!.length; j++) {
|
||||
for (var k = 0; k < drpd.starters![j].items.length; k++) {
|
||||
drpd.starters![j].items[k].id = drpd.starters![j].items[k].id.toString()
|
||||
}
|
||||
}
|
||||
} // 1.0.0 → 1.0.0a
|
||||
@ -680,9 +680,9 @@ export function exportWave(scene: BattleScene): Wave {
|
||||
break;
|
||||
case "trainer":
|
||||
ret.trainer = {
|
||||
id: scene.currentBattle.trainer.config.trainerType,
|
||||
name: scene.currentBattle.trainer.name,
|
||||
type: scene.currentBattle.trainer.config.title
|
||||
id: scene.currentBattle.trainer!.config.trainerType,
|
||||
name: scene.currentBattle.trainer!.name,
|
||||
type: scene.currentBattle.trainer!.config.title
|
||||
}
|
||||
ret.pokemon = []
|
||||
for (var i = 0; i < scene.getEnemyParty().length; i++) {
|
||||
@ -782,8 +782,8 @@ function printWave(inData: string, indent: string, wave: Wave): string {
|
||||
* @returns The requested `Wave`.
|
||||
*/
|
||||
export function getWave(drpd: DRPD, floor: integer, scene: BattleScene): Wave {
|
||||
var wv: Wave;
|
||||
var insertPos: integer;
|
||||
var wv: Wave | undefined = undefined;
|
||||
var insertPos: integer | undefined = undefined;
|
||||
console.log(drpd.waves)
|
||||
for (var i = 0; i < drpd.waves.length; i++) {
|
||||
if (drpd.waves[i] != undefined && drpd.waves[i] != null) {
|
||||
@ -823,7 +823,7 @@ export function getWave(drpd: DRPD, floor: integer, scene: BattleScene): Wave {
|
||||
for (var i = 0; i < drpd.waves.length - 1; i++) {
|
||||
if (drpd.waves[i] != undefined && drpd.waves[i+1] != undefined) {
|
||||
if (drpd.waves[i].id == drpd.waves[i+1].id) {
|
||||
drpd.waves[i] = undefined
|
||||
drpd.waves.splice(i, 1)
|
||||
drpd.waves.sort((a, b) => {
|
||||
if (a == undefined) return 1; // empty values move to the bottom
|
||||
if (b == undefined) return -1; // empty values move to the bottom
|
||||
@ -853,6 +853,7 @@ export function getWave(drpd: DRPD, floor: integer, scene: BattleScene): Wave {
|
||||
})
|
||||
return drpd.waves[drpd.waves.length - 1]
|
||||
}
|
||||
/*
|
||||
console.error("Out of wave slots??")
|
||||
scene.ui.showText("Out of wave slots!\nClearing duplicates...", null, () => {
|
||||
for (var i = 0; i < drpd.waves.length - 1; i++) {
|
||||
@ -934,13 +935,29 @@ export function getWave(drpd: DRPD, floor: integer, scene: BattleScene): Wave {
|
||||
}
|
||||
}
|
||||
})
|
||||
*/
|
||||
}
|
||||
if (wv == undefined) {
|
||||
scene.ui.showText("Failed to retrieve wave\nPress F12 for info")
|
||||
scene.ui.showText("Failed to retrieve wave\nPress F12 for info", 10000)
|
||||
console.error("Failed to retrieve wave??")
|
||||
console.error("this mod i stg")
|
||||
console.error("Go yell at @redstonewolf8557 to fix this")
|
||||
return undefined;
|
||||
return {
|
||||
id: -1,
|
||||
reload: true,
|
||||
type: "wild",
|
||||
double: false,
|
||||
actions: [
|
||||
"THIS IS AN ERROR!",
|
||||
"TypeScript forced me to specify a value",
|
||||
"REPORT THIS TO REDSTONEWOLF"
|
||||
],
|
||||
shop: "",
|
||||
biome: "",
|
||||
clearActionsFlag: false,
|
||||
initialActions: [],
|
||||
modifiers: []
|
||||
};
|
||||
}
|
||||
return wv;
|
||||
}
|
||||
@ -1009,7 +1026,7 @@ export function exportPokemon(pokemon: Pokemon, encounterRarity?: string): PokeD
|
||||
passiveAbility: pokemon.getPassiveAbility().name,
|
||||
nature: exportNature(pokemon.nature),
|
||||
gender: pokemon.gender == 0 ? "Male" : (pokemon.gender == 1 ? "Female" : "Genderless"),
|
||||
rarity: encounterRarity,
|
||||
rarity: encounterRarity!,
|
||||
captured: false,
|
||||
level: pokemon.level,
|
||||
items: pokemon.getHeldItems().map((item, idx) => exportItem(item)),
|
||||
@ -1088,8 +1105,7 @@ function printPoke(inData: string, indent: string, pokemon: PokeData) {
|
||||
* @param scene The BattleScene. Used to get the enemy team and whether it's a trainer battle or not.
|
||||
* @param floor The wave index to write to. Defaults to the current wave.
|
||||
*/
|
||||
export function logTeam(scene: BattleScene, floor: integer = undefined) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function logTeam(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex) {
|
||||
var team = scene.getEnemyParty()
|
||||
console.log("Log Enemy Team")
|
||||
if (team[0].hasTrainer()) {
|
||||
@ -1340,7 +1356,7 @@ function printItemNoNewline(inData: string, indent: string, item: ItemData) {
|
||||
export function setFileInfo(title: string, authors: string[], label: string) {
|
||||
console.log("Setting file " + rarityslot[1] + " to " + title + " / [" + authors.join(", ") + "]")
|
||||
var fileID = rarityslot[1] as string
|
||||
var drpd = JSON.parse(localStorage.getItem(fileID)) as DRPD;
|
||||
var drpd = JSON.parse(localStorage.getItem(fileID)!) as DRPD;
|
||||
drpd = updateLog(drpd)
|
||||
for (var i = 0; i < authors.length; i++) {
|
||||
while (authors[i][0] == " ") {
|
||||
@ -1369,9 +1385,9 @@ export function setFileInfo(title: string, authors: string[], label: string) {
|
||||
* @returns A UI option.
|
||||
*/
|
||||
export function generateOption(i: integer, saves: any): OptionSelectItem {
|
||||
var filename: string = (JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title
|
||||
var filename: string = (JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).title!
|
||||
var op: OptionSelectItem = {
|
||||
label: `Export ${filename} (${getSize(printDRPD("", "", JSON.parse(localStorage.getItem(logs[i][1])) as DRPD))})`,
|
||||
label: `Export ${filename} (${getSize(printDRPD("", "", JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD))})`,
|
||||
handler: () => {
|
||||
downloadLogByID(i)
|
||||
return false;
|
||||
@ -1396,17 +1412,17 @@ export function generateOption(i: integer, saves: any): OptionSelectItem {
|
||||
* @returns A UI option.
|
||||
*/
|
||||
export function generateEditOption(scene: BattleScene, i: integer, saves: any, phase: TitlePhase): OptionSelectItem {
|
||||
var filename: string = (JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title
|
||||
var filename: string = (JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).title || "unlabeled"
|
||||
var op: OptionSelectItem = {
|
||||
label: `Export ${filename} (${getSize(printDRPD("", "", JSON.parse(localStorage.getItem(logs[i][1])) as DRPD))})`,
|
||||
label: `Export ${filename} (${getSize(printDRPD("", "", JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD))})`,
|
||||
handler: () => {
|
||||
rarityslot[1] = logs[i][1]
|
||||
//scene.phaseQueue[0].end()
|
||||
scene.ui.setMode(Mode.NAME_LOG, {
|
||||
autofillfields: [
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).authors.join(", "),
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).label,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).title,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).authors.join(", "),
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).label,
|
||||
],
|
||||
buttonActions: [
|
||||
() => {
|
||||
@ -1469,9 +1485,9 @@ export function generateEditHandler(scene: BattleScene, logId: string, callback:
|
||||
//scene.phaseQueue[0].end()
|
||||
scene.ui.setMode(Mode.NAME_LOG, {
|
||||
autofillfields: [
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).authors.join(", "),
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).label,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).title,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).authors.join(", "),
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).label,
|
||||
],
|
||||
buttonActions: [
|
||||
() => {
|
||||
@ -1514,9 +1530,9 @@ export function generateEditHandlerForLog(scene: BattleScene, i: integer, callba
|
||||
//scene.phaseQueue[0].end()
|
||||
scene.ui.setMode(Mode.NAME_LOG, {
|
||||
autofillfields: [
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).authors.join(", "),
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).label,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).title,
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).authors.join(", "),
|
||||
(JSON.parse(localStorage.getItem(logs[i][1])!) as DRPD).label,
|
||||
],
|
||||
buttonActions: [
|
||||
() => {
|
||||
@ -1568,8 +1584,7 @@ export function generateEditHandlerForLog(scene: BattleScene, i: integer, callba
|
||||
*
|
||||
* @see resetWaveActions
|
||||
*/
|
||||
export function logActions(scene: BattleScene, floor: integer, action: string) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function logActions(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex, action: string) {
|
||||
var drpd = getDRPD(scene)
|
||||
console.log(`Logging an action: "${action}"`)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
@ -1592,8 +1607,7 @@ export function logActions(scene: BattleScene, floor: integer, action: string) {
|
||||
*
|
||||
* @see resetWaveActions
|
||||
*/
|
||||
export function appendAction(scene: BattleScene, floor: integer, action: string) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function appendAction(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex, action: string) {
|
||||
var drpd = getDRPD(scene)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
if (wv.clearActionsFlag) {
|
||||
@ -1638,15 +1652,18 @@ export function getActionCount(scene: BattleScene, floor: integer) {
|
||||
* @param floor The wave index to write to. Defaults to the current floor.
|
||||
* @param target The Pokémon that you captured.
|
||||
*/
|
||||
export function logCapture(scene: BattleScene, floor: integer, target: EnemyPokemon) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function logCapture(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex, target: EnemyPokemon) {
|
||||
var drpd = getDRPD(scene)
|
||||
console.log(`Logging successful capture: ${target.name}`)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
var pkslot = target.partyslot
|
||||
wv.pokemon[pkslot].captured = true;
|
||||
console.log("--> ", drpd)
|
||||
localStorage.setItem(getLogID(scene), JSON.stringify(drpd))
|
||||
if (wv.id != -1) {
|
||||
wv.pokemon![pkslot].captured = true;
|
||||
console.log("--> ", drpd)
|
||||
localStorage.setItem(getLogID(scene), JSON.stringify(drpd))
|
||||
} else {
|
||||
console.error("Error: Failed to log capture")
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Logs the player's current party.
|
||||
@ -1659,7 +1676,7 @@ export function logPlayerTeam(scene: BattleScene) {
|
||||
console.log(`Logging player starters: ${scene.getParty().map(p => p.name).join(", ")}`)
|
||||
var P = scene.getParty()
|
||||
for (var i = 0; i < P.length; i++) {
|
||||
drpd.starters[i] = exportPokemon(P[i])
|
||||
drpd.starters![i] = exportPokemon(P[i])
|
||||
}
|
||||
console.log("--> ", drpd)
|
||||
localStorage.setItem(getLogID(scene), JSON.stringify(drpd))
|
||||
@ -1672,8 +1689,7 @@ export function logPlayerTeam(scene: BattleScene) {
|
||||
* @param pokemon The `EnemyPokemon` to store the data of. (Automatically converted via `exportPokemon`)
|
||||
* @param encounterRarity The rarity tier of this Pokémon. If not specified, it calculates this automatically by searching the current biome's species pool.
|
||||
*/
|
||||
export function logPokemon(scene: BattleScene, floor: integer = undefined, slot: integer, pokemon: EnemyPokemon, encounterRarity?: string) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function logPokemon(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex, slot: integer, pokemon: EnemyPokemon, encounterRarity?: string) {
|
||||
var drpd = getDRPD(scene)
|
||||
console.log(`Logging opposing team member: ${pokemon.name}`)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
@ -1752,8 +1768,7 @@ export function logPokemon(scene: BattleScene, floor: integer = undefined, slot:
|
||||
* @param floor The wave index to write to. Defaults to the current floor.
|
||||
* @param action The shop action. Left blank if there was no shop this floor or if you ran away. Logged as "Skip taking items" if you didn't take anything for some reason.
|
||||
*/
|
||||
export function logShop(scene: BattleScene, floor: integer, action: string) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function logShop(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex, action: string) {
|
||||
var drpd = getDRPD(scene)
|
||||
console.log(`Logging shop result: "${action}"`)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
@ -1766,13 +1781,12 @@ export function logShop(scene: BattleScene, floor: integer, action: string) {
|
||||
* @param scene The BattleScene. Used to get the log ID and trainer data.
|
||||
* @param floor The wave index to write to. Defaults to the current floor.
|
||||
*/
|
||||
export function logTrainer(scene: BattleScene, floor: integer = undefined) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
var drpd: DRPD = JSON.parse(localStorage.getItem(getLogID(scene))) as DRPD;
|
||||
export function logTrainer(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex) {
|
||||
var drpd: DRPD = JSON.parse(localStorage.getItem(getLogID(scene))!) as DRPD;
|
||||
drpd = updateLog(drpd);
|
||||
console.log(`Logging trainer: ${scene.currentBattle.trainer.getTitleOnly()} ${scene.currentBattle.trainer.getNameOnly()}`)
|
||||
console.log(`Logging trainer: ${scene.currentBattle.trainer!.getTitleOnly()} ${scene.currentBattle.trainer!.getNameOnly()}`)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
var t: TrainerData = exportTrainer(scene.currentBattle.trainer)
|
||||
var t: TrainerData = exportTrainer(scene.currentBattle.trainer!)
|
||||
wv.trainer = t
|
||||
wv.type = "trainer"
|
||||
console.log("--> ", drpd)
|
||||
@ -1788,9 +1802,7 @@ export function logTrainer(scene: BattleScene, floor: integer = undefined) {
|
||||
* @param scene The BattleScene. Used to get the log ID.
|
||||
* @param floor The wave index to write to.
|
||||
*/
|
||||
export function flagReset(scene: BattleScene, floor: integer = undefined) {
|
||||
if (floor == undefined)
|
||||
floor = scene.currentBattle.waveIndex;
|
||||
export function flagReset(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex) {
|
||||
var drpd = getDRPD(scene)
|
||||
console.log("Flag Reset", drpd)
|
||||
var wv = getWave(drpd, floor, scene)
|
||||
@ -1803,9 +1815,7 @@ export function flagReset(scene: BattleScene, floor: integer = undefined) {
|
||||
* @param scene The BattleScene. Used to get the log ID.
|
||||
* @param floor The wave index to write to. Defaults to the current floor.
|
||||
*/
|
||||
export function flagResetIfExists(scene: BattleScene, floor: integer = undefined) {
|
||||
if (floor == undefined)
|
||||
floor = scene.currentBattle.waveIndex;
|
||||
export function flagResetIfExists(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex) {
|
||||
var drpd = getDRPD(scene)
|
||||
var waveExists = false
|
||||
for (var i = 0; i < drpd.waves.length; i++) {
|
||||
@ -1836,8 +1846,7 @@ export function flagResetIfExists(scene: BattleScene, floor: integer = undefined
|
||||
*
|
||||
* @see logActions
|
||||
*/
|
||||
export function resetWaveActions(scene: BattleScene, floor: integer = undefined, softflag: boolean) {
|
||||
if (floor == undefined) floor = scene.currentBattle.waveIndex
|
||||
export function resetWaveActions(scene: BattleScene, floor: integer = scene.currentBattle.waveIndex, softflag: boolean) {
|
||||
var drpd = getDRPD(scene)
|
||||
console.log("Clear Actions", drpd)
|
||||
var wv: Wave = getWave(drpd, floor, scene)
|
||||
|
@ -737,7 +737,7 @@ class AllPokemonFullHpRestoreModifierType extends ModifierType {
|
||||
constructor(localeKey: string, iconImage: string, descriptionKey?: string, newModifierFunc?: NewModifierFunc) {
|
||||
super(localeKey, iconImage, newModifierFunc || ((_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false)));
|
||||
|
||||
this.descriptionKey = descriptionKey!;
|
||||
this.descriptionKey = descriptionKey!; // TODO: is this bang correct?
|
||||
}
|
||||
|
||||
get identifier(): string {
|
||||
@ -1147,8 +1147,11 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator {
|
||||
|
||||
class TmModifierTypeGenerator extends ModifierTypeGenerator {
|
||||
constructor(tier: ModifierTier) {
|
||||
super((party: Pokemon[]) => {
|
||||
const partyMemberCompatibleTms = party.map(p => (p as PlayerPokemon).compatibleTms.filter(tm => !p.moveset.find(m => m.moveId === tm)));
|
||||
super((party: Pokemon[], pregenArgs?: any[]) => {
|
||||
if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in Moves)) {
|
||||
return new TmModifierType(pregenArgs[0] as Moves, tier);
|
||||
}
|
||||
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);
|
||||
if (!tierUniqueCompatibleTms.length) {
|
||||
return null;
|
||||
@ -2099,18 +2102,20 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo
|
||||
const options: ModifierTypeOption[] = [];
|
||||
const retryCount = Math.min(count * 5, 50);
|
||||
new Array(count).fill(0).map((_, i) => {
|
||||
let candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, modifierTiers && modifierTiers.length > i ? modifierTiers[i] : undefined, undefined, undefined, scene, shutUpBro, generateAltTiers, advanced);
|
||||
let candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, modifierTiers && modifierTiers.length > i ? modifierTiers[i] : undefined);
|
||||
let r = 0;
|
||||
const aT = candidate!.alternates
|
||||
const aT2 = candidate!.advancedAlternates
|
||||
const aT = candidate?.alternates
|
||||
const aT2 = candidate?.advancedAlternates
|
||||
while (options.length && ++r < retryCount && options.filter(o => o.type?.name === candidate?.type?.name || o.type?.group === candidate?.type?.group).length) {
|
||||
candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, candidate?.type?.tier, candidate?.upgradeCount, undefined, scene, shutUpBro, generateAltTiers, advanced);
|
||||
}
|
||||
if (candidate!.alternates == undefined) {
|
||||
candidate!.alternates = aT
|
||||
candidate!.advancedAlternates = aT2
|
||||
if (candidate && candidate.alternates == undefined) {
|
||||
candidate.alternates = aT
|
||||
candidate.advancedAlternates = aT2
|
||||
}
|
||||
if (candidate) {
|
||||
options.push(candidate);
|
||||
}
|
||||
options.push(candidate!);
|
||||
});
|
||||
|
||||
overridePlayerModifierTypeOptions(options, party);
|
||||
@ -2181,19 +2186,31 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, base
|
||||
}
|
||||
|
||||
export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: Modifiers.PersistentModifier[], scene: BattleScene): Modifiers.EnemyPersistentModifier {
|
||||
const tierStackCount = tier === ModifierTier.ULTRA ? 5 : tier === ModifierTier.GREAT ? 3 : 1;
|
||||
const retryCount = 50;
|
||||
let candidate = getNewModifierTypeOption([], ModifierPoolType.ENEMY_BUFF, tier, undefined, undefined, scene);
|
||||
let r = 0;
|
||||
const aT = candidate!.alternates
|
||||
const aT2 = candidate!.advancedAlternates
|
||||
let matchingModifier: Modifiers.PersistentModifier | undefined;
|
||||
while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate?.type?.id)) && matchingModifier.getMaxStackCount(scene) < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) {
|
||||
candidate = getNewModifierTypeOption([], ModifierPoolType.ENEMY_BUFF, tier, undefined, undefined, scene);
|
||||
let tierStackCount: number;
|
||||
switch (tier) {
|
||||
case ModifierTier.ULTRA:
|
||||
tierStackCount = 5;
|
||||
break;
|
||||
case ModifierTier.GREAT:
|
||||
tierStackCount = 3;
|
||||
break;
|
||||
default:
|
||||
tierStackCount = 1;
|
||||
break;
|
||||
}
|
||||
if (candidate!.alternates == undefined) {
|
||||
candidate!.alternates = aT
|
||||
candidate!.advancedAlternates = aT2
|
||||
|
||||
const retryCount = 50;
|
||||
let candidate = getNewModifierTypeOption(scene.getEnemyParty(), ModifierPoolType.ENEMY_BUFF, tier, undefined, undefined, scene);
|
||||
let r = 0;
|
||||
const aT = candidate?.alternates
|
||||
const aT2 = candidate?.advancedAlternates
|
||||
let matchingModifier: Modifiers.PersistentModifier;
|
||||
while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate?.type?.id)!) && matchingModifier.getMaxStackCount(scene) < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) {
|
||||
candidate = getNewModifierTypeOption(scene.getEnemyParty(), ModifierPoolType.ENEMY_BUFF, tier, undefined, undefined, scene);
|
||||
}
|
||||
if (candidate && candidate.alternates == undefined) {
|
||||
candidate.alternates = aT
|
||||
candidate.advancedAlternates = aT2
|
||||
}
|
||||
|
||||
const modifier = candidate?.type?.newModifier() as Modifiers.EnemyPersistentModifier;
|
||||
@ -2229,7 +2246,7 @@ export function getDailyRunStarterModifiers(party: PlayerPokemon[], scene?: Batt
|
||||
tier = ModifierTier.MASTER;
|
||||
}
|
||||
|
||||
const modifier = getNewModifierTypeOption(party, ModifierPoolType.DAILY_STARTER, tier)?.type?.newModifier(p) as Modifiers.PokemonHeldItemModifier;
|
||||
const modifier = getNewModifierTypeOption(party, ModifierPoolType.DAILY_STARTER, tier, undefined, undefined, scene)?.type?.newModifier(p) as Modifiers.PokemonHeldItemModifier;
|
||||
ret.push(modifier);
|
||||
}
|
||||
}
|
||||
@ -2242,29 +2259,31 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
|
||||
const pool = getModifierPoolForType(poolType);
|
||||
let thresholds: object;
|
||||
switch (poolType) {
|
||||
case ModifierPoolType.PLAYER:
|
||||
thresholds = modifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.WILD:
|
||||
thresholds = enemyModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.TRAINER:
|
||||
thresholds = enemyModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.ENEMY_BUFF:
|
||||
thresholds = enemyBuffModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.DAILY_STARTER:
|
||||
thresholds = dailyStarterModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.PLAYER:
|
||||
thresholds = modifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.WILD:
|
||||
thresholds = enemyModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.TRAINER:
|
||||
thresholds = enemyModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.ENEMY_BUFF:
|
||||
thresholds = enemyBuffModifierPoolThresholds;
|
||||
break;
|
||||
case ModifierPoolType.DAILY_STARTER:
|
||||
thresholds = dailyStarterModifierPoolThresholds;
|
||||
break;
|
||||
}
|
||||
var alternateTiers: ModifierTier[] = []
|
||||
var alternateTierContents: string[] = []
|
||||
if (tier === undefined) {
|
||||
if (generateAltTiers) {
|
||||
for (var luck = 0; luck <= 14; luck++) {
|
||||
var state = Phaser.Math.RND.state()
|
||||
var tierValueTemp = Utils.randSeedInt(1024);
|
||||
var upgradeCountTemp = 0;
|
||||
var tierTemp;
|
||||
var tierTemp: ModifierTier;
|
||||
if (upgradeCount) {
|
||||
upgradeCountTemp = upgradeCount;
|
||||
}
|
||||
@ -2385,10 +2404,53 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
|
||||
tier--;
|
||||
}
|
||||
|
||||
let index = getItemIndex(thresholds, tier);
|
||||
|
||||
if (index === undefined) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (player) {
|
||||
if (!shutUpBro) console.log(index, ignoredPoolIndexes[tier].filter(i => i <= index).length, ignoredPoolIndexes[tier]);
|
||||
}
|
||||
let modifierType: ModifierType = (pool[tier][index]).modifierType;
|
||||
if (modifierType instanceof ModifierTypeGenerator) {
|
||||
modifierType = (modifierType as ModifierTypeGenerator).generateType(party)!;
|
||||
if (modifierType === null) {
|
||||
if (player) {
|
||||
if (!shutUpBro) console.log(ModifierTier[tier], upgradeCount);
|
||||
}
|
||||
return getNewModifierTypeOption(party, poolType, tier, upgradeCount, ++retryCount, scene, shutUpBro, generateAltTiers);
|
||||
}
|
||||
}
|
||||
|
||||
if (!shutUpBro) console.log(modifierType, !player ? "(enemy)" : "");
|
||||
|
||||
var Option = new ModifierTypeOption(modifierType as ModifierType, upgradeCount!);
|
||||
if (alternateTiers.length > 0) {
|
||||
//console.log(Option.type.name, alternateTiers)
|
||||
Option.alternates = alternateTiers
|
||||
}
|
||||
if (alternateTierContents.length > 0) {
|
||||
//console.log(Option.type.name, alternateTiers)
|
||||
Option.advancedAlternates = alternateTierContents
|
||||
}
|
||||
if (!generateAltTiers) {
|
||||
//Option.alternates = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
|
||||
}
|
||||
return Option;
|
||||
}
|
||||
/**
|
||||
* Gets an item index to add to shop rewards. Used for reroll predictions.
|
||||
* @param thresholds The "loot table" for this floor
|
||||
* @param tier The rarity tier to pull from
|
||||
* @returns An index for use in {@linkcode getModifierTypeSimulated}
|
||||
*/
|
||||
function getItemIndex(thresholds, tier) {
|
||||
const tierThresholds = Object.keys(thresholds[tier]);
|
||||
const totalWeight = parseInt(tierThresholds[tierThresholds.length - 1]);
|
||||
const value = Utils.randSeedInt(totalWeight);
|
||||
let index: integer | undefined;
|
||||
let index: integer;
|
||||
for (const t of tierThresholds) {
|
||||
const threshold = parseInt(t);
|
||||
if (value < threshold) {
|
||||
@ -2396,7 +2458,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
|
||||
break;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
return index!;
|
||||
}
|
||||
/**
|
||||
* Uses an index (generated from {@linkcode getItemIndex}) to get a reward item
|
||||
@ -2407,20 +2469,15 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType,
|
||||
* @returns An item name, or `[Failed to generate]` if a `ModifierTypeGenerator` was rolled, but no item was available to generate (It won't retry)
|
||||
*/
|
||||
function getModifierTypeSimulated(pool, tier, index, party): string {
|
||||
let modifierType: ModifierType | null = (pool[tier][index]).modifierType;
|
||||
let modifierType: ModifierType = (pool[tier][index]).modifierType;
|
||||
if (modifierType instanceof ModifierTypeGenerator) {
|
||||
modifierType = (modifierType as ModifierTypeGenerator).generateType(party);
|
||||
modifierType = (modifierType as ModifierTypeGenerator).generateType(party)!;
|
||||
if (modifierType === null) {
|
||||
if (player) {
|
||||
console.log(ModifierTier[tier], upgradeCount);
|
||||
}
|
||||
return getNewModifierTypeOption(party, poolType, tier, upgradeCount, ++retryCount);
|
||||
return "[nothing generated]"
|
||||
return ((pool[tier][index]).modifierType as ModifierType).name
|
||||
}
|
||||
}
|
||||
|
||||
console.log(modifierType, !player ? "(enemy)" : "");
|
||||
|
||||
return new ModifierTypeOption(modifierType as ModifierType, upgradeCount);
|
||||
return modifierType.name;
|
||||
}
|
||||
|
||||
export function getDefaultModifierTypeForTier(tier: ModifierTier): ModifierType {
|
||||
|
118
src/phases.ts
118
src/phases.ts
@ -139,7 +139,7 @@ function findBest(scene: BattleScene, pokemon: EnemyPokemon, override?: boolean)
|
||||
var p = m.getPokemon(scene)
|
||||
scene.getField().forEach((p2, idx) => {
|
||||
if (p == p2) {
|
||||
console.log(m.getPokemon(scene).name + " (Position: " + (idx + 1) + ") has a Quick Claw")
|
||||
console.log(m.getPokemon(scene)?.name + " (Position: " + (idx + 1) + ") has a Quick Claw")
|
||||
offset++
|
||||
}
|
||||
})
|
||||
@ -219,8 +219,8 @@ function findBest(scene: BattleScene, pokemon: EnemyPokemon, override?: boolean)
|
||||
return n + " (FAIL)"
|
||||
return n + Math.round(rates2[0] * 100) + "%";
|
||||
}
|
||||
export function parseSlotData(slotId: integer): SessionSaveData {
|
||||
var S = localStorage.getItem(`sessionData${slotId ? slotId : ""}_${loggedInUser.username}`)
|
||||
export function parseSlotData(slotId: integer): SessionSaveData | undefined {
|
||||
var S = localStorage.getItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`)
|
||||
if (S == null) {
|
||||
// No data in this slot
|
||||
return undefined;
|
||||
@ -285,8 +285,8 @@ export function parseSlotData(slotId: integer): SessionSaveData {
|
||||
}) as SessionSaveData;
|
||||
Save.slot = slotId
|
||||
Save.description = (slotId + 1) + " - "
|
||||
var challengeParts: ChallengeData[] = new Array(5)
|
||||
var nameParts: string[] = new Array(5)
|
||||
var challengeParts: ChallengeData[] | undefined[] = new Array(5)
|
||||
var nameParts: string[] | undefined[] = new Array(5)
|
||||
if (Save.challenges != undefined) {
|
||||
for (var i = 0; i < Save.challenges.length; i++) {
|
||||
switch (Save.challenges[i].id) {
|
||||
@ -309,11 +309,11 @@ export function parseSlotData(slotId: integer): SessionSaveData {
|
||||
break;
|
||||
case Challenges.LOWER_MAX_STARTER_COST:
|
||||
challengeParts[2] = Save.challenges[i]
|
||||
nameParts[3] = (10 - challengeParts[0].value) + "cost"
|
||||
nameParts[3] = (10 - challengeParts[0]!.value) + "cost"
|
||||
break;
|
||||
case Challenges.LOWER_STARTER_POINTS:
|
||||
challengeParts[3] = Save.challenges[i]
|
||||
nameParts[4] = (10 - challengeParts[0].value) + "pt"
|
||||
nameParts[4] = (10 - challengeParts[0]!.value) + "pt"
|
||||
break;
|
||||
case Challenges.FRESH_START:
|
||||
challengeParts[4] = Save.challenges[i]
|
||||
@ -335,18 +335,18 @@ export function parseSlotData(slotId: integer): SessionSaveData {
|
||||
}
|
||||
}
|
||||
if (challengeParts.length == 1 && false) {
|
||||
switch (challengeParts[0].id) {
|
||||
switch (challengeParts[0]!.id) {
|
||||
case Challenges.SINGLE_TYPE:
|
||||
Save.description += "Mono " + challengeParts[0].toChallenge().getValue()
|
||||
Save.description += "Mono " + challengeParts[0]!.toChallenge().getValue()
|
||||
break;
|
||||
case Challenges.SINGLE_GENERATION:
|
||||
Save.description += "Gen " + challengeParts[0].value
|
||||
Save.description += "Gen " + challengeParts[0]!.value
|
||||
break;
|
||||
case Challenges.LOWER_MAX_STARTER_COST:
|
||||
Save.description += "Max cost " + (10 - challengeParts[0].value)
|
||||
Save.description += "Max cost " + (10 - challengeParts[0]!.value)
|
||||
break;
|
||||
case Challenges.LOWER_STARTER_POINTS:
|
||||
Save.description += (10 - challengeParts[0].value) + "-point"
|
||||
Save.description += (10 - challengeParts[0]!.value) + "-point"
|
||||
break;
|
||||
case Challenges.FRESH_START:
|
||||
Save.description += "Fresh Start"
|
||||
@ -533,7 +533,7 @@ export class TitlePhase extends Phase {
|
||||
handler: () => {
|
||||
callback(i);
|
||||
this.scene.ui.revertMode();
|
||||
this.scene.ui.showText(null, 0);
|
||||
this.scene.ui.showText("", 0);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@ -574,7 +574,7 @@ export class TitlePhase extends Phase {
|
||||
});
|
||||
}
|
||||
|
||||
getLastSave(log?: boolean, dailyOnly?: boolean, noDaily?: boolean): SessionSaveData {
|
||||
getLastSave(log?: boolean, dailyOnly?: boolean, noDaily?: boolean): SessionSaveData | undefined {
|
||||
var saves: Array<Array<any>> = [];
|
||||
for (var i = 0; i < 5; i++) {
|
||||
var s = parseSlotData(i);
|
||||
@ -590,27 +590,27 @@ export class TitlePhase extends Phase {
|
||||
if (saves[0] == undefined) return undefined;
|
||||
return saves[0][1]
|
||||
}
|
||||
getLastSavesOfEach(log?: boolean): SessionSaveData[] {
|
||||
var saves: Array<Array<any>> = [];
|
||||
getLastSavesOfEach(log?: boolean): SessionSaveData[] | undefined {
|
||||
var saves: Array<Array<SessionSaveData | number>> = [];
|
||||
for (var i = 0; i < 5; i++) {
|
||||
var s = parseSlotData(i);
|
||||
if (s != undefined) {
|
||||
saves.push([i, s, s.timestamp]);
|
||||
}
|
||||
}
|
||||
saves.sort((a, b): integer => {return b[2] - a[2]})
|
||||
saves.sort((a, b): integer => {return (b[2] as number) - (a[2] as number)})
|
||||
if (log) console.log(saves)
|
||||
if (saves == undefined) return undefined;
|
||||
if (saves[0] == undefined) return undefined;
|
||||
var validSaves = []
|
||||
var validSaves: Array<Array<SessionSaveData | number>> = []
|
||||
var hasNormal = false;
|
||||
var hasDaily = false;
|
||||
for (var i = 0; i < saves.length; i++) {
|
||||
if (saves[i][1].gameMode == GameModes.DAILY && !hasDaily) {
|
||||
if ((saves[i][1] as SessionSaveData).gameMode == GameModes.DAILY && !hasDaily) {
|
||||
hasDaily = true;
|
||||
validSaves.push(saves[i])
|
||||
}
|
||||
if (saves[i][1].gameMode != GameModes.DAILY && !hasNormal) {
|
||||
if ((saves[i][1] as SessionSaveData).gameMode != GameModes.DAILY && !hasNormal) {
|
||||
hasNormal = true;
|
||||
validSaves.push(saves[i])
|
||||
}
|
||||
@ -618,9 +618,9 @@ export class TitlePhase extends Phase {
|
||||
console.log(saves, validSaves)
|
||||
if (validSaves.length == 0)
|
||||
return undefined;
|
||||
return validSaves.map(f => f[1]);
|
||||
return validSaves.map(f => f[1] as SessionSaveData);
|
||||
}
|
||||
getSaves(log?: boolean, dailyOnly?: boolean): SessionSaveData[] {
|
||||
getSaves(log?: boolean, dailyOnly?: boolean): SessionSaveData[] | undefined {
|
||||
var saves: Array<Array<any>> = [];
|
||||
for (var i = 0; i < 5; i++) {
|
||||
var s = parseSlotData(i);
|
||||
@ -635,7 +635,7 @@ export class TitlePhase extends Phase {
|
||||
if (saves == undefined) return undefined;
|
||||
return saves.map(f => f[1]);
|
||||
}
|
||||
getSavesUnsorted(log?: boolean, dailyOnly?: boolean): SessionSaveData[] {
|
||||
getSavesUnsorted(log?: boolean, dailyOnly?: boolean): SessionSaveData[] | undefined {
|
||||
var saves: Array<Array<any>> = [];
|
||||
for (var i = 0; i < 5; i++) {
|
||||
var s = parseSlotData(i);
|
||||
@ -756,16 +756,16 @@ export class TitlePhase extends Phase {
|
||||
var ls2 = this.getLastSavesOfEach()
|
||||
this.scene.quickloadDisplayMode = "Both"
|
||||
switch (true) {
|
||||
case (this.scene.quickloadDisplayMode == "Daily" && this.getLastSave(false, true) != undefined):
|
||||
case (this.scene.quickloadDisplayMode == "Daily" && ls1 != undefined):
|
||||
options.push({
|
||||
label: (ls1.description ? ls1.description : "[???]"),
|
||||
handler: () => {
|
||||
this.loadSaveSlot(ls1.slot);
|
||||
this.loadSaveSlot(ls1!.slot);
|
||||
return true;
|
||||
}
|
||||
})
|
||||
break;
|
||||
case this.scene.quickloadDisplayMode == "Dailies" && this.getLastSave(false, true) != undefined:
|
||||
case this.scene.quickloadDisplayMode == "Dailies" && lastsaves != undefined && ls1 != undefined:
|
||||
lastsaves.forEach(lastsave1 => {
|
||||
options.push({
|
||||
label: (lastsave1.description ? lastsave1.description : "[???]"),
|
||||
@ -776,11 +776,11 @@ export class TitlePhase extends Phase {
|
||||
})
|
||||
})
|
||||
break;
|
||||
case lastsave != undefined && (this.scene.quickloadDisplayMode == "Latest" || ((this.scene.quickloadDisplayMode == "Daily" || this.scene.quickloadDisplayMode == "Dailies") && this.getLastSave(false, true) == undefined)):
|
||||
case lastsave != undefined && (this.scene.quickloadDisplayMode == "Latest" || ((this.scene.quickloadDisplayMode == "Daily" || this.scene.quickloadDisplayMode == "Dailies") && ls1 == undefined)):
|
||||
options.push({
|
||||
label: (lastsave.description ? lastsave.description : "[???]"),
|
||||
handler: () => {
|
||||
this.loadSaveSlot(lastsave.slot);
|
||||
this.loadSaveSlot(lastsave!.slot);
|
||||
return true;
|
||||
}
|
||||
})
|
||||
@ -1060,8 +1060,8 @@ export class TitlePhase extends Phase {
|
||||
// TODO
|
||||
var saves = this.getSaves()
|
||||
var saveNames = new Array(5).fill("")
|
||||
for (var i = 0; i < saves.length; i++) {
|
||||
saveNames[saves[i][0]] = saves[i][1].description
|
||||
for (var i = 0; i < saves!.length; i++) {
|
||||
saveNames[saves![i][0]] = saves![i][1].description
|
||||
}
|
||||
const ui = this.scene.ui
|
||||
const confirmSlot = (message: string, slotFilter: (i: integer) => boolean, callback: (i: integer) => void) => {
|
||||
@ -1074,7 +1074,7 @@ export class TitlePhase extends Phase {
|
||||
handler: () => {
|
||||
callback(i);
|
||||
ui.revertMode();
|
||||
ui.showText(null, 0);
|
||||
ui.showText("", 0);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@ -1082,7 +1082,7 @@ export class TitlePhase extends Phase {
|
||||
label: i18next.t("menuUiHandler:cancel"),
|
||||
handler: () => {
|
||||
ui.revertMode();
|
||||
ui.showText(null, 0);
|
||||
ui.showText("", 0);
|
||||
return true;
|
||||
}
|
||||
}]),
|
||||
@ -2715,7 +2715,7 @@ export class CheckSwitchPhase extends BattlePhase {
|
||||
|
||||
for (var i = 0; i < this.scene.getEnemyField().length; i++) {
|
||||
var pk = this.scene.getEnemyField()[i]
|
||||
var maxIVs = []
|
||||
var maxIVs: string[] = []
|
||||
var ivnames = ["HP", "Atk", "Def", "Sp.Atk", "Sp.Def", "Speed"]
|
||||
pk.ivs.forEach((iv, j) => {if (iv == 31) maxIVs.push(ivnames[j])})
|
||||
var ivDesc = maxIVs.join(",")
|
||||
@ -2757,7 +2757,7 @@ export class CheckSwitchPhase extends BattlePhase {
|
||||
|
||||
for (var i = 0; i < this.scene.getEnemyField().length; i++) {
|
||||
var pk = this.scene.getEnemyField()[i]
|
||||
var maxIVs = []
|
||||
var maxIVs: string[] = []
|
||||
var ivnames = ["HP", "Atk", "Def", "Sp.Atk", "Sp.Def", "Speed"]
|
||||
pk.ivs.forEach((iv, j) => {if (iv == 31) maxIVs.push(ivnames[j])})
|
||||
var ivDesc = maxIVs.join(",")
|
||||
@ -2958,8 +2958,8 @@ export class TurnInitPhase extends FieldPhase {
|
||||
}
|
||||
|
||||
var Pt = this.scene.getEnemyParty()
|
||||
var Pt1 = []
|
||||
var Pt2 = []
|
||||
var Pt1: EnemyPokemon[] = []
|
||||
var Pt2: EnemyPokemon[] = []
|
||||
for (var i = 0; i < Pt.length; i++) {
|
||||
if (i % 2 == 0) {
|
||||
Pt1.push(Pt[i])
|
||||
@ -3310,7 +3310,7 @@ export class EnemyCommandPhase extends FieldPhase {
|
||||
super.start();
|
||||
|
||||
const enemyPokemon = this.scene.getEnemyField()[this.fieldIndex];
|
||||
console.log(enemyPokemon.getMoveset().map(m => m.getName()))
|
||||
console.log(enemyPokemon.getMoveset().map(m => m?.getName()))
|
||||
|
||||
const battle = this.scene.currentBattle;
|
||||
|
||||
@ -3482,7 +3482,7 @@ export class TurnStartPhase extends FieldPhase {
|
||||
if (this.scene.getEnemyField()[i] != null)
|
||||
targets[this.scene.getEnemyField()[i].getBattlerIndex() + 1] = this.scene.getEnemyField()[i].name
|
||||
}
|
||||
var targetFull = []
|
||||
var targetFull: string[] = []
|
||||
for (var i = 0; i < t.length; i++) {
|
||||
targetFull.push(targets[t[i] + 1])
|
||||
}
|
||||
@ -3491,7 +3491,7 @@ export class TurnStartPhase extends FieldPhase {
|
||||
}
|
||||
|
||||
getBattlers(user: Pokemon): Pokemon[] {
|
||||
var battlers = []
|
||||
var battlers: Pokemon[] = []
|
||||
battlers[0] = this.scene.getField()[0]
|
||||
battlers[1] = this.scene.getField()[1]
|
||||
battlers[2] = this.scene.getEnemyField()[0]
|
||||
@ -3508,7 +3508,7 @@ export class TurnStartPhase extends FieldPhase {
|
||||
|
||||
const battlerBypassSpeed = {};
|
||||
|
||||
const playerActions = []
|
||||
const playerActions: string[] = []
|
||||
|
||||
const moveOrder = order.slice(0);
|
||||
|
||||
@ -3521,11 +3521,11 @@ export class TurnStartPhase extends FieldPhase {
|
||||
const pokemon = field[o];
|
||||
const turnCommand = this.scene.currentBattle.turnCommands[o];
|
||||
|
||||
if (turnCommand.skip || !pokemon.isPlayer()) {
|
||||
if (turnCommand?.skip || !pokemon.isPlayer()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (turnCommand.command) {
|
||||
switch (turnCommand?.command) {
|
||||
case Command.FIGHT:
|
||||
const queuedMove = turnCommand.move;
|
||||
if (!queuedMove) {
|
||||
@ -3542,8 +3542,8 @@ export class TurnStartPhase extends FieldPhase {
|
||||
"Master Ball",
|
||||
"Luxury Ball"
|
||||
]
|
||||
LoggerTools.Actions[pokemon.getBattlerIndex()] = ballNames[turnCommand.cursor]
|
||||
playerActions.push(ballNames[turnCommand.cursor])
|
||||
LoggerTools.Actions[pokemon.getBattlerIndex()] = ballNames[turnCommand.cursor!]
|
||||
playerActions.push(ballNames[turnCommand.cursor!])
|
||||
//this.scene.unshiftPhase(new AttemptCapturePhase(this.scene, turnCommand.targets[0] % 2, turnCommand.cursor));
|
||||
break;
|
||||
case Command.POKEMON:
|
||||
@ -3697,7 +3697,7 @@ export class TurnStartPhase extends FieldPhase {
|
||||
}
|
||||
} else {
|
||||
this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP));//TODO: is the bang correct here?
|
||||
var targets = turnCommand.targets || turnCommand.move.targets
|
||||
var targets = turnCommand.targets || turnCommand.move!.targets
|
||||
var mv = new PokemonMove(queuedMove.move)
|
||||
}
|
||||
break;
|
||||
@ -3874,8 +3874,6 @@ export class TurnEndPhase extends FieldPhase {
|
||||
this.scene.arena.trySetTerrain(TerrainType.NONE, false);
|
||||
}
|
||||
|
||||
this.scene.peekBattleContents(50)
|
||||
|
||||
this.end();
|
||||
}
|
||||
}
|
||||
@ -3936,9 +3934,9 @@ export class BattleEndPhase extends BattlePhase {
|
||||
var drpd: LoggerTools.DRPD = LoggerTools.getDRPD(this.scene)
|
||||
var wv: LoggerTools.Wave = LoggerTools.getWave(drpd, this.scene.currentBattle.waveIndex, this.scene)
|
||||
var lastcount = 0;
|
||||
var lastval = undefined;
|
||||
var tempActions = wv.actions.slice();
|
||||
var prevWaveActions = []
|
||||
var lastval;
|
||||
var tempActions: string[] = wv.actions.slice();
|
||||
var prevWaveActions: string[] = []
|
||||
wv.actions = []
|
||||
// Loop through each action
|
||||
for (var i = 0; i < tempActions.length; i++) {
|
||||
@ -6532,10 +6530,10 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
|
||||
this.scene.ui.showText(i18next.t("battle:learnMoveAnd"), null, () => {
|
||||
var W = LoggerTools.getWave(LoggerTools.getDRPD(this.scene), this.scene.currentBattle.waveIndex, this.scene)
|
||||
if (W.shop != "") {
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, W.shop + " | " + new PokemonMove(this.moveId).getName() + " → " + pokemon.moveset[moveIndex].getName())
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, W.shop + " | " + new PokemonMove(this.moveId).getName() + " → " + pokemon.moveset[moveIndex]!.getName())
|
||||
} else {
|
||||
var actions = LoggerTools.getActionCount(this.scene, this.scene.currentBattle.waveIndex)
|
||||
LoggerTools.logActions(this.scene, this.scene.currentBattle.waveIndex, (actions == 0 ? "" : "") + LoggerTools.playerPokeName(this.scene, pokemon) + " | " + new PokemonMove(this.moveId).getName() + " → " + pokemon.moveset[moveIndex].getName())
|
||||
LoggerTools.logActions(this.scene, this.scene.currentBattle.waveIndex, (actions == 0 ? "" : "") + LoggerTools.playerPokeName(this.scene, pokemon) + " | " + new PokemonMove(this.moveId).getName() + " → " + pokemon.moveset[moveIndex]!.getName())
|
||||
}
|
||||
pokemon.setMove(moveIndex, Moves.NONE);
|
||||
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
|
||||
@ -7049,7 +7047,7 @@ const tierNames = [
|
||||
*/
|
||||
export function shinyCheckStep(scene: BattleScene, predictionCost: Utils.IntegerHolder, rerollOverride: integer, modifierOverride?: integer) {
|
||||
var minLuck = -1
|
||||
var modifierPredictions = []
|
||||
var modifierPredictions: ModifierTypeOption[][] = []
|
||||
const party = scene.getParty();
|
||||
regenerateModifierPoolThresholds(party, ModifierPoolType.PLAYER, rerollOverride);
|
||||
const modifierCount = new Utils.IntegerHolder(3);
|
||||
@ -7060,7 +7058,7 @@ export function shinyCheckStep(scene: BattleScene, predictionCost: Utils.Integer
|
||||
var isOk = true;
|
||||
const typeOptions: ModifierTypeOption[] = getPlayerModifierTypeOptions(modifierCount.value, scene.getParty(), undefined, scene, true, true);
|
||||
typeOptions.forEach((option, idx) => {
|
||||
let lastTier = option.type.tier
|
||||
let lastTier = option.type!.tier
|
||||
if (option.alternates && option.alternates.length > 0) {
|
||||
for (var i = 0; i < option.alternates.length; i++) {
|
||||
if (option.alternates[i] > lastTier) {
|
||||
@ -7225,7 +7223,7 @@ export class SelectModifierPhase extends BattlePhase {
|
||||
} else {
|
||||
this.scene.reroll = true;
|
||||
LoggerTools.logActions(this.scene, this.scene.currentBattle.waveIndex, "+1 Reroll")
|
||||
this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, typeOptions.map(o => o.type.tier), this.predictionCost, this.modifierPredictions));
|
||||
this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, typeOptions.map(o => o.type!.tier), this.predictionCost, this.modifierPredictions));
|
||||
this.scene.ui.clearText();
|
||||
this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end());
|
||||
if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) {
|
||||
@ -7241,7 +7239,7 @@ export class SelectModifierPhase extends BattlePhase {
|
||||
{
|
||||
this.scene.reroll = true;
|
||||
LoggerTools.logActions(this.scene, this.scene.currentBattle.waveIndex, "-1 Reroll")
|
||||
this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount - 1, typeOptions.map(o => o.type.tier), this.predictionCost, this.modifierPredictions));
|
||||
this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount - 1, typeOptions.map(o => o.type!.tier), this.predictionCost, this.modifierPredictions));
|
||||
this.scene.ui.clearText();
|
||||
this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end());
|
||||
if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) {
|
||||
@ -7369,7 +7367,7 @@ export class SelectModifierPhase extends BattlePhase {
|
||||
: modifierType.newModifier(party[slotIndex], option as integer)
|
||||
: modifierType.newModifier(party[slotIndex], option - PartyOption.MOVE_1);
|
||||
if (isPpRestoreModifier) {
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, modifierType.name + " → " + this.scene.getParty()[slotIndex].name + " → " + this.scene.getParty()[slotIndex].moveset[option - PartyOption.MOVE_1].getName())
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, modifierType.name + " → " + this.scene.getParty()[slotIndex].name + " → " + this.scene.getParty()[slotIndex].moveset[option - PartyOption.MOVE_1]!.getName())
|
||||
} else if (isRememberMoveModifier) {
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, modifierType.name + " → " + this.scene.getParty()[slotIndex].name)
|
||||
} else if (isTmModifier) {
|
||||
@ -7385,7 +7383,7 @@ export class SelectModifierPhase extends BattlePhase {
|
||||
}, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId, isPpRestoreModifier);
|
||||
}
|
||||
} else {
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, modifierType.name)
|
||||
LoggerTools.logShop(this.scene, this.scene.currentBattle.waveIndex, modifierType!.name)
|
||||
applyModifier(modifierType!.newModifier()!); // TODO: is the bang correct?
|
||||
}
|
||||
|
||||
@ -7395,10 +7393,10 @@ export class SelectModifierPhase extends BattlePhase {
|
||||
this.modifierPredictions.forEach((mp, r) => {
|
||||
console.log("Rerolls: " + r)
|
||||
mp.forEach((m, i) => {
|
||||
console.log(" " + m.type.name)
|
||||
console.log(" " + m.type!.name)
|
||||
if (m.alternates) {
|
||||
let showedLuckFlag = false
|
||||
for (var j = 0, currentTier = m.type.tier; j < m.alternates.length; j++) {
|
||||
for (var j = 0, currentTier = m.type!.tier; j < m.alternates.length; j++) {
|
||||
if (m.alternates[j] > currentTier) {
|
||||
currentTier = m.alternates[j]
|
||||
if (m.advancedAlternates) {
|
||||
|
Loading…
Reference in New Issue
Block a user