EF2 Changelog

Builds / 1.15.32

Update 1.15.32

Compared with 1.15.31 · published Thu, 08 Oct 2026 08:54:29 GMT · live channel

No summary yet.

Text changes 15

KeyText
GAME_1923 + Fire Aura
GAME_1924 + Game Speed -{0}%
GAME_1925 + The Fire Aura lowers game speed by {1}% every {0} waves.
GAME_1926 + From wave {0}: -{1}%
GAME_1927 + Damage Ranking
GAME_1928 + ## Win Streak
GAME_1929 + Buy @@ Infinite Ranking tickets for ## gems?
DIALOGUE_TEXT_88 ~ It's the Fire Lord, freed from the Abyss. His magic is suppressing the power of the Castle and the heroes.It's the Fire Lord, freed from the Abyss. His Fire Aura is slowing down time itself.
DIALOGUE_TEXT_93 ~ Now the Castle takes on the form of the race you were reborn as. The Scorched Land's effects follow that race too.Now the Castle takes on the form of the race you were reborn as.
DIALOGUE_TEXT_94 ~ Each hero is affected according to their own race. You can check it anytime from the Flame Mark.The Fire Aura grows stronger the deeper we go. Game speed drops by 1% every 100 waves. You can check it anytime on the Flame Mark.
GAME_1918 ~ {1} to #{0}
RANKING_HIDE_TEAM − Hide my team lineup
RANKING_TEAM_HIDDEN − This player has hidden their team lineup.
RANKING_TEAM_LOAD_FAILED − Unable to load team information.
RANKING_PRIVACY_SAVE_FAILED − Unable to save team visibility. Please try again.

Translations touched: de (15), es (15), fr (15), id (15), it (15), ja (15), ko (14), pl (15), pt (15), ru (15), th (15), tr (15), vi (15), zh-CN (15), zh-TW (15)

Code 37 changes in 19 classes

Minified client code with short names blanked for diffing. Class names are real.

PVP2BattleController 6 hunks, 27 statements
+ function M7t(t,i,s){
+ return new Promise(e=>{
+ let n,h=!1;
+ const r=Qt((t,i)=>{
+ h||(h=!0,void 0!==n&&clearTimeout(n),t&&(null==s||s(t,i)),e())}
+ ,"finish");
+ n=setTimeout(()=>r("timeout"),i);
+ try{
+ Promise.resolve(t()).then(()=>r(),t=>r("error",t))}
+ catch(ort){
+ r("error",ort)}
+ }
+ )}
+ Qt(M7t,"settleWithin");
- super(),Zt(this,"battleType",v$.PVP2),Zt(this,"PVP_TIME_LIMIT_FRAMES",3600),Zt(this,"pvpStarted",!1),Zt(this,"speedHelper",new y0t("ef2.pvp2.battleSpeed")),Zt(this,"timerText",null),Zt(this,"hpGauge",new f7t),Zt(this,"introBanner",new g7t),Zt(this,"arena",new _7t),Zt(this,"savedView",null),Zt(this,"allyRoster",[]),Zt(this,"enemyRoster",[]),Zt(this,"spawnedVOs",[]),Zt(this,"pvpTeamVOs",[]),Zt(this,"opTransPoints",null),this.unitScale=t.UNIT_SCALE}
+ super(),Zt(this,"battleType",v$.PVP2),Zt(this,"PVP_TIME_LIMIT_FRAMES",3600),Zt(this,"pvpStarted",!1),Zt(this,"startToken",0),Zt(this,"speedHelper",new y0t("ef2.pvp2.battleSpeed")),Zt(this,"timerText",null),Zt(this,"hpGauge",new f7t),Zt(this,"introBanner",new g7t),Zt(this,"arena",new _7t),Zt(this,"savedView",null),Zt(this,"allyRoster",[]),Zt(this,"enemyRoster",[]),Zt(this,"spawnedVOs",[]),Zt(this,"pvpTeamVOs",[]),Zt(this,"opTransPoints",null),this.unitScale=t.UNIT_SCALE}
- this.cleanup(),this.opTransPoints=h,kP.getInstance().setBattleContext(wP.Pvp),EF.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
+ this.cleanup();
+ const a=this.startToken;
+ this.opTransPoints=r,kP.getInstance().setBattleContext(wP.Pvp),EF.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- await this.setupAllies(),await this.setupEnemies(s,e,n),this.setupEnemyLists(),this.createTimerUI(),Rui.getInstance().switchToBattle(this),Ydi.zoomEnabled=!1,this.applyZoom(),iU.getInstance().remove(this.execute,this),await this.arena.show((null==r?void 0:r.grade)??1),r?await this.introBanner.play(u7t.getInstance(),r.ally,r.enemy):await CU.getInstance().play(),this.pvpStarted=!0,iU.getInstance().add(this.execute,this)}
+ await this.setupAllies(),await this.setupEnemies(e,n,h),this.setupEnemyLists(),this.createTimerUI(),xui.getInstance().switchToBattle(this),qdi.zoomEnabled=!1,this.applyZoom(),iU.getInstance().remove(this.execute,this),await M7t(()=>this.arena.show((null==o?void 0:o.grade)??1),t.ARENA_WAIT_MS,(t,i)=>{
+ }
+ ),a===this.startToken&&(o?await M7t(()=>this.introBanner.play(u7t.getInstance(),o.ally,o.enemy),t.INTRO_WAIT_MS,(t,i)=>{
+ this.introBanner.stop()}
+ ):await M7t(()=>CU.getInstance().play(),t.COUNTDOWN_WAIT_MS,(t,i)=>{
+ }
+ ),a===this.startToken&&(this.pvpStarted=!0,iU.getInstance().add(this.execute,this)))}
- kP.getInstance().setBattleContext(wP.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.removeTimerUI(),this.introBanner.stop(),this.arena.clear(),this.pvpStarted=!1,this.opTransPoints=null,this.allyRoster.length=0,this.enemyRoster.length=0;
+ kP.getInstance().setBattleContext(wP.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.startToken++,this.removeTimerUI(),this.introBanner.stop(),this.arena.clear(),this.pvpStarted=!1,this.opTransPoints=null,this.allyRoster.length=0,this.enemyRoster.length=0;
- Qt(M7t,"PVP2BattleController"),Zt(M7t,"instance"),Zt(M7t,"TIMER_STYLE",new qg({
+ Qt(b7t,"PVP2BattleController"),Zt(b7t,"instance"),Zt(b7t,"ARENA_WAIT_MS",5e3),Zt(b7t,"INTRO_WAIT_MS",4500),Zt(b7t,"COUNTDOWN_WAIT_MS",6e3),Zt(b7t,"TIMER_STYLE",new qg({
FishingDataManager 6 hunks, 6 statements
- ...NOi(t,i,Math.floor(s/OOi.EVERY_MS)),w:e,at:s,end:s+OOi.DUR_MS}
+ ...LOi(t,i,Math.floor(s/IOi.EVERY_MS)),w:e,at:s,end:s+IOi.DUR_MS}
- const n=[[t,i],...uSi.flatMap(t=>dSi.map(i=>[t,i])).filter(([s,e])=>s!==t||e!==i)];
+ const n=[[t,i],...dSi.flatMap(t=>fSi.map(i=>[t,i])).filter(([s,e])=>s!==t||e!==i)];
- return[...LTi.map((s,e)=>({
+ return[...DTi.map((s,e)=>({
- )),...DTi.map((i,s)=>({
+ )),...GTi.map((i,s)=>({
- )),...GTi.map((i,s)=>{
+ )),...BTi.map((i,s)=>{
- for(const i of"tut"===t?["tut",...BCi]:[t])this.seenTips.add(i);
+ for(const i of"tut"===t?["tut",...UCi]:[t])this.seenTips.add(i);
FishingAvatarMaker 5 hunks, 5 statements
- ...gOi}
+ ...wOi}
- ...gOi,skin:0,hair:0,hairColor:0,feats:[]}
+ ...wOi,skin:0,hair:0,hairColor:0,feats:[]}
- ...gOi}
+ ...wOi}
- ...gOi,race:i,sex:1,skin:0,hair:0,hairColor:aOi[i],feats:[]}
+ ...wOi,race:i,sex:1,skin:0,hair:0,hairColor:cOi[i],feats:[]}
- ...gOi,race:this.draft.race,sex:i,skin:0,hair:0,hairColor:this.draft.hairColor,feats:[]}
+ ...wOi,race:this.draft.race,sex:i,skin:0,hair:0,hairColor:this.draft.hairColor,feats:[]}
PVP2ReadyPopup 2 hunks, 4 statements
- const t=Math.floor(this.opInfo.maxWave/100);
- b7t.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,t,this.opInfo.transPoints??null,{
+ const t=Math.floor(this.opInfo.maxWave/100),i=y7t.getInstance();
+ i.startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,t,this.opInfo.transPoints??null,{
+ ).catch(t=>{
+ xui.getInstance().getCurrentBattle()===i&&xui.getInstance().returnToIdleBattle(),bB.getInstance().show(RB.getText("COMMON_76","오류가 발생하였습니다."))}
MiniAscentAssets 3 hunks, 3 statements
- return[XMi,...qMi[t]??["ui_challenge_seal"],JMi]}
+ return[JMi,...XMi[t]??["ui_challenge_seal"],QMi]}
- ,hbi=[ibi,"crystal_effect_plate",...sbi,...ebi,...Object.values(nbi)],rbi=class{
+ ,rbi=[sbi,"crystal_effect_plate",...ebi,...nbi,...Object.values(hbi)],obi=class{
- for(const h of["background_map","chapter_journey","encounter_battle","encounter_elite","encounter_boss","encounter_event","encounter_shop","encounter_gambling","ui_arrow_up","ui_button_lobby_blank","ui_close","ui_coin","ui_energy","ui_challenge_seal","ui_divider","UI_VS","UI_Check1","UI_Check2",...QMi,...hbi])if(!n.textures[h])throw new Error(`UI_MINI: missing ${
+ for(const h of["background_map","chapter_journey","encounter_battle","encounter_elite","encounter_boss","encounter_event","encounter_shop","encounter_gambling","ui_arrow_up","ui_button_lobby_blank","ui_close","ui_coin","ui_energy","ui_challenge_seal","ui_divider","UI_VS","UI_Check1","UI_Check2",...ZMi,...rbi])if(!n.textures[h])throw new Error(`UI_MINI: missing ${
FishingFog 1 hunks, 2 statements
- return[...$Ai[i],{
- ...HAi[t],dmg:WAi[i],w:1}
+ return[...HAi[i],{
+ ...WAi[t],dmg:VAi[i],w:1}
FishingTravelFx 2 hunks, 2 statements
- const i=[...IRi[t]],s={
+ const i=[...kRi[t]],s={
- return s.R=i.push(e(t,"R"))-1,i.push(...kRi[t]),s.C=i.push(e(t,"C"))-1,s.O=i.push(e(t,"O"))-1,{
+ return s.R=i.push(e(t,"R"))-1,i.push(...RRi[t]),s.C=i.push(e(t,"C"))-1,s.O=i.push(e(t,"O"))-1,{
VersionManager 1 hunks, 1 statements
- Qt(AS,"VersionManager"),Zt(AS,"gameId","ef2"),Zt(AS,"appVersion","1.15.31");
+ Qt(AS,"VersionManager"),Zt(AS,"gameId","ef2"),Zt(AS,"appVersion","1.15.32");
PVPResultPopup 1 hunks, 1 statements
- `:h<0?"▼"+-h:"-"),this.rowStreak.lblName.text="",this.rowStreak.lblValue.text=RB.getText("GAME_1888","##연승").replace("##",String(t.winStreak)),this.rowStreak.lblValue.textColor=sD.COLOR_BRIGHT_ORANGE,this.rowStreak.lblDelta.text=""}
+ `:h<0?"▼"+-h:"-"),this.rowStreak.lblName.text="",this.rowStreak.lblValue.text=RB.getText("GAME_1928","##연승").replace("##",String(t.winStreak)),this.rowStreak.lblValue.textColor=sD.COLOR_BRIGHT_ORANGE,this.rowStreak.lblDelta.text=""}
PVPBattleStatus 1 hunks, 1 statements
- RB.getText("GAME_1889","피해량 순위")}
+ RB.getText("GAME_1927","피해량 순위")}
PVPBattleSubView 1 hunks, 1 statements
- let s=RB.getText("GAME_1890","##보석을 소모하여 무한 랭킹전 티켓을 @@장 구매하시겠습니까?");
+ let s=RB.getText("GAME_1929","##보석을 소모하여 무한 랭킹전 티켓을 @@장 구매하시겠습니까?");
FishingService 1 hunks, 1 statements
- ...tCi[i],npc:e}
+ ...iCi[i],npc:e}
AvatarFront 1 hunks, 1 statements
- const i=(new ip).poly([...Nki[t.race][t.sex]]).fill(16119285).stroke({
+ const i=(new ip).poly([...Lki[t.race][t.sex]]).fill(16119285).stroke({
FishingTankPage 1 hunks, 1 statements
- super(),Zt(this,"tabId","tank"),Zt(this,"view","net"),Zt(this,"scrollInShell",!1),Zt(this,"netLayer",new Ve),Zt(this,"capBg",new ip),Zt(this,"capNum",rki("",KIi,26)),Zt(this,"capOf",rki("",zIi,15)),Zt(this,"gradeCounts",[]),Zt(this,"capBar",new ip),Zt(this,"capNote",rki("도둑이 어망에 줄을 걸었어요. 줄을 끊어야 팔 수 있어요",XIi,13,!1)),Zt(this,"sellBtn",new pki("팔기",132,52,18)),Zt(this,"sellGlow",new ip),Zt(this,"glowTween",null),Zt(this,"cutBtn",new pki("줄 끊기",132,52,16)),Zt(this,"netEmpty",rki("어망이 비었어요. 잡은 물고기는 모두 여기에 담겨요.",YIi,14,!1)),Zt(this,"netList",new TR(hxi,QRi,400,0)),Zt(this,"detail",new Ve),Zt(this,"card",null),Zt(this,"sheet",new Ve),Zt(this,"sheetOpen",!1),Zt(this,"sheetBg",new ip),Zt(this,"sheetBack",new Ve),Zt(this,"sheetTitle",rki("물고기 팔기",KIi,20)),Zt(this,"allChip",new dki("모두 고르기",150,40,14)),Zt(this,"starLb",rki("별",zIi,14)),Zt(this,"sizeLb",rki("크기",zIi,14)),Zt(this,"sizeNote",rki("특대·왕은 눌러서만",YIi,12,!1)),Zt(this,"starChips",lxi.map(t=>new dki(t.text,120,38,15))),Zt(this,"sizeChips",uxi.map(t=>new dki(t.text,120,38,15))),Zt(this,"sellList",new TR(hxi,QRi,300,0)),Zt(this,"barBg",new ip),Zt(this,"barN",rki("",zIi,15)),Zt(this,"barCoin",_ki("gold",24)),Zt(this,"barGold",rki("",VIi,24)),Zt(this,"barEmpty",rki("",zIi,17)),Zt(this,"barEmptySub",rki("위 칩으로 한꺼번에 · 눌러서 하나씩",YIi,13,!1)),Zt(this,"barSell",new pki("팔기",200,60,19)),Zt(this,"pickStar",0),Zt(this,"pickSize",-1),Zt(this,"pickAll",!1),Zt(this,"pickAdd",new Set),Zt(this,"pickDel",new Set),Zt(this,"selling",!1),Zt(this,"confirm",new Ve),Zt(this,"aqLayer",new Ve),Zt(this,"dexLayer",new Ve),Zt(this,"raceChips",["전체",...uSi].map(t=>new dki(t,108,36,14))),Zt(this,"zoneChips",["전체",...dSi.map(t=>pSi[t])].map(t=>new dki(t,130,36,14))),Zt(this,"dexKnownLb",rki("잡은 종",zIi,14)),Zt(this,"dexProgress",rki("",KIi,16)),Zt(this,"dexBar",new ip),Zt(this,"dexList",new TR(axi,QRi,300,0)),Zt(this,"raceFilter","전체"),Zt(this,"zoneFilter","전체"),Zt(this,"selected",0),Zt(this,"lastSig",""),this.capBg.eventMode=this.capBar.eventMode=this.sellGlow.eventMode="none",this.capNum.position.set(18,10),this.capNote.position.set(18,48),this.netLayer.addChild(this.capBg,this.capNum,this.capOf,this.capBar,this.capNote),[3,2,1,0].forEach(t=>{
+ super(),Zt(this,"tabId","tank"),Zt(this,"view","net"),Zt(this,"scrollInShell",!1),Zt(this,"netLayer",new Ve),Zt(this,"capBg",new ip),Zt(this,"capNum",oki("",zIi,26)),Zt(this,"capOf",oki("",YIi,15)),Zt(this,"gradeCounts",[]),Zt(this,"capBar",new ip),Zt(this,"capNote",oki("도둑이 어망에 줄을 걸었어요. 줄을 끊어야 팔 수 있어요",JIi,13,!1)),Zt(this,"sellBtn",new gki("팔기",132,52,18)),Zt(this,"sellGlow",new ip),Zt(this,"glowTween",null),Zt(this,"cutBtn",new gki("줄 끊기",132,52,16)),Zt(this,"netEmpty",oki("어망이 비었어요. 잡은 물고기는 모두 여기에 담겨요.",qIi,14,!1)),Zt(this,"netList",new TR(rxi,ZRi,400,0)),Zt(this,"detail",new Ve),Zt(this,"card",null),Zt(this,"sheet",new Ve),Zt(this,"sheetOpen",!1),Zt(this,"sheetBg",new ip),Zt(this,"sheetBack",new Ve),Zt(this,"sheetTitle",oki("물고기 팔기",zIi,20)),Zt(this,"allChip",new fki("모두 고르기",150,40,14)),Zt(this,"starLb",oki("별",YIi,14)),Zt(this,"sizeLb",oki("크기",YIi,14)),Zt(this,"sizeNote",oki("특대·왕은 눌러서만",qIi,12,!1)),Zt(this,"starChips",uxi.map(t=>new fki(t.text,120,38,15))),Zt(this,"sizeChips",dxi.map(t=>new fki(t.text,120,38,15))),Zt(this,"sellList",new TR(rxi,ZRi,300,0)),Zt(this,"barBg",new ip),Zt(this,"barN",oki("",YIi,15)),Zt(this,"barCoin",Mki("gold",24)),Zt(this,"barGold",oki("",jIi,24)),Zt(this,"barEmpty",oki("",YIi,17)),Zt(this,"barEmptySub",oki("위 칩으로 한꺼번에 · 눌러서 하나씩",qIi,13,!1)),Zt(this,"barSell",new gki("팔기",200,60,19)),Zt(this,"pickStar",0),Zt(this,"pickSize",-1),Zt(this,"pickAll",!1),Zt(this,"pickAdd",new Set),Zt(this,"pickDel",new Set),Zt(this,"selling",!1),Zt(this,"confirm",new Ve),Zt(this,"aqLayer",new Ve),Zt(this,"dexLayer",new Ve),Zt(this,"raceChips",["전체",...dSi].map(t=>new fki(t,108,36,14))),Zt(this,"zoneChips",["전체",...fSi.map(t=>gSi[t])].map(t=>new fki(t,130,36,14))),Zt(this,"dexKnownLb",oki("잡은 종",YIi,14)),Zt(this,"dexProgress",oki("",zIi,16)),Zt(this,"dexBar",new ip),Zt(this,"dexList",new TR(cxi,ZRi,300,0)),Zt(this,"raceFilter","전체"),Zt(this,"zoneFilter","전체"),Zt(this,"selected",0),Zt(this,"lastSig",""),this.capBg.eventMode=this.capBar.eventMode=this.sellGlow.eventMode="none",this.capNum.position.set(18,10),this.capNote.position.set(18,48),this.netLayer.addChild(this.capBg,this.capNum,this.capOf,this.capBar,this.capNote),[3,2,1,0].forEach(t=>{
FishingMyBoatView 1 hunks, 1 statements
- const v=t.gearStats(),_=[...NBi,...gAi.filter(t=>!NBi.includes(t))].filter(t=>v[t]>0),M=_.slice(0,3),b=_.slice(3);
+ const v=t.gearStats(),_=[...LBi,...wAi.filter(t=>!LBi.includes(t))].filter(t=>v[t]>0),M=_.slice(0,3),b=_.slice(3);
Delay 1 hunks, 1 statements
- ...mWi(),[i]:s}
+ ...vWi(),[i]:s}
NetworkTimeout 1 hunks, 1 statements
- ...$Wi,...i}
+ ...HWi,...i}
RecaptchaVerifier 1 hunks, 1 statements
- ...yYi}
+ ...EYi}
BrowserPopupRedirectResolver 1 hunks, 1 statements
- ...Tqi,width:e.toString(),height:n.toString(),top:h,left:r}
+ ...Cqi,width:e.toString(),height:n.toString(),top:h,left:r}