重构多次叠加的队长技

This commit is contained in:
枫谷剑仙 2023-01-18 19:46:28 +08:00
parent 3bb71828a2
commit fbda58f988
6 changed files with 130 additions and 64 deletions

View File

@ -19,7 +19,7 @@
}
GM_xmlhttpRequest({
method: "POST",
url: `https://api2.paddb.net/getTeam`, //版本文件
url: `https://api2.paddb.net/getTeam`,
data: '{"id":"63b287659b239a72f6cc79b1"}',
headers: {
"Content-Type": "application/json",

View File

@ -102,7 +102,7 @@
rate_multiply_coin: tp`${'icon'}金幣掉落率`,
rate_multiply_exp: tp`${'icon'}等級經驗倍率`,
reduce_damage: tp`${'condition'}受到的${'attrs'}傷害${'chance'}${'icon'}減少${'value'}`,
power_up: tp`${'condition'}${'targets'}${'target'}${'value'}${'reduceDamage'}${'addCombo'}${'followAttack'}`,
power_up: tp`${'condition'}${'targets'}${'target'}${'each_time'}${'value'}${'reduceDamage'}${'additional'}`,
power_up_targets: tp`${'attrs_types'}`,
henshin: tp`變身為${'cards'}`,
random_henshin: tp`隨機變身為${'cards'}`,
@ -129,8 +129,7 @@
scale_match_length_bonus: tp`每多1個${'bonus'},最大${'max'}個時${'stats_max'}`,
scale_remain_orbs: tp`剩餘寶珠 ≤ ${'max'}${'stats'}${'bonus'}`,
scale_remain_orbs_bonus: tp`每少1個${'bonus'},最少${'min'}個時${'stats_max'}`,
scale_cross: tp`每以十字形式消除5個${'orbs'}1次時${'stats'}`,
scale_cross_single: tp`以十字形式消除5個${'orbs'}${'stats'}`,
scale_cross: tp`以十字形式消除5個${'orbs'}${'each_time'}${'stats'}`,
scale_state_kind_count: tp`以隊伍中[${'awakenings'}${'attrs'}${'types'}]的數量提升,每個${'stats'}`,
},
cond: {
@ -144,7 +143,7 @@
remain_orbs: tp`剩餘寶珠 ≤ ${'value'}`,
exact_combo: tp`剛好${'value'}連擊時`,
exact_length: tp`剛好${'value'}`,
exact_match_length: tp`相連消除${'length'}${'orbs'}時,${'times'}`,
exact_match_length: tp`相連消除${'length'}${'orbs'}時,`,
exact_match_enhanced: tp`並且其中包含至少一個強化寶珠`,
compo_type_card: tp`隊伍中同時存在 ${'ids'}`,

View File

@ -103,7 +103,7 @@
rate_multiply_coin: tp`${'icon'}金币掉落率`,
rate_multiply_exp: tp`${'icon'}等级经验倍率`,
reduce_damage: tp`${'condition'}受到的${'attrs'}伤害${'chance'}${'icon'}减少${'value'}`,
power_up: tp`${'condition'}${'targets'}${'target'}${'value'}${'reduceDamage'}${'addCombo'}${'followAttack'}`,
power_up: tp`${'condition'}${'targets'}${'target'}${'each_time'}${'value'}${'reduceDamage'}${'additional'}`,
power_up_targets: tp`${'attrs_types'}`,
henshin: tp`变身为${'cards'}`,
random_henshin: tp`随机变身为${'cards'}`,
@ -130,8 +130,7 @@
scale_match_length_bonus: tp`每多1个${'bonus'},最大${'max'}个时${'stats_max'}`,
scale_remain_orbs: tp`剩余宝珠 ≤ ${'max'}${'stats'}${'bonus'}`,
scale_remain_orbs_bonus: tp`每少1个${'bonus'},最少${'min'}个时${'stats_max'}`,
scale_cross: tp`每以十字形式消除5个${'orbs'}1次时${'stats'}`,
scale_cross_single: tp`以十字形式消除5个${'orbs'}${'stats'}`,
scale_cross: tp`以十字形式消除5个${'orbs'}${'each_time'}${'stats'}`,
scale_state_kind_count: tp`以队伍中[${'awakenings'}${'attrs'}${'types'}]的数量提升,每个${'stats'}`,
},
cond: {
@ -145,7 +144,7 @@
remain_orbs: tp`剩余宝珠 ≤ ${'value'}`,
exact_combo: tp`刚好${'value'}连击时`,
exact_length: tp`刚好${'value'}`,
exact_match_length: tp`相连消除${'length'}${'orbs'}时,${'times'}`,
exact_match_length: tp`相连消除${'length'}${'orbs'}时,`,
exact_match_enhanced: tp`并且其中包含至少一个强化宝珠`,
compo_type_card: tp`队伍中同时存在 ${'ids'}`,

View File

@ -119,7 +119,7 @@ let localTranslating = {
rate_multiply_coin: tp`${'icon'}Coins`,
rate_multiply_exp: tp`${'icon'}Rank EXP`,
reduce_damage: tp`${'condition'}${'chance'}${'icon'}Reduces ${'attrs'} damage taken by ${'value'}`,
power_up: tp`${'condition'}${'targets'}${'value'}${'reduceDamage'}${'addCombo'}${'followAttack'}`,
power_up: tp`${'condition'}${'targets'}${'each_time'}${'value'}${'reduceDamage'}${'additional'}`,
power_up_targets: tp`[${'attrs_types'}]'s `, //attrs, types, attrs_types
henshin: tp`Transforms into ${'cards'}`,
random_henshin: tp`Random transforms into ${'cards'}`,
@ -146,9 +146,8 @@ let localTranslating = {
scale_match_length_bonus: tp`, ${'bonus'} per orbs additionalup to ${'stats_max'} for ${'max'} orbs`,
scale_remain_orbs: tp`When ≤ ${'max'} orbs remain on the board ${'stats'}${'bonus'}`,
scale_remain_orbs_bonus: tp`, ${'bonus'} for each fewer orb, up to ${'stats_max'} for ${'min'} orbs`,
scale_cross: tp`When matching each cross of 5 ${'orbs'} ${'stats'}`,
scale_cross_single: tp`When matching a cross of 5 ${'orbs'} ${'stats'}`,
scale_state_kind_count: tp`${'stats'} for each [${'awakenings'}${'attrs'}${'types'}] in team`,
scale_cross: tp`When matching cross of 5 ${'orbs'} ${'each_time'}${'stats'}`,
scale_state_kind: tp`${'stats'} for each [${'awakenings'}${'attrs'}${'types'}] in team`,
},
cond: {
unknown: tp`[ Unknown condition ]`,
@ -161,7 +160,7 @@ let localTranslating = {
remain_orbs: tp`When ≤ ${'value'} Orbs on the board `,
exact_combo: tp`When exactly ${'value'} combos `,
exact_length: tp`exactly of ${'value'} `,
exact_match_length: tp`When matching ${'length'}${'value'}${'orbs'}, ${'times'} `,
exact_match_length: tp`When matching ${'length'}${'value'}${'orbs'}, `,
exact_match_enhanced: tp` orbs including enhanced`,
compo_type_card: tp`When ${'ids'} are all on team, `,
@ -248,7 +247,7 @@ let localTranslating = {
affix_type: tp`${'cotent'} types`,
affix_awakening: tp`${'cotent'} awoken`,
affix_exclude: tp`, exclude ${'cotent'}`,
each_time: tp`each time`,
each_time: tp`each time `,
different: tp`different`,
same: tp`the same`,
},
@ -1405,7 +1404,7 @@ const specialSearchFunctions = (function() {
ul.className = "board";
orbs.forEach(orbType => {
const li = ul.appendChild(document.createElement("li"));
li.className = `orb-icon`;
li.className = `orb`;
li.setAttribute("data-orb-icon", orbType);
});
return ul;
@ -2552,7 +2551,7 @@ const specialSearchFunctions = (function() {
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
}).sort((a,b)=>sortByParams(a,b,searchTypeArray));
}).sort((a,b)=>sortByParams(a,b,searchTypeArray,1));
},
addition:card=>{
const searchTypeArray = [244];
@ -2561,7 +2560,7 @@ const specialSearchFunctions = (function() {
const sk = skill.params;
let width, height;
switch (type) {
switch (sk[1]) {
case 1: {
width = 7;
height = 6;
@ -3183,6 +3182,22 @@ const specialSearchFunctions = (function() {
return `${strArr.join(" ")}`;
}
},
{name:"Delay active after skill use",otLangName:{chs:"技能使用后延迟生效",cht:"技能使用后延迟生效"},
function:cards=>{
const searchTypeArray = [248];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
}).sort((a,b)=>sortByParams(a,b,searchTypeArray))
},
addition:card=>{
const searchTypeArray = [248];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
return `延迟${sk[0]}T`;
}
},
]},
{group:true,name:"======Leader Skills=====",otLangName:{chs:"======队长技======",cht:"======隊長技======"}, functions: [
@ -3203,20 +3218,57 @@ const specialSearchFunctions = (function() {
{name:"L Shape Matching",otLangName:{chs:"L消除",cht:"L消除"},
function:cards=>cards.filter(card=>card.leaderSkillTypes.matchMode.LShape)
},
{name:"Cross(十) of Heal Orbs",otLangName:{chs:"十字心",cht:"十字心"},
{name:"5 Orbs including enhanced Matching",otLangName:{chs:"5珠含强化消除",cht:"5珠含強化消除"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [151,209];
const skill = getCardLeaderSkill(card, searchTypeArray);
return skill;
const searchTypeArray = [150];
const skill = getCardLeaderSkill(card, searchTypeArray);
return skill;
})
},
{name:"Cross(十) of Color Orbs",otLangName:{chs:"N个十字",cht:"N個十字"},
{name:"Cross(十) of Heal Orbs",otLangName:{chs:"十字",cht:"十字"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [157];
const skill = getCardLeaderSkill(card, searchTypeArray);
return skill;
const searchTypeArray = [151,209];
const skill = getCardLeaderSkill(card, searchTypeArray);
return skill;
})
},
{name:"Stacked Magnifications of Cross(十)",otLangName:{chs:"十字叠加倍率",cht:"十字疊加倍率"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [157];
const skill = getCardLeaderSkill(card, searchTypeArray);
return skill;
})
},
{name:"Stacked Magnifications of Matching",otLangName:{chs:"指定长度消除叠加倍率",cht:"指定長度消除疊加倍率"},
function:cards=>{
const searchTypeArray = [235];
return cards.filter(card=>{
const skill = getCardLeaderSkill(card, searchTypeArray);
if (!skill) return false;
const sk = skill.params;
if (!sk[3] || sk[3] === 100) return false;
return skill;
}).sort((a,b)=>sortByParams(a,b,searchTypeArray,2));
},
addition:card=>{
const searchTypeArray = [235];
const skill = getCardLeaderSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
if (!sk[3] || sk[3] === 100) return;
const fragment = document.createDocumentFragment();
const sup = document.createElement("sup");
sup.textContent = "N";
const orbs = createOrbsList(flags(sk[0]));
fragment.append(`ATK×${sk[3]/100}`,sup,"/",orbs);
if (sk[1]) {
fragment.append(`×≥${sk[1]}`);
} else {
fragment.append(`×${sk[2]}`);
}
return fragment;
}
},
{name:"Less remain on the board",otLangName:{chs:"剩珠倍率",cht:"剩珠倍率"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [177];

View File

@ -428,7 +428,7 @@ const SkillPowerUpKind = {
ScaleMatchAttrs: 'scale-match-attrs',
ScaleCross: 'scale-cross',
ScaleRemainOrbs: 'scale-remain-orbs',
ScaleStateKindCount: 'scale-state-kind-count',
ScaleStateKind: 'scale-state-kind',
};
const SkillKinds = {
@ -545,7 +545,7 @@ function skillParser(skillId)
fixedDamages.forEach(skill=>skills.splice(skills.indexOf(skill),1)); //去掉所有后面的
}
let skillPowerUp = skills.filter(skill=>skill.kind == SkillKinds.PowerUp);
if (skillPowerUp.length>1)
if (skillPowerUp.length > 1 || (skillPowerUp[0] && skillPowerUp[0]?.value?.kind === SkillPowerUpKind.ScaleCross))
{
//合并技能效果
function combinePowerUp(target, source) {
@ -589,7 +589,7 @@ function skillParser(skillId)
skill.value.crosses.splice(1);
}
}
//每个十字技能,先把所有属性合并
//每个十字技能,先把所有属性合并到自身
scaleCross.forEach(mergeScaleCrossAttr);
//筛选出所有倍率一样的子技能
scaleCross = scaleCross.filter((skill,idx,arr)=>{
@ -926,10 +926,7 @@ const p = {
return { kind: SkillPowerUpKind.ScaleCombos ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleMatchLength: function (attrs, min, max, baseMul, bonusMul, matchAll = false) {
/*if (min <= 3 && min === max)
return this.scaleAttrs(attrs, matchAll ? attrs.length : 1, matchAll ? attrs.length : 1, baseMul, bonusMul);
else*/
return { kind: SkillPowerUpKind.ScaleMatchLength, attrs: attrs, matchAll: matchAll ,...this.scale(min, max, baseMul, bonusMul) };
return { kind: SkillPowerUpKind.ScaleMatchLength, attrs, matchAll,...this.scale(min, max, baseMul, bonusMul) };
},
scaleMatchAttrs: function (matches, min, max, baseMul, bonusMul) {
const flatMatches = matches.flat(); //当匹配的全是不同颜色时,切换成匹配颜色的技能
@ -944,8 +941,11 @@ const p = {
scaleRemainOrbs: function (max, baseMul, bonusMul) {
return { kind: SkillPowerUpKind.ScaleRemainOrbs ,...this.scale(bonusMul ? 0 : max, max, baseMul, bonusMul) };
},
scaleStateKindCount: function (awakenings, attrs, types, value) {
return { kind: SkillPowerUpKind.ScaleStateKindCount, awakenings: awakenings, attrs: attrs, types: types, value: value };
scaleStateKind: function (awakenings, attrs, types, value) {
return { kind: SkillPowerUpKind.ScaleStateKind, awakenings: awakenings, attrs: attrs, types: types, value: value };
},
scaleMatchLengthTimes: function (attrs, min, exact, bonusMul) {
return { kind: SkillPowerUpKind.ScaleMatchLengthTimes, attrs, min, exact, bonusMul };
},
}
@ -985,16 +985,15 @@ function generateOrbs(orbs, exclude, count, time) {
function fixedOrbs(...generates) {
return { kind: SkillKinds.FixedOrbs, generates: generates };
}
function powerUp(attrs, types, value, condition = null, reduceDamageValue = null, additional = []) {
function powerUp(attrs, types, value, condition = null, reduceDamage = null, additional = [], eachTime = false) {
if (value.kind === SkillPowerUpKind.Multiplier) {
let hp = value.hp, atk = value.atk, rcv = value.rcv;
if (hp === 1 && atk === 1 && rcv === 1 && !reduceDamage)
return null;
}
if (attrs?.targets != undefined) {
return { kind: SkillKinds.PowerUp, targets: attrs.targets, attrs: null, types: null, condition: condition, value: value, reduceDamage: reduceDamageValue, additional: additional};
}
return { kind: SkillKinds.PowerUp, attrs: attrs, types: types, condition: condition, value: value, reduceDamage: reduceDamageValue, additional: additional};
let targets = attrs?.targets;
if (targets) {attrs = null; types = null;}
return { kind: SkillKinds.PowerUp, targets, attrs, types, condition, value, reduceDamage, additional, eachTime};
}
function counterAttack(attr, prob, value) {
return { kind: SkillKinds.CounterAttack, attr: attr, prob: prob, value: value };
@ -1328,7 +1327,7 @@ const skillObjectParsers = {
}else
{
return activeTurns(turns, type === 2 ?
powerUp(null, null, p.scaleStateKindCount([awoken1, awoken2, awoken3].filter(Boolean), null, null, p.mul({atk: mul - 100, hp:0, rcv:0}))) :
powerUp(null, null, p.scaleStateKind([awoken1, awoken2, awoken3].filter(Boolean), null, null, p.mul({atk: mul - 100, hp:0, rcv:0}))) :
reduceDamage('all', v.percentAwakenings([awoken1, awoken2, awoken3].filter(Boolean), v.percent(mul)))
);
}
@ -1370,7 +1369,7 @@ const skillObjectParsers = {
[167](attrs, min, baseAtk, baseRcv, bonusAtk, bonusRcv, max) { return powerUp(null, null, p.scaleMatchLength(flags(attrs), min, max, [baseAtk, baseRcv], [bonusAtk, bonusRcv])); },
[168](turns, awoken1, awoken2, awoken3, awoken4, awoken5, awoken6, mul) {
return activeTurns(turns,
powerUp(null, null, p.scaleStateKindCount([awoken1, awoken2, awoken3, awoken4, awoken5, awoken6].filter(Boolean), null, null, p.mul({atk: mul, hp:0, rcv:0})))
powerUp(null, null, p.scaleStateKind([awoken1, awoken2, awoken3, awoken4, awoken5, awoken6].filter(Boolean), null, null, p.mul({atk: mul, hp:0, rcv:0})))
);
},
[169](min, base, percent, bonus, max) { return powerUp(null, null, p.scaleCombos(min, max ?? min, [base || 100, 100], [bonus, 0]), null, v.percent(percent)); },
@ -1574,11 +1573,11 @@ const skillObjectParsers = {
[227]() { return leaderChange(1); },
[228](turns, attrs, types, atk, rcv) {
return activeTurns(turns,
powerUp(null, null, p.scaleStateKindCount(null, flags(attrs), flags(types), p.mul({atk: atk, rcv: rcv ?? 0, hp:0})))
powerUp(null, null, p.scaleStateKind(null, flags(attrs), flags(types), p.mul({atk: atk, rcv: rcv ?? 0, hp:0})))
);
},
[229](attrs, types, hp, atk, rcv) {
return powerUp(null, null, p.scaleStateKindCount(null, flags(attrs), flags(types), p.mul({hp: hp || 0, atk: atk || 0, rcv: rcv || 0})));
return powerUp(null, null, p.scaleStateKind(null, flags(attrs), flags(types), p.mul({hp: hp || 0, atk: atk || 0, rcv: rcv || 0})));
},
[230](turns, target, mul) {
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
@ -1586,13 +1585,26 @@ const skillObjectParsers = {
return activeTurns(turns, powerUp({targets: typeArr}, null, p.mul({ atk: mul })));
},
[231](turns, awoken1, awoken2, awoken3, awoken4, awoken5, atk, rcv) {
return activeTurns(turns, powerUp(null, null, p.scaleStateKindCount([awoken1, awoken2, awoken3, awoken4, awoken5].filter(Boolean), null, null, p.mul({atk: atk, hp:0, rcv: rcv}))));
return activeTurns(turns, powerUp(null, null, p.scaleStateKind([awoken1, awoken2, awoken3, awoken4, awoken5].filter(Boolean), null, null, p.mul({atk: atk, hp:0, rcv: rcv}))));
},
[232](...ids) { return evolvedSkills(false, ids.map(id => this.parser(id))); },
[233](...ids) { return evolvedSkills(true, ids.map(id => this.parser(id))); },
[234](min, max) { return skillProviso(c.stage(min ?? 0, max ?? 0)); },
[235](attr, _, len, atk, percent, combo, damage) {
return powerUp(null, null, p.mul({ atk: atk || 100}), c.exact('match-length', len, flags(attr), true), v.percent(percent), [combo ? addCombo(combo) : null, damage ? followAttackFixed(damage) : null].filter(Boolean));
[235](attrs, lenMin, lenExact, atk, reducePercent, combo, damage) {
const len = lenMin || lenExact; //宝珠长度
const ee = Boolean(lenExact); //是否为刚好等于
//第二个参数为多少以上就算,第三个参数为多少以上才算
//return powerUp(null, null, p.mul({ atk: atk || 100}), c.exact('match-length', lenExact, flags(attr)), v.percent(percent), [combo ? addCombo(combo) : null, damage ? followAttackFixed(damage) : null].filter(Boolean), true);
//let powerup, condition;
let powerup = Boolean(lenMin)
? p.scaleMatchLength(flags(attrs), lenMin, lenMin, [atk, 100], [0, 0])
: p.mul({ atk: atk || 100});
let condition = Boolean(lenExact)
? c.exact('match-length', lenExact, flags(attrs))
: null;
let additional = [combo ? addCombo(combo) : null, damage ? followAttackFixed(damage) : null].filter(Boolean);
const eachTime = true;
return powerUp(null, null, powerup, condition, v.percent(reducePercent), additional, eachTime);
},
[236](...ids) { //随机变身
return henshin(ids.distinct(), true);
@ -2418,10 +2430,11 @@ function renderSkill(skill, option = {})
break;
}
case SkillKinds.PowerUp: {
let attrs = skill.attrs, types = skill.types, targets = skill.targets, condition = skill.condition, value = skill.value, reduceDamage = skill.reduceDamage, additional = skill.additional;
let { attrs, types, targets, condition, value, reduceDamage, additional, eachTime } = skill;
let dict = {
icon: createIcon(skill.kind),
};
let comma = tsp.word.comma;
if (condition) dict.condition = renderCondition(condition);
let targetDict = {}, attrs_types = [];
@ -2449,7 +2462,6 @@ function renderSkill(skill, option = {})
if (attrs_types.length) dict.targets = tsp.skill.power_up_targets(targetDict);
let subDocument = [];
if (value){
/*if (attrs?.includes(5) && value.kind == SkillPowerUpKind.Multiplier)
{ //如果属性有5则是回复力
@ -2463,22 +2475,23 @@ function renderSkill(skill, option = {})
//不显示 value
}else
{
subDocument.push(renderPowerUp(value));
dict.value = renderPowerUp(value);
}
}
if (reduceDamage && reduceDamage.value > 0) {
subDocument.push(tsp.skill.reduce_damage({
let reduceDamageNode = tsp.skill.reduce_damage({
value: renderValue(reduceDamage, {percent: true}),
icon: createIcon("reduce-damage"),
}));
});
dict.reduceDamage = [comma(), reduceDamageNode].nodeJoin();
}
if (additional?.length) {
for (const subSkill of additional.filter(Boolean))
{
subDocument.push(renderSkill(subSkill, option));
}
let additionalNode = additional.filter(Boolean).map(subSkill=>renderSkill(subSkill, option));
dict.additional = [comma(), additionalNode.nodeJoin(comma())].nodeJoin();
}
if (eachTime) {
dict.each_time = tsp.word.each_time();
}
dict.value = subDocument.filter(Boolean).nodeJoin(tsp.word.comma());
frg.ap(tsp.skill.power_up(dict));
break;
}
@ -2817,7 +2830,7 @@ function renderCondition(cond) {
};
frg.ap(tsp.power.scale_attributes(dict));
} else if (cond.exact) {
const { type, attrs , value, multiple } = cond.exact;
const { type, attrs , value} = cond.exact;
if (type === 'combo') {
let dict = { value };
frg.ap(tsp.cond.exact_combo(dict));
@ -2828,9 +2841,6 @@ function renderCondition(cond) {
if (value) {
dict.length = tsp.cond.exact_length({value:renderValue(v.constant(value), {unit: tsp.unit.orbs})});
}
if (multiple) {
dict.times = tsp.word.each_time();
}
frg.ap(tsp.cond.exact_match_length(dict));
}
@ -3076,8 +3086,9 @@ function renderPowerUp(powerUp) {
let dict = {
orbs: renderOrbs(cross.attr, {affix: true, any: true}),
stats: renderStats(1, cross.atk, cross.rcv),
each_time: cross.single ? null : tsp.word.each_time(),
}
return cross.single ? tsp.power.scale_cross_single(dict) : tsp.power.scale_cross(dict);
return tsp.power.scale_cross(dict);
});
frg.ap(subDocument.nodeJoin(tsp.word.comma()));
//}
@ -3103,7 +3114,7 @@ function renderPowerUp(powerUp) {
break;
}
case SkillPowerUpKind.ScaleStateKindCount: {
case SkillPowerUpKind.ScaleStateKind: {
let awakenings = powerUp.awakenings, attrs = powerUp.attrs, types = powerUp.types, value = powerUp.value;
let dict = {
stats: renderStats(value.hp, value.atk, value.rcv, {mul: false, percent: true}),
@ -3111,7 +3122,7 @@ function renderPowerUp(powerUp) {
attrs: attrs?.length && renderAttrs(attrs, {affix: true}) || null,
types: types?.length && renderTypes(types, {affix: true}) || null,
}
frg.ap(tsp.power.scale_state_kind_count(dict));
frg.ap(tsp.power.scale_state_kind(dict));
break;
}
default:

View File

@ -1522,6 +1522,11 @@ icon.inflicts::after
transform: scale(0.75);
margin: calc(-32px * (1 - 0.75) / 2);
}
.custom-addition .board .orb {
filter: unset;
transform: scale(0.5);
margin: calc(-36px * (1 - 0.5) / 2);
}
.cd-preview .cd-max,
.cd-preview .cd-min,