EF2 Changelog

Builds / 1.15.36

Update 1.15.36

Compared with 1.15.35 · published Mon, 12 Oct 2026 00:59:10 GMT · live channel

No summary yet.

Code 38 changes in 19 classes

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

BattleController 5 hunks, 30 statements
- const h=s.length;
- if(0===h)return;
- const r=2*Math.PI/h,o=new Set;
- for(const t of e){
- const i=t.x-this.player.x,s=t.y-this.player.y;
- let e=Math.atan2(s,i);
- e<0&&(e+=2*Math.PI);
- let n=0,a=1/0;
- for(let t=0;
- t<h;
- t++){
- if(o.has(t))continue;
- let i=Math.abs(e-r*t);
- i>Math.PI&&(i=2*Math.PI-i),i<a&&(a=i,n=t)}
- o.add(n)}
- const a=[];
- for(let t=0;
- t<h;
- t++)o.has(t)||a.push(t);
- const c=TU.getInstance();
+ if(0===s.length)return;
+ const h=Rdi(this.player.x,this.player.y,e.map(t=>this.getHeroHome(t)),n.length),r=TU.getInstance();
- const s=n[l],e=r*(l<a.length?a[l]:l),h=s.unitType===Gx.MELEE,o=h?t.MELEE_ORBIT_RADIUS:t.RANGED_ORBIT_RADIUS,u=h?t.MELEE_PATROL_RADIUS:t.RANGED_PATROL_RADIUS,d=this.player.x+o*Math.cos(e),f=this.player.y+o*Math.sin(e);
+ const s=n[o],e=h[o],a=s.unitType===Gx.MELEE,c=a?t.MELEE_ORBIT_RADIUS:t.RANGED_ORBIT_RADIUS,l=a?t.MELEE_PATROL_RADIUS:t.RANGED_PATROL_RADIUS,u=this.player.x+c*Math.cos(e),d=this.player.y+c*Math.sin(e);
- const n=[];
+ const n=[],h=[];
+ for(const t of this.friendList)t!==this.player&&(this.rallyHeroes.has(t)?n.push(this.getHeroHome(t)):h.push(t));
+ const r=Rdi(this.player.x,this.player.y,n,h.length);
- t<this.friendList.length;
- t++)this.friendList[t]!==this.player&&n.push(this.friendList[t]);
- const h=n.length;
- for(let r=0;
- r<h;
+ o<h.length;
- const i=n[r],s=2*Math.PI/h*r,e=i.unitType===Gx.MELEE,o=e?t.MELEE_ORBIT_RADIUS:t.RANGED_ORBIT_RADIUS,a=e?t.MELEE_PATROL_RADIUS:t.RANGED_PATROL_RADIUS,c=this.player.x+o*Math.cos(s),l=this.player.y+o*Math.sin(s);
+ const i=h[o],s=r[o],e=i.unitType===Gx.MELEE,n=e?t.MELEE_ORBIT_RADIUS:t.RANGED_ORBIT_RADIUS,a=e?t.MELEE_PATROL_RADIUS:t.RANGED_PATROL_RADIUS,c=this.player.x+n*Math.cos(s),l=this.player.y+n*Math.sin(s);
GodBlessToast 1 hunks, 21 statements
- Qt(Idi,"rollElfSecretSkippedWaves"),Qt(kdi,"shouldAutoSaveOnWaveClear"),Qt(xdi,"resolveBootGameOver");
+ function Rdi(t,i,s,e){
+ const n=s.length+e;
+ if(0===n||0===e)return[];
+ const h=2*Math.PI/n,r=new Set;
+ for(const a of s){
+ let s=Math.atan2(a.y-i,a.x-t);
+ s<0&&(s+=2*Math.PI);
+ let e=-1,o=1/0;
+ for(let t=0;
+ t<n;
+ t++){
+ if(r.has(t))continue;
+ let i=Math.abs(s-h*t);
+ i>Math.PI&&(i=2*Math.PI-i),i<o&&(o=i,e=t)}
+ r.add(e)}
+ const o=[];
+ for(let a=0;
+ a<n&&o.length<e;
+ a++)r.has(a)||o.push(h*a);
+ return o}
+ Qt(Idi,"rollElfSecretSkippedWaves"),Qt(kdi,"shouldAutoSaveOnWaveClear"),Qt(xdi,"resolveBootGameOver"),Qt(Rdi,"autoSlotAngles");
FishingDataManager 7 hunks, 7 statements
- w:s,at:o,end:o+dIi.DUR_MS,kind:r.kind,name:r.name,tier:e,...yIi(e,r),min:r.min,...r.needBest?{
+ w:s,at:o,end:o+fIi.DUR_MS,kind:r.kind,name:r.name,tier:e,...EIi(e,r),min:r.min,...r.needBest?{
- ...EIi(t,i,Math.floor(s/dIi.EVERY_MS)),w:e,at:s,end:s+dIi.DUR_MS}
+ ...AIi(t,i,Math.floor(s/fIi.EVERY_MS)),w:e,at:s,end:s+fIi.DUR_MS}
- const n=[[t,i],...HSi.flatMap(t=>WSi.map(i=>[t,i])).filter(([s,e])=>s!==t||e!==i)];
+ const n=[[t,i],...WSi.flatMap(t=>VSi.map(i=>[t,i])).filter(([s,e])=>s!==t||e!==i)];
- return[...gCi.map((s,e)=>({
+ return[...mCi.map((s,e)=>({
- )),...mCi.map((i,s)=>({
+ )),...vCi.map((i,s)=>({
- )),...vCi.map((i,s)=>{
+ )),..._Ci.map((i,s)=>{
- for(const i of"tut"===t?["tut",...yOi]:[t])this.seenTips.add(i);
+ for(const i of"tut"===t?["tut",...EOi]:[t])this.seenTips.add(i);
FishingAvatarMaker 5 hunks, 5 statements
- ...ZOi}
+ ...tIi}
- ...ZOi,skin:0,hair:0,hairColor:0,feats:[]}
+ ...tIi,skin:0,hair:0,hairColor:0,feats:[]}
- ...ZOi}
+ ...tIi}
- ...ZOi,race:i,sex:1,skin:0,hair:0,hairColor:KOi[i],feats:[]}
+ ...tIi,race:i,sex:1,skin:0,hair:0,hairColor:zOi[i],feats:[]}
- ...ZOi,race:this.draft.race,sex:i,skin:0,hair:0,hairColor:this.draft.hairColor,feats:[]}
+ ...tIi,race:this.draft.race,sex:i,skin:0,hair:0,hairColor:this.draft.hairColor,feats:[]}
VersionManager 2 hunks, 3 statements
- constructor(){
- Zt(this,5)}
- Qt(AS,"VersionManager"),Zt(AS,"gameId","ef2"),Zt(AS,"appVersion","1.15.35");
+ Qt(AS,"VersionManager"),Zt(AS,"gameId","ef2"),Zt(AS,"appVersion","1.15.36");
FavoritePetSubMenu 1 hunks, 3 statements
- this.lblTicket.text=`${
- mG.getInstance().ticket}
- `}
+ this.lblTicket.text=mG.getInstance().ticketLabel()}
MiniAscentAssets 3 hunks, 3 statements
- return[pbi,...fbi[t]??["ui_challenge_seal"],wbi]}
+ return[wbi,...pbi[t]??["ui_challenge_seal"],gbi]}
- ,Ebi=[_bi,"crystal_effect_plate",...Mbi,...bbi,...Object.values(ybi)],Abi=class{
+ ,Abi=[Mbi,"crystal_effect_plate",...bbi,...ybi,...Object.values(Ebi)],Sbi=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",...gbi,...Ebi])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",...mbi,...Abi])if(!n.textures[h])throw new Error(`UI_MINI: missing ${
FishingTankPage 2 hunks, 3 statements
- ...qIi}
- ),Zt(this,"autoBusy",!1),Zt(this,"netEmpty",Axi("어망이 비었어요. 잡은 물고기는 모두 여기에 담겨요.",dxi,Txi,!1)),Zt(this,"netList",new Tx(OPi,yPi,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",Axi("물고기 팔기",uxi,24)),Zt(this,"allChip",new Nxi("모두 고르기",150,40,14)),Zt(this,"starLb",Axi("별",dxi,14)),Zt(this,"sizeLb",Axi("크기",dxi,14)),Zt(this,"sizeNote",Axi("특대·왕은 눌러서만",dxi,Txi,!1)),Zt(this,"starChips",PPi.map(t=>new Nxi(t.text,120,38,15))),Zt(this,"sizeChips",NPi.map(t=>new Nxi(t.text,120,38,15))),Zt(this,"sellList",new Tx(OPi,yPi,300,0)),Zt(this,"barBg",new ip),Zt(this,"barN",Axi("",dxi,Txi)),Zt(this,"barCoin",$xi("gold",24)),Zt(this,"barGold",Axi("",cxi,24)),Zt(this,"barEmpty",Axi("",dxi,Sxi)),Zt(this,"barEmptySub",Axi("위 칩으로 한꺼번에 · 눌러서 하나씩",dxi,Txi,!1)),Zt(this,"barSell",new Dxi("팔기",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",["전체",...HSi].map(t=>new Nxi(t,108,36,14))),Zt(this,"zoneChips",["전체",...WSi.map(t=>jSi[t])].map(t=>new Nxi(t,130,36,14))),Zt(this,"dexHead",new Oxi(yPi)),Zt(this,"dexList",new Tx(xPi,yPi,300,0)),Zt(this,"raceFilter","전체"),Zt(this,"zoneFilter","전체"),Zt(this,"selected",0),Zt(this,"lastSig",""),this.sellGlow.eventMode="none",this.netLayer.addChild(this.netHead),this.sellBtn.position.set(yPi-LPi,1),this.sellBtn.onTap=()=>this.openSheet(),this.cutBtn.position.set(yPi-LPi,1),this.cutBtn.onTap=async()=>{
+ ...XIi}
+ ),Zt(this,"autoBusy",!1),Zt(this,"netEmpty",Sxi("어망이 비었어요. 잡은 물고기는 모두 여기에 담겨요.",fxi,Cxi,!1)),Zt(this,"netList",new Tx(IPi,EPi,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",Sxi("물고기 팔기",dxi,24)),Zt(this,"allChip",new Lxi("모두 고르기",150,40,14)),Zt(this,"starLb",Sxi("별",fxi,14)),Zt(this,"sizeLb",Sxi("크기",fxi,14)),Zt(this,"sizeNote",Sxi("특대·왕은 눌러서만",fxi,Cxi,!1)),Zt(this,"starChips",NPi.map(t=>new Lxi(t.text,120,38,15))),Zt(this,"sizeChips",LPi.map(t=>new Lxi(t.text,120,38,15))),Zt(this,"sellList",new Tx(IPi,EPi,300,0)),Zt(this,"barBg",new ip),Zt(this,"barN",Sxi("",fxi,Cxi)),Zt(this,"barCoin",Hxi("gold",24)),Zt(this,"barGold",Sxi("",lxi,24)),Zt(this,"barEmpty",Sxi("",fxi,Txi)),Zt(this,"barEmptySub",Sxi("위 칩으로 한꺼번에 · 눌러서 하나씩",fxi,Cxi,!1)),Zt(this,"barSell",new Gxi("팔기",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",["전체",...WSi].map(t=>new Lxi(t,108,36,14))),Zt(this,"zoneChips",["전체",...VSi.map(t=>KSi[t])].map(t=>new Lxi(t,130,36,14))),Zt(this,"dexHead",new Ixi(EPi)),Zt(this,"dexList",new Tx(RPi,EPi,300,0)),Zt(this,"raceFilter","전체"),Zt(this,"zoneFilter","전체"),Zt(this,"selected",0),Zt(this,"lastSig",""),this.sellGlow.eventMode="none",this.netLayer.addChild(this.netHead),this.sellBtn.position.set(EPi-DPi,1),this.sellBtn.onTap=()=>this.openSheet(),this.cutBtn.position.set(EPi-DPi,1),this.cutBtn.onTap=async()=>{
- ...qIi}
+ ...XIi}
FishingFog 1 hunks, 2 statements
- return[...mSi[i],{
- ...vSi[t],dmg:_Si[i],w:1}
+ return[...vSi[i],{
+ ..._Si[t],dmg:MSi[i],w:1}
FishingTravelFx 2 hunks, 2 statements
- const i=[...ZRi[t]],s={
+ const i=[...tPi[t]],s={
- return s.R=i.push(e(t,"R"))-1,i.push(...tPi[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(...iPi[t]),s.C=i.push(e(t,"C"))-1,s.O=i.push(e(t,"O"))-1,{
FishingService 1 hunks, 1 statements
- ...BCi[i],npc:e}
+ ...UCi[i],npc:e}
AvatarFront 1 hunks, 1 statements
- const i=(new ip).poly([...nRi[t.race][t.sex]]).fill(16119285).stroke({
+ const i=(new ip).poly([...hRi[t.race][t.sex]]).fill(16119285).stroke({
FishingFishSchool 1 hunks, 1 statements
- if(n)for(const t of[...tGi(h,r,this.t),...fGi(h,r,this.t)])n(t.x,t.y);
+ if(n)for(const t of[...iGi(h,r,this.t),...pGi(h,r,this.t)])n(t.x,t.y);
FishingHuntUi 1 hunks, 1 statements
- ...$Ii(i.gearStats().aim),center:e.center}
+ ...HIi(i.gearStats().aim),center:e.center}
FishingMyBoatView 1 hunks, 1 statements
- const d=t.gearStats(),f=[...aHi,...HAi.filter(t=>!aHi.includes(t))].filter(t=>d[t]>0),p=f.slice(0,3),w=f.slice(3);
+ const d=t.gearStats(),f=[...cHi,...WAi.filter(t=>!cHi.includes(t))].filter(t=>d[t]>0),p=f.slice(0,3),w=f.slice(3);
Delay 1 hunks, 1 statements
- ...yzi(),[i]:s}
+ ...Ezi(),[i]:s}
NetworkTimeout 1 hunks, 1 statements
- ...Kzi,...i}
+ ...zzi,...i}
RecaptchaVerifier 1 hunks, 1 statements
- ...CQi}
+ ...OQi}
BrowserPopupRedirectResolver 1 hunks, 1 statements
- ...xZi,width:e.toString(),height:n.toString(),top:h,left:r}
+ ...RZi,width:e.toString(),height:n.toString(),top:h,left:r}