Converting to held item pools

This commit is contained in:
Wlowscha 2025-06-14 08:15:05 +02:00
parent 6fb85ea742
commit be84790b2d
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
4 changed files with 123 additions and 0 deletions

View File

@ -127,6 +127,10 @@ function getHeldItemCategory(itemId: HeldItemId): HeldItemCategoryId {
return itemId & ITEM_CATEGORY_MASK; return itemId & ITEM_CATEGORY_MASK;
} }
export function isCategoryId(categoryId: HeldItemCategoryId): boolean {
return (categoryId & ITEM_CATEGORY_MASK) === categoryId;
}
export function isItemInCategory(itemId: HeldItemId, category: HeldItemCategoryId): boolean { export function isItemInCategory(itemId: HeldItemId, category: HeldItemCategoryId): boolean {
return getHeldItemCategory(itemId) === category; return getHeldItemCategory(itemId) === category;
} }

8
src/enums/reward-tier.ts Normal file
View File

@ -0,0 +1,8 @@
export enum RewardTier {
COMMON,
GREAT,
ULTRA,
ROGUE,
MASTER,
LUXURY,
}

View File

@ -9,6 +9,7 @@ type HELD_ITEM_DATA = BASE_STAT_TOTAL_DATA | BASE_STAT_FLAT_DATA;
interface HeldItemProperties { interface HeldItemProperties {
stack: number; stack: number;
disabled?: boolean; disabled?: boolean;
unstealable?: boolean; //TODO: ensure this is taken into account by stealing effects
cooldown?: number; cooldown?: number;
data?: HELD_ITEM_DATA; data?: HELD_ITEM_DATA;
} }

110
src/items/held-item-pool.ts Normal file
View File

@ -0,0 +1,110 @@
/*
import type { PlayerPokemon } from "#app/field/pokemon";
import { randSeedInt } from "#app/utils/common";
import { HeldItemCategoryId, HeldItemId, isCategoryId } from "#enums/held-item-id";
import { RewardTier } from "#enums/reward-tier";
interface HeldItemPoolEntry {
weight: number;
item: HeldItemId | HeldItemCategoryId;
}
export type HeldItemPool = {
[key in RewardTier]?: HeldItemPoolEntry[];
};
const dailyStarterHeldItemPool: HeldItemPool = {
[RewardTier.COMMON]: [
{ item: HeldItemCategoryId.BASE_STAT_BOOST, weight: 1 },
{ item: HeldItemCategoryId.BERRY, weight: 3 },
],
[RewardTier.GREAT]: [{ item: HeldItemCategoryId.TYPE_ATTACK_BOOSTER, weight: 5 }],
[RewardTier.ULTRA]: [
{ item: HeldItemId.REVIVER_SEED, weight: 4 },
{ item: HeldItemId.SOOTHE_BELL, weight: 1 },
{ item: HeldItemId.SOUL_DEW, weight: 1 },
{ item: HeldItemId.GOLDEN_PUNCH, weight: 1 },
],
[RewardTier.ROGUE]: [
{ item: HeldItemId.GRIP_CLAW, weight: 5 },
{ item: HeldItemId.BATON, weight: 2 },
{ item: HeldItemId.FOCUS_BAND, weight: 5 },
{ item: HeldItemId.QUICK_CLAW, weight: 3 },
{ item: HeldItemId.KINGS_ROCK, weight: 3 },
],
[RewardTier.MASTER]: [
{ item: HeldItemId.LEFTOVERS, weight: 1 },
{ item: HeldItemId.SHELL_BELL, weight: 1 },
],
};
export function getDailyRunStarterHeldItems(party: PlayerPokemon[]): PokemonHeldItemModifier[] {
const ret: HeldItemId[] = [];
for (const p of party) {
for (let m = 0; m < 3; m++) {
const tierValue = randSeedInt(64);
let tier: RewardTier;
if (tierValue > 25) {
tier = RewardTier.COMMON;
} else if (tierValue > 12) {
tier = RewardTier.GREAT;
} else if (tierValue > 4) {
tier = RewardTier.ULTRA;
} else if (tierValue) {
tier = RewardTier.ROGUE;
} else {
tier = RewardTier.MASTER;
}
const item = getNewHeldItemFromPool(party, dailyStarterHeldItemPool, tier);
ret.push(item);
}
}
return ret;
}
function getNewModifierTypeOption(
party: Pokemon[],
poolType: ModifierPoolType,
baseTier?: ModifierTier,
upgradeCount?: number,
retryCount = 0,
allowLuckUpgrades = true,
): ModifierTypeOption | null {
const player = !poolType;
const pool = getModifierPoolForType(poolType);
const thresholds = getPoolThresholds(poolType);
const tier = determineTier(party, player, baseTier, upgradeCount, retryCount, allowLuckUpgrades);
const tierThresholds = Object.keys(thresholds[tier]);
const totalWeight = Number.parseInt(tierThresholds[tierThresholds.length - 1]);
const value = randSeedInt(totalWeight);
let index: number | undefined;
for (const t of tierThresholds) {
const threshold = Number.parseInt(t);
if (value < threshold) {
index = thresholds[tier][threshold];
break;
}
}
if (index === undefined) {
return null;
}
if (player) {
console.log(index, ignoredPoolIndexes[tier].filter(i => i <= index).length, ignoredPoolIndexes[tier]);
}
const item = pool[tier][index].item;
if (isCategoryId(item)) {
return getNewHeldItemCategoryOption(item);
}
return item;
// console.log(modifierType, !player ? "(enemy)" : "");
}
*/