优化许多技能图标

This commit is contained in:
枫谷剑仙 2024-07-01 19:13:12 +08:00
parent e74ec64c70
commit 33f76abb41
11 changed files with 107 additions and 60 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -85,7 +85,7 @@ const _localTranslating = {
auto_heal: tp`${'icon'}消除宝珠的回合,回复${'belong_to'}${'value'}${'stats'}`,
ctw: tp`${'icon'}${'time'}内时间停止,可以任意移动宝珠${'addition'}`,
ctw_addition: tp`,达成${'cond'}时,${'skill'}`,
gravity: tp`${'icon'}造成${'target'}${'value'}的伤害`,
gravity: tp`造成${'target'}${'icon'}${'value'}的伤害`,
resolve: tp`${'icon'}${'stats'}${'min'}受到单一次致命攻击时将会以1点 HP 生还`,
board_change: tp`全画面的宝珠变为${'orbs'}`,
skill_boost: tp`自身以外成员的技能冷却储备${'icon'}${'turns_min'}${'turns_max'}`,
@ -129,7 +129,8 @@ const _localTranslating = {
obstruct_opponent_after_me: tp`排名比自身低的对手`,
obstruct_opponent_before_me: tp`排名比自身高的对手`,
obstruct_opponent_designated_position: tp`${'positions'}排位的对手`,
increase_damage_cap: tp`${'targets'}${'icon'}伤害上限提升到${'cap'}`,
slot_power_up: tp`${'targets'}${'icon'}${'value'}`,
increase_damage_cap: tp`${'targets'}${'icon'}伤害上限变为${'cap'}`,
board_jamming_state: tp`${'position'}生成${'icon'}${'state'}${'size'}${'count'}${'comment'}`,
board_size_change: tp`板面大小改变为${'icon'}${'size'}`,
remove_assist: tp`${'icon'}移除自身的辅助宠物(直到地下城结束)`,

View File

@ -85,7 +85,7 @@ const _localTranslating = {
auto_heal: tp`${'icon'}消除寶珠的回合,回復${'belong_to'}${'value'}${'stats'}`,
ctw: tp`${'icon'}${'time'}內時間停止,可以任意移動寶珠${'addition'}`,
ctw_addition: tp`,達成${'cond'}時,${'skill'}`,
gravity: tp`${'icon'}造成${'target'}${'value'}的傷害`,
gravity: tp`造成${'target'}${'icon'}${'value'}的傷害`,
resolve: tp`${'icon'}${'stats'}${'min'}受到單一次致命攻擊時將會以1點 HP 生還`,
board_change: tp`全畫面的寶珠變為${'orbs'}`,
skill_boost: tp`自身以外成員的技能冷卻儲備${'icon'}${'turns_min'}${'turns_max'}`,
@ -129,7 +129,8 @@ const _localTranslating = {
obstruct_opponent_after_me: tp`排名比自身低的對手`,
obstruct_opponent_before_me: tp`排名比自身高的對手`,
obstruct_opponent_designated_position: tp`${'positions'}排位的對手`,
increase_damage_cap: tp`${'targets'}${'icon'}傷害上限提升到${'cap'}`,
slot_power_up: tp`${'targets'}${'icon'}${'value'}`,
increase_damage_cap: tp`${'targets'}${'icon'}傷害上限變為${'cap'}`,
board_jamming_state: tp`${'position'}生成${'icon'}${'state'}${'size'}${'count'}${'comment'}`,
board_size_change: tp`板面大小改變為${'icon'}${'size'}`,
remove_assist: tp`${'icon'}移除自身的輔助寵物(直到地下城結束)`,

View File

@ -99,7 +99,7 @@ let localTranslating = {
auto_heal: tp`${'icon'}Heal ${'stats'} by ${'belong_to'} ${'value'} after matching orbs`,
ctw: tp`${'icon'}Move orbs freely for ${'time'}${'addition'}`,
ctw_addition: tp`, ${'cond'} is achieved, ${'skill'}`,
gravity: tp`${'icon'}Reduce ${'target'} ${'value'}`,
gravity: tp`Reduce ${'target'} ${'icon'}${'value'}`,
resolve: tp`${'icon'}Survive a single hit when ${'stats'}${'min'}`,
board_change: tp`Change all orbs to ${'orbs'}`,
skill_boost: tp`Team's skills charge ${'icon'}${'turns_min'}${'turns_max'}`,
@ -143,7 +143,8 @@ let localTranslating = {
obstruct_opponent_after_me: tp`The opponent ranked lower than me`,
obstruct_opponent_before_me: tp`The opponent ranked higher than me`,
obstruct_opponent_designated_position: tp`No.${'positions'} ranked opponents`,
increase_damage_cap: tp`The ${'icon'}damage cap of ${'targets'} is increased to ${'cap'}`,
slot_power_up: tp`The slot of ${'targets'} ${'icon'}${'value'}`,
increase_damage_cap: tp`The ${'icon'}damage cap of ${'targets'} is change to ${'cap'}`,
board_jamming_state: tp`Creates ${'count'} ${'icon'}${'state'} ${'size'} at ${'position'}${'comment'}`,
board_size_change: tp`Board size changed to ${'icon'}${'size'}`,
remove_assist: tp`${'icon'}Remove this assist card (until end of dungeon)`,
@ -1962,10 +1963,13 @@ const specialSearchFunctions = (function() {
},
addition:card=>{
let rate = damageSelf_Rate(card);
const fragment = document.createDocumentFragment();
fragment.append(createSkillIcon('heal', 'hp-decr'));
if (rate < 100)
return `减少${rate}%`;
fragment.append(`减少${rate}%`);
else
return `减少到1`;
fragment.append(`减少到1`);
return fragment;
}
},
]},

View File

@ -437,6 +437,7 @@ const SkillKinds = {
GenerateOrbs: "generate-orbs",
FixedOrbs: "fixed-orbs",
PowerUp: "power-up",
SlotPowerUp: "slot-power-up",
CounterAttack: "counter-attack",
SetOrbState: "set-orb-state",
RateMultiply: "rate-mul",
@ -983,6 +984,9 @@ function powerUp(attrs, types, value, condition = null, reduceDamage = null, add
if (targets) {attrs = null; types = null;}
return { kind: SkillKinds.PowerUp, targets, attrs, types, condition, value, reduceDamage, additional, eachTime};
}
function slotPowerUp(value, targets) {
return { kind: SkillKinds.SlotPowerUp, value, targets};
}
function counterAttack(attr, prob, value) {
return { kind: SkillKinds.CounterAttack, attr: attr, prob: prob, value: value };
}
@ -1579,7 +1583,9 @@ const skillObjectParsers = {
[230](turns, target, mul) {
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns, powerUp({targets: typeArr}, null, p.mul({ atk: mul })));
return activeTurns(turns,
slotPowerUp(p.mul({ atk: mul }), typeArr)
);
},
[231](turns, awoken1, awoken2, awoken3, awoken4, awoken5, atk, 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 ?? 0}))));
@ -2570,6 +2576,23 @@ function renderSkill(skill, option = {})
frg.ap(tsp.skill.power_up(dict));
break;
}
case SkillKinds.SlotPowerUp: { //增加伤害上限
const {value, targets} = skill;
let dict = {
icon: createIcon(skill.kind, value.atk > 1 ? "atk-incr" : "atk-decr"),
targets: document.createDocumentFragment(),
value: renderPowerUp(value),
};
dict.targets.append(createTeamFlags(targets));
dict.targets.append(targets.map(target=>
tsp?.target[target.replaceAll("-","_")]?.())
.nodeJoin(tsp.word.slight_pause()));
frg.ap(tsp.skill.slot_power_up(dict));
break;
}
case SkillKinds.Henshin: { //变身
let ids = skill.ids, random = skill.random;
let doms = ids.map(id=>{
@ -2830,29 +2853,27 @@ function renderAttrs(attrs, option = {}) {
function renderOrbs(attrs, option = {}) {
if (!Array.isArray(attrs))
attrs = [attrs ?? 0];
const frg = document.createDocumentFragment();
if (typeof localTranslating == "undefined") return frg;
const tsp = localTranslating.skill_parse;
let contentFrg;
if (isEqual(attrs, Attributes.orbs()))
{
contentFrg = tsp.orbs.all();
if (attrs.every(a=>Number.isInteger(a))) {
let attrBin = new Bin(attrs);
if ((attrBin.int & 0b1111111111) == 0b1111111111) { //十种珠子
frg.ap(tsp.orbs.all());
attrs.length = 0;
} else if ((attrBin.int & 0b11111) == 0b11111) { //基础5色
frg.ap(renderOrbs('_5color'));
attrBin = new Bin(attrBin.int & 0b1111100000);
attrs = [...attrBin];
if (attrs.length > 0) { //如果5色以上还有剩的就增加一个加号
frg.ap(' + ');
}
else if (isEqual(attrs, Attributes.all()))
{
contentFrg = renderOrbs('_5color');
}
else if (isEqual(attrs, Attributes._6color()))
{
contentFrg = tsp.orbs._6color({
_5color: renderOrbs('_5color'),
orb_rcv: renderOrbs(5),
});
}
else
{
contentFrg = attrs.map(attr => {
const icon = document.createElement("icon");
icon.className = "orb";
@ -2864,7 +2885,8 @@ function renderOrbs(attrs, option = {}) {
return tsp.orbs?.[attr](dict);
})
.nodeJoin(tsp.word.slight_pause());
}
frg.ap(contentFrg);
if (option.affix)
contentFrg = tsp.word.affix_orb({cotent: contentFrg});
if (option.any && attrs.length >= 2)

View File

@ -962,7 +962,6 @@ function searchCards(cards, {attrs: sAttrs, fixMainColor, types, typeAndOr, rare
const anyAttrsFlag = 0b1011111; //所有颜色的查找,注意右边才是最低位
sAttrs = sAttrs.map(attr=>attr || anyAttrsFlag); //如果传入搜索为0提高到任意色
console.log(sAttrs);
if (sAttrs.some(attr=>(attr & anyAttrsFlag) !== anyAttrsFlag)) { //当任一属性不为任意颜色时才需要筛选属性,否则跳过属性筛选
//如果固定顺序就直接使用当前颜色顺序;否则不考虑顺序时,去除任意色
const attrNums = sAttrs.filter(attr=>fixMainColor || attr > 0 && (attr & anyAttrsFlag) !== anyAttrsFlag)

View File

@ -6067,7 +6067,7 @@ const cachesMap = new Map([
],
[
"sound/voice/ja/padv2191.wav",
"d07c2fc9a621d4345c053f3d2187a937"
"143e052f3c15efaadaf7eaae277c68e7"
],
[
"sound/voice/ja/padv2192.wav",
@ -29499,15 +29499,15 @@ const cachesMap = new Map([
],
[
"script-json_data.js",
"aff28db2d3f7a46bddba6b4d559c9c79"
"e3cb9b6edd812eb327b009bdb3a29de3"
],
[
"script-skill-parser.js",
"5d5e6d38d82035de49807f72b2d8b0c3"
"5b5ccf1faedeca0c508b72af22bbf2f4"
],
[
"script-universal_function.js",
"fa1c29c20ebadf94a9405b9f73e4f85b"
"97285b342df0095b45fd8c1bfe6040f8"
],
[
"script.js",
@ -29523,7 +29523,7 @@ const cachesMap = new Map([
],
[
"style.css",
"34ab62d874338ceb3ca3d4f6b38b4b26"
"54495620612baaeaeb84b12faef72840"
],
[
"temp.js",
@ -29567,7 +29567,7 @@ const cachesMap = new Map([
],
[
"languages/zh-hans.js",
"e8f4e76f67a4cbb4a72517e6f17434ee"
"75671019575fb6b73345a20f55d06fe2"
],
[
"languages/zh-hant.css",
@ -29575,7 +29575,7 @@ const cachesMap = new Map([
],
[
"languages/zh-hant.js",
"bede32cfeaa26e46a4cd26d57c319378"
"9dae8558cafe9243b3a794acd3487963"
],
[
"images/attrs.png",
@ -29627,7 +29627,7 @@ const cachesMap = new Map([
],
[
"images/icon-add-combo.png",
"c662326964c237ddfefedd6e166fff35"
"905398205a46fcbbf94c91126b748b4f"
],
[
"images/icon-assist-bind.png",
@ -29711,7 +29711,7 @@ const cachesMap = new Map([
],
[
"images/icon-skills.png",
"924dcf954c1f7def6addc3f62e17e028"
"d9244ad4fa64ac7ad55481b278e0ef9a"
],
[
"images/icon-switch-leader.png",
@ -29867,7 +29867,7 @@ const cachesMap = new Map([
],
[
"doc/images/bluestacks-vhd-mount-vhd-failed.webp",
"7941862be127cb177b86ea4cc2877134"
"e41f2de6990b34ae7995a5acb0e3ea0c"
],
[
"doc/images/bluestacks-vhd-open-disk-management.webp",

View File

@ -34,14 +34,6 @@
transform: rotate(360deg);
}
}
@keyframes gravity-animate{
from {
transform: scaley(1);
}
to {
transform: scaley(0.5);
}
}
body{
--head-block-width: 108px;
--head-block-height: 108px;
@ -4282,12 +4274,15 @@ body.external-link-support #external-support{
.icon-skill.status-bind::after,
.icon-skill.hp-incr::after,
.icon-skill.hp-decr::after,
.icon-skill.atk-incr::after,
.icon-skill.atk-decr::after,
.icon-skill.boost-incr::after,
.icon-skill.boost-decr::after,
.icon-skill[data-icon-type="ctw"]::before,
.icon-skill[data-icon-type="ctw"]::after,
.icon-skill[data-icon-type="add-combo"]::after,
.icon-skill[data-icon-type="fixed-time"]::after
.icon-skill[data-icon-type="fixed-time"]::after,
.icon-skill[data-icon-type="increase-damage-cap"]::after
{
content: "";
position: absolute;
@ -4330,6 +4325,7 @@ body.external-link-support #external-support{
.icon-skill.hp-incr::after,
.icon-skill.hp-decr::after
{
left: 36px;
background-position-x:calc(-36px * 1);
}
.icon-skill.hp-incr::after
@ -4358,6 +4354,7 @@ body.external-link-support #external-support{
}
.icon-skill[data-icon-type="heal"]
{
width: 72px;
background-position-y:calc(-36px * 8);
}
.icon-skill[data-icon-type="def-break"]
@ -4398,8 +4395,7 @@ body.external-link-support #external-support{
}
.icon-skill[data-icon-type="gravity"]
{
animation: gravity-animate 1s infinite;
transform-origin: bottom center;
width: 72px;
background-position-y:calc(-36px * 14);
}
.icon-skill[data-icon-type="resolve"]
@ -4542,9 +4538,31 @@ body.external-link-support #external-support{
background-image: url(images/icon-evolved-skill-loop.png);
background-size: contain;
}
.icon-skill[data-icon-type="slot-power-up"]
{
background-position-y: calc(-36px * 39);
}
.icon-skill.atk-incr::after,
.icon-skill.atk-decr::after
{
transform: scale(0.75);
}
.icon-skill.atk-incr::after
{
background-position-y:calc(-36px * 1);
}
.icon-skill.atk-decr::after
{
background-position-y:calc(-36px * 2);
}
.icon-skill[data-icon-type="increase-damage-cap"]
{
background-position-y:calc(-36px * 36);
background-position-y: calc(-36px * 39);
}
.icon-skill[data-icon-type="increase-damage-cap"]::after
{
transform: scale(0.75);
background-position-y: calc(-36px * 36);
}
.icon-skill[data-icon-type="orb-thorn"]
{
@ -4559,7 +4577,8 @@ body.external-link-support #external-support{
}
.icon-skill[data-icon-type="remove-assist"]
{
background-position-y:calc(-36px * 39);
background-image: url(images/icon-skills.png), url(images/icon-skills.png);
background-position-y: calc(-36px * 3), calc(-36px * 39);
}
.icon-skill[data-icon-type="board-deep-dark"]
{
@ -4584,6 +4603,7 @@ body.external-link-support #external-support{
}
.icon-skill[data-icon-type="breaking-shield"]
{
width: 72px;
background-position-y:calc(-36px * 43);
}