diff --git a/images/icon-add-combo.png b/images/icon-add-combo.png index 5ced6dc1..3d81e5a0 100644 Binary files a/images/icon-add-combo.png and b/images/icon-add-combo.png differ diff --git a/images/icon-skills.png b/images/icon-skills.png index 732e7ce9..74087c77 100644 Binary files a/images/icon-skills.png and b/images/icon-skills.png differ diff --git a/images/project file/icon-add-combo.fw.png b/images/project file/icon-add-combo.fw.png index 5969560e..49345d6b 100644 Binary files a/images/project file/icon-add-combo.fw.png and b/images/project file/icon-add-combo.fw.png differ diff --git a/images/project file/icon-skills.fw.png b/images/project file/icon-skills.fw.png index f044cf71..35922c2a 100644 Binary files a/images/project file/icon-skills.fw.png and b/images/project file/icon-skills.fw.png differ diff --git a/languages/zh-hans.js b/languages/zh-hans.js index 17bbb61f..0acae06b 100644 --- a/languages/zh-hans.js +++ b/languages/zh-hans.js @@ -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'}移除自身的辅助宠物(直到地下城结束)`, diff --git a/languages/zh-hant.js b/languages/zh-hant.js index 564c9323..6c7936ff 100644 --- a/languages/zh-hant.js +++ b/languages/zh-hant.js @@ -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'}移除自身的輔助寵物(直到地下城結束)`, diff --git a/script-json_data.js b/script-json_data.js index bb41bc4f..67b2f48a 100644 --- a/script-json_data.js +++ b/script-json_data.js @@ -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; } }, ]}, diff --git a/script-skill-parser.js b/script-skill-parser.js index 657f02f6..26f9c7eb 100644 --- a/script-skill-parser.js +++ b/script-skill-parser.js @@ -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,41 +2853,40 @@ 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(); - } - 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"; - if (option.className) icon.className += " " + option.className; - icon.setAttribute("data-orb-icon",attr); - let dict = { - icon: icon, + 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(' + '); } - return tsp.orbs?.[attr](dict); - }) - .nodeJoin(tsp.word.slight_pause()); + } } + contentFrg = attrs.map(attr => { + const icon = document.createElement("icon"); + icon.className = "orb"; + if (option.className) icon.className += " " + option.className; + icon.setAttribute("data-orb-icon",attr); + let dict = { + icon: icon, + } + 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) diff --git a/script-universal_function.js b/script-universal_function.js index 100fcd7e..d388b5ac 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -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) diff --git a/service-worker.js b/service-worker.js index eb92196e..ecd9f406 100644 --- a/service-worker.js +++ b/service-worker.js @@ -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", diff --git a/style.css b/style.css index 3c41db0e..d4ceb75f 100644 --- a/style.css +++ b/style.css @@ -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); }