From faa8a6e78990f7449593f82761f462b6a87e9014 Mon Sep 17 00:00:00 2001 From: LingASDJ <2735951230@qq.com> Date: Sun, 28 May 2023 19:54:51 +0800 Subject: [PATCH] Update Beta0.6.2.0-B3 This is the last end update in the near future, Now I stop developing MLPD content, I will return in the future, so please stay tuned. --- build.gradle | 4 +- core/src/main/assets/interfaces/badges.png | Bin 19159 -> 19681 bytes .../assets/messages/actors/actors.properties | 4 +- .../assets/messages/items/items.properties | 4 +- .../main/assets/messages/misc/misc.properties | 345 +++++++++++++----- .../src/main/assets/messages/ui/ui.properties | 6 + .../src/main/assets/sprites/FireMagicGirl.png | Bin 1147 -> 0 bytes .../main/assets/sprites/boss/SeaVastGirl.png | Bin 0 -> 3697 bytes .../shatteredpixeldungeon/Assets.java | 2 + .../shatteredpixeldungeon/Badges.java | 74 +++- .../shatteredpixeldungeon/Challenges.java | 4 +- .../shatteredpixeldungeon/Dungeon.java | 15 +- .../shatteredpixeldungeon/Rankings.java | 15 +- .../shatteredpixeldungeon/Statistics.java | 15 +- .../actors/buffs/ChampionEnemy.java | 57 +-- .../actors/buffs/LighS.java | 39 +- .../actors/hero/Hero.java | 2 - .../actors/mobs/Bestiary.java | 22 +- .../actors/mobs/Fire_Scorpio.java | 2 + .../actors/mobs/Ice_Scorpio.java | 2 + .../actors/mobs/bosses/DiamondKnight.java | 2 +- .../actors/mobs/bosses/TPDoor.java | 3 +- .../actors/mobs/npcs/Ghost.java | 4 +- .../actors/mobs/npcs/RedDragon.java | 2 +- .../shatteredpixeldungeon/items/Torch.java | 35 +- .../items/Waterskin.java | 4 +- .../items/bombs/Bomb.java | 71 ++++ .../items/food/MeatPie.java | 9 +- .../items/food/SmallRation.java | 2 +- .../items/food/StewedMeat.java | 13 +- .../items/lightblack/OilLantern.java | 45 ++- .../items/potions/PotionOfExperience.java | 12 +- .../items/potions/PotionOfInvisibility.java | 2 +- .../items/potions/PotionOfMindVision.java | 2 +- .../items/potions/PotionOfStrength.java | 2 +- .../items/potions/elixirs/WaterSoul.java | 2 +- .../items/weapon/melee/BloodthirstyThorn.java | 18 +- .../items/weapon/melee/LockSword.java | 14 +- .../items/weapon/melee/MagicTorch.java | 10 +- .../items/weapon/melee/Sai.java | 6 +- .../items/weapon/melee/WashCrime.java | 12 +- .../levels/CavesLevel.java | 10 +- .../levels/ColdChestBossLevel.java | 10 +- .../levels/ZeroLevel.java | 7 +- .../scenes/SurfaceScene.java | 2 +- .../sprites/DimandKingSprite.java | 2 +- .../sprites/SeaVastGirlSprites.java | 30 ++ .../ui/QuickSlotButton.java | 4 +- .../shatteredpixeldungeon/ui/StatusPane.java | 4 +- .../ui/changelist/mlpd/vM0_6_7_X_Changes.java | 135 ++++++- .../windows/LevelChecker.java | 18 +- .../windows/WndBadge.java | 34 +- .../windows/WndRanking.java | 50 +++ .../windows/WndResurrect.java | 6 + .../windows/WndScoreBreakdown.java | 4 +- 55 files changed, 878 insertions(+), 320 deletions(-) delete mode 100644 core/src/main/assets/sprites/FireMagicGirl.png create mode 100644 core/src/main/assets/sprites/boss/SeaVastGirl.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SeaVastGirlSprites.java diff --git a/build.gradle b/build.gradle index a0544ffb3..2c2273b2e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,8 +17,8 @@ allprojects { appName = 'Magic Ling Pixel Dungeon' appPackageName = 'com.ansdomagiclingpixeldungeon.ling' - appVersionCode =800867 - appVersionName = '0.6.1.0-Beta7.3(P3)' + appVersionCode =900871 + appVersionName = '0.6.2.0-Beta3' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/interfaces/badges.png b/core/src/main/assets/interfaces/badges.png index c4231f29e145b14161cb07ee3a5fb31eed5c3598..76cb6d3bc6e3f3ef2934a9c6d81104a50507f102 100644 GIT binary patch literal 19681 zcmag`WmH?w7d8wBw^C@a;!uj0LUGpuMT)zn6f32;LvSdr#a)X_(H2Q?x8m-B0>v$X zki7Z*@8@0Xc|P6waL&v+li7RrnzLtL*WO9AmWDDhAq^n_03cR*|4s*e4+a1*nDBAY zEs(x{G628?PWskq?SynDo-Hf@d`U+TH#q4erSa@HV#IJAvBUB z<|QF!aTG;z1yi13Sya@u22;|9q?9Dq(qws}=S<{Sdv`;7lN#%JABv;S0t@U4^0NFP zvy;CMHhx3t>dlEvp-Ia94DIS+cxO}G>wPG^^H{)ZBiC6+w+BCwWh%p5ToON+@3z{n zheh6(!ghg>OgfRTa%=m~{>8eR!OA3**V{c7!fN#pZW-*q2b|BhhPaT$!K7`lKAJj% ztJTLLDe$IMfN?XtVzGgA1oN)*=7;HG{p}Xr{LT6{&=FP#dVD#_KPbKN z=Vw4)tn%WS*D+f)uN1el^JWtj3XZkDbAW@_9-w^v^l;!whX5P!pfT~^M4&0Tf}_26 z1j<{s9B_Q^fmtXQP4~si{v~65R*tPA!M_rNKP^^xs%c!TjK>cynt_&StgIDgf!N5j zxi(vwpjh`H&~B=C;i@-m;Rw*)DAn^73Z1LCV=5^sUXbbchN=ULbzj_EVTN>hD zqzJNx8ZO^#iO4odwm~k#X4p4umYUpyZN;kE5QhqR_N#{&Rpbzb`3I-ts0ncq_e$(o z6ZJh`)O{+KeoRwGy321R|D(l9ELjEAeeMgW8A09NlilRWiHk}jdCxUQBZyzP8tYQK z3+;Nr+2Hb%iXQjN3*nY6**2;*ozRZxBuD0?oBU45jy4JsUau1@3`CBHpsq`Ri9e>1 zVn_EPdNvvsl!SCPkjLj~Pc&>Lo;C-&TaNukH3Q$sgjM(ifWP4){?>4ONlk54gG-im z1S+X=$T+8567y}flckv7$NdC^$pE&S1zAK~N?C$aSe8TdW=#hMCc#ddL zmpB={Cu^KcIFT56jwdXQBRl+XKBLBBZ@5r^ei-&dqkt-qIg8Fe`W&s9WBI z6KzM>tU#^geE_Y0+ui&+8t-Rv4Z$@4IV6;0vGZrHR{b|d+Ji2+E}FngucRQyP{i2J z%|I1ztdI{Mb<0|@y^cPO@_MmF7e(5sq|1j5mSI+yJqYCcoKlo8I-79?qmB1SfC=*D zE}>{$mw+lLfiOX=tkd$GxnYMv{_O^$s@s3e_}P`@CwYMe!H>6Uk|O>LcwUUm$HNwY z=kf=QHkZd=vk>A0Meb0LEoI>W9E%HMu6nzCl`>sE7CrkUYv)eN**GSL+HJvY>o*WL zWjFGKsH$|o7R#9Yufy-~gNXX)lgU~*%i0-6tpKNUeMf-JNWP5g%SS&!UGu%a?KgTy z{4>6^g|W@_-r~`ILI{p^)vDUIv*oe0X$m*#CSh3{I>aZt6umK2SB)m?Xu)D`(?5J<761FHG_2Sfd_D6%pEmCShm7Yj zNT#0lW5!ih3&t9h3Zv5Sa3`^(g734mBN&lIS2#iDqU0W;`sjut1G3ys+Z2k1YDxvU zEi7GZ_y(8e>0qh*J(hTithgv~V?cSDh*0u zcbihzew@%REM^We9LAsk#ui<@Qdw5Ub3v<^==g0}JsBvC9|EN}fGd6?F}DSpoyHmtCSX@R)tX+=(?{-HZIj<=jaqIMcbH^zjH7Ql(hbM> zjE$I~6UgvY3oL5)YY|ptg>YY^*Een0`2hm^XPsR~#8BDa3~Y`err#pPin)Gbo`{|4 zgEQ=;yVs$yTuby~9KM*oQ2%|bH5>4AgGsCYF%sY@-td_Z2q7DAkRBpPOu?p%+F-8Ko0P*Ke8&+Ui!r#npby{kU*rENuS7X)4xWVr z;617`%9=y>nzs!evLD)DtDB#zR?hBweq#Qv4|+MSdWu*sipwr!(02pfT6o!qSa6CZ zOw|P(rJm_w3_6{TKU>wl?ezU~Kg&cQv%dc~g6N+fnE|`0LFkFIpiSTXdTE(Tz%3XI z2AML)L#cAwKZ;M=zyLG4pUx{c@PqRFV|FG|jQTYnvC~qTQqwG3rwR^E2M)h3A(fUL%A$CkXGTyUTLRWOey{c& z8;tm*>j%})`ANtOT1~zJl$Q5T7uvC?nK5s1tP;$hMM87do`Yo(mJXZywwW>#sj>0L zzbE|5_Cz(5Sp}FD8fMMDsbchVFo@XW{H(|gNcOg`5+HRSCVP3i~*~s*7+Z} zMrJUCpdJ_X5j-79X7>RB0n11w-Ff6JMZyR?j+DY*o)Y{l{Q0|q{OK~sbvCIp!(`#& zulLvY#E2Ic6Z~QY+mDQfs2q9`8e*J=RaP7AbR=!8gVtqy&iGn`xds)=7UbBjg<0b9 zn~=2Rt5Pr3iyL2&eMl#dx1du8*GXvYtBsJwJycp?U@7qZ%Ld&KgD28G<$`);4whqY z-hKQdQPt$cm+AZJ(#AePc_5#uP)E`#CZ^v9o!VbG0|RM6~YL0e7gD?OdTxWqO@)9h^;GqX6&@*0tz5RqE)!WxsRww;eoXbssP;zSFr($#A z2Tv0iShumTLxl%BJc8TPkq(m%F8?gMy3i7=>y5Xj5OJEsK}ew-H42~>Be9V|JU3QBZqM@xBTxNw)(H>bUwZZUOjLX3U{-}%tKf32J|5zH&v!zu>Msw#6AZ7TP!<4S;=&8{hPV?AcK{- zlu)G((f_Ol30|YDun{Ed3u&A!R;m6ZnTVWknwW@=(dR)6Q+u2|!BD1^#owgJubDNg zJ7{rX1F__)jz3U!cl*s>jj!ulQke;g+5&WOGEtYpO|Qz|x3OBT*4Bruh3Lw4$e+T} zNnt9x2VR8UIF8@qih5F8lIjDxa-R5~bN!5b(13k2cmJr zS`F(n1aoDvLj{4Q^N9TFrlOU8N#_wZxxq8<7<_x{apuIHb^ff z*7!V=xf_BpYT$v6Ll4ompVgFPZI18$Z}?@xZ~Mh{$PTycs(>BNXg&mSd3Nv99La0B zD8CC1;9f(VL%*+8?=CY0B4J#_&8lyPFa9Df(>f=ol#Q}QUy7o2b^knPb$Q{;kZBVw zvvU`HDbz-6qR@w{4_G=MV^BlfBZX{`agGUthlMmkuP=fm15EabG{E~<_-pYOe?zy3 z^7VCJPvCz;$F!WdrR6H_@YGPxi0Y9E4s+dg+rRT|C9KGirB~U)4#Pi7bn17pJF(zt?l^FDD+sYZI@QKVxczydcI?8eo@sii5U!< z@iP~#HG=s(#9Ez80dMNLr<=1b%Fp4}hqLuQ-)FxaiXL@J+V;L3Pq!*8onTO&<2dNYyjC_!qvCS5I`6dCdIi`7=ZSnSRR4O*^{pGNASQQD&m*qyY|2_<7GPU~SL$(0(>&~PmE<`d3cIx?=81|N!0 zhhH?Vh_=gXA80m}fqG?91!*=a1c5Ty!<9w>&Q|NV#JOA{I%K^gzy7cWg!`ZjqqYuGlUhVa|33aQOAdeiJ=Bz8K z03n!~b?&{YdORDVl}QZt;T@ep$?n)EEY?lVm*a{TkT5Al&&Yy)}I!gW+ z`~5D|S z3K2n=Au>6QRzQ{?UjE6-W;=G*;QZ=eMEj#qMB{e4E3$Kvoul-FUcS1&o1=8e_Xj=a zcLf%Ce`l-7LMFHmZ_O{_ze%aHE2c9UjVI`LxbylS${J{k5kK#=dJ z)FV*8tW~_yIjyqmBC6Zh^})GwFY+4V!wbHD*~mOuDHEb^_b5`xcvEBAmTG5|aV!K4?Pm7v^?&)D|N^r#Ur~=U+<5t)g7NasU>1+g?Rlt?GtjSe?s##u|dNMPG zO~~ep&`w7jvJH4v($FeKf^aY?m||R*W81vWOq(-|8vPn1n>?%p#SW{)TUrWTQTI=V z^G>5Bw4OfjFHaM|3Tx(4o(k^f%Z{R4-32TJ#Hd&C7zHrz`W8k;XzDY5}f<(qro9KU$J4oZCn z(Hs{`63l1~On_QWh6gaITxPt&O(b+@Ik5ivJg-A^1*cB+p)RjO%wF@BMy~{y=U{Te z*xQRf(ZE+vV=>+91litn97QLwz-_>QGd=_Y{PN%ZgEK&-)|2*vQpaqvJ|f*&kn|O~ zJiZyh$#9WdxTY*ee_h`F;R*Z62v^|PZ+A~n5$W+{-RuR+Py$cV9eW$bJC){{t}o#o z6C$@5AJ=7qx3$jCX2=b>`}$2nRG0Fs@_&3YC>)3i-cY&d)*? zvjps}=y;jf*s_)4X*wqVZlkQ=ihvDYyT;YMq$E;<8l#@M%GpywV0YgXBQXCtWuvN0 z{4zDohrAyviE(j)BldBXG=UZMp337A;tx%q1_43u|uctV_zb=`Wo&Sdl19WJ>U}$fxxDlE|$v5*h}P&;V;^vD1y} zwpsYE29`OK^EVO_^77r$z!}749&><+IP-UuAK19_TZ?nP<7PvdIo_9Tu(VuBZfkT)^O?nEtljfh$I#(!@o+TYtFefA9F z{WIzN+Y|2kc#@}2e>iV~+d<+{-LXo4+9-ysJ{6;$gYi3G{6_$EXe=2xeaC#uNWi-H zNZ@u49GG(M#H|KFZ=hUE+k+}IGlT*~29~z$3wH9gy-6J}zdH4Oi<5E<{Y^|8I-zv( z{2rhwoD<(ITggoM;ziWNK7Lp6n&G~#9JR^1qQ~jSt#Q400*~+YwV0`Y+7$W&xaAvG zi;u;Noi)QM$I79x=m%?wi-q4LKpRhzs!5kI=iX=+{AAbo*tCp4DH=CnYb95yGp^AY zk8T+mP@+ZAQ<%Om0hA>L!J$-cZh0aipQmM8U#)<+I3n!yLW%g+D+s5*85k03hJQ4S z_`KLn57wsGidro6o}qV^VMV=@=D8frp!jcXUotADLUqcPw146dsiqZsMc=<#6XiT3 z+LmYnSo{w3o1LAtpRb|-gLSwig@w}z$k>b;0k_UTEmk3CdXAQTo^%&O5DQt&^V9#Z z{C1@*_g?2^d|kn&53w(_8jSgFr1jFdIoKriD-Z}opBW7 zkQ^qQ-S%{ESWeL*=Vd|i14ArgE78lPmtX@eE!hfywr5}Kj@y2MEd;x`cHD)^s!#2YOI31JU#(|Hi0qc zHNAva1U#d?RujzvdiYVJ ziM$k|5O>xw4^T%WxoD7TL3%p;mYyBT&ZOa|P#-L*JrByg|IP_~_k?N}?|(p8j*y*1%XXSd zT}qf2h)7}t@WI z8K!u6b8}I=eLDNu_?O=>#^B+?2+O^3CPd-ZNXXN@etvL|8R*=XN2nk_i0UO)W ztj*Aaw?P1#&)#R<4k^@-q`fG(nu6FP{WaSfJ-F%b_A14YaLuBGkzg#tDdlD%VRVcX zvofPM<=K|ClQhrTb{LrOKSWS@o=WN(@824z?zu*fTpj-I=5CFnMR6zT2f46MqZbd@% zdh>mSEngMx<)~pB#!EHvJUgx61yTAkmcf-J+ z>Gyf7SP9~0_-DMk2RkF;6Hq@3B5uo*b?7lU(|UTiqj%$*68*glk_GI?j0^Xnq3~{v z)B7B_5t)bF1(aIu?XCAOQsWf6?`olqsr!Yrf(r}VI6b^g_e5iCW~Px;*fNgCgvFmU z-?J{mnJVj^^5TP0X+~(|#nXHf5D4=QkX-3QMULbBG8}4>LLe?s2M1VDoUW&xcmfvl zRr;?#& zLtSO7>#ip6<7g^2A(cgy_-*xF{l_j`fQvNamQ!EHf#K!t)Un7cxWW}LmIC~oN;v)x zz57sTR7y#+EaoXWCX0GjN)j)!egk4M+SWXzvm7I)AKVKpbL0A>QA;wv!9J=^Vp~<( zqoI~45IAfqk$V|r0Wscq+D2azU}|Tm^PdPVu;>u1b&}yKGrDZmCs%t9C{{c%+Huy8knAPOOURZyF^?7~y?WwYeI8vJ$ zEnqGtoGuRd)8cc7h*3G4aOM0J+F$w3-U*`fcgF}#NL?Y*hQ}V7%Cp|tf9Q(Rq;GSU zODLnG#@qWwNlsXEB=(d3KgMYBN5_~5Z6cNV@JgNaiEBxnEw{^H+v-VUq1^L!7&TN# z9vwaf)Vu2GRm0z@?_E7(RiPG{5sYc)_iFr#@pXu~A=>=l~tN3 z`9?L+EO$cC&-XupXZi?Z8>avvnXk@jxHn=;)3PB%(=VzPG!f0Rfa z1mAIic?z$XI6r+}`7Hw&3iLZt6a%tM>;Rb&Icj)0(h&ZF;7QD-Z@6P3#@>cp=-EBi zB}bFpUx^q@l%45vihJjf1Oq%JvRYi?Zd)&4k&S3_- zj);unW!D3|kN9eFsjxTo*XwHfS}0}doP|~H$&VJ5c}87U-|7+p68s*=sL%dX8{(UM zU22feFpNb=L(oqa>lL#xq;S1Hq8m2dbMuvyG;Bb)LJ_RV-U9(A= zO4)OjR#^RZzuA^KM3CVl|4?@sC)WaVcwvXFujqk9Werzhot-lNCb+lO-|GQHXnd^r z<-`H?VN35nZmNX1^Ym%WxjvGhv;{Ynz+aiw1%p{s0EHdOm{R@T00z+gp6M8^b0 z>Y$3lgJ{YXJT#d-EfXUDOqN&F5J|AMjb6wehyQJjY^AJzwZX*-`UKXvQJVFzeLM)} z0$j(6$5IwEz7iBnMMo5S=vxNZtx1V?E-i!(q&ry2%6_-E0hYqyZjWOUrh59 zyt=z=f>=iq$kLECh_`?CINQlqjdJ=_Qnw#Oh+-6A?8d)K2?|A6pbCcXy0J(k&;PHN z(+@uDlB)t!NQ{{Ur`|Tm2;El_RQ?tfhLNP}_tm{qxdu;}Cx=1KmpI5p_+`!3Gkx1% zik-_rRR6rqe(871w!y%U^;NJgyI)k>)t|OS^bl6;HJS%BcOZPzyS}Ki3mSg4?Dy@W z6(u&vPq%+z7{_=<`-Zt-lObN?2_O1`XDjnh<}dt-VJrNoscR}5@T~o|SlC8tTUTJN zJscCjejHBfeU$rA^JvGNG|z{7nEeMgI~n^*w;=w8yb#Z+IcV$ zTeVy8#;oVpfdY&z@#5*X>Er=9e|31>4uy56Q1I!jVa{cbZ)ZruUa|)Xq0pXbG?mu) zfkQi9*RY7v1*RKr*GRsDzn)B){O2@<*g;<2(u*;othY9uP7h~#*f!)R2?E>|GtvmS z|1x&=MII0T`U<2}4cz2|Gm&5?2JMIuIfsp@`~Y!ZV0Nz7B*VFINP8FMIYM$7Z2raE z{5#_WsQWoTm8svXx&PqjobaZA((-4<+Wn$DwuT^K(T1xnj+m5Vt!v51mrg7J@VpO> zEvWheHx72%Po#B8Pe_`!KR0*wyET%cHE%{Excwg%4aR;%mdE7He% z$#=g_UZ8!_(Iw|IO8@A1Zt(75IVusIU3_!bLaO~UKAe~D=*sDxo#Mq|FNFt5sB^wM z!x_LWfQ~&+tBj#Y3lupUgMIT@MgE@ zKK=WXf3paH0e)Ri_D*%&QQ;H%l5f$Xsw&a|&}XQq<61_m!GG8#hF*5UYfuRY6PtT>;IlbrezzJXcr59{TQ5fr87{ZSRA1>?`A=(s7JH#-( zgXbNR|NmNm|1XJy4q^mrFl*YQaeTh$d|O6ZR!!A^&rFqL4!mqRYka#ReO%F zD%W%WwE;gZH)>j2cC0MQ8wJC8ol9IR0r$>MKN_*o9C&J4|8RJFj5iZa2-QoqlyCXY zpdeJ zdR()4FVUbfAJa;6R%mFg`E*KtsO_l6@9H@5D)%uafzc+Bb(CRDm-lATHTBKGfz!$O zHLqI5|AME2Pol>ko?T#iDfcBAyLPjUs2SZcz28#%Qh%SAYm6TN?+$s*C^}t)-95p| zu5U6Yh0m0`bS}IG*=O=KLC=-n}K?9Yx*_+X^0 zlJ;>&PsN_fZLLDeC71YmRfdMv_t?kTht{=!4v>kA96SK`B`Bgu`|)E#J8}@=@V%(2 ze!}Jh1n|G4AtDwwQ2n)0Z#sPZN(ha7Eb>Uso%c*@3Hzz$79L{)g8{pzz6yGD;enF( zoCgeCE$2@~>uIJ?z-@nYkV2F*_!s7EkuVK)G=1bVzHOr8siZneLONH%B4gsiAB(E2 zY(@3Hz5=SNg+Auwc0_Z($G@vLKp=^LD74r0lHpy%z1w}dch|0zblT$yZk;C)aN2iC zuN^P-TN4V56*@K5+R=J@{9P6MlAM=mSNX3re);Y)njtp5c&NW6%Uxwj?_hMQ&ahj& zFsOI-Vm!sI;gev`7R6Qij8^EHwoZKE-wK<8+Q)Ca`%?xd5Wz2@mSD*NqR*{0ofYy+}|_J&WuVt$B=x4Y+fFNEV2LuRQMlbgtyX$Dr&R(0g`JOWWyHRSv~a zgc>Yh`6#(Rsd&W)V-Qq3=IdQw;H35m*sAA;&71#2XZMI+LWMW~X(dhdY4$tbTtIO9x5o{_XA$xOt_|Vt8A8O{A#B zt>W5(`D^!VoZ<_-YN`620e(BcN{%J6inZY!qH_NC4}FoPX4^o-m1sm*1^~TV;jMs= zUBnG=bDvWe&F0-@bcEI0#9B+l*&a_JT%kKBx}VsJ{dv|tp^oQc1ccYW$!ulD5f`00 z3vfMC{XAvYPsQxCPZyk2tTHa9l}Ii1wiAtVwL)PIo|U?d3uL`c z%3^(d1Mn%)Nx{Q!l->9SkLzkz7`I8TMJ1yX9m!+f!M41qf|;637dS_B@Hla{&9Ol0PRqW5H=c)F zXY%GvM!FnSvu|Et&Rt=YQV)z$RfhYxT*0yLq#>WOm6Bsk4pwbdcVQvU$k4Ma;#Y8? zlnHRgVq_z_@ByO?jyl@qB|ZaY8R}tJh)ms%tC)5~$1zUyW!XQgu*Z+t9kn!b>3n~& zwIipT8F%Un`x3ZmU!pRxGLl6mly^BX2=J5kB@6z5;;B>9CB{4OmRwm5TO+z6KoWzX zDe43kb8dDbgAQGT?P;h4)J9_wiLBBT@D*OTjO_gSKb8}Pj z^Y#55XIq<1vZbNVbX3|Ir;O5tpEA|&!ZWf#?|$#rLmec6z9`#jM3y+o%UHXdz4A^6yI zV&?JeM$OaYeqAnP3h%t@{&}m=G4a&FELdvJSoNp0)Za-;dQ_OE$>ktQ@j2}gv22*^ z<59lR>KmFk!F}$xHDzFR16nl2Es+&a_TM&0m*i&i%Bt zXHu^X-`MO@V0uJIm~Tzvz(DEocp~adTwH`_Zcw+UX?euz{2iVYsn5FqADrs(zG`rz zP!AlE`wZTU88iX{JbN&RoQs9cB?|{U+zASLGlFJP4BOuuUf(zus@*v*1=AN5H8Wa` zit+x+6oIyw`A_~5L56g)CeUCYn#*GJI zest3gcM{|VGGJmx#l#d3PdWu(>`=43t4Vp8tvrY^z>G}$@j5@#gh^jEWD<`r)}de# zbh@(ymTEi?+H4M)({(M)kFh!s0iF-^SUqvl0Ztw~$;!&w+uIwK3BKD5VnlxcGqdpz zJJoR53#2$DuZFp^^JJcwLd%-_3%UMlDMsy-R96=LG9ZEB*v^_<{sGn#;~xx9Qg&Ck zt!eqaH~`%H;tOsgaKVPNF4a$81(_A{cegxU&#}wZ#DKBvE?+kpvRluF3q;B`>hb(; zb;{Vo&qDBy#^6jkY100B+>V@8|9h>8n(74df_qe}q=F2}GMFl+x9(n&AuFU&2#Uy+rLOTkq!(@fe6`8@~!_bIu)kjW6E z7t{I)@sHzu?bJtWa!&`9??nAzH;Z7(V(Zm~8oR~BQ>Vxd#Ud6x!HeXprmF8^n2JWs-q)uZ+t18nx?ROWqj z+c%Pf3EPRNdaWKC3&)YRlzOJ5a^c|R!sJ$`w#btKh99Wc{0>;n$7d0acN)GB3t|~$ zhk6&eQAd6M&j5cP77vUPhKfYs73C!_Gl&G;o}w)x+5=7UdDjU-xda4sZ%C3-jNcnz zv)~H=4|WuP1l`dSXv**~(n@~K>~zGgX6<0&kqsHg)9TGn50P5l<7Oi9xy&l!Dw2VZ zYo(B!c=ZO0$Wxv73|qEa)irRaR;A;Tcx7&vsby4MdN_WzK!xeysK3#cue;l&u-!DK zU?TnbC1!4A5s6ZqZox?9%OUxwhZEJlULHUreUb;9s~{vrcs+LEn|A1mFI5uVe1To; z2`E58BavRa^PuigqP~Lro zC%Ky`*Vi7nBn#mj7Jt_G3V z-U0WQeE@Z@E3N!cZ+Q1G+eheBji@z|BIiV30+1af1-t9m``@PtkMy31mLO);{vEs?*+-p*Lfq z%1X$J>${DNnv#rXkNWB*X+2L}DHvHI;bWcGa!f==Ej4nSWmhnQVZ;ZQ{`MiZxgUsb zw6Z>(hIVxsPVkyk@Lj~p*cuo04zlZTsBQKo!&;KkhgPlVH1fC?2wzFCFqrDmCEgwn zwC7K`+PIL=LzI>5TJ_cjlyAL#CW5#yBJUd{1ybf>b%Li(HBA#DKISn!oj?7k8C2k8Zg*BPg1pv;b^;t8 zCXl~^Vq)>n?|jMV0IO{$n7kZK)F+~s8KI7^axC<#0Hg(JIQ3J4`k_(zQc>oO z5sel>!$bV;qgYxC$0Q3Mz=}WfDPZoiieFwy*6s{$X7r=2viDd%*1C6C%|q}@Jh@_) z7QbTKh~wC_R!mbWx(53jAyatJ{`mabgLyzYPF|ZmwOkN=Yk#2(Gs7YL~b3yl4=E``kl(6MvRgEsq(8}0lc54satDWytZh*hj)_ctuY zB>3&~EN;_a40_8O29;seZ7jW76B9dPKgq&C01MS2nz|`%#Qx&E{N>jfFYrWjgC2!_ zECCvyv4h}5#AbFE+eD2&w#ECWek-W^UK`AZYW>FzxP&~b(yw>Q#&vnK7!*P&k!U;J zQe3)J=2Vuf-%o|sUIg`8<8USghcnG_jdDfDmFk1){Y8Oj#hItfwoU!a4+pE2C#k3G zQaAV^Jgc81n!lO*)8*?}uUWb1I2gb zd3}1%Uf6bjkJbYl$(KFMzW)r?_qlPpJhBCz?6n<+|JnrCE;-s8a+UC1&&tfV6>l}K z8RKZ)`GcDqjgZ4VCOh%e#WDCR!eO(&I=kONph5ibOpH!F&WIXXxfSr zw6y9A>Cg62F*Y*>Fng3u`Jsyv1A^dRhLHs6H5sb_DrufV~a|CWLHb*-)^Aw(d+fL#b_NIn(a#P;{hU;oBHi+T;EEphU1iFeEp%EsIdlS znIBb7^qbwP4NSFgqs%!G()gw_meAW^8XO29JjkBZ1(IB{uok4T=)~PRR=++-bZfwQ$W{g;cTSv zxYxl5$X7n$x{3v>79z&dQM>RZlFjf%JDr1n#`71jn%ABTSU$eKKRuS~0pa1-WyVcJ zHTZ{`@81JeGwL)K>+)1IyfTAI_?9cFG<9l2o7+X-&TH&E3CRCKaWocym9&cgdaa0c zbIp1EVmb{kg_u?cb975{=U^NKer~_$=ej%2xl^wayAzLqN`#$je!O~g13qyuG3;vaGL1uTcw5(}r}r$1T4H%@ z-JK(iN|qx;B2&PQrs)8&xAs`(!#Rn4wq1Q?B6mw)>8^&qx$gdAeJcDSu|udv(tlD@ zryC#Y<6$w_SCTFD&(*?(L_vs=Npts*VQn_)0fS#-s%&TDr&D4%iq#w1vx%#(tTkvK zpl-sV_Y^*J1X?OFy zsi%Fu(iQ}(>aC+=u>^V{2%OGBsk^R zrstbGVnHxm3$ zhI;1SZlQL^pxJ%5Qu^cTdCF@Y`b2`*AIp75X*^UcrDZe}CO8$hI9$zy{|)>10HS_n zj!ldjMzGR}d%R~wv~BpQ1$>_^uTGVXe)o#?J@yxjo8ZfC#`nxVWFe<9ju__3NohAX zCxpbi6UtP4WC5kz!QEH8fcGOpEr9Lq?K!`T=51eMxbay}vKBm(r~OUm+iw1#8SeUz zn(C>EwI*!|_-C5Am!EozZ7_iM-E0yS@9Bi8EGk&bsf!-Rrbx*sYjwi$H>0hUf$SA) z2mFQ{QPl62?$ISb(;eQi%a@>5h8c{rK(1pwJ_XDfeB-Lv+s?R*V*d8%`H$W~_O~ zodfR~n9QDnP0T2XCu|VYtlcBpw9V-P`EZ8yR1q*dG9uUPj4quo)d5}y+J~%3gNy$@ z%4u9x|BIf#xsjp9UrY~(Kr2ON;*^b{(7PO5@E+0r%`%(kfiUD)`em~TbLBNH)c0Bl z_OXRCXz0p*&SY<*)X?JXc+*xd$2XrT5p{>Ty0`HwLW6d9o@w6C%Ys55ARkh%sF~Sb zXJ%L%TW(|``iBFL66Blf)riCyjq+~Oj?~Fv6UyZ1LFA~=Mtc)Ti)o7;>9KO ziI^M3*5v>80rrfA0iO{Oop#}&Ak8MpnXv7z};@}355^iX9W7Qg3V z2%~e)?H3Z=z;k(^mt=tw`u6;Hp&Dx3POQFE#&H-zu@u_x3TzaZ$Ac7mi`JZLy090& z7~q&%$Pu2*TUD6wy+0s}?<|hyW+tw@F5kqH?!#Ag0LXe>d(O@wEpn1~}A_svc^Ow~NwN`=4 zm0a7j7daFtvZo2wj>lT6dbMggt=4pj@5rrYPv{ahQ^GeNU~b(o2Nv|+F&Ix#leBM; zxwqlC`#tw`%l$Xa^vj9*=M+wZmt~G5D1v_+MCRO}VBU=TKM0j*!<`>1IO`K@T6ZnJ z!N$fmu!zmy-;Jlv1A7!{yBS&+UE;gEm&n?=WbG|P1kEc1nyC9q^x@4~mkNx&+8I-5 zOOGKQ6mB%=EL4J4IDvDU12QMwC#k^YOmc;AsgMtC?n~~DQU{YKMUx`VWAHep6+F4$ zn0R}wvenJTjpy-I09J6biuSaCdjuyELx-PeB&KkH`QyEnrrTAbnh#4$OFMsfPLSEB zUMo!+HxI@%oEC849;^M&PdUPl6|g*X%9K+^-*32kupA%Z6C1nc_v&d{Rd7h6^k{|p z@f%Z`76|ntb0TjJ;Sw#@>6@ocV^lJ)+%ny_0k4Mj<&juQ1w!jbtpP{y1Y^2e~|xWtJ-kpJ``0+ z+E9Vp?@Qa_FfRQEAGFl1NceP{H(KITrW4L`MtxHETZH$*J}H4UaDh8Im@4zG=nNs} z7C#M*<}=S;!}sW=Qe~>?kx6r2h(z`&Ro?se${HCUh<=Ts_Lh?+P3wQFZKF0*v=jn$ z>}9@S*!TJClr@UX2XKE+@k(eqc(e78w}-*@tkh}C3@qtaS~G?7)oKus(DRbDf9#>{ z97TX6xIAKHk^z5ae4V-v_NTuz?0y1tXZ)?Slor_8 z?K~I;VQdc!4m;4iG#IgdnlCfbbH(mCBnk7DD+Az773|qTcE)qwCKo)$&@xaKJ^Zj2e zQ_DSn5I-)fAm?BO(@6ir$Urz0``wP9RIlqMHhO-B%4ej}7HLZUf! z@xbAcE#Vin?0j|f*U8GEB(|BD+@E$g0y)lT8VKCwc@YSxV+?rT5(I3TXqSAc9`|e$ z--h@76{di@LPr9l%rb&|>#~LR((5thXD(zPId?kGQZ;>-9O>)Y>u_x@m0FBNDK>#x z&I>c^@QTl^;Bd0O#o2ne$WUqBoO&D}(yo(NOei1BzKqx^IAT_WCupW4R_7}@dE$(+ za_aQ4gJ}yu^(%?-o@V88VYuyxKB42QhzErINj@t@#R}yxk1PQ2B$a1V%lO#gF5>H+E>)P-8 zz*A=83d%l&!M>auef{u=U;ka+hyHjMW4SuA@uuwq;&N4q(lf7z7vlKJzeV~!y?fOz z2)feZV76(TS5gqD8vTYd*K8@CiiJhYP%P{CVJ+4YwOLCfX1&?R{J?!h)!@hZeL844i5^D$vek@|61VxCBICRQ?c1VaYNhs zl2t4@b?;r>Mmx|T<|PvWk3>!O(su+^3pJRYM|`lQKvA}VYHn>ELWx`dSs9op_0|fP!&Aq6TCP*XL!4TlJq^#gyfdY9R zHO1E_wuY-^05~2GUOf$3o7;MV6Lve1({vUk$ZAR}WzG?jETmPOlE`aU%u=!Pi=w5g zE-9(QoWkesi^xX2D}(H8Ais(Mz~wa50YyJdH8|!%K=Cqlk0XqW|Gxm)3MTdbWZh?9@x`D)mV`gH z!)RVF_a>iz{y8sBc#ZE{9^}OduaR)l&YBuEbsQo513i24NN@)p3GTqU9bFkVx(uTu zBT2CkadXtM?^XLxc7NV*+bFNV-pEK|V`ELDr@OKSRj($>+mFBf5jE=8=S=BZJpT4a zs(d}~RMc@}w)#@6pW5Q23}*NHp!XNwE)u+{+Tp$3c2FOHQy@9%I5qvGjyq+^Pf3o3ZU?06TW^ujmnpYs#STQO%qmbS)jU?3l}bM;exbYF#NO6bobw=P925~ z8pKOe7UP}9ScuG#MP`Wf{Gc$R6{6KzPwT0dTrO!_7_SwuHR4H55 z@EZQnY1Hgema7>V41WC$N>`LjeMMhidIoi)W|gw+J$x8is=cJt^lO4WJPUimN&IU& z#$EIgz%R*L$w|jm{N$wLG%J;2TJnYPMd=rOl>&S_Wh*bd2N!N!WL)RAc$cUEfZu~s z!>fUB6;fB~*9mG7_2EDQUSGvy%Ox)tYo7j4-hL26+7kBzgEsG#OE>`M&OznM^6rHT7vR(>s8WSNoA+|R z=AO^yF2Vlw*JtUS8(Q9M`)p<=4Go_AYDNaH|8|Jd6)RHFSE{Eo($Xkf$(ua~_ptWd zS+ZK{UF0Mu9jE&fP1yQ_Ljk%zmqFT@KM8Ev2wP-~{6BAc6#i`z$u#)$PdWq!k_}|sxWT1d!AGBU zI6I2&_nnISMd>cQbaf~D4;+BH()b0HDuF^F&j0oslrIkl4iLmOz9`*=Hn;Tm-@Eq` zxzw9&n<1@ZGfGDvC8umPGSX6M6WpD$mAuJ3e}Sr1e91U>)|4xi$XX<&$KmHwkL}-A zq;TC`_*N~($&+?`s}^I|uKhp>MScf_=}$>c1dL05317z-g`oxTE>VGAliuO*^tNw~wYvpD|~zpT=2R zHu=>jsrm7Lxu4N&9Q>)vYXa=wx)rucp3Q?ssk?ah+idc75YXys43v<10tBM9k_G6z=38Cw-<#dXk#hPp;n82ksMGh~N7MP>roWgaak;Z0T`22&t?-r5wE>bZNT#qv)@AwFmD{%{k((CK zsQ3pv zW_6EQ5DrW6Md>a8w7Dhu*AxQFOdbWjHdp~v(MxJ%-s4Z z&o&rHjT*H$eL9gg!QEBY58t|pZZEvc{0(y`Sy$cBBkFKK7O*{B{d`)%E31H-eoZ)< z1e}QA>Mcj*7Ly>!&`9`#?**{7#8WxpMWhyaqk&b3j5tQ%qkRBKNRhfz?O|cmINLyO z1h%${)9Pvrg-Zm>d;y^dg*!;ibf57b1CA0ex_h;&a|4cU%z3>;CjeG`{yG(X zeMwn4m-{+B#=w_9r17DV^!DOHF@)B(k`hDChPhk}`{hBa-{A76yK*_(6 z=IE_8EA;@MezuZ1bEY}w1BjP+-S0ep4>o0M)L!b}D#v|Em1xlaB8Q`Hb6=9wU!Z*X zTE0~X;Vb!v`oxiX?jnGyk*9@~>$kcZLlBNSSE&?6d?l2M@RY(Cv$JL1+V%N`4&LBS z>k_(c(68?oO5hIW%$X*KfX@$K_Y$p;&0gNU&e!7aT;D%o{Nrv7%M0P>m+$3H$apPQ zCd3fgw5PnE7k~YOYSi$|EV_#*B21j9_pIXf-bmR6N`B%EcyM=71f;s|#_mJ%!KN$q za{vL3JyloUes1UxmMvMv>o2|uz}eIp%v_g;cmp2XRp>qgE6&UFYPRp&p? zJxO+}>V%ASueF&nZlwHMTSMv~88@#jZ$A2{p=U1-{$9uy;J-mV7~ZlieSt`zFYwF7 z9TXZclCB+th(47}*N#E_3VbwnGRKGN=lGdH#3GK21Bye+^c0n!J`e65R8_$AwTpPE z|4_7}-Errn@$eJ2Fa~X2VR|xU2zqBx$c^F+cyM>1TO9hqqB$G^jsTZ|Ygeyu!WPB} zTNn*33g1~2^79cT88@%3&e^mFcL#>^0m_u`&ZV2uxcY!b;8V3SWlG)0S|<}yt(1I` z&r=2bbD*;T)5mR~cGKzv1O{;Z)-`;pR;FFg5Sn%9Pq&%Ip;!QyC107(Qw98Upi+S6 zpLm}VWr~rWbdK~SX~eHgsrxvS9Lt&HSn4!tNo5yGUkeOj3y!tj!hv%7hrQ?>PL>i#9;}HMw)z z#DpL9#2>)(74T1j%HRC=ixvYgsYW})%rj0)Gg(S>dXO8t4-qqVvQvNk#e4b#Qi<2X zV*&mdkOkn5zxnSMEtZ8ZkY9iO9^4(c40>P$tK;MO_1EvgUyuI>T{}wv*k~Ko00000 LNkvXXu0mjf7>}uH literal 19159 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 diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index bb5c5788e..a4bd2fa45 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -134,7 +134,7 @@ actors.buffs.clearbleesdgoodbuff.blessmixshiled.name=纯洁的祝福-守护 actors.buffs.clearbleesdgoodbuff.blessmixshiled.desc=守护我们最后的种子!\n\n本大层英雄在血满的情况下每150回合获得一些护盾。 actors.buffs.clearbleesdgoodbuff.blessimmune.name=纯洁的祝福-隐没 -actors.buffs.clearbleesdgoodbuff.blessimmune.desc=隐没在这人群之中,我们便是超凡脱俗的个体\n\n本大层英雄免疫诅咒效果和减少40%的物理伤害。 +actors.buffs.clearbleesdgoodbuff.blessimmune.desc=隐没在这人群之中,我们便是超凡脱俗的个体\n\n本大层英雄免疫诅咒效果和魔法效果和减少40%的物理伤害以及无视血色哨卫的伤害。 actors.buffs.clearbleesdgoodbuff.blessgoread.name=纯洁的祝福-前路 actors.buffs.clearbleesdgoodbuff.blessgoread.desc=行走在这令人惧怕的地牢中,灯火是前路的指引\n\n本大层英雄灯火值高于60%的情况下,获得每回合进行血量回复。 @@ -961,7 +961,7 @@ actors.buffs.championenemy$halo.name=鬼磷精英 actors.buffs.championenemy$halo.desc=鬼磷精英造成 15% 额外近战伤害,会使用更强大的磷火点燃攻击目标,免疫火焰,免疫磷火。 actors.buffs.championenemy$delaymob.name=苦痛精英 -actors.buffs.championenemy$delaymob.desc=苦痛精英可以将受到的伤害进行延时释放,拥有 45% 额外近战伤害。 +actors.buffs.championenemy$delaymob.desc=苦痛精英可以将受到的伤害进行延时释放,拥有 45% 额外近战伤害,拥有60%的伤害减免。 actors.buffs.championenemy.warn2=杀戮与不祥之意笼罩在整个地牢之中…… diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index f4c7f00e8..c431038a6 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -172,7 +172,7 @@ items.weapon.melee.endingblade.ac_diedghost=✦死亡宣告✦ items.weapon.melee.endingblade.ac_healreset=_千里追魂_ items.weapon.melee.washcrime.name=涤罪 -items.weapon.melee.washcrime.desc=铁链的末端绑了一把巨镰,上面的Γ血迹Γ已然生锈。\n命中有几率释放✦未安息的亡魂✦助战,并给敌人施加✦虚弱✦效果,武器伤害随杀敌数增加,但在一定阈值后停止增加。\n\n_这把武器拥有额外的攻击距离但攻速极慢_ +items.weapon.melee.washcrime.desc=铁链的末端绑了一把巨镰,上面的Γ血迹Γ已然生锈。\n命中有几率释放✦未安息的亡魂✦助战,并给敌人施加✦餐费✦效果,武器伤害随杀敌数增加,但在一定阈值后停止增加。\n\n_这把武器拥有额外的攻击距离但攻速极慢_ items.weapon.melee.washcrime$diedghost.name=未安息的亡魂 items.weapon.melee.washcrime$diedghost.desc=肉身已然逝去,灵魂尚未得到安息,脑海遵照主人的意愿,直到真正的死亡降临。 @@ -985,8 +985,6 @@ items.food.smallration.descx=它看起来和普通口粮不一样,就是大了 items.food.stewedmeat.name=炖肉 items.food.stewedmeat.eat_msg=吃起来还行。 items.food.stewedmeat.desc=烹煮的过程中杀死了肉上面可能携带的任何病菌或是寄生虫。现在应该可以安全的食用它了。 -items.food.stewedmeat.descx=烹煮的过程中杀死了肉上面可能携带的任何病菌或是寄生虫,营养丰富,使你信心倍增。现在应该可以安全的食用它了。 - ##journal items diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 5cdcf900c..5cc58541f 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -1,106 +1,267 @@ badges.endorsed=取得徽章:%s badges.new_super=新的超级徽章:%s badges.new=新的徽章:%s -badges$badge.monsters_slain_1=击杀10名敌人 -badges$badge.monsters_slain_2=击杀50名敌人 -badges$badge.monsters_slain_3=击杀150名敌人 -badges$badge.monsters_slain_4=击杀250名敌人 -badges$badge.gold_collected_1=收集100金币 -badges$badge.gold_collected_2=收集500金币 -badges$badge.gold_collected_3=收集2500金币 -badges$badge.gold_collected_4=收集7500金币 -badges$badge.level_reached_1=达到6级 -badges$badge.level_reached_2=达到12级 -badges$badge.level_reached_3=达到18级 -badges$badge.level_reached_4=达到24级 -badges$badge.all_weapons_identified=全武器鉴定 -badges$badge.all_armor_identified=全护甲鉴定 -badges$badge.all_wands_identified=全部法杖鉴定 -badges$badge.all_rings_identified=全部戒指鉴定 -badges$badge.all_artifacts_identified=全神器鉴定 -badges$badge.all_potions_identified=全部药水鉴定 -badges$badge.all_scrolls_identified=全部卷轴鉴定 -badges$badge.all_items_identified=全道具鉴定 -badges$badge.all_bags_bought=买下所有包裹 -badges$badge.death_from_fire=死于火焰 -badges$badge.death_from_poison=死于剧毒 -badges$badge.death_from_gas=死于毒气 -badges$badge.death_from_hunger=死于饥饿 -badges$badge.death_from_glyph=死于延缓伤害 -badges$badge.death_from_falling=死于坠落楼层 -badges$badge.kill_red=击败死灵领主 -badges$badge.kill_rotheart=根除腐莓之心 -badges$badge.kill_coldele=新生火元素之殇 -badges$badge.yasd=死于火焰,毒,毒气,饥饿,护甲刻印和坠落 -badges$badge.boss_slain_1=斩杀第1个Boss -badges$badge.boss_slain_2=斩杀第2个Boss -badges$badge.boss_slain_3=斩杀第3个Boss -badges$badge.boss_slain_4=斩杀第4个Boss -badges$badge.boss_slain_1_all_classes=分别使用战士、法师、盗贼和女猎手斩杀第1个Boss -badges$badge.boss_slain_3_all_subclasses=分别使用角斗士、狂战士、术士、战斗法师、疾行者、刺客、狙击手和守望者斩杀第3个Boss +badges$badge.monsters_slain_1.title=新晋怪物猎人 +badges$badge.monsters_slain_1.desc=在一场游戏中击败 10 个敌人 +badges$badge.monsters_slain_2.title=进阶怪物猎人 +badges$badge.monsters_slain_2.desc=在一局游戏中击败 50 个敌人 +badges$badge.monsters_slain_3.title=专业怪物猎人 +badges$badge.monsters_slain_3.desc=在一局游戏中击败 100 个敌人 +badges$badge.monsters_slain_4.title=大师怪物猎人 +badges$badge.monsters_slain_4.desc=在一局游戏中击败 250 个敌人 +badges$badge.monsters_slain_5.title=宗师怪物猎人 +badges$badge.monsters_slain_5.desc=在一局游戏中击败 500 个敌人 +badges$badge.gold_collected_1.title=新晋财宝猎人 +badges$badge.gold_collected_1.desc=在一场游戏中收集 250 金币 +badges$badge.gold_collected_2.title=进阶财宝猎人 +badges$badge.gold_collected_2.desc=在一局游戏中收集 1000 金币 +badges$badge.gold_collected_3.title=专业财宝猎人 +badges$badge.gold_collected_3.desc=在一局游戏中收集 2500 金币 +badges$badge.gold_collected_4.title=大师财宝猎人 +badges$badge.gold_collected_4.desc=在一局游戏中收集 7500 金币 +badges$badge.gold_collected_5.title=宗师财宝猎人 +badges$badge.gold_collected_5.desc=在一局游戏中收集 15000 金币 +badges$badge.level_reached_1.title=新晋冒险者 +badges$badge.level_reached_1.desc=升到6级 +badges$badge.level_reached_2.title=进阶冒险者 +badges$badge.level_reached_2.desc=升到12级 +badges$badge.level_reached_3.title=专业冒险者 +badges$badge.level_reached_3.desc=升到18级 +badges$badge.level_reached_4.title=大师冒险者 +badges$badge.level_reached_4.desc=升到24级 +badges$badge.level_reached_5.title=宗师冒险者 +badges$badge.level_reached_5.desc=升到30级 +badges$badge.all_weapons_identified.title=武器研究员 +badges$badge.all_weapons_identified.desc=鉴定手册中所有类型的武器 +badges$badge.all_armor_identified.title=护甲研究员 +badges$badge.all_armor_identified.desc=鉴定手册中所有类型的护甲 +badges$badge.all_wands_identified.title=法杖研究员 +badges$badge.all_wands_identified.desc=鉴定手册中所有类型的法杖 +badges$badge.all_rings_identified.title=戒指研究员 +badges$badge.all_rings_identified.desc=鉴定手册中所有类型的戒指 +badges$badge.all_artifacts_identified.title=神器研究员 +badges$badge.all_artifacts_identified.desc=鉴定手册中所有类型的神器 +badges$badge.all_potions_identified.title=药剂研究员 +badges$badge.all_potions_identified.desc=鉴定手册中所有类型的药剂 +badges$badge.all_scrolls_identified.title=卷轴研究员 +badges$badge.all_scrolls_identified.desc=鉴定手册中所有类型的卷轴 +badges$badge.all_items_identified.title=道具专家 +badges$badge.all_items_identified.desc=鉴定手册中所有的物品 +badges$badge.all_bags_bought.title=背包客 +badges$badge.all_bags_bought.desc=完全扩充你的背包 +badges$badge.death_from_fire.title=燃尽 +badges$badge.death_from_fire.desc=死于火焰 +badges$badge.death_from_poison.title=中毒 +badges$badge.death_from_poison.desc=死于中毒 +badges$badge.death_from_gas.title=窒息 +badges$badge.death_from_gas.desc=死于毒气 +badges$badge.death_from_hunger.title=饿毙 +badges$badge.death_from_hunger.desc=死于饥饿 +badges$badge.death_from_falling.title=变成薄饼 +badges$badge.death_from_falling.desc=死于坠落 + +badges$badge.kill_rotheart.title=铲除腐莓之心 +badges$badge.kill_rotheart.desc=完成老杖匠的腐莓之心任务,使冰雪监狱得到暂时的安定。 + +badges$badge.kill_coldele.title=新生火元素之殇 +badges$badge.kill_coldele.desc=完成老杖匠的献祭任务,使冰雪监狱得到暂时的安定。 + +badges$badge.yasd.title=另类死亡爱好者 +badges$badge.yasd.desc=解锁所有关于死因的徽章 + +badges$badge.boss_slain_1.title=丛林之熵 +badges$badge.boss_slain_1.desc=击败丛尽头的任意Boss +badges$badge.boss_slain_2.title=冰狱噩梦 +badges$badge.boss_slain_2.desc=击败监狱尽头的任意Boss +badges$badge.boss_slain_3.title=冰雪诅咒 +badges$badge.boss_slain_3.desc=击败冰雪矿洞尽头的任意Boss +badges$badge.boss_slain_4.title=矮人都市大惊变 +badges$badge.boss_slain_4.desc=击败矮人王国尽头的任意Boss + +badges$badge.boss_slain_1_all_classes.title=千面手 +badges$badge.boss_slain_1_all_classes.desc=以所有职业击败第一个Boss + +badges$badge.boss_slain_3_all_subclasses.title=万事通 +badges$badge.boss_slain_3_all_subclasses.desc=以所有专精后的职业击败第三个Boss + badges$badge.strength_attained_1=达到13点力量 badges$badge.strength_attained_2=达到15点力量 badges$badge.strength_attained_3=达到17点力量 badges$badge.strength_attained_4=达到19点力量 -badges$badge.food_eaten_1=吃掉10个食物 -badges$badge.food_eaten_2=吃掉20个食物 -badges$badge.food_eaten_3=吃掉30个食物 -badges$badge.food_eaten_4=吃掉40个食物 -badges$badge.item_level_1=获得3级物品 -badges$badge.item_level_2=获得6级物品 -badges$badge.item_level_3=获得9级物品 -badges$badge.item_level_4=获得12级物品 -badges$badge.victory=取得Yendor护符 -badges$badge.get_sc=净化怨灵根源\n将尸尘交给老杖匠 -badges$badge.victory_all_classes=分别使用战士,法师,盗贼和女猎手取得Yendor护符 -badges$badge.mastery_combo=达成10连击 -badges$badge.items_crafted_1=一场游戏中酿造3瓶药水 -badges$badge.items_crafted_2=一场游戏中酿造6瓶药水 -badges$badge.items_crafted_3=一场游戏中酿造9瓶药水 -badges$badge.items_crafted_4=一场游戏中酿造12瓶药水 -badges$badge.no_monsters_slain=在不击杀怪物的情况下通过楼层 -badges$badge.grim_weapon=通过"残酷"武器附魔秒杀一个怪物 -badges$badge.piranhas=消灭6只食人鱼 -badges$badge.games_played_1=进行10场游戏 -badges$badge.games_played_2=进行50场游戏 -badges$badge.games_played_3=进行250场游戏 -badges$badge.games_played_4=进行1000场游戏 -badges$badge.godd_make=老人与海\n累计完成老杖匠的全部任务\n\n_奖励:0层随机戒指(四大基座上)_ -badges$badge.clear_water=净化大师\n完成挑战:污泥浊水\n\n_奖励:敬请期待_ -badges$badge.ghostdage=幽灵大哥\n_在幽灵处获得一次+4品质武器或护甲\n\n_(镀层需求:+5品质武器) -badges$badge.dageto=幽灵大哥\n在幽灵处获得一次_+5_品质武器或护甲\n\nΞ你已成功镀层Ξ +badges$badge.strength_attained_1.title=健身菜鸟 +badges$badge.strength_attained_1.desc=基础力量达到 12 点 +badges$badge.strength_attained_2.title=健身学徒 +badges$badge.strength_attained_2.desc=基础力量达到 14 点 +badges$badge.strength_attained_3.title=健身专家 +badges$badge.strength_attained_3.desc=基础力量达到 16 点 +badges$badge.strength_attained_4.title=健身大佬 +badges$badge.strength_attained_4.desc=基础力量达到 18 点 +badges$badge.strength_attained_5.title=健身大只佬 +badges$badge.strength_attained_5.desc=基础力量达到 20 点 +badges$badge.food_eaten_1.title=新晋美食家 +badges$badge.food_eaten_1.desc=在一场游戏中进食 10 次 +badges$badge.food_eaten_2.title=进阶美食家 +badges$badge.food_eaten_2.desc=在一场游戏中进食 20 次 +badges$badge.food_eaten_3.title=专业美食家 +badges$badge.food_eaten_3.desc=在一场游戏中进食 30 次 +badges$badge.food_eaten_4.title=大师美食家 +badges$badge.food_eaten_4.desc=在一场游戏中进食 40 次 +badges$badge.food_eaten_5.title=宗师美食家 +badges$badge.food_eaten_5.desc=在一场游戏中进食 50 次 +badges$badge.item_level_1.title=新晋附魔师 +badges$badge.item_level_1.desc=获得一件等级大于等于 3 的物品 +badges$badge.item_level_2.title=进阶附魔师 +badges$badge.item_level_2.desc=获得一件等级大于等于 6 的物品 +badges$badge.item_level_3.title=专业附魔师 +badges$badge.item_level_3.desc=获得一件等级大于等于 9 的物品 +badges$badge.item_level_4.title=大师附魔师 +badges$badge.item_level_4.desc=获得一件等级大于等于 12 的物品 +badges$badge.item_level_5.title=宗师附魔师 +badges$badge.item_level_5.desc=获得一件等级大于等于 15 的物品 +badges$badge.victory.title=水晶篇章通关! +badges$badge.victory.desc=获得水晶之心。 -badges$badge.endied=终焉之旅\n\n_(获得终焉)_ +badges$badge.get_sc.title=净化怨灵根源 +badges$badge.get_sc.desc=完成老杖匠的尸尘净化任务,使冰雪监狱得到暂时的安定。 -badges$badge.halofire_died=死于磷火烈焰 -badges$badge.happy_end=幸福结局 -badges$badge.champion_1x=开启1项挑战通关 -badges$badge.kill_slmking=击杀史莱姆王子 -badges$badge.big_x=突变风波\n\n基因突变开启通关!你见证了地牢的突变体,同时也看见了玩火必自焚的道理……\n\n_奖励:0层随机护甲(四大基座上)_ -badges$badge.exsg=大症若愚\n\n癔症只是一个假象,你仍然坚持过来了!\n\n_奖励:1500初始金币,两个经验药水_ -badges$badge.kill_dm720=击杀DM720\n\n矿洞的终极兵器\n\n_奖励:0层额外十字架(四大基座上,与冰雪魔女不叠加)_ -badges$badge.champion_2x=地牢勇者\n\n_开启3项以上挑战通关\n\n[不包含BR模式和开发者模式]_ -badges$badge.champion_3x=不屈斗士\n\n_开启6项以上挑战通关\n\n[不包含BR模式和开发者模式]_ -badges$badge.champion_4x=超凡脱俗\n\n_开启8项以上挑战通关\n\n[不包含BR模式和开发者模式]_ -badges$badge.champion_5x=救世之主\n\n_开启10项以上挑战通关\n\n[不包含BR模式和开发者模式]_ -badges$badge.unlock_mage=解锁法师 -badges$badge.unlock_rogue=解锁盗贼 -badges$badge.unlock_huntress=解锁女猎手 -badges$badge.kill_sm=击败拟态之王\n\n一场”公平"的对决 -badges$badge.rlpt=_支离破碎征服者_\n\n开启挑战并击败古神\n\n_奖励:0层随机神器(四大基座上)_ -badges$badge.sbdjs=风暴袭来,未完待续\n\n你通过它成功离开,却不知,外面风暴袭来\n\n水晶之心仍然在你手中闪闪发光,或许,这事还没完! -badges$badge.kill_mg=击败冰雪魔女-冬铃\n\n冰雪之地的女王\n\n_奖励:0层额外十字架(四大基座上,与DM720不叠加)_ -badges$badge.firegirl=击败圣火魔女-莲娜\n\n雪凛峡谷的守护者 -badges$badge.slimepr=击败史莱姆公主\n\n妥协的结果 -badges$badge.drawf_head=击败矮人将军\n\n矮人王国的正规军残党 +badges$badge.victory_all_classes.title=全能宗师 +badges$badge.victory_all_classes.desc=以所有职业取得水晶之心。 -badges$badge.brcler=起始归一\n\n你已经粉碎了DM-ZERO的阴谋,现在是时候回归正常生活了。\n[完成首领对决] -badges$badge.take_item=宝藏探索者\n\n获得宝藏迷宫的全部宝藏 -badges$badge.kill_apple=击败克里弗斯之果\n\n盘踞在森林底部的幕后“主谋" +badges$badge.mastery_combo.title=角斗士之怒 +badges$badge.mastery_combo.desc=达成十连击 +badges$badge.items_crafted_1.title=炼金学徒 +badges$badge.items_crafted_1.desc=在一局游戏中通过炼金术合成3个物品 +badges$badge.items_crafted_2.title=炼金熟手 +badges$badge.items_crafted_2.desc=在一局游戏中通过炼金术合成8个物品 +badges$badge.items_crafted_3.title=炼金专家 +badges$badge.items_crafted_3.desc=在一局游戏中通过炼金术合成15个物品 +badges$badge.items_crafted_4.title=炼金大师 +badges$badge.items_crafted_4.desc=在一局游戏中通过炼金术合成24个物品 +badges$badge.items_crafted_5.title=炼金宗师 +badges$badge.items_crafted_5.desc=在一局游戏中通过炼金术合成35个物品 +badges$badge.no_monsters_slain.title=和平主义者 +badges$badge.no_monsters_slain.desc=在不击败任何敌人的情况下通过一个楼层 +badges$badge.grim_weapon.title=死神来了 +badges$badge.grim_weapon.desc=使用死神附魔击败一个敌人 +badges$badge.piranhas.title=非主流垂钓 +badges$badge.piranhas.desc=在一场游戏中杀死 6 只食人鱼 + +badges$badge.games_played_1.title=新晋调查者 +badges$badge.games_played_1.desc=进行 10 场游戏,你已经知悉了地牢的轮回诅咒。 +badges$badge.games_played_2.title=进阶调查者 +badges$badge.games_played_2.desc=进行 50 场游戏,你已经熟悉了地牢的潜规则。 +badges$badge.games_played_3.title=资深调查家 +badges$badge.games_played_3.desc=进行 250 场游戏,你的威望已经在地牢中传颂。 +badges$badge.games_played_4.title=大师调查员 +badges$badge.games_played_4.desc=进行 100 场游戏,你的名声已经传到地表三巨头的耳里。小心夜路遇到他们哦。 + +badges$badge.godd_make.title=暗室逢灯 +badges$badge.godd_make.desc=累计完成老杖匠的全部委托任务,现在,是他回报恩人的时候了。\n\n_奖励:0层随机戒指(四大基座上)_ + +badges$badge.clear_water.title=净化大师 +badges$badge.clear_water.desc=完成挑战:污泥浊水 + +badges$badge.ghostdage.title=白幽祝福 +badges$badge.ghostdage.desc=_在幽妹处获得一次+4品质武器或护甲\n\n_(镀层需求:+5品质武器) + +badges$badge.dageto.title=白幽神谕 +badges$badge.dageto.desc=在幽妹处获得一次_+5_品质武器或护甲\n\nΞ你已成功镀层Ξ + +badges$badge.endied.title=终焉之旅 +badges$badge.endied.desc=_(获得彩蛋武器终焉)_,目前版本暂时无法获得 + +badges$badge.halofire_died.title=磷尽胆绝 +badges$badge.halofire_died.desc=在磷火的折磨中死去 + +badges$badge.happy_end.title=风暴结局 +badges$badge.happy_end.desc=携带水晶之心离开地牢 + +badges$badge.champion_1x.title=地牢探索员 +badges$badge.champion_1x.desc=开启1项挑战通关,地牢的轮回诅咒也不能阻止你探索的脚步。 + +badges$badge.champion_2x.title=地牢勇者 +badges$badge.champion_2x.desc=开启3项以上挑战通关,在地牢的轮回中不断的探索极限便是勇者的象征。 + +badges$badge.champion_3x.title=不屈斗士 +badges$badge.champion_3x.desc=开启6项以上挑战通关,在地牢的重重考验下你活了下来,你的惊人测试成绩已经为世人歌颂。 + +badges$badge.champion_4x.title=超凡脱俗 +badges$badge.champion_4x.desc=开启8项以上挑战通关,无论结局怎样,你的尝试已经让衪们知晓你的能力。或许在未来,你会直面衪们。 + +badges$badge.champion_5x.title=登神之路 +badges$badge.champion_5x.desc=开启10项以上挑战通关,你的信念与威望已经人人知晓,你已经引起世界各个势力的注意。今后你将踏上新的征程。 + +badges$badge.kill_slmking.title=粘体终结者 +badges$badge.kill_slmking.desc=击杀栖息在水晶异变的史莱姆王子 + +badges$badge.big_x.title=突变风波 +badges$badge.big_x.desc=基因突变开启通关!你见证了地牢的突变体,同时也看见了玩火必自焚的道理……\n\n_奖励:0层随机护甲(四大基座上)_ + +badges$badge.exsg.title=大症若愚 +badges$badge.exsg.desc=药水癔症只是一个假象,你仍然坚持过来了!\n\n_奖励:1500初始金币,两个经验药水_ + +badges$badge.kill_dm720.title=兵不厌“炸” +badges$badge.kill_dm720.desc=击杀冰雪矿洞中的DM-720和它的驾驶员。\n\n_奖励:0层额外2阶武器(四大基座上,与冰雪魔女不叠加)_ + +badges$badge.death_from_glyph.title=慢性死亡 +badges$badge.death_from_glyph.desc=死于延缓伤害。 + +badges$badge.unlock_mage.title=解锁法师! +badges$badge.unlock_mage.desc=使用一个升级卷轴以解锁法师 +badges$badge.unlock_rogue.title=解锁盗贼! +badges$badge.unlock_rogue.desc=在一场游戏中进行十次伏击以解锁盗贼 +badges$badge.unlock_huntress.title=解锁女猎手! +badges$badge.unlock_huntress.desc=在一场游戏中使用投掷武器命中十次敌人以解锁女猎手 + +badges$badge.kill_sm.title=拟态对决 +badges$badge.kill_sm.desc=接受拟态王的战书并击败它获得它的认可。这是一场公平的对决! + +badges$badge.rlpt.title=分崩离析 +badges$badge.rlpt.desc=开启支离破碎挑战并在主线关卡完成游戏\n\n_奖励:0层随机神器(四大基座上)_ + +badges$badge.storm.title=风暴袭来 +badges$badge.storm.desc=在拿到了水晶之心离开地牢后,天突然黑了下来,并且电闪雷鸣。\n\n地牢入口的守卫让你前往霜落帝国觐见她。看来,这一切尚未结束。 + +badges$badge.kill_mg.title=冰雪挽歌 +badges$badge.kill_mg.desc=请尝试重创冰雪之地的她,让她能够清醒过来\n\n_奖励:0层额外2阶武器(四大基座上,与DM720不叠加)_ + +badges$badge.firegirl.title=圣火赞歌 +badges$badge.firegirl.desc=重创雪凛峡谷的圣火魔女,让她接纳你。 + +badges$badge.drawf_head.title=“旧时代”的终结 +badges$badge.drawf_head.desc=击败矮人将军,让他从诅咒中解脱。 + +badges$badge.brcler.title=起始归一 +badges$badge.brcler.desc=尽管死灵法师创造了这个恐怖的机器,但你已经粉碎了DM-ZERO的阴谋,现在是时候回归正常生活了。\n[完成首领对决] + +badges$badge.take_item.title=宝藏探索者 +badges$badge.take_item.desc=获得宝藏迷宫的三个隐藏宝藏,切记,对决不是拟态王的本意。 + +badges$badge.kill_apple.title=毒果铲除计划 +badges$badge.kill_apple.desc=击杀盘踞在森林底部的幕后“主谋"。 + +badges$badge.spicealboss.title=弱肉强食 +badges$badge.spicealboss.desc=累计击败全部特殊BOSS,你的威望已经让每个首领对你望而生畏和敬佩不已。 + +badges$badge.nyz_shop.title=奈亚大亨 +badges$badge.nyz_shop.desc=购买终端的物品,让奈亚子自愿入驻0层!\n\n_奖励:0层奈亚子常驻,1200初始金币,5次奈亚子终端商店购买权限_ + +badges$badge.high_score_1.title=菜鸟上路 +badges$badge.high_score_1.desc=在结束游戏时达到 _B级_ 评价。 + +badges$badge.high_score_2.title=熟能生巧 +badges$badge.high_score_2.desc=在结束游戏时达到 _A级_ 评价。 + +badges$badge.high_score_3.title=烂若披掌 +badges$badge.high_score_3.desc=在结束游戏时达到 _SS级_ 评价。 + +badges$badge.high_score_4.title=胸有成竹 +badges$badge.high_score_4.desc=在结束游戏时达到 _SSS级_ 评价。 + +badges$badge.high_score_5.title=炉火纯青 +badges$badge.high_score_5.desc=在结束游戏时达到 _SSS+级_ 评价。 -badges$badge.spicealboss=累计击败全部特殊BOSS\n\n风暴正在降临 -badges$badge.nyz_shop=奈亚大亨\n\n让奈亚子自愿入驻0层!\n\n_奖励:0层奈亚子常驻,1200初始金币,5次奈亚子终端商店购买权限_ challenges.no_food=缩餐节食 challenges.no_food_desc=食物本就稀缺,但你还需要注意节食!\n\n・使用各类食物与丰饶之角的饱腹效果为原本的三分之一。\n・其他恢复饥饿的机制不受影响。 challenges.no_armor=独挡一面 @@ -140,7 +301,7 @@ challenges.sbsg = Π基因突变Π challenges.sbsg_desc=地牢中的神秘魔力让一些生物发生了重大的变化\n-所有生物都会因为突变激素变得各不相同,给探索地牢的脚步带来更大的困难。\n-敌人有5种突变类型:\n突变失败体_(30%概率)_:近战伤害减少35%,移速提高到1.3。\n突变爆炸体_(25%概率)_:移速减少50%,攻击力降低30%,但死亡时拥有爆炸伤害。\n突变完全体_(20%概率)_:移速和攻击力各提高25%,且拥有30%伤害减免。\n突变危险体_(15%概率)_:攻击力提升20%,攻击有10%概率造成流血。死亡时有5%概率立刻向本层发出警报。\n突变烟雾体_(10%概率)_:攻击力减少10%,攻击范围+2,攻击敌人10%概率造成眩晕……\n\n_特别说明:如果开启精英强敌,词条会和精英词条共存_ challenges.exsg = Π药水癔症Π -challenges.exsg_desc=药水癔症详细规则:\n力量药水--20%概率力量-1\n灵视药剂--50%概率喝后失明5回合\n隐形药剂--30%概率喝后立刻怒吼\n经验药剂--40%概率喝后立刻流血6回合\n极速药剂--50%概率喝后立刻残废8回合\n==========================\n小型口粮 吃后立刻获得极速8回合\n炖肉 吃后立刻升级\n冷冻生肉片 吃后获得奥术护盾\n全肉大饼 吃后立刻获得8回合极速 且+1力量\n不知道何种原因,大部分正面药水你都感觉有毒!\n部分药水完全处于DeBuff,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。 +challenges.exsg_desc=药水癔症详细规则:\n力量药水--60%概率力量-1\n灵视药剂--60%概率喝后失明5回合\n隐形药剂--60%概率喝后立刻怒吼\n极速药剂--60%概率喝后立刻残废8回合\n==========================\n小型口粮-吃后立刻获得极速4回合\n冷冻生肉片-吃后获得奥术护盾\n全肉大饼-吃后立刻获得8回合极速,且有大概率+1力量(_随着力量的追加,获得力量的概率会渐渐变低_)\n\n高级药水_(合剂/魔药)_不受影响\n不知道何种原因,大部分正面药水你都感觉有毒!\n你的臆想会导致药水有毒,但食物却会很有用!而且地牢里面还会追加自动售货机,会售卖一些更加高级的东西。 challenges.icedied = 雪虐风饕(未完成) challenges.icedied_desc=很显然,地牢的雪越下越大了,在这严寒里面,生存的法则将进一步让我们活得更久。\n篝火房间一旦被激活不再无限,变成40回合的寒冷抑制,商人会贩卖更多特殊物品。 diff --git a/core/src/main/assets/messages/ui/ui.properties b/core/src/main/assets/messages/ui/ui.properties index 2cfe4a2d5..f99d6ae89 100644 --- a/core/src/main/assets/messages/ui/ui.properties +++ b/core/src/main/assets/messages/ui/ui.properties @@ -517,4 +517,10 @@ ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x64=-V0.6.1-Beta7.2\n1.修复一些 ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x65=-V0.6.1-Beta7.3\n1.修复第三大层默认寒冰魔女的问题\n2.修复诅咒法杖在BossRush的少量错误\n3.修复闪电饭团一次性消耗两个的问题\n4.修复DM720战斗结束电击效果可能存在的问题\n5.修复恐药异症的各种问题 +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x66=-V0.6.2-Beta1\n1.修复部分神器的快捷栏错误\n2.修复上个版本的少量Bug + +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x67=-V0.6.2-Beta2\n1.修复提灯,魔法火把,火把的灯源冲突问题\n2.修复拟态王中一个极端情况下出现的错误 + +ui.changelist.mlpd.vm0_6_7_x_changes.bug_06x68=-V0.6.2-Beta3\n1.修复嗜血荆棘的一些错误\n2.修复快捷栏在遗物状态下仍然可以使用的Bug + //ui.changelist.mlpd.vm0_5_x_changes.xxx// \ No newline at end of file diff --git a/core/src/main/assets/sprites/FireMagicGirl.png b/core/src/main/assets/sprites/FireMagicGirl.png deleted file mode 100644 index 4f4b6b3082b99e6a30c2518d690298e14adb7190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1147 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 P00000NkvXXu0mjftNMcE literal 0 HcmV?d00001 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index b65f3b16d..6d12a8ee4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -300,6 +300,8 @@ public class Assets { //BOSS + public static final String VSGR = "sprites/boss/SeaVastGirl.png"; + public static final String DIMK = "sprites/boss/DimandKing.png"; public static final String DIED = "sprites/items/died.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index beeaa582c..5d3cd5ebb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -22,6 +22,8 @@ package com.shatteredpixel.shatteredpixeldungeon; import static com.shatteredpixel.shatteredpixeldungeon.Challenges.PRO; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.amuletObtained; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.chalMultiplier; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; @@ -33,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.shatteredpixel.shatteredpixeldungeon.windows.LevelChecker; import com.watabou.utils.Bundle; import com.watabou.utils.FileUtils; @@ -73,11 +76,12 @@ public class Badges { DEATH_FROM_GAS ( 16 ), DEATH_FROM_HUNGER ( 17 ), DEATH_FROM_FALLING ( 18 ), + HIGH_SCORE_1 ( 19 ), KILL_ROTHEART ( 20 ), GET_SC ( 21 ), KILL_COLDELE ( 22 ), - HALOFIRE_DIED ( 24 ), + HALOFIRE_DIED ( 23 ), //silver NO_MONSTERS_SLAIN ( 32 ), @@ -107,10 +111,9 @@ public class Badges { BOSS_SLAIN_1_HUNTRESS, BOSS_SLAIN_1_ALL_CLASSES ( 53, true ), GAMES_PLAYED_1 ( 54, true ), - GODD_MAKE ( 82 ), - CLEAR_WATER ( 83 ), - GHOSTDAGE ( 84 ), - ENDIED ( 85 ), + + HIGH_SCORE_2 ( 55 ), + //gold PIRANHAS ( 64 ), //these names are a bit outdated, but it doesn't really matter. @@ -133,6 +136,13 @@ public class Badges { ALL_ARTIFACTS_IDENTIFIED ( 77 ), VICTORY ( 78 ), YASD ( 79, true ), + + GODD_MAKE ( 82 ), + CLEAR_WATER ( 83 ), + GHOSTDAGE ( 84 ), +// ENDIED ( 85 ), + + HIGH_SCORE_3 ( 86 ), BOSS_SLAIN_3_GLADIATOR, BOSS_SLAIN_3_BERSERKER, BOSS_SLAIN_3_WARLOCK, @@ -158,6 +168,7 @@ public class Badges { KILL_DM720 (102), RLPT (103), + HIGH_SCORE_4 ( 104 ), //diamond GAMES_PLAYED_4 ( 112, true ), @@ -177,15 +188,27 @@ public class Badges { DRAWF_HEAD ( 130 ), SPICEALBOSS ( 131), + STORM ( 132), + KILL_MG (133), BIG_X (134), EXSG (135), - BRCLER (136); + BRCLER (136), + + HIGH_SCORE_5 ( 137 ); public boolean meta; public int image; + public String title(){ + return Messages.get(this, name()+".title"); + } + + public String desc(){ + return Messages.get(this, name()+".desc"); + } + Badge( int image ) { this( image, false ); } @@ -195,10 +218,6 @@ public class Badges { this.meta = meta; } - public String desc(){ - return Messages.get(this, name()); - } - Badge() { this( -1 ); } @@ -352,6 +371,32 @@ public class Badges { displayBadge( badge ); } + public static void validateHighScore( int score ){ + Badge badge = null; + if (score >= LevelChecker.B_SCORE * chalMultiplier * (amuletObtained ? 1 : 2)) { + badge = Badge.HIGH_SCORE_1; + local.add( badge ); + } + if (score >= LevelChecker.A_SCORE * chalMultiplier * (amuletObtained ? 1 : 2)) { + badge = Badge.HIGH_SCORE_2; + local.add( badge ); + } + if (score >= LevelChecker.SS_SCORE * chalMultiplier * (amuletObtained ? 1 : 3)) { + badge = Badge.HIGH_SCORE_3; + local.add( badge ); + } + if (score >= LevelChecker.SSS_SCORE * chalMultiplier * (amuletObtained ? 1 : 4)) { + badge = Badge.HIGH_SCORE_4; + local.add( badge ); + } + if (score >= LevelChecker.SSSP_SCORE * chalMultiplier * (amuletObtained ? 1 : 5)) { + badge = Badge.HIGH_SCORE_5; + local.add( badge ); + } + + displayBadge( badge ); + } + public static void validateGoldCollected() { Badge badge = null; @@ -389,7 +434,6 @@ public class Badges { public static void GhostDageCollected() { Badge badge = null; - if (!local.contains( Badge.GHOSTDAGE ) && Statistics.dageCollected == 1) { badge = Badge.GHOSTDAGE; local.add( badge ); @@ -939,6 +983,10 @@ public class Badges { validateAMZ(); } + public static void STORM() { + displayBadge( Badge.STORM); + } + public static void KILLSDM720() { displayBadge( Badge.KILL_DM720 ); validateAMZ(); @@ -1091,7 +1139,9 @@ public class Badges { {Badge.ITEMS_CRAFTED_1, Badge.ITEMS_CRAFTED_2, Badge.ITEMS_CRAFTED_3, Badge.ITEMS_CRAFTED_4}, {Badge.BOSS_SLAIN_1, Badge.BOSS_SLAIN_2, Badge.BOSS_SLAIN_3, Badge.BOSS_SLAIN_4}, {Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4}, - {Badge.CHAMPION_1X, Badge.CHAMPION_2X, Badge.CHAMPION_3X,Badge.CHAMPION_4X,Badge.CHAMPION_5X} + {Badge.CHAMPION_1X, Badge.CHAMPION_2X, Badge.CHAMPION_3X,Badge.CHAMPION_4X,Badge.CHAMPION_5X}, + {Badge.GHOSTDAGE,Badge.DAGETO}, + {Badge.HIGH_SCORE_1, Badge.HIGH_SCORE_2, Badge.HIGH_SCORE_3, Badge.HIGH_SCORE_4, Badge.HIGH_SCORE_5}, }; private static final Badge[][] metaBadgeReplacements = new Badge[][]{ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java index 2a5d77826..f0f371564 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Challenges.java @@ -48,8 +48,8 @@ public class Challenges { public static final int STRONGER_BOSSES = 4096; public static final int DHXD = 8192; public static final int ICEDIED = 16384; - public static final int PRO = 32768; - public static final int CS = 65536; + public static final int PRO = 32768; + public static final int CS = 65536; public static final int MAX_VALUE = 131072; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index f50931fec..bce6dec04 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Awareness; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ClearBleesdGoodBuff.BlessAnmy; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSight; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision; @@ -55,6 +56,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.levels.AncityLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.CaveTwoBossLevel; @@ -678,9 +680,18 @@ public class Dungeon { } } } - + LighS lights = hero.buff( LighS.class ); Light light = hero.buff( Light.class ); - hero.viewDistance = light == null ? level.viewDistance : Math.max( Light.DISTANCE, level.viewDistance ); + MagicTorch.MagicLight magicLight = hero.buff( MagicTorch.MagicLight.class ); + + if(light != null || lights != null || magicLight != null){ + hero.viewDistance = Math.max( Light.DISTANCE, level.viewDistance ); + } else { + hero.viewDistance = level.viewDistance; + } + + + hero.curAction = hero.lastAction = null; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java index cd403a048..2aea7e235 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java @@ -149,7 +149,7 @@ public enum Rankings { } rec.score = calculateScore(); rec.customSeed = Dungeon.customSeedText; - + Badges.validateHighScore( rec.score ); INSTANCE.saveGameData(rec); @@ -350,6 +350,8 @@ public enum Rankings { private static final String SCORE = "score"; private static final String CLASS = "class"; private static final String TIER = "tier"; + private static final String DATE = "date"; + private static final String VERSION = "version"; private static final String LEVEL = "level"; private static final String DEPTH = "depth"; private static final String DATA = "gameData"; @@ -401,6 +403,13 @@ public enum Rankings { if (bundle.contains(DATA)) gameData = bundle.getBundle(DATA); if (bundle.contains(ID)) gameID = bundle.getString(ID); + if (bundle.contains( DATE )){ + date = bundle.getString( DATE ); + version = bundle.getString( VERSION ); + } else { + date = version = null; + } + if (gameID == null) gameID = UUID.randomUUID().toString(); depth = bundle.getInt( DEPTH ); @@ -412,10 +421,10 @@ public enum Rankings { public void storeInBundle( Bundle bundle ) { if (cause != null) bundle.put( CAUSE, cause ); - + bundle.put( VERSION, version ); bundle.put( WIN, win ); bundle.put( SCORE, score ); - + bundle.put( DATE, date ); bundle.put( CLASS, heroClass ); bundle.put( TIER, armorTier ); bundle.put( LEVEL, herolevel ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java index 57a201e95..d0e2c0f34 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java @@ -43,8 +43,6 @@ public class Statistics { public static int highestAscent; public static boolean gameWon = false; public static boolean ascended = false; - - public static int realdeepestFloor; public static int boss_enhance = 0; public static int goldCollected; @@ -81,10 +79,12 @@ public class Statistics { //灯火前行 public static boolean lanterfireactive = false; - //克里弗斯之果 public static boolean crivusfruitslevel2 = false; + //拟态之王 + public static boolean TPDoorDieds = false; + //修复同步 public static boolean bugsyncfixed = false; @@ -150,7 +150,7 @@ public class Statistics { lanterfireactive = false; bugsyncfixed = false; crivusfruitslevel2 = false; - + TPDoorDieds = false; TryUsedAnmy = false; second_elapsed = 0f; @@ -213,6 +213,9 @@ public class Statistics { //克里弗斯之果 private static final String CrivusFruitsLevel2 = "crivusfruitslevel2"; + //拟态之王 + private static final String TPDoorDied = "TPDoorDieds"; + private static final String TIPSGO = "tipsgo"; private static final String GOLDCHEST = "goldchest"; @@ -275,6 +278,8 @@ public class Statistics { bundle.put( CrivusFruitsLevel2, crivusfruitslevel2 ); + bundle.put( TPDoorDied, TPDoorDieds ); + bundle.put(MMC,mimicking); bundle.put( AnmyMobs, TryUsedAnmy ); @@ -393,6 +398,8 @@ public class Statistics { crivusfruitslevel2 = bundle.getBoolean( CrivusFruitsLevel2 ); + TPDoorDieds = bundle.getBoolean( TPDoorDied ); + tipsgodungeon = bundle.getBoolean(TIPSGO); //SPD diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java index 4c0baabc5..d426f3e5a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/ChampionEnemy.java @@ -27,8 +27,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; -import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ExplosiveTrap; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; @@ -124,24 +124,6 @@ public abstract class ChampionEnemy extends Buff { buffCls = ChampionEnemy.LongSider.class; } -// switch ((int) Random.Float()){ -// case 0:case 1: case 2: case 3: default: -// buffCls = ChampionEnemy.Small.class; -// break; -// case 4: case 5: case 6: -// buffCls = ChampionEnemy.Bomber.class; -// break; -// case 7: case 8: -// buffCls = ChampionEnemy.Middle.class; -// break; -// case 9: case 10: case 11: -// buffCls = ChampionEnemy.Big.class; -// break; -// case 12: case 13: -// buffCls = ChampionEnemy.LongSider.class; -// break; -// } - if (Dungeon.mobsToStateLing <= 0 && Dungeon.isChallenged(Challenges.SBSG)) { Buff.affect(m, buffCls); m.state = m.WANDERING; @@ -150,7 +132,6 @@ public abstract class ChampionEnemy extends Buff { public static class LongSider extends ChampionEnemy { - { color = 0xff00ff; } @@ -166,9 +147,11 @@ public abstract class ChampionEnemy extends Buff { return target.fieldOfView[enemy.pos] && Dungeon.level.distance(target.pos, enemy.pos) <= 2; } - private float resurrectChance = 0.1f; + @Override public void onAttackProc(Char enemy) { + + float resurrectChance = 0.1f; if(Random.Float() <= resurrectChance) { Buff.prolong( enemy, Vertigo.class, 4f); } @@ -213,13 +196,7 @@ public abstract class ChampionEnemy extends Buff { } public void detach() { - for (int i : PathFinder.NEIGHBOURS1){ - if (!Dungeon.level.solid[target.pos+i]){ - ExplosiveTrap bomber = new ExplosiveTrap(); - bomber.pos = target.pos; - bomber.activate(); - } - } + new Bomb().explodeMobs(target.pos); super.detach(); } } @@ -259,24 +236,23 @@ public abstract class ChampionEnemy extends Buff { public float meleeDamageFactor() { return 1.30f; } - private float resurrectChance = 0.05f; + private final float resurrectChance = 0.05f; @Override public void onAttackProc(Char enemy) { if(Random.Float() <= resurrectChance) { Buff.affect( enemy, Bleeding.class ).set( 5 ); } } - private float resurrectChanceB = 0.1f; + @Override public void detach() { - for (int i : PathFinder.NEIGHBOURS9){ - if (Random.Float() <= resurrectChanceB) { - AlarmTrap xxx = new AlarmTrap(); - xxx.pos = target.pos; - xxx.activate(); - } + if (Random.Float() <= resurrectChance) { + AlarmTrap xxx = new AlarmTrap(); + xxx.pos = target.pos; + xxx.activate(); } + super.detach(); } @@ -370,6 +346,13 @@ public abstract class ChampionEnemy extends Buff { public float meleeDamageFactor() { return 1.45f; } + + + @Override + public float damageTakenFactor() { + return 0.4f; + } + } public static class Projecting extends ChampionEnemy { @@ -421,7 +404,7 @@ public abstract class ChampionEnemy extends Buff { @Override public boolean canAttackWithExtraReach(Char enemy) { //attack range of 2 - return target.fieldOfView[enemy.pos] && Dungeon.level.distance(target.pos, enemy.pos) <= 4; + return target.fieldOfView[enemy.pos] && Dungeon.level.distance(target.pos, enemy.pos) <= 2; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/LighS.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/LighS.java index 548db9a18..2c7e5cd83 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/LighS.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/LighS.java @@ -1,9 +1,12 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; +import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; + import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.items.lightblack.OilLantern; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; public class LighS extends FlavourBuff { private static final float DELAY = 7.0f; @@ -14,26 +17,36 @@ public class LighS extends FlavourBuff { this.type = Buff.buffType.POSITIVE; } - public boolean attachTo(Char target) { - if (!LighS.super.attachTo(target)) { + @Override + public boolean attachTo( Char target ) { + if (super.attachTo( target )) { + if (Dungeon.level != null) { + target.viewDistance = Math.max( Dungeon.level.viewDistance, DISTANCE ); + Dungeon.observe(); + } + return true; + } else { return false; } - if (Dungeon.level == null) { - return true; - } - target.viewDistance = Math.max(Dungeon.level.viewDistance, 6); - Dungeon.observe(); - return true; } public boolean act() { - OilLantern lantern = Dungeon.hero.belongings.getItem(OilLantern.class); - if ( !lantern.isActivated() || lantern.getCharge() <= 0) { - lantern.deactivate(Dungeon.hero, false); + OilLantern lantern = hero.belongings.getItem(OilLantern.class); + if (hero.buff(LostInventory.class) == null){ + if ( !lantern.isActivated() || lantern.getCharge() <= 0) { + lantern.deactivate(hero, false); + detach(); + return true; + } + lantern.spendCharge(); + } else { + GLog.n("在遗物状态下无法点亮提灯"); detach(); - return true; } - lantern.spendCharge(); + + + + if(Dungeon.depth>20){ spend(DELAY + 6f); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 764e1071a..c70371da3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -975,8 +975,6 @@ public class Hero extends Char { lanterfire = 100; new OilLantern().quantity(1).identify().collect(); - new Ankh().quantity(1).identify().collect(); - lanterfireactive = true; Buff.affect( this, Nyctophobia.class ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java index 7ce2c0b5b..b5e9cd156 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bestiary.java @@ -123,32 +123,38 @@ public class Bestiary { switch (Random.Int(6)) { case 0: return new ArrayList<>(Arrays.asList(Skeleton.class, BlackHost.class, - Thief.class,DM100.class,Necromancer.class)); + Thief.class,DM100.class,Necromancer.class,Monk.class, + Golem.class)); case 1: return new ArrayList<>(Arrays.asList(Skeleton.class, Skeleton.class, Skeleton.class, Thief.class,Thief.class,Fire_Scorpio.class, DM200.class,SkullShaman.class, - DM100.class, Ice_Scorpio.class)); + DM100.class, Ice_Scorpio.class,Monk.class, + Golem.class)); case 2: return new ArrayList<>(Arrays.asList( Succubus.class, - Eye.class,ShieldHuntsman.class,Scorpio.class,Fire_Scorpio.class)); + Eye.class,ShieldHuntsman.class,Scorpio.class,Monk.class, + Golem.class)); case 3: return new ArrayList<>(Arrays.asList( Succubus.class, Succubus.class, Succubus.class, Succubus.class, Succubus.class, - Eye.class,ShieldHuntsman.class,Ice_Scorpio.class,Fire_Scorpio.class,Albino.class)); + Eye.class,ShieldHuntsman.class,Albino.class,Monk.class, + Golem.class)); case 4: return new ArrayList<>(Arrays.asList( Succubus.class, Succubus.class, - Eye.class,ShieldHuntsman.class,Ice_Scorpio.class)); + Eye.class,ShieldHuntsman.class, + Monk.class, + Golem.class)); case 5: return new ArrayList<>(Arrays.asList( Succubus.class, Eye.class, Eye.class, - Scorpio.class, Eye.class,Succubus.class, - Ice_Scorpio.class,Fire_Scorpio.class)); + Scorpio.class, Eye.class,Succubus.class,Monk.class, + Golem.class)); } default: return new ArrayList<>(Arrays.asList(Rat.class, Rat.class, @@ -168,7 +174,7 @@ public class Bestiary { case 2: return new ArrayList<>(Arrays.asList(Rat.class, Rat.class, Rat.class, Gnoll.class, Gnoll.class, - Gnoll.class, Gnoll.class, Albino.class)); + Gnoll.class, Gnoll.class)); case 3: return new ArrayList<>(Arrays.asList(Rat.class, Rat.class, Salamander.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Fire_Scorpio.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Fire_Scorpio.java index 6874ac37a..e1f0988ff 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Fire_Scorpio.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Fire_Scorpio.java @@ -23,6 +23,7 @@ public class Fire_Scorpio extends Scorpio{ lootChance = 0.8f; properties.add(Property.DEMONIC); + properties.add(Property.MINIBOSS); } @Override @@ -30,6 +31,7 @@ public class Fire_Scorpio extends Scorpio{ damage = super.attackProc( enemy, damage ); if (Random.Int( 2,5 ) > 3) { Buff.affect( enemy, Burning.class ).reignite( enemy, 4f ); + spend(3f); } return damage; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ice_Scorpio.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ice_Scorpio.java index e1f809a55..66847ad5c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ice_Scorpio.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Ice_Scorpio.java @@ -23,6 +23,7 @@ public class Ice_Scorpio extends Scorpio{ lootChance = 0.5f; properties.add(Property.DEMONIC); + properties.add(Property.MINIBOSS); } @Override @@ -30,6 +31,7 @@ public class Ice_Scorpio extends Scorpio{ damage = super.attackProc( enemy, damage ); if (Random.Int( 3,6 ) > 2) { Buff.prolong( enemy, Chill.class, Chill.DURATION ); + spend(3f); } return damage; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java index 61a969d3b..0ec4d0674 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/DiamondKnight.java @@ -114,7 +114,7 @@ public class DiamondKnight extends Boss { */ @Override public boolean isInvulnerable(Class effect) { - return (this.HP>=301 && this.HP<=360) && effect != DiamondKnight.DiedDamager.class; + return (this.HP>=301 && this.HP<=360) && effect != DiamondKnight.DiedDamager.class && !Statistics.TPDoorDieds; } public static class DiedDamager extends Buff { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java index fc3d6dfdc..1efad2cd7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/bosses/TPDoor.java @@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.bosses; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel; @@ -62,8 +63,8 @@ public class TPDoor extends Mob { super.die(cause); GameScene.flash(0x808080); + Statistics.TPDoorDieds = true; ((ColdChestBossLevel) Dungeon.level).progress(); - } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java index 1dbeeae57..addfcfb98 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java @@ -336,7 +336,7 @@ public class Ghost extends NPC { } else if (itemLevelRoll < 0.90f) { itemLevel = 3; hero.sprite.showStatus( CharSprite.NEGATIVE, "+3!!!" ); - } else if (itemLevelRoll < 0.95f){ + } else if (itemLevelRoll < 0.95f && Badges.isUnlocked(Badges.Badge.GHOSTDAGE)){ hero.sprite.showStatus( CharSprite.POSITIVE, "+5!!!" ); if(( !Badges.isUnlocked(Badges.Badge.DAGETO))) { Statistics.dageCollected = 2; @@ -407,7 +407,7 @@ public class Ghost extends NPC { } else if (itemLevelRoll < 0.90f) { itemLevel = 3; hero.sprite.showStatus( CharSprite.NEGATIVE, "+3!!!" ); - } else if (itemLevelRoll < 0.95f){ + } else if (itemLevelRoll < 0.95f && Badges.isUnlocked(Badges.Badge.GHOSTDAGE)){ hero.sprite.showStatus( CharSprite.POSITIVE, "+5!!!" ); if(( !Badges.isUnlocked(Badges.Badge.DAGETO))) { Statistics.dageCollected = 2; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RedDragon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RedDragon.java index 8b95d70fd..757778d63 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RedDragon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/RedDragon.java @@ -431,7 +431,7 @@ public class RedDragon extends NPC { GLog.b( Messages.get(RedDragon.class, "find_me") ); //Sample.INSTANCE.play( Assets.Sounds.GHOST ); processed = true; - Statistics.questScores[2] += 4000; + Statistics.questScores[2] += 8000; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java index 4c2c85339..42a50211d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Torch.java @@ -22,11 +22,15 @@ package com.shatteredpixel.shatteredpixeldungeon.items; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.particles.Emitter; @@ -59,20 +63,23 @@ public class Torch extends Item { super.execute( hero, action ); if (action.equals( AC_LIGHT )) { - - hero.spend( TIME_TO_LIGHT ); - hero.busy(); - - hero.sprite.operate( hero.pos ); - - detach( hero.belongings.backpack ); - - Buff.affect(hero, Light.class, Light.DURATION); - Sample.INSTANCE.play(Assets.Sounds.BURNING); - - Emitter emitter = hero.sprite.centerEmitter(); - emitter.start( FlameParticle.FACTORY, 0.2f, 3 ); - + + if (Dungeon.hero.buff(LighS.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) { + GLog.n("你已有其他光芒效果,在这些效果取消或主动失效前,暂时无法使用火把。"); + } else { + hero.spend( TIME_TO_LIGHT ); + hero.busy(); + + hero.sprite.operate( hero.pos ); + + detach( hero.belongings.backpack ); + + Buff.affect(hero, Light.class, Light.DURATION); + Sample.INSTANCE.play(Assets.Sounds.BURNING); + + Emitter emitter = hero.sprite.centerEmitter(); + emitter.start( FlameParticle.FACTORY, 0.2f, 3 ); + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java index 3eb5c0873..6f7b07f70 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java @@ -37,7 +37,7 @@ import java.util.ArrayList; public class Waterskin extends Item { - private static final int MAX_VOLUME = 10; + private static final int MAX_VOLUME = 16; private static final String AC_DRINK = "DRINK"; @@ -129,7 +129,7 @@ public class Waterskin extends Item { @Override public Item upgrade() { - DewViewSword = Math.min(DewViewSword + 1, 20); + DewViewSword = Math.min(DewViewSword + 1, 8); return super.upgrade(); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java index dea3fbc3b..1fbe15ca1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java @@ -201,6 +201,77 @@ public class Bomb extends Item { } } } + + public void explodeMobs(int cell){ + //We're blowing up, so no need for a fuse anymore. + this.fuse = null; + + Sample.INSTANCE.play( Assets.Sounds.BLAST ); + + if (explodesDestructively()) { + + ArrayList affected = new ArrayList<>(); + + if (Dungeon.level.heroFOV[cell]) { + CellEmitter.center(cell).burst(BlastParticle.FACTORY, 30); + } + + boolean terrainAffected = false; + for (int n : PathFinder.NEIGHBOURS9) { + int c = cell + n; + if (c >= 0 && c < Dungeon.level.length()) { + if (Dungeon.level.heroFOV[c]) { + CellEmitter.get(c).burst(SmokeParticle.FACTORY, 4); + } + + if (Dungeon.level.flamable[c]) { + Dungeon.level.destroy(c); + GameScene.updateMap(c); + terrainAffected = true; + } + + //destroys items / triggers bombs caught in the blast. +// Heap heap = Dungeon.level.heaps.get(c); +// if (heap != null) +// heap.explode(); + + Char ch = Actor.findChar(c); + if (ch != null) { + affected.add(ch); + } + } + } + + for (Char ch : affected){ + + //if they have already been killed by another bomb + if(!ch.isAlive()){ + continue; + } + + int dmg = Random.NormalIntRange(5 + Dungeon.depth, 10 + Dungeon.depth*2); + + //those not at the center of the blast take less damage + if (ch.pos != cell){ + dmg = Math.round(dmg*0.67f); + } + + dmg -= ch.drRoll(); + + if (dmg > 0) { + ch.damage(dmg, this); + } + + if (ch == Dungeon.hero && !ch.isAlive()) { + Dungeon.fail(Bomb.class); + } + } + + if (terrainAffected) { + Dungeon.observe(); + } + } + } @Override public boolean isUpgradable() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MeatPie.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MeatPie.java index 178ba1ed2..4bce4eeb5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MeatPie.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MeatPie.java @@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.utils.Random; import java.util.ArrayList; @@ -49,9 +50,11 @@ public class MeatPie extends Food { protected void satisfy(Hero hero) { if (Dungeon.isChallenged(Challenges.EXSG)){ Buff.prolong( hero, Haste.class, 8f); - hero.STR++; - hero.sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "eat_msg_1")); - GLog.p(Messages.get(this, "eat_msg_2")); + if(Random.Float() > (0.2f + (hero.STR/5f)/10f)){ + hero.STR++; + hero.sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "eat_msg_1")); + GLog.p(Messages.get(this, "eat_msg_2")); + } } super.satisfy( hero ); Buff.affect(hero, WellFed.class).reset(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/SmallRation.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/SmallRation.java index 8f9849dc1..19a4c1656 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/SmallRation.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/SmallRation.java @@ -38,7 +38,7 @@ public class SmallRation extends Food { @Override protected void satisfy( Hero hero ){ if (Dungeon.isChallenged(Challenges.EXSG)){ - Buff.prolong( hero, Haste.class, 8f); + Buff.prolong( hero, Haste.class, 4f); } if (Dungeon.isChallenged(Challenges.NO_FOOD)){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/StewedMeat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/StewedMeat.java index 861c518d9..82595424d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/StewedMeat.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/StewedMeat.java @@ -21,10 +21,6 @@ package com.shatteredpixel.shatteredpixeldungeon.items.food; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.EXSG; - -import com.shatteredpixel.shatteredpixeldungeon.Challenges; -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; @@ -37,12 +33,7 @@ public class StewedMeat extends Food { @Override protected void satisfy( Hero hero ) { - if (Dungeon.isChallenged(Challenges.EXSG)) { - hero.earnExp( hero.maxExp(), getClass() ); - Buff.affect(hero, Hunger.class).satisfy(energy/3f); - } else { - Buff.affect(hero, Hunger.class).satisfy(energy/2f); - } + Buff.affect(hero, Hunger.class).satisfy(energy/2f); } @@ -97,6 +88,6 @@ public class StewedMeat extends Food { @Override public String desc() { //三元一次逻辑运算 - return Dungeon.isChallenged(EXSG) ? Messages.get(this, "descx") : Messages.get(this, "desc"); + return Messages.get(this, "desc"); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java index 8f444f405..575933a4e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/lightblack/OilLantern.java @@ -9,8 +9,11 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagicTorch; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -84,18 +87,23 @@ public class OilLantern extends Item { actions.add(AC_REFILL); actions.remove("THROW"); + actions.remove("DROP"); return actions; } public void execute(Hero hero, String action) { if (action.equals(AC_LIGHT)) { - if (this.charge > 0) { - activate(hero, true); - } else if (this.flasks > 0) { - GLog.w(Messages.get(OilLantern.class, "lanterneedsxs")); + if (hero.buff(LostInventory.class) == null) { + if (this.charge > 0) { + activate(hero, true); + } else if (this.flasks > 0) { + GLog.w(Messages.get(OilLantern.class, "lanterneedsxs")); + } else { + GLog.w(Messages.get(OilLantern.class, "lanterneedsx")); + } } else { - GLog.w(Messages.get(OilLantern.class, "lanterneedsx")); + GLog.n("你陷入灵魂残缺的迷茫当中 无法引燃提灯"); } } else if (action.equals(AC_REFILL)) { if (this.flasks > 0) { @@ -125,17 +133,22 @@ public class OilLantern extends Item { public void activate(Hero hero, boolean voluntary) { if (voluntary) { - hero.spend(TIME_TO_USE); - hero.busy(); - GLog.i(Messages.get(OilLantern.class, "lanteron")); - hero.sprite.operate(hero.pos); - this.active = true; - updateSprite(); - Buff.affect(hero, LighS.class); - hero.search(false); - Sample.INSTANCE.play("sounds/snd_click.mp3"); - updateQuickslot(); - Dungeon.observe(); + if (Dungeon.hero.buff(Light.class) != null || Dungeon.hero.buff(MagicTorch.MagicLight.class) != null) { + GLog.n("你已有其他光芒效果,在这些效果取消或主动失效前,暂时无法使用提灯的效果。"); + } else { + hero.spend(TIME_TO_USE); + hero.busy(); + GLog.i(Messages.get(OilLantern.class, "lanteron")); + hero.sprite.operate(hero.pos); + this.active = true; + updateSprite(); + Buff.affect(hero, LighS.class); + hero.search(false); + Sample.INSTANCE.play("sounds/snd_click.mp3"); + updateQuickslot(); + Dungeon.observe(); + } + } // if (voluntary && hero.lanterfire > 0) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfExperience.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfExperience.java index 352f80854..09755af98 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfExperience.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfExperience.java @@ -21,16 +21,11 @@ package com.shatteredpixel.shatteredpixeldungeon.items.potions; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.EXSG; - import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; -import com.watabou.utils.Random; public class PotionOfExperience extends Potion { @@ -43,12 +38,7 @@ public class PotionOfExperience extends Potion { @Override public void apply( Hero hero ) { identify(); - if (Dungeon.isChallenged(EXSG) && Random.Float()>0.4f) { - Buff.affect(hero, Bleeding.class).set(6f); - }else{ - hero.earnExp( hero.maxExp(), getClass() ); - } - + hero.earnExp( hero.maxExp(), getClass() ); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfInvisibility.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfInvisibility.java index ff6aef6d1..30870be41 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfInvisibility.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfInvisibility.java @@ -47,7 +47,7 @@ public class PotionOfInvisibility extends Potion { @Override public void apply( Hero hero ) { identify(); - if(Dungeon.isChallenged(EXSG)&& Random.Float()>0.7f){ + if(Dungeon.isChallenged(EXSG)&& Random.Float()>0.4f){ for (Mob mob : Dungeon.level.mobs) { mob.beckon( Dungeon.hero.pos ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMindVision.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMindVision.java index fa3106d69..236ba9ab9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMindVision.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMindVision.java @@ -44,7 +44,7 @@ public class PotionOfMindVision extends Potion { public void apply(Hero hero) { identify(); - if (Dungeon.isChallenged(EXSG)&& Random.Float()>0.5f) { + if (Dungeon.isChallenged(EXSG)&& Random.Float()>0.4f) { if (Dungeon.level.mobs.size() > 0) { GLog.i(Messages.get(this, "can't_see_mobs")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfStrength.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfStrength.java index 580fee422..94f76b500 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfStrength.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfStrength.java @@ -46,7 +46,7 @@ public class PotionOfStrength extends Potion { @Override public void apply( Hero hero ) { identify(); - if(Dungeon.isChallenged(EXSG) && Random.Float()>0.8f) { + if(Dungeon.isChallenged(EXSG) && Random.Float()>0.4f) { hero.STR--; hero.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "esg_1")); GLog.n(Messages.get(this, "esg_2")); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/WaterSoul.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/WaterSoul.java index 45fcefa74..a0d205082 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/WaterSoul.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/WaterSoul.java @@ -75,7 +75,7 @@ public class WaterSoul extends Elixir { inputs = new Class[]{PotionOfHealing.class, FrozenCarpaccio.class}; inQuantity = new int[]{1, 1}; - cost = 10; + cost = 14; output = WaterSoul.class; outQuantity = 2; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java index 8b33cc96e..88a86c7f7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/BloodthirstyThorn.java @@ -195,15 +195,17 @@ public class BloodthirstyThorn extends MeleeWeapon { bloodthirstyThorn.level=Random.NormalIntRange(3,6); } - bloodthirstyThorn.quantity(1).identify(); + if(chaliceOfBlood!=null) { + bloodthirstyThorn.quantity(1).identify(); - chaliceOfBlood.detachAll( hero.belongings.backpack ); + chaliceOfBlood.detach(hero.belongings.backpack); - if(chaliceOfBlood.level()==10){ - ChaliceOfBlood chaliceOfBlood1 = new ChaliceOfBlood(); - chaliceOfBlood1.cursed = true; - chaliceOfBlood1.level=Random.NormalIntRange(1,3); - chaliceOfBlood1.identify().quantity(1).collect(); + if (chaliceOfBlood.level() == 10) { + ChaliceOfBlood chaliceOfBlood1 = new ChaliceOfBlood(); + chaliceOfBlood1.cursed = true; + chaliceOfBlood1.level = Random.NormalIntRange(1, 3); + chaliceOfBlood1.identify().quantity(1).collect(); + } } return sampleOutput(null); @@ -233,7 +235,7 @@ public class BloodthirstyThorn extends MeleeWeapon { @Override public int max(int lvl) { - return 7 + lvl*7; + return 6 + lvl*4; } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java index 9b55c8a98..5fcf38a58 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/LockSword.java @@ -37,15 +37,15 @@ public class LockSword extends MeleeWeapon { @Override public int max(int lvl) { - return Math.round(1.7f*(tier+1)) + + return Math.round(1.4f*(tier+1)) + lvl*Math.round(1.5f*(tier+1)); } @Override public int min(int lvl) { - return Math.round(1.4f*(tier+1)) + - lvl*Math.round(0.5f*(tier+1)); + return Math.round(1.2f*(tier+1)) + + lvl*Math.round(0.3f*(tier+1)); } public String desc() { @@ -88,19 +88,19 @@ public class LockSword extends MeleeWeapon { if (lvl>= 900) { switch (Random.NormalIntRange(1,4)){ case 1: - dmg = (new Grim()).proc(this, attacker, defender, damage) + 8; + dmg = (new Grim()).proc(this, attacker, defender, damage) + 4; damage = dmg; break; case 2: - dmg = (new Shocking()).proc(this, attacker, defender, damage) + 8; + dmg = (new Shocking()).proc(this, attacker, defender, damage) + 5; damage = dmg; break; case 3: - dmg = (new Blazing()).proc(this, attacker, defender, damage) + 8; + dmg = (new Blazing()).proc(this, attacker, defender, damage) + 6; damage = dmg; break; case 4: - dmg = (new Kinetic()).proc(this, attacker, defender, damage) + 8; + dmg = (new Kinetic()).proc(this, attacker, defender, damage) + 7; damage = dmg; break; default: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagicTorch.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagicTorch.java index 460a23768..873e8a41d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagicTorch.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagicTorch.java @@ -7,12 +7,15 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LighS; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.MagicFlameParticle; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.Image; import com.watabou.noosa.particles.Emitter; import com.watabou.utils.Bundle; @@ -68,7 +71,12 @@ public class MagicTorch extends MeleeWeapon { public void execute(Hero hero, String action) { super.execute(hero, action); if (AC_EQUIP.equals(action)) { - Buff.affect(hero, MagicLight.class).set((100), 1); + if (Dungeon.hero.buff(LighS.class) != null || Dungeon.hero.buff(Light.class) != null) { + GLog.n("你已有其他光芒效果,在这些效果取消或主动失效前,魔法火把的效果不生效。"); + } else { + Buff.affect(hero, MagicLight.class).set((100), 1); + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java index 4dba3e8e9..96ae11859 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java @@ -37,7 +37,7 @@ public class Sai extends MeleeWeapon { hitSoundPitch = 1.3f; tier = 4; - DLY = 0.5f; //2x speed + DLY = 0.8f; //2x speed } @Override @@ -74,8 +74,8 @@ public class Sai extends MeleeWeapon { @Override public int max(int lvl) { - return Math.round(1.5f*(tier+1)) + //10 base, down from 20 - lvl*Math.round(1.0f*(tier+1)); //+2 per level, down from +4 + return Math.round(1.2f*(tier+1)) + //10 base, down from 20 + lvl*Math.round(0.8f*(tier+1)); //+2 per level, down from +4 } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/WashCrime.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/WashCrime.java index 952496abc..86d1fafcb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/WashCrime.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/WashCrime.java @@ -5,7 +5,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; @@ -19,8 +19,8 @@ import com.watabou.utils.Random; public class WashCrime extends MeleeWeapon { - private int killmobs = 0; - private int spawnmobs = 0; + private int killmobs; + private int spawnmobs; @Override public int min(int lvl) { @@ -41,7 +41,7 @@ public class WashCrime extends MeleeWeapon { tier = 5; RCH = 3; //lots of extra reach - DLY = 2; //Slow Speed + DLY = 2f; } @Override @@ -66,7 +66,7 @@ public class WashCrime extends MeleeWeapon { @Override public int proc(Char attacker, Char defender, int damage ) { - + DLY = DLY < 0.3f ? 0.3f : 2-(killmobs/10f)/10f; //Slow Speed if(killmobs > 61 ){ killmobs=60; } else if (defender.HP <= damage && killmobs < 61) { @@ -113,7 +113,7 @@ public class WashCrime extends MeleeWeapon { if (Random.NormalIntRange(1, 4) == 4) { - Buff.prolong(defender, Weakness.class, 8f); + Buff.prolong(defender, Cripple.class, 8f); } else { return super.proc(attacker, defender, damage); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index c97d17b36..5e71fd40e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -21,8 +21,6 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; -import static com.shatteredpixel.shatteredpixeldungeon.Challenges.RLPT; - import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith; @@ -65,12 +63,8 @@ public class CavesLevel extends RegularLevel { //红龙的试炼 @Override protected void createItems() { - if (Dungeon.isChallenged(RLPT)) { - super.createItems(); - } else { - RedDragon.Quest.spawn(this); - super.createItems(); - } + RedDragon.Quest.spawn(this); + super.createItems(); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java index d677b43d2..8c400774b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ColdChestBossLevel.java @@ -11,6 +11,7 @@ import static com.shatteredpixel.shatteredpixeldungeon.levels.ColdChestBossLevel import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; @@ -32,7 +33,7 @@ import java.util.HashMap; //宝藏迷宫 10层 public class ColdChestBossLevel extends Level { - private State pro; + public State pro; public State pro(){ return pro; @@ -90,8 +91,6 @@ public class ColdChestBossLevel extends Level { private static final short W = Terrain.WALL; private static final short M = Terrain.WELL; private static final short E = Terrain.CHASM; - - private static final short X = Terrain.EXIT; private static final short J = Terrain.ENTRANCE; private static final short O = Terrain.WATER; private static final short P = Terrain.EMPTY_SP; @@ -138,7 +137,7 @@ public class ColdChestBossLevel extends Level { W,E,E,W,K,W,E,E,E,E,E,E,E,W,K,K,K,K,K,K,K,W,E,E,E,E,E,E,W,K,W,E,E,E,W, W,E,E,W,K,W,E,E,E,E,E,E,E,W,K,K,K,P,K,K,K,W,E,E,E,E,E,E,W,K,W,E,E,E,W, W,E,E,W,K,W,W,W,W,W,W,W,W,W,K,K,P,P,P,K,K,W,W,W,W,W,W,W,W,K,W,E,E,E,W, - W,E,E,W,K,K,K,K,K,K,K,K,K,D,K,P,P,X,P,P,K,D,K,K,K,K,K,K,K,K,W,E,E,E,W, + W,E,E,W,K,K,K,K,K,K,K,K,K,D,K,P,P,P,P,P,K,D,K,K,K,K,K,K,K,K,W,E,E,E,W, W,E,E,W,W,W,W,W,W,W,W,W,W,W,K,K,P,P,P,K,K,W,W,W,W,W,W,W,W,W,W,E,E,E,W, W,E,E,E,E,E,E,E,E,E,E,E,E,W,K,K,K,P,K,K,K,W,E,E,E,E,E,E,E,E,E,E,E,E,W, W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W, @@ -307,7 +306,6 @@ public class ColdChestBossLevel extends Level { public void progress(){ switch (pro) { case GO_START: - //如果有生物来到BossDoor的下一个坐标,且生物是玩家,那么触发seal(). seal(); DiamondKnight bossx = new DiamondKnight(); bossx.state = bossx.WANDERING; @@ -451,7 +449,7 @@ public class ColdChestBossLevel extends Level { for (Mob boss : Dungeon.level.mobs.toArray(new Mob[0])) { if(boss instanceof DiamondKnight) { //如果楼层为开始且boss血量小于300 2阶段 - if (pro == MAZE_START && boss.HP <= 300) { + if (pro == MAZE_START && boss.HP <= 300 || Statistics.TPDoorDieds) { //动态修改整个房间 宝藏迷宫 changeMap(EndMap); //在切换房间的时候立刻切换全新坐标 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java index 7f2afc373..15e7648ff 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/ZeroLevel.java @@ -112,23 +112,22 @@ public class ZeroLevel extends Level { drop( ( Generator.randomUsingDefaults( Generator.Category.SCROLL ) ), this.width * 20 + 17 ); drop( ( Generator.randomUsingDefaults( Generator.Category.SCROLL ) ), this.width * 19 + 16 ); - drop( new Ankh(), this.width * 17 + 20 ); drop( new Stylus(), this.width * 19 + 20 ); drop( ( Generator.randomUsingDefaults( Generator.Category.STONE ) ), this.width * 16 + 19 ); drop( ( Generator.randomUsingDefaults( Generator.Category.FOOD ) ), this.width * 20 + 19 ); + drop( new Pasty(), this.width * 20 + 19 ); if ( Badges.isUnlocked(Badges.Badge.GODD_MAKE)){ drop( ( Generator.randomUsingDefaults( Generator.Category.RING ) ), this.width * 17 + 18 ); } - if ( Badges.isUnlocked(Badges.Badge.BIG_X)){ drop( ( Generator.randomUsingDefaults( Generator.Category.ARMOR ) ), this.width * 19 + 18 ); } - if ( Badges.isUnlocked(Badges.Badge.KILL_APPLE)||Badges.isUnlocked(Badges.Badge.KILL_MG) ){ - drop(new Ankh(), this.width * 18 + 17 ); + if ( Badges.isUnlocked(Badges.Badge.KILL_DM720)||Badges.isUnlocked(Badges.Badge.KILL_MG) ){ + drop(( Generator.randomUsingDefaults( Generator.Category.WEP_T2 )), this.width * 18 + 17 ); } if ( Badges.isUnlocked(Badges.Badge.RLPT)){ drop( ( Generator.randomUsingDefaults( Generator.Category.ARTIFACT ) ), this.width * 18 + 19 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java index df0d02ba0..95e003bd7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java @@ -256,7 +256,7 @@ public class SurfaceScene extends PixelScene { add( gameOver ); Badges.validateHappyEnd(); - + Badges.STORM(); fadeIn(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java index fe81d8804..07483ab1f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/DimandKingSprite.java @@ -146,7 +146,7 @@ public class DimandKingSprite extends MobSprite { super(); texture( Dungeon.hero.heroClass.spritesheet() ); - updateArmor( 6 ); + updateArmor( 7 ); idle(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SeaVastGirlSprites.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SeaVastGirlSprites.java new file mode 100644 index 000000000..13f8c910d --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SeaVastGirlSprites.java @@ -0,0 +1,30 @@ +package com.shatteredpixel.shatteredpixeldungeon.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + +public class SeaVastGirlSprites extends MobSprite { + + public SeaVastGirlSprites() { + super(); + + texture( Assets.Sprites.VSGR ); + + TextureFilm frames = new TextureFilm( texture, 24, 24 ); + + idle = new Animation( 2, true ); + idle.frames( frames, 0, 0, 0, 1,1,1,2 ); + + run = new Animation( 8, true ); + run.frames( frames, 3, 4, 5, 6 ); + + attack = new Animation( 15, false ); + attack.frames( frames, 7, 8, 9, 0 ); + + die = new Animation( 10, false ); + die.frames( frames, 0 ); + + play( idle ); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java index f6b0f3da9..20ddf8d88 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.SPDAction; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; import com.shatteredpixel.shatteredpixeldungeon.custom.utils.Constants; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -221,7 +222,8 @@ public class QuickSlotButton extends Button { } private void enableSlot() { - slot.enable(Dungeon.quickslot.isNonePlaceholder( slotNum )); + slot.enable(Dungeon.quickslot.isNonePlaceholder( slotNum ) + && (Dungeon.hero.buff(LostInventory.class) == null || Dungeon.quickslot.getItem(slotNum).keptThoughLostInvent)); } private void useTargeting() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java index 2b626bf3a..39ff9e87c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java @@ -354,7 +354,7 @@ public class StatusPane extends Component { } if(SPDSettings.TimeLimit()) { - timeText.x = MenuPane.version.x; + timeText.x = MenuPane.version.x - 10; timeText.y = MenuPane.version.y + 5; @@ -442,7 +442,7 @@ public class StatusPane extends Component { if(Dungeon.hero.isAlive()){ Date date = new Date(); - String strDateFormat = "yyyy-MM-dd HH:mm:ss"; + String strDateFormat = "yyyy-MM-dd HH:mm"; SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat, Locale.getDefault()); Calendar cal=Calendar.getInstance(); int s=cal.get(Calendar.SECOND); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java index 16335ff47..89bb87fb1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/mlpd/vM0_6_7_X_Changes.java @@ -19,6 +19,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.DiedMonkLoaderSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.DimandKingSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.FlameBoiSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.IceFireScorpioSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.IceStalSprites; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -50,6 +51,9 @@ import java.util.ArrayList; public class vM0_6_7_X_Changes { public static void addAllChanges(ArrayList changeInfos) { + add_v0_6_39_Changes(changeInfos); + add_v0_6_38_Changes(changeInfos); + add_v0_6_37_Changes(changeInfos); add_v0_6_36_Changes(changeInfos); add_v0_6_35_Changes(changeInfos); add_v0_6_34_Changes(changeInfos); @@ -89,8 +93,131 @@ public class vM0_6_7_X_Changes { add_v0_6_0_Changes(changeInfos); } + public static void add_v0_6_39_Changes( ArrayList changeInfos ) { + + ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta3", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), ("徽章改进"), + ("徽章现在进行了一定的改进,并追加了一些新徽章。"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + Image issxsaxs =new DimandKingSprite(); + issxsaxs.scale.set(PixelScene.align(0.8f)); + changes.addButton(new ChangeButton(issxsaxs,("拟态王改进"), + ("修复拟态王二阶段可能无法跳转地图的问题"))); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X68"))); + + } + + public static void add_v0_6_38_Changes( ArrayList changeInfos ) { + + ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta2", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), ("药水癔症"), + ("药水癔症已经进行了一定的改进,详见挑战说明。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.STATS), ("评分系统"), + ("评分系统现在进行了一些Bug修复,并且对评分追加SSS+评级。"))); + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X67"))); + + changes.addButton(new ChangeButton(new GhostSprite(), "幽灵任务", + "幽灵任务现在进行了调整,如果未获得+4徽章是无法获得+5的东西的。并且两个徽章不在独立,合并起来了。")); + + changes = new ChangeInfo("平衡", false, null); + changes.hardlight(Window.RED_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.WATERSOUL), "水灵药剂", + "炼金能量从10提升到14。")); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.BloodDied), "嗜血荆棘", + "整体攻击面板属性削弱,其余效果不变")); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SAI), "吸血鬼刀", + "整体攻击面板属性削弱,攻速从0.5变成0.8。")); + + changes.addButton(new ChangeButton(new IceFireScorpioSprite(), "寒冰巨蝎", + "现在攻速调整为3回合一次,火蝎子也是一样的。")); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DASlade), "涤罪", + "现在攻速随着杀怪数量渐渐追加,最快可达到0.3x")); + + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), "突变爆炸体", + "突变爆炸体现在死亡不会摧毁你的物品。")); + } + + public static void add_v0_6_37_Changes( ArrayList changeInfos ) { + + ChangeInfo changes = new ChangeInfo("v0.6.2.0-Beta1", true, ""); + changes.hardlight(Window.TITLE_COLOR); + changeInfos.add(changes); + + changes = new ChangeInfo("新内容", false, null); + changes.hardlight(Window.GREEN_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.COPY), ("UI迭代更新"), + ("文本类UI已经进行迭代,现在拥有更好的使用体验。"))); + + changes.addButton(new ChangeButton(Icons.get(Icons.STATS), ("评分系统"), + ("现在魔绫加入评分系统,并且含有评分等级。\n快去开一把看看自己能获得什么水准吧。"))); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.SEED_SKYBLUEFIRE), "地牢种子", + "现在排行榜进行了翻新,你的种子可以在这里快速分享给其他人。\n" + + "当然,仅限更新后的新版本哦。")); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARMOR_LAMELLAR), "第6代护甲", + "札甲全新登场,你有尝试过叠甲的快乐吗?")); + + + + changes = new ChangeInfo("改动", false, null); + changes.hardlight(Window.CYELLOW); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(Icons.get(Icons.INFO), ("文案调整"), + ("部分文案得到优化调整。"))); + + changes.addButton(new ChangeButton(new Image("sprites/spinner.png", 144, 0, 16, 16), + Messages.get(ChangesScene.class, "bugfixes"), Messages.get(vM0_6_7_X_Changes.class, "bug_06X66"))); + + + changes = new ChangeInfo("削弱", false, null); + changes.hardlight(Window.RED_COLOR); + changeInfos.add(changes); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.BloodDied), "嗜血荆棘", + "整体成长属性削弱。")); + + changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.DG3), "归溯钥剑", + "整体成长属性削弱,随机附魔概率减少。")); + } + public static void add_v0_6_36_Changes( ArrayList changeInfos ) { - ChangeInfo changes = new ChangeInfo("v0.6.1.0-Beta7.3(P3)-520特别更新", true, ""); + ChangeInfo changes = new ChangeInfo("v0.6.1.0-Beta7.3", true, ""); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); @@ -344,15 +471,15 @@ public class vM0_6_7_X_Changes { changeInfos.add(changes); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.MAGES_STAFF), ("首领对决V1.7"), - ("1.修复了BR模式的19层的错误生成,加强10层钻石宝箱王的攻击能力\n" + + ("1.修复了娱乐模式的19层的错误生成,加强10层钻石宝箱王的攻击能力\n" + "2.现在17层和27层可以上楼了\n" + "3.英雄素材更新,部分物品贴图更新\n" + "4.现在击败宝箱王不再能获得拟态徽章,28层完成后通过水晶之心会直接幸福结局。"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARTIFACT_HORN4), ("首领对决V1.6"), ("1.部分Boss发生了改变,19层火魔女,21层矮人国王,25层矮人将军\n" + - "2.现在不会在BR模式生成跳楼房间,以及修复了一些Bug\n" + - "3.现在诅咒法杖不会在BR模式中触发传送效果"))); + "2.现在不会在娱乐模式生成跳楼房间,以及修复了一些Bug\n" + + "3.现在诅咒法杖不会在娱乐模式中触发传送效果"))); changes.addButton(new ChangeButton(new ItemSprite(ItemSpriteSheet.ARTIFACT_ROSE3), ("首领对决V1.5"), ("1.现在可以在3层完成幽妹的任务,让她和你并肩前行。\n" + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java index 0860b2f33..1d295153d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/LevelChecker.java @@ -4,11 +4,12 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics; public class LevelChecker { - private static final int SSS_SCORE = 10000; - private static final int SS_SCORE = 8000; - private static final int S_SCORE = 5000; - private static final int A_SCORE = 4500; - private static final int B_SCORE = 6000; + public static final int SSSP_SCORE = 250000; + public static final int SSS_SCORE = 200000; + public static final int SS_SCORE = 100000; + private static final int S_SCORE = 50000; + public static final int A_SCORE = 20000; + public static final int B_SCORE = 10000; private static final int C_SCORE = 5000; private static final int D_SCORE = 4000; private static final int E_SCORE = 3000; @@ -19,10 +20,11 @@ public class LevelChecker { boolean amuletObtained = Statistics.amuletObtained; String level; - - if (totalScore >= SSS_SCORE * chalMultiplier * (amuletObtained ? 1 : 5)) { + if (totalScore >= SSSP_SCORE * chalMultiplier * (amuletObtained ? 0.7 : 5)) { + level = "_SSS+_"; + } else if (totalScore >= SSS_SCORE * chalMultiplier/2 * (amuletObtained ? 1 : 4)) { level = "SSS"; - } else if (totalScore >= SS_SCORE * chalMultiplier * (amuletObtained ? 1 : 4)) { + } else if (totalScore >= SS_SCORE * chalMultiplier * (amuletObtained ? 1 : 3)) { level = "SS"; } else if (totalScore >= S_SCORE * chalMultiplier * (amuletObtained ? 1 : 3)) { level = "S"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBadge.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBadge.java index 85eeff5e2..56a4421cb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBadge.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBadge.java @@ -3,7 +3,7 @@ * Copyright (C) 2012-2015 Oleg Dolya * * Shattered Pixel Dungeon - * Copyright (C) 2014-2022 Evan Debenham + * Copyright (C) 2014-2023 Evan Debenham * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,32 +29,48 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.watabou.noosa.Image; public class WndBadge extends Window { - + private static final int MAX_WIDTH = 125; private static final int MARGIN = 4; - + public WndBadge( Badges.Badge badge, boolean unlocked ) { - + super(); - + Image icon = BadgeBanner.image( badge.image ); icon.scale.set( 2 ); if (!unlocked) icon.brightness(0.4f); add( icon ); - RenderedTextBlock info = PixelScene.renderTextBlock( badge.desc(), 6 ); + RenderedTextBlock title = PixelScene.renderTextBlock( badge.title(), 9 ); + title.maxWidth(MAX_WIDTH - MARGIN * 2); + title.align(RenderedTextBlock.CENTER_ALIGN); + title.hardlight(TITLE_COLOR); + if (!unlocked) title.hardlight( 0x888822 ); + add(title); + + String desc = badge.desc(); + + RenderedTextBlock info = PixelScene.renderTextBlock( desc, 6 ); info.maxWidth(MAX_WIDTH - MARGIN * 2); info.align(RenderedTextBlock.CENTER_ALIGN); - if (!unlocked) info.hardlight( 0x888888 ); + if (!unlocked) { + info.hardlight( 0x888888 ); + info.setHightlighting( true, 0x888822 ); + } add(info); - float w = Math.max( icon.width(), info.width() ) + MARGIN * 2; + float w = Math.max( icon.width(), Math.max(title.width(), info.width()) ) + MARGIN * 2; icon.x = (w - icon.width()) / 2f; icon.y = MARGIN; PixelScene.align(icon); - info.setPos((w - info.width()) / 2, icon.y + icon.height() + MARGIN); + title.setPos((w - title.width()) / 2, icon.y + icon.height() + MARGIN); + PixelScene.align(title); + + info.setPos((w - info.width()) / 2, title.bottom() + MARGIN); + PixelScene.align(info); resize( (int)w, (int)(info.bottom() + MARGIN) ); if (unlocked) BadgeBanner.highlight( icon, badge.image ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java index 83116cc49..e077fecdf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java @@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; @@ -44,6 +45,8 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; +import com.shatteredpixel.shatteredpixeldungeon.ui.TalentButton; +import com.shatteredpixel.shatteredpixeldungeon.ui.TalentsPane; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; import com.shatteredpixel.shatteredpixeldungeon.utils.DungeonSeed; import com.watabou.noosa.ColorBlock; @@ -198,6 +201,53 @@ public class WndRanking extends WndTabbed { version.setPos(WIDTH-version.width(), pos); add(version); + RedButton btnTalents = new RedButton( Messages.get(this, "talents") ){ + + @Override + protected void onClick() { + //removes talents from upper tiers + int tiers = 1; + if (Dungeon.hero.lvl >= 6) tiers++; + if (Dungeon.hero.lvl >= 12 && Dungeon.hero.subClass != HeroSubClass.NONE) tiers++; + if (Dungeon.hero.lvl >= 20 && Dungeon.hero.armorAbility != null) tiers++; + while (Dungeon.hero.talents.size() > tiers){ + Dungeon.hero.talents.remove(Dungeon.hero.talents.size()-1); + } + Game.scene().addToFront( new Window(){ + { + TalentsPane p = new TalentsPane(TalentButton.Mode.INFO); + add(p); + p.setPos(0, 0); + p.setSize(120, p.content().height()); + resize((int)p.width(), (int)p.height()); + p.setPos(0, 0); + } + }); + } + }; + int buttontopx = HEIGHT - 36; + btnTalents.icon(Icons.get(Icons.TALENT)); + if (Dungeon.challenges > 0) { + btnTalents.setRect((WIDTH - btnTalents.reqWidth() + 2) / 6, buttontopx, btnTalents.reqWidth() + 2, 16); + } else { + btnTalents.setRect((WIDTH - btnTalents.reqWidth() + 2) / 2, buttontopx, btnTalents.reqWidth() + 2, 16); + } + add(btnTalents); + + if (Dungeon.challenges > 0) { + RedButton btnChallenges = new RedButton( Messages.get(this, "challenges") ) { + @Override + protected void onClick() { + Game.scene().add( new WndChallenges( Dungeon.challenges, false,null ) ); + } + }; + + btnChallenges.icon(Icons.get(Icons.CHALLENGE_ON)); + btnChallenges.setRect( (WIDTH - btnTalents.reqWidth()-12), buttontopx, btnTalents.reqWidth()+2 , 16 ); + add( btnChallenges ); + } + + pos = date.bottom()+5; NumberFormat num = NumberFormat.getInstance(Locale.US); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndResurrect.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndResurrect.java index df3b47a74..f292cfa7f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndResurrect.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndResurrect.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; import static com.shatteredpixel.shatteredpixeldungeon.Dungeon.hero; +import static com.shatteredpixel.shatteredpixeldungeon.Statistics.TPDoorDieds; import static com.shatteredpixel.shatteredpixeldungeon.Statistics.crivusfruitslevel2; import com.shatteredpixel.shatteredpixeldungeon.Statistics; @@ -148,6 +149,11 @@ public class WndResurrect extends Window { crivusfruitslevel2 = false; } + //拟态王二阶段死亡的时候给予重新评估 + if(TPDoorDieds){ + TPDoorDieds = false; + } + //矮人将军 Buff.affect(hero, TestDwarfMasterLock.class).set((1), 1); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java index 056e44c3f..7a7fabb82 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndScoreBreakdown.java @@ -37,10 +37,10 @@ public class WndScoreBreakdown extends Window { num.format(Statistics.exploreScore), pos, Statistics.exploreScore >= 20_000); pos = addInfo(this, Messages.get(this, "explore_desc"), pos); pos = statSlot(this, Messages.get(this, "bosses_title"), - num.format(Statistics.totalBossScore), pos, Statistics.totalBossScore >= 15_000); + num.format(Statistics.totalBossScore), pos, Statistics.totalBossScore >= 18_000); pos = addInfo(this, Messages.get(this, "bosses_desc"), pos); pos = statSlot(this, Messages.get(this, "quests_title"), - num.format(Statistics.totalQuestScore), pos, Statistics.totalQuestScore >= 10_000); + num.format(Statistics.totalQuestScore), pos, Statistics.totalQuestScore >= 14_000); pos = addInfo(this, Messages.get(this, "quests_desc"), pos); if (Statistics.winMultiplier > 1) {