Skip to content

Commit

Permalink
Merge 3a145ae into 12298ec
Browse files Browse the repository at this point in the history
  • Loading branch information
frzyc authored Nov 9, 2024
2 parents 12298ec + 3a145ae commit 55d92ed
Show file tree
Hide file tree
Showing 113 changed files with 1,551 additions and 691 deletions.
12 changes: 12 additions & 0 deletions libs/pando/engine/src/node/optimization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,18 @@ function dedupMapArray<I, O>(x: I[], map: (_: I) => O): O[] {
return x.every((x, i) => (x as any) === newX[i]) ? (x as any) : newX
}

/**
* Generates a custom function, "cuz speed".
*
* @param n
* @param dynTagCategory
* @param slotCount
* @param initial
* @param header
* @returns a custom function that accepts an array `_` of data.
*
* NOTE: `slotCount` === `_.length` for optimization reasons.
*/
export function compile(
n: NumTagFree[],
dynTagCategory: string,
Expand Down
6 changes: 6 additions & 0 deletions libs/sr/formula/src/data/common/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { max, min, prod } from '@genshin-optimizer/pando/engine'
import { allLightConeKeys } from '@genshin-optimizer/sr/consts'
import type { TagMapNodeEntries } from '../util'
import { own, ownBuff, percent, reader } from '../util'
import dmg from './dmg'
Expand All @@ -14,6 +15,11 @@ const data: TagMapNodeEntries = [
// convert sheet:<char/lightCone> to sheet:agg for accumulation
// sheet:<relic> is reread in src/util.ts:relicsData()
reader.sheet('agg').reread(reader.sheet('char')),

// add all light cones by default
...allLightConeKeys.map((lc) =>
reader.sheet('lightCone').reread(reader.sheet(lc))
),
reader.sheet('agg').reread(reader.sheet('lightCone')),

// Final <= Premod <= Base
Expand Down
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/ASecretVow.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'ASecretVow'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/Adversarial.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'Adversarial'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/AfterTheCharmonyFall.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'AfterTheCharmonyFall'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/AlongThePassingShore.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'AlongThePassingShore'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/Amber.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'Amber'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/AnInstantBeforeAGaze.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'AnInstantBeforeAGaze'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
19 changes: 13 additions & 6 deletions libs/sr/formula/src/data/lightCone/sheets/Arrows.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { subscript } from '@genshin-optimizer/pando/engine'
import { cmpGE, subscript } from '@genshin-optimizer/pando/engine'
import type { LightConeKey } from '@genshin-optimizer/sr/consts'
import { allStats, mappedStats } from '@genshin-optimizer/sr/stats'
import {
Expand All @@ -17,7 +17,7 @@ import { entriesForLightCone } from '../util'
const key: LightConeKey = 'Arrows'
const data_gen = allStats.lightCone[key]
const dm = mappedStats.lightCone[key]

const lcCount = own.common.count.sheet(key)
const { superimpose } = own.lightCone

// TODO: Add conditionals
Expand All @@ -28,20 +28,27 @@ const { numConditional } = allNumConditionals(key, true, 0, 2)
const sheet = register(
key,
// Handles base stats and passive buffs
entriesForLightCone(data_gen),
entriesForLightCone(key, data_gen),

// TODO: Add formulas/buffs
// Conditional buffs
registerBuff(
'cond_dmg_',
ownBuff.premod.dmg_.add(
boolConditional.ifOn(subscript(superimpose, dm.cond_dmg_))
boolConditional.ifOn(
cmpGE(lcCount, 1, subscript(superimpose, dm.cond_dmg_))
)
)
),
registerBuff(
'team_dmg_',
teamBuff.premod.dmg_.add(listConditional.map({ val1: 1, val2: 2 }))
teamBuff.premod.dmg_.add(
cmpGE(lcCount, 1, listConditional.map({ val1: 1, val2: 2 }))
)
),
registerBuff('enemy_defIgn_', enemyDebuff.common.defIgn_.add(numConditional))
registerBuff(
'enemy_defIgn_',
enemyDebuff.common.defIgn_.add(cmpGE(lcCount, 1, numConditional))
)
)
export default sheet
Loading

0 comments on commit 55d92ed

Please sign in to comment.