From 4f4a3db3af6074cc0b084a55144c86051795c87b Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 21 Jun 2022 13:55:10 -0400 Subject: [PATCH] v1.3.0: implemented daily runs short of rankings for them --- core/src/main/assets/interfaces/icons.png | Bin 14801 -> 14808 bytes .../assets/messages/scenes/scenes.properties | 10 ++ .../messages/windows/windows.properties | 4 + .../shatteredpixeldungeon/Dungeon.java | 17 ++- .../GamesInProgress.java | 4 +- .../shatteredpixeldungeon/Rankings.java | 26 +++-- .../shatteredpixeldungeon/SPDSettings.java | 9 ++ .../scenes/HeroSelectScene.java | 97 +++++++++++++++++- .../scenes/StartScene.java | 4 +- .../shatteredpixeldungeon/ui/Icons.java | 24 +++-- .../windows/WndGameInProgress.java | 4 +- .../windows/WndHero.java | 4 +- .../windows/WndRanking.java | 8 +- 13 files changed, 188 insertions(+), 23 deletions(-) diff --git a/core/src/main/assets/interfaces/icons.png b/core/src/main/assets/interfaces/icons.png index 9577abc0b84bcb417786474febe195b346cd0857..2ffc63cf96db973d0c8a1ce327561e87f414da26 100644 GIT binary patch delta 13894 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

~S6O{Df}KkpDMU>hPt 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 delta 13869 zcmXwfbyO7Z7x(P4z|!5_f^;a&f^-OqG{Pb+A{|n*bcaexgMdnlloCsWl3%2xmJ*a& zkXZWV_rB+yGylwa&V1&%pL6fr&%O7V^_lQV;{~&I)K#AZLU!`;(|HG8$Na+$?@&pJ zGWF_f?$%^??NFC8^$ACsi#Yw3NSu&%a-wIK8W_3xa`Wv;+lQ^KypL|j`u)MnKR$i` zUht^$ruH+kY0^Q)xLYtl|CJ0|_j6*V4++ZyFDrE#K0TKyJYUzs4>>9&)ON^mFQm}J zTYv2c@;Wms_a-a8N?H%OYU2%A1TViW4;5Xm&(C-&eu50Jw`IgB(m^liuLEQ%l$FO= z=F<{uBr(b*|uoH#YUqpkeB_rPHutwvdZu)^ zg^6x5OrQ;w?`Eo$vS$L!b>zBbmW9?RtlIj9Ulu7*W|cj3ai?7FM|#~7;7R%o|yU!s$LLV zgwAD9dN<1$LOx@@T~1Em5h0!|N`^%u0F@Re{SK8OiW>IqyTDIFj;r>zO?xe4XaQhO zR(`racQb-$Sy0$rw03q&E(5^N$oUW0n@%EBxHHL}C?V9G2&!X?3FS9BR`(4GKp={T zjj?fgKAIHJw0-M?XJ?}uhW12&ssQ|EV{MHRrMPckury-^kSf+qD?vVZT1{f<=n68qAAivOW~Ji_-cP_MAWArBa$3#iI!jCyH_7fP{zy;2P@^2CDnN zk$7(II_tppJlN(SnIbKz)F>-Upv_>57%jVezk68}WoZKBy0<7x7(yh8)}!{}MgT*H z+b&-fJ_P$+<&P=wR|nmBk;@S)UI2SR`J5Q|!OmxRa*zYig&6|u+3)e>N6tze0EEwoY~@p#u;l!0hC`E?4qO?14emRxy!^V$TM_ym$5B2qif z8zMtE3QpfrLjX9?m4e0w9P=WPLAK@x^Qiu6WzpOxkaV*vE7YM1>2t<&))?j3;;{+H zZ>ekLQ6(IAUK)8t;E@M$HlIl)n8Q7BI6!ea_R9Iil=wFjx60}!>bfER+_WbVx-()gaM@dD5|;JxZfVqxAJ)I+tt%6}X>|FvChL^!ftXP8>*3ewR+0QouTnfpp6B)Q<&m9cn|@S z7&R{#8775NU<$NvuLQBifc#}IJ;EI7`hOt-cbA;9$O5rVNwmC`2uktD+;oNTX*4JV z{XqS}1YbO0&w8jBkY%ZRNLFQm#^EY>3n9q%?OT|1K!dUcZY~s_<6}@{s)Szz+*=B? zpYxx0=K}V9f$eH&c6Q5S#-K0e1KwFHGtj!!YlIot3i}z|W!b11Oi;M`{Xkf$iWp2v^UWc$j^6=pcqmV0_Gye61TwKOLD!qyeL4bWLah3x`zG7 zj1Yj1Q*)XCjZO=KDE?d`&wChROySKLm)+KccWWdzAe3r63qgmdp18?nw*{Dqi*~*2 zKw>~7OO=bqI~BT+wQ7zjRl zQu=`Ud;qp1RxfSGG0;CSU}Meh6A_is+!ESD2Uvd8oUo&S5;z_F+mwWjY zhAatlQh}IvQuK^X(*P%+UGCxcC3}i}pTMD3t>Y^JOueBmK}?}@ShN*J%1jhsxjH+A zQG!%F=&Hw%x^Adv_r4zb=9dWCZ~L{bf~S1lCo(vqbNOJVu16tX3JB$GgrOY;0&4(7 zE-<@X3>?j%@m~7CC<}+q4o|_&IDor$gSZHz;ftDhr~~kUQh=K#kQZt>77#Cg=reb} zjw%Eb)ht*Dnf2sY-Qi$BftKjP+{A8`^LbmLQYXmhM5jGu))s%Cgp)B$DYI~7)EQvi z{vTpYC~;a9Mq%@Y3s37NyE}(Z-5Iz%qZ&5S8VznQZ7xRunXr~xmM}9YEsEpXc~TJ3 zQ&TQ zikJ^1?UdQtVC(mA59nYJ+eJH6FFac7}HQXDAV#faaVcbDtYs zgSh^8=*LES95$=cX$=Tl0SBM)(SOYW@O+_Ay%y5jbN_M^@CDSS|EK|%7)@*{VuND2 z#cl|?!7|%Nhj2(>ErfV3zJvIR0l~|je~eKb#djHi0mJ2|z=%FbU1trPN3scAA_kvy z1X<q&(t%Kq4s!U%SQXw)=##+Fp;5q6mu z3g?J>SZP{qIhEJ=Jo$OMGniqfm*yb8aiB6ErbLv+N<1*XZ zU#Yp6tafeNa+zVSOd6u59^Y1Hw|K~}!`HU07x0~zsO?{!n*-6uCThuE~|Auq|NU(K3}nXy~pM~X~4mw(ToiK zoT9J69&j0{EhW0DGtMkP!Os=cX~@xDi)ng~?_vC#8kd@A!%wm3o0+bS!57Hm{9`ar zGV9z>KxqggthyL@3<`zQ5{cF08z~n+kw*LTete?aep&#lM+%Q46t0b00sEBAq5}`U zYBegwaaVK*43(Z*7L8>BGZagkCjX_%m<83}=HNidVgMn1`E9>_?WTSvMHgC+_AwBhp}XfK=s|-U;~2^5qp;nNtoMms%+3`Z0ql z?9FfCh7<%avwUe#3>Std`uBuGhPv59)k6Y>4y>LhfKkQyyNwNIb0dn*H=qKgotH#A0kC0`wjea@nAjB&?|C- zh_5#R+TQ?K0~t$OfY|tdckmwP2cO%2DE(fnI~C+sv=XU@5hjzX;3K{O>xJahCHN=- z>T0b0w*m+PDzN*7FCz61SP5ecAz{CYe@FC17gImL{?<+TOEpjU-mUy&fENj)g9u*J z+Kr9V0K90k8!Jp>1mo_cye_f6VCInVfB1P7;-K341K8h!3#j!)}Oya$)k~ zArMlK0EN6;?nr=UhCsGTJJe#A>CrX8FA7iZn-i`i#y8!H{vNPDafWiyIXZVf&o~nM z6m<#xTe7>1%FMpa*C0j^5}if@gu>gzP%W^_$?#$lB)v5rV+3%|sxF-&Oy5KaQp8M2 z)=9^1jh%Ot#L7|jjAXICOWxH4P%9^6XEOEQm-XO?r+Az?Z*@@IK)kA%_$4nsFXC~E zmpqD|x9^A;6+V+R`xJo9lYysDPDdz4T1FHQfv8*-z(9ES%{iHAMr6PuFMqf<ltPz)Ab0o>JujIdVPK-?XM7#0qj^+IEO=!}`e{U?a@3u~ z^DK}sbX0{{3YAx1X4CITO^qsA-Ms$FoCx6^7r&$hB=8aDq@7&AvwTrc;g+L9^(CxD zeGLSpB|>4kF}#9=TmjltPjCiAKuo6z5U4FcZDR#&tPyoHamvxAG~3}6C=mk9kXK~r zcja$XA3_)dL3+whEwGkF^01U(A(ZE>m+h$6N?p>TGSNw5F;a-ncQ{neNpDn(J}06= z*g}t-XLXSDMnd6;Icg-X5v|Q0g0aN|kvPFyDmtG}JqIG#iX*kcy@=61S54EjDDcRy zDN7Hb!a#XvlNQ}d=E8cmI1oh@NQ|uL31caQ{QM--t3pr$Pu6DxHPBVSSOf@2p}tx=Y$g4d^V~OlWbq^SmNuOjt_R z>7`jiBs*97XKMy8oeBOsIzD0_%_r*2d#*GNjjjad> zv4Bqx_4dNF-7x_zS3WbK-qC3}fZ9{pIx0W_E`BOKhQ2C2VxSAGda5vVB6@BNyWEne z#D0gUF6fNmc_vYjDIMYqDWq=Wum}q5xBiW#1gt3O(SMv-J#;x4dLQY)pom1j#Z)X! zrOMN0-bp|REDYK6`9ia` z6C?Az61-ifq(bSK#sH7WdtRmqW$51j;@1l+`uo{!)b%#U4XRT|s`pdqK1(AgQYIXK zH1(+hAnhy?A?_6BQX8$0HP#Bl+B>jJd@kEUZ&Q`tN4e{#Sr+rd|qs2LAs!XlVV z=v7ax227L^`Rjk-JUpg<3Up&IUnrCgx3?fJ3Oe(J>!0{tEr`-Q) zkz4D;FF%>wum(P#IuJqR>Xvm!PrO$qG`f`w=d8DNSwl-uCoc5U*#8_q7vFPxQ=h1A zIg}iA1y^}=wd4crn2kYZuSh$m#;^)k$8spk#wW*=VNvTX#!muCRmCq6r^Zkl6&U9D zcE^TBlMA-DW&vRL82x-z*a=xXhsk*7cELwwLTu;GB7^_{;CSep&aVI$Go-~HY0Joh zB&-Ae|Ak;XV~>nd-ac7^3VlDez2I^47kSg4A@obf6W+swOAo~*dKstq_%AlNegsePdcX+^0 zMmol~#rj}=Y7x|WPx-SR3vUmEnkwf-6F z4erqP3Z{4yIW7tP5C6qn-r&gSL%loI-)T?%rO9>|Z0|2w8%vwi3Azf2&4G$aVY^1E zk4jqV!`!-~=VM!7n^_1=U3zLy`fQd-G4Wg4Ci^LvQQoYC-_-=gc_bEr+3h!{&VnJz zT-^Nd;WzOC%PV6hINlex&s~O;P{Ir-%nXzt)IMT~NygzzCG#Y|Vxc=UGQ?QYBF9IJAnG>d53Q5CV5KjFmh(hxfxk)X6H?|I% z6kDwR$p>j&#MOU9nbY1Z?1 zibQzhsC)KM(zpG;-tB5yDuV1?XN;on?;f0J4K*?Z4?Q#u{Lb~CDMVr~CeGJ3JPv7F z^;tTy^5j{It1i#@3!+0slZmZn#^aaXF2}rW4xUdwh+C|Q&Md9)jq%8G^c<`$w#7c6 z_+@CjU6}Mk`@xGU%9MLeo?kwPS2TzyvQ{D89Em6d6sjnEqN>a2U`r1{^9=_Qg|FQi^GW^IlGCl?5-x>BrYL?bU%FTX3I7w(P(^2NlaT1$RF6bLEw`G5f$doz! zKr_fSn0}F4IfN3Up&ZI>QJQl>I5xqCpF747|*NVtO##RWYXbi5XeSs#h zIgE3Zh~p~c`5;|6WQMj%REiguXPAs&GtaA0d|qewsM1KXg&pw4>yBx%f|`3+|3Dfk6D~TAu&`rKPri{U=xzxpgeAsc92gGm;^phT}Ro{T)TTtAE_D-2(Tr z2uBV$-Z3!m0f%v3mDP+ib&^xDjjze|zvyh8{8;Ju4>F;gKE`<-0;Dxme;uU z!2jUmZ#A;RrT;S>MBdK;7Q1w}4zhZ3j9#%?SE7OhEGVsYP5Lg~_**YV1~9CAiDBy?(Ei~1;cO0l(mNM1-m_mlaq8{* zwk-ZXNGB%EldEPatEB&n6l6k}I7vfy4D9SakkBaYHmf;D8S=rB8ejR2W|EP5Bx@i% zowz5STBJD%NM$+;B!(M&-y+U<0OoOz_TDWKauIyoM!M4ZhQyZV6>M9FMiM^pRt

q}}a_Cx3{9sD}}nTnJBI(LsEnIOX*-IYp6aMmLh5w3K-{EvJ|_m|xC# z_H=%&+9L+4wpL8t(?lysdkO{t=bui|NUbpV%RRBKq84T`v8J_?72<`ZX0p|H>eBD4 zH9bst5ARp^Ki4H)d6|MOiAu|0jX1eeW2#s(G({%pRgx)_}snh z;vvi8B#jF2JIBN})G*zF5b7;BYYzSU)3C^_0-@mDJB2^}kF{I?m6~ufN!oCiRRIF} zjwUropz!gsGXZ7ke-FIL5O3zZR*ILVW!X5Qc5JshtK!!|RWs`V$-NRjZ<%-%p#7t&OFSLt`~bb0 zmJe(`N0KD!1vE_F1z}<8*b_yC%Zs23nSRA4P3+dwg9%*Hka(`dULIzMWTul&f zk#c!Wenoq|o7fI9G5Y$PsHsH=*^nXK^lh+sT8H49>CjqGI=AiG`E$qEE*>tU3_RpW0n3G927dKHFsy77U&OB+CDerO4IRHH=@+;Ok7vMEO z(FJO!(BBRG9jJLgv+uuaFbwtq#NYcE*~=cP5@Znmx%eO**k_&F=fovSbSOf@8^-@P z`0>;Ijs?Is`QxsLixTo}GoDTS_Q7tnO^9C;Nlz@Z=Ql@^hZ((Ud32htNFMonXZBVt z3MC(WC{^<#=^WVKtj_S4XFzCR_kXFq%l*x*@Mue;UgZf(^hAv|$r=y%V}Ow_#PP`^ zInTg+Vt<0WYYuq?1?jGZoec)A`iemu$T=_s2)pwwnFw{+y?OTy%+w$W=K*p61sbyK`%&YTDQkzf^9M^;-YsC2Do^c1vXr&g&FH z|Mgmj2x&)#N>O=9hVT{x?uIbWt^L`gUUhc9iIR&ebfrs4=}>jh1O-N}c^KJV;r|ZA z`SiXI2-~_K;yr@-pV+EC3n=R7DE-Jj*;7Fa=sj?Mq7}q5{evLBW7K7ADXyYKUU8>< z+EkBSbf$c5p^4YG3|4yQXTAq7a2 zh~zYy=keXBjXN7+8el~Q_rr>JE908>ZG+>z6mxpmd11#kehJWaxNrN8fg-tC&y|ab zFHX4YEvby+@^GI!=%|=%+^1q=od5>C5AXcdN(+|nhgucIefucna%id}>-h|f*qRkR zDwI$98zZ@+FdJ?qec@3#@&J`e@;SOjcG)CuuLO3K9&3+%0y2pD1r!POacn9air)() z1rJ^T%S!Twf*9c?Yo#cL&97bt*3l0P=C+0tyM7yK^}@a(-5wD)nL2PQNfF;CsKs=R zw@3XU5D(_bw!ls1+`#I_@w2aAorwM8v17RDg(>GGu_qaiUpMQ@G`?BFj+O zurqp1Y*YVNP};}sb(~+0j~mZZ{_lzZc)Z$P&`4ggseVNLIUWcyUp0TkTZVE;ukwq| zC?@B5smJUSc^2ns*|kTRz60p1(0hVcWQ1{u^JO|0^Y zogaBKp>-%@9xRnnTy043}Yl0zDa;Q0XBZCQIw2NSq&9V9M?2}Ml#+4fJ zai;HAT!iVN=bNTN{w=v{-}tOkMOAxF%lW2 z?9P>@nOW?2q8F?7q9xA%J~|UAm0mri<3f8G$M+9wca4dPVhNctamLYH z*G=z)m(3a`CsI_s~(ntFOl{?h{XRytgJ z$BnB~iQg!jn^%9ef5V-`-p5_eQ|-*wlXYH=7~)0>!%{uK3!aCGeX}-J$?3h?QPKF^ z&kR^&I>7LYfC8TW8Is&Lt44XbNl)E3z^%n^cy2U2F-!Kqo9_G}n3Kq5Gz@FI0K{n7 zCQ*#_Jna0Fh?;N>cK+AyMSU*ozF-&Sc5v^IrV3)7HtR~2Mir2ms`U8*zBZX}EV7j= zg;vXcXV8C#4^Mn%!a+ASxn|n){(aQjdiF^eFWX2SJ3QldsI8i@kHwqEOm_(YhNr8CN$o&yer*fYr7EDNgs`=P1RTv z+ZM)}#1OGZeO#Lea%_vALQ9_G5E5 z1I5p2JI|(S4^|xn!Y)T@4|bai*EY6%)+_qC?@Hhu6!V^A5TxKKbG>TV9bui`#&21k zUph%fMjE%4I_*O=@sQCs>^#{o0bdWz6)|4a4FLh-b!Y;h+Nd}=bCU`>B$Qm!jvUri zd|giX8_FVt=aMUC+>`r9k|hM`UKGirF(GS7otVQpt;_QW!KNU*A<9Q0q#uotFRgMaojzwe;Z{( z_cB6XOet#qd5?}B`@QGh<{yP39TUs!syJn)#yi|UwN|q9@%`Cau!zh(75#7ZsZ`Cq z&0;Pd8@yj6C@I7RCZD+tk?i;jIu^{yy+Nr-!ZnnE(q6`}q-vV3mQjxiD zTk=0j%i89rSnXPQfysdjCNcFr^9O6uO0utM$n=!lXD3c2+uUDoY@@^#e4=LGjeKE1 zo`<16HkwKrv#`CV+~keq?I0yqqBCl+B;UL*xbm`zShVbJX`dN8o$tPD0`t;)(Sg&a zVYteyOx(<}>{?+MNPcsf#ULIwO$RnS#q0cJ(nGP45SZ-&fF8ztxOaj*%a8FQGW1sL zO5o09g61EGx)Cp_d>v(tTOFB3*_ieyy`>({pu8771HOi@jVp*fy zl!;m!E}u2asF-t3IUy+D(6;#H)SZ`mgXp(P$t_=`7&1nJjclh-jml7mmu>?iR%R36 z2eyw?dmoY$yTIt}it$C0fogj_rJv8Qpm?OalgZ(RJ|jFfLRjEVG&?@aQO3{g+8l2=nN93KQU=3$$`Y|Imlr zO?N<6f!ufx=yDD|_q(rYWLOM0Eho;Tu52Adws>y~@5MK*O|RTLdQ!F$xS`2$Q_zpP2WKA?#uSqx-nkAzZ?AI4_dMA zq0ejM>~9n>^TKEo2Bik9c8^T1-R3XbUclTd7KBYlYVLf!NX<@Jzj~z)Jb*2cWZ+LQ zE&BZ8Rc{NR8aLPS8SFPtl>n@$Z@j4`?E&5}JOh4wbokz)yIA+uYbR2U7us7mGzmy-@{zWzY!?(j#Xgn7vHOHmmV*wM*(s-XCJe@NH za?U*==Q}wZY)sc+w`EREOg|7eBWh2F5tK|Fn9xzIRfu5cAC%)RHZ5@#!7;cWOOAn- zA5vn;{^Hgw=#KjT+S7SZv1W-zlnITTTf4R}4sxM2+3sfQcIo?3k!HM)?Y;UI^XZef zxaX$i*Wmea>-@y0`Hd~V%u=PQ`(&TwgGo~JQl1qacL{>;9z3y5T=};c=vzcgs8?F= zu^qG^_Y>7oCBE=ixHsdR_U8bu#352eQcda68_Fb}V|>}!$59Oe0c$5$EG_3a;`5Z9 z(wd&uVthQD7!r6Rh;*BweEtx;vDvx~8M&^4#1UO8_QZ|6xZs-xdSiYmN-zO5;Bmf7 zc||nhcXrf|pEsJlx{}cfZ1{{yU)Ua8xM7RlczVO7P*; zsn;blO)5K(A!7(5%zHcf|6Apha;=ic3{Q*V_;@$g*Vv+$d5Gt+EkSNo*`qzd!~uLg z?B~Z+vD~zt?SXXHzDT|f57VCIeDJ^CLWMl6BXt?x^M6WikGpfA_|h@klBuK$X|p0v z-XlM14!o1ZT6`q8-_Q_$%#CN1PJhb!f+|4TtfcWHeSJJtT%1i}`g-!u=URSY(F}|yA^SLM z{5s)X5+d(cJ>Apbzg}B`EPG0=@d^|#?XZ3B3!w5H8*$W)8UdD`T8@~RBRu)+jErK= z{_M+ zA2_^X)pVJm!yLJ8L6ob_qsJa!Ttp=0VoMx`-TM2eQ z2z_K>9rymH-z;k<`^i23xOnT>{?E`Bti7j)Eq;x!drvD{>#T8R%%@?`of<)PH$5i* zrajIB3QYf6Zp-mH^(bhgkdG~N14#54RN($G&YJWmc~`@VnSk}P2s9y6SY+mCB8MX| z;W{k)mPnt{I_RT7*3w@o)zq5^j~WUoHj(jn0FTXAg1^+_W$1zhPsJUPu7B-xfh`RH z#SpyUD5E4OpQW2^q^^I7_D^MX{q$(m9Kor> z;^`Vm<-(Ug%j$#brJ=4#^+ivRJduh5a!-gHJUJgj44HSmxPm0u`9H2Xr3;Pn3-`RG zl?l-!LV_{OzwEOREtgNPYK8C=Bq4Vlbs-Ky9ruF7P19ovx=Vu4S z1|Gn(KAtd~f&oPh4fx8HiD3UBfU2qFZYML5=#}Zhg<%Zv@g2MZ^(UniR#?mimfV{mgsNwE5g;|!)1W@ zMbxAMg!zAs79&5`*J-^SQ)*OHdSxq>{E^5SX|={ON=MPyKr5#8Z$n%&8U(v)JPRK` zBaFc~s6Xs`k(e6&42kf8kRIOhjN6L#SJAIMboEP*Gc699OK;pt52pc_pP4aeOSYhN zz?YUj9zJSSkhDm*82XB(xzIKiH_RoyUlmc2%L0Q2{M>vQ(ZbI%;AZ@&kSZpf^1k}T zt7oUbwSCJ6R=yX%On1~m_y3~Lq`zzD?3xS$&SI<|^by83r0?G8)kS}Q|LePcdin;Z z`#*vw>2y5z1sjv^CKn9VD$ zr|fEgnHpp%zbk&_g_H!Yb@B3b{zAnYzp>LSx9(`N^Fth9vunCO1fuuLN;rojog6`* zs%9$)hY!!}_8)Xq)Sgp$D%r~)c1NR#BX|>SnmMlLXdrw(O83&+tZazwr4ZcYO+?lw zT4QQ;mLJ?p)&$X`-XE+Q8OaK~w^ACq{yYmNeJ^M){uGkxopJDK0XWq=I?$-(x8y!f z+vZ9&F!lE2>QXp#uq!J=tY&pR*Yg7dEnUzEi|3EcG!hIwm%P`8fSc=o^KUmj@-#P^ z9{+rj)g$I0!&eSZpAZiF@RHiYNplLwHlo`A}lO=wbXHG1zPA@IO$n;P@dr z=YL{rUk0Ez{rQGpy#3ml40SeoS%d$DCR?Od%cgysobn%5jk2RvRY3$QNq}g$CuMIO z3+(tn!=)PvEA`Ori?0H|HnVEcbbCtklTO))&aOH{PCYrjuwV*5p{^@&o=52`yp{pn zlXGn0-r}0oSI9W#s3(=d&%r@Sk4uYF|Jb4&($5QYk1(yU`3ExNte;X#TkkPe8uh$o zl~Y{gPR;83i+eypv1;&l@IaH^@_D#N2{g1!V;83N zhNePe*FCgaHq1*!)L0AI87Oe#-@JyNAU~3!r{+tC9Zr0cVGjP`>JJ){Y6UzZXcEvU z;p1V}Q5M}2(X(g2p37m0`5nSVO#HUa-kIp{I~Gd%)kvHH*VgWQcqBvW7aCR_r+X2n zS-{a;&hx8QIA}*@^vnqq+j0J_hodGy^AHdX7udbfX9(@S+Z7ZD)1p4jh*5O*xl%P| z>jxMoSae=<ruVjDd;hjegp^+W3K$Ht`qUPh*VSXlMx)inteY=E&QgM?=gH8g630 zlf+j5&S8A!(WQ#D{SU*$V|qE>^Cco_1fy!wHM6UUyLU6{bEwfLoHD*qe~Lu><$CM& zygVZnA8LMI(|pI?`}*A=ne+gGp;gqce`%|AFlgv2Sr$R`;$x6d^se+ulQr9PP$D6j zN!jgI-$>n0Ij{khq-8I6#Wg#?gaNVrwd+KymatRBU(IE99-&m~GCD4z2?BW9-GBbG z&J!K%%Sds`yCc>gzka+WXn?Tll7BHqQz9?GYC`9dj&$6 z(2OIPBov=jpf6kai4!jAd?ocZ50;fN5WA*%6p?CL1A3Rtm{_=XO z5-+1pY@TkOW-$%pn&f%^Zj|tCc#<%<-64X>xpar(Q>5_gdfqobw3sFSTTWW(F=(02 z4nJ%Rc|yF1bVMtv_x6Vo$U7O>C0%EwftX8Hs$ZYGIeq@rQ+_MMTJTd)gu3E##59Xq zg{RH$a5^^%9pYQwA(GH=PZ#;iT|M#ICDr}Wy|`mZt(HWp>BD0qOa)#oosfB>KBV9- zEyliB^0&hs0bW^^0kh5vOI%-SVQTwXq8aY+n;GN90Y3Szu!ggvmcxzrb{}G{}lz> zB@`v)YgI_qh!6+@@jC~`wm;d%VQ^Okh^Z+1`nHZ;M!c}~7Y4h= zaOu3pvK0eYPOGBC1Z}M-Iai+PnFxI}`_!Y8I2-o_xEWsWw@;xgq_ zUKI&rR~JgNXZFFm!s-hNE9UaI9X^4Dlt?$BQMfnr-(hl& zeQk;yp%l-2VqbBV3em2#3tb)wJ`^nB@_*+t#&^aVjWTr2%Z2#vnOR6XRF;Z&JbwE8 zdD*++C#qj=0x`NHTzUp__07o-yP2KcMZ0ngMH`)b#-yEitrv{%)WrYekT=hlU0SwO z^m8>^`PuPl_TZ}!E0+>S2KU~_1OvwF6TU3W<&1Oq4TtBOG>2VurNRHsy69*;RIgD( GM*JV^;0j*= diff --git a/core/src/main/assets/messages/scenes/scenes.properties b/core/src/main/assets/messages/scenes/scenes.properties index 0395a8155..a826f6acb 100644 --- a/core/src/main/assets/messages/scenes/scenes.properties +++ b/core/src/main/assets/messages/scenes/scenes.properties @@ -50,6 +50,16 @@ scenes.heroselectscene.title=Choose Your Hero scenes.heroselectscene.options=Game Options scenes.heroselectscene.custom_seed=Custom Seed scenes.heroselectscene.daily=Daily Run +scenes.heroselectscene.daily_desc=Every day a new game is available that is the same for everyone! This 'daily run' generates the same dungeon for every person who plays it (so long as they are also playing the same game version).\n\nYou can take as long as you like to complete a daily run, but can only have one active at a time. _Daily runs are not eligible for badges and have their own separate rankings page._\n\nWould you like to start today's daily with your currently selected hero and challenges? +scenes.heroselectscene.daily_yes=Yes +scenes.heroselectscene.daily_no=No +scenes.heroselectscene.daily_unavailable=A new daily run is available every day at midnight UTC +scenes.heroselectscene.daily_unavailable_long=It seems you've started a daily that's in the future! This can happen if you recently changed timezones, or if you changed your system clock. _Your next daily will be available in %d days._ +scenes.heroselectscene.daily_existing=You already have a daily run in progress. You must end that run before starting another daily. +scenes.heroselectscene.daily_seconds=%d Seconds +scenes.heroselectscene.daily_minutes=%d Minutes +scenes.heroselectscene.daily_hours=%d Hours +scenes.heroselectscene.daily_30_hours=30+ Hours scenes.heroselectscene.custom_seed_title=Enter a Custom Seed scenes.heroselectscene.custom_seed_desc=The same seed and game version always generate the same dungeon! Seeds are nine uppercase letters (e.g. ABC-DEF-GHI), but you can enter anything you want and the game will convert it. _Games with a custom seed cannot earn badges, contribute to games played, and appear at the bottom of the rankings page._ scenes.heroselectscene.custom_seed_duplicate=You already have a regular game in progress with that seed. You must end that game before using that custom seed. diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index 1a909c4ed..7752523f6 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -48,6 +48,7 @@ windows.wndgameinprogress.gold=Gold Collected windows.wndgameinprogress.depth=Maximum Depth windows.wndgameinprogress.dungeon_seed=Dungeon Seed windows.wndgameinprogress.custom_seed=_Custom Seed_ +windows.wndgameinprogress.daily_for=_Daily For_ windows.wndgameinprogress.continue=Continue windows.wndgameinprogress.erase=Erase windows.wndgameinprogress.erase_warn_title=Are you sure you want to delete this save? @@ -66,6 +67,7 @@ windows.wndhero$statstab.gold=Gold Collected windows.wndhero$statstab.depth=Maximum Depth windows.wndhero$statstab.dungeon_seed=Dungeon Seed windows.wndhero$statstab.custom_seed=_Custom Seed_ +windows.wndhero$statstab.daily_for=_Daily For_ windows.wndheroinfo.talents=talents windows.wndheroinfo.talents_msg=The hero gains one talent point each time they level up. Higher tier talents appear after defeating the second boss. @@ -163,6 +165,8 @@ windows.wndranking$statstab.duration=Game Duration windows.wndranking$statstab.depth=Maximum Depth windows.wndranking$statstab.ascent=Highest Ascent windows.wndranking$statstab.seed=Dungeon Seed +windows.wndranking$statstab.custom_seed=_Custom Seed_ +windows.wndranking$statstab.daily_for=_Daily For_ windows.wndranking$statstab.enemies=Mobs Killed windows.wndranking$statstab.gold=Gold Collected windows.wndranking$statstab.food=Food Eaten diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index 123cf02e5..755326b56 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -82,8 +82,11 @@ import com.watabou.utils.Random; import com.watabou.utils.SparseArray; import java.io.IOException; +import java.text.DateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashSet; +import java.util.TimeZone; public class Dungeon { @@ -182,6 +185,7 @@ public class Dungeon { public static int initialVersion; public static int version; + public static boolean daily; public static String customSeedText = ""; public static long seed; @@ -191,7 +195,12 @@ public class Dungeon { challenges = SPDSettings.challenges(); mobsToChampion = -1; - if (!SPDSettings.customSeed().isEmpty()){ + if (daily) { + seed = SPDSettings.lastDaily(); + DateFormat format = DateFormat.getDateInstance(); + format.setTimeZone(TimeZone.getTimeZone("UTC")); + customSeedText = format.format(new Date(seed)); + } else if (!SPDSettings.customSeed().isEmpty()){ customSeedText = SPDSettings.customSeed(); seed = DungeonSeed.convertFromText(customSeedText); } else { @@ -498,6 +507,7 @@ public class Dungeon { private static final String VERSION = "version"; private static final String SEED = "seed"; private static final String CUSTOM_SEED = "custom_seed"; + private static final String DAILY = "daily"; private static final String CHALLENGES = "challenges"; private static final String MOBS_TO_CHAMPION = "mobs_to_champion"; private static final String HERO = "hero"; @@ -521,6 +531,7 @@ public class Dungeon { bundle.put( VERSION, version = Game.versionCode ); bundle.put( SEED, seed ); bundle.put( CUSTOM_SEED, customSeedText ); + bundle.put( DAILY, daily ); bundle.put( CHALLENGES, challenges ); bundle.put( MOBS_TO_CHAMPION, mobsToChampion ); bundle.put( HERO, hero ); @@ -598,7 +609,7 @@ public class Dungeon { saveGame( GamesInProgress.curSlot ); saveLevel( GamesInProgress.curSlot ); - GamesInProgress.set( GamesInProgress.curSlot, depth, challenges, seed, customSeedText, hero ); + GamesInProgress.set( GamesInProgress.curSlot, depth, challenges, seed, customSeedText, daily, hero ); } } @@ -622,6 +633,7 @@ public class Dungeon { seed = bundle.contains( SEED ) ? bundle.getLong( SEED ) : DungeonSeed.randomSeed(); customSeedText = bundle.getString( CUSTOM_SEED ); + daily = bundle.getBoolean( DAILY ); Actor.clear(); Actor.restoreNextID( bundle ); @@ -756,6 +768,7 @@ public class Dungeon { info.challenges = bundle.getInt( CHALLENGES ); info.seed = bundle.getLong( SEED ); info.customSeed = bundle.getString( CUSTOM_SEED ); + info.daily = bundle.getBoolean( DAILY ); Hero.preview( info, bundle.getBundle( HERO ) ); Statistics.preview( info, bundle ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/GamesInProgress.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/GamesInProgress.java index b09eeb3c3..8fe82362d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/GamesInProgress.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/GamesInProgress.java @@ -126,7 +126,7 @@ public class GamesInProgress { } } - public static void set(int slot, int depth, int challenges, long seed, String customSeed, + public static void set(int slot, int depth, int challenges, long seed, String customSeed, boolean daily, Hero hero) { Info info = new Info(); info.slot = slot; @@ -136,6 +136,7 @@ public class GamesInProgress { info.seed = seed; info.customSeed = customSeed; + info.daily = daily; info.level = hero.lvl; info.str = hero.STR; @@ -171,6 +172,7 @@ public class GamesInProgress { public long seed; public String customSeed; + public boolean daily; public int level; public int str; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java index 5edc7f424..fdfb49446 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Rankings.java @@ -64,6 +64,12 @@ public enum Rankings { public void submit( boolean win, Class cause ) { load(); + + //TODO need separate storage for daily data + //when loading data, make sure to check for latestDaily errors and correct + if (Dungeon.daily){ + return; + } Record rec = new Record(); @@ -185,13 +191,15 @@ public enum Rankings { return Statistics.totalScore; } - public static final String HERO = "hero"; - public static final String STATS = "stats"; - public static final String BADGES = "badges"; - public static final String HANDLERS = "handlers"; - public static final String CHALLENGES = "challenges"; + public static final String HERO = "hero"; + public static final String STATS = "stats"; + public static final String BADGES = "badges"; + public static final String HANDLERS = "handlers"; + public static final String CHALLENGES = "challenges"; public static final String GAME_VERSION = "game_version"; - public static final String SEED = "seed"; + public static final String SEED = "seed"; + public static final String CUSTOM_SEED = "custom_seed"; + public static final String DAILY = "daily"; public void saveGameData(Record rec){ rec.gameData = new Bundle(); @@ -248,6 +256,8 @@ public enum Rankings { rec.gameData.put( GAME_VERSION, Dungeon.initialVersion ); rec.gameData.put( SEED, Dungeon.seed ); + rec.gameData.put( CUSTOM_SEED, Dungeon.customSeedText ); + rec.gameData.put( DAILY, Dungeon.daily ); } public void loadGameData(Record rec){ @@ -284,8 +294,12 @@ public enum Rankings { if (rec.gameData.contains(SEED)){ Dungeon.seed = rec.gameData.getLong(SEED); + Dungeon.customSeedText = rec.gameData.getString(CUSTOM_SEED); + Dungeon.daily = rec.gameData.getBoolean(DAILY); } else { Dungeon.seed = -1; + Dungeon.customSeedText = ""; + Dungeon.daily = false; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java index 4e4914c5a..605b4ae71 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/SPDSettings.java @@ -181,6 +181,7 @@ public class SPDSettings extends GameSettings { public static final String KEY_LAST_CLASS = "last_class"; public static final String KEY_CHALLENGES = "challenges"; public static final String KEY_CUSTOM_SEED = "custom_seed"; + public static final String KEY_LAST_DAILY = "last_daily"; public static final String KEY_INTRO = "intro"; public static final String KEY_SUPPORT_NAGGED= "support_nagged"; @@ -217,6 +218,14 @@ public class SPDSettings extends GameSettings { return getString( KEY_CUSTOM_SEED, "", 20); } + public static void lastDaily( long value ){ + put( KEY_LAST_DAILY, value ); + } + + public static long lastDaily() { + return getLong( KEY_LAST_DAILY, 0); + } + public static void supportNagged( boolean value ) { put( KEY_SUPPORT_NAGGED, value ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java index b189b3487..4b82a3475 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java @@ -38,6 +38,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; import com.shatteredpixel.shatteredpixeldungeon.windows.WndTextInput; import com.shatteredpixel.shatteredpixeldungeon.utils.DungeonSeed; import com.shatteredpixel.shatteredpixeldungeon.windows.WndChallenges; @@ -420,8 +421,100 @@ public class HeroSelectScene extends PixelScene { buttons.add(seedButton); add(seedButton); - //TODO does nothing atm - StyledButton dailyButton = new StyledButton(Chrome.Type.BLANK, Messages.get(HeroSelectScene.class, "daily"), 6); + StyledButton dailyButton = new StyledButton(Chrome.Type.BLANK, Messages.get(HeroSelectScene.class, "daily"), 6){ + + private static final long SECOND = 1000; + private static final long MINUTE = 60 * SECOND; + private static final long HOUR = 60 * MINUTE; + private static final long DAY = 24 * HOUR; + + @Override + protected void onClick() { + super.onClick(); + + long diff = (SPDSettings.lastDaily() + DAY) - Game.realTime; + if (diff > 0){ + if (diff > 30*HOUR){ + ShatteredPixelDungeon.scene().addToFront(new WndMessage(Messages.get(HeroSelectScene.class, "daily_unavailable_long", (diff / DAY)+1))); + } else { + ShatteredPixelDungeon.scene().addToFront(new WndMessage(Messages.get(HeroSelectScene.class, "daily_unavailable"))); + } + return; + } + + for (GamesInProgress.Info game : GamesInProgress.checkAll()){ + if (game.daily){ + ShatteredPixelDungeon.scene().addToFront(new WndMessage(Messages.get(HeroSelectScene.class, "daily_existing"))); + return; + } + } + + Image icon = Icons.get(Icons.CALENDAR); + icon.hardlight(0.5f, 1f, 2f); + ShatteredPixelDungeon.scene().addToFront(new WndOptions( + icon, + Messages.get(HeroSelectScene.class, "daily"), + Messages.get(HeroSelectScene.class, "daily_desc"), + Messages.get(HeroSelectScene.class, "daily_yes"), + Messages.get(HeroSelectScene.class, "daily_no")){ + @Override + protected void onSelect(int index) { + if (index == 0){ + long time = Game.realTime - (Game.realTime % DAY); + + //earliest possible daily for v1.3.0 is June 20 2022 + //which is 19,163 days after Jan 1 1970 + time = Math.max(time, 19_163 * DAY); + + SPDSettings.lastDaily(time); + + Dungeon.hero = null; + Dungeon.daily = true; + ActionIndicator.action = null; + InterlevelScene.mode = InterlevelScene.Mode.DESCEND; + + Game.switchScene( InterlevelScene.class ); + } + } + }); + } + + private long timeToUpdate = 0; + + @Override + public void update() { + super.update(); + + if (Game.realTime > timeToUpdate){ + long diff = (SPDSettings.lastDaily() + DAY) - Game.realTime; + if (diff > 0){ + //<1 minute + if (diff < MINUTE){ + text(Messages.get(HeroSelectScene.class, "daily_seconds", (diff / SECOND)+1)); + timeToUpdate = Game.realTime + SECOND; + //<1 hour + } else if (diff < HOUR){ + text(Messages.get(HeroSelectScene.class, "daily_minutes", (diff / MINUTE)+1)); + timeToUpdate = Game.realTime + 5*SECOND; + //<30 hours (a few extra in case of timezone shenanigans) + } else if (diff < (DAY + 6*HOUR)) { + text(Messages.get(HeroSelectScene.class, "daily_hours", (diff / HOUR)+1)); + timeToUpdate = Game.realTime + 5*MINUTE; + //>30 hours, probably a cheater! + } else { + text(Messages.get(HeroSelectScene.class, "daily_30_hours")); + timeToUpdate = Game.realTime + 20*MINUTE; + } + textColor(0x888888); + } else { + text(Messages.get(HeroSelectScene.class, "daily")); + textColor(0xFFFFFF); + timeToUpdate = Long.MAX_VALUE; + } + } + + } + }; dailyButton.leftJustify = true; dailyButton.icon(Icons.get(Icons.CALENDAR)); add(dailyButton); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java index 60211467c..f0bd4bfaa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java @@ -203,7 +203,9 @@ public class StartScene extends PixelScene { level.resetColor(); } - if (!info.customSeed.isEmpty()){ + if (info.daily){ + steps.hardlight(0.5f, 1f, 2f); + } else if (!info.customSeed.isEmpty()){ steps.hardlight(1f, 1.5f, 0.67f); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java index 1edf85439..48eb5ca03 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java @@ -303,28 +303,36 @@ public enum Icons { icon.frame( icon.texture.uvRectBySize( 40, 72, 8, 8 ) ); break; case DEPTH: - icon.frame( icon.texture.uvRectBySize( 48, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 6, 7 ) ); + int ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 48, 64 + ofs, 6, 7 ) ); break; case DEPTH_CHASM: - icon.frame( icon.texture.uvRectBySize( 56, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 56, 64 + ofs, 7, 7 ) ); break; case DEPTH_WATER: - icon.frame( icon.texture.uvRectBySize( 64, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 64, 64 + ofs, 7, 7 ) ); break; case DEPTH_GRASS: - icon.frame( icon.texture.uvRectBySize( 72, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 72, 64 + ofs, 7, 7 ) ); break; case DEPTH_DARK: - icon.frame( icon.texture.uvRectBySize( 80, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 80, 64 + ofs, 7, 7 ) ); break; case DEPTH_LARGE: - icon.frame( icon.texture.uvRectBySize( 88, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 88, 64 + ofs, 7, 7 ) ); break; case DEPTH_TRAPS: - icon.frame( icon.texture.uvRectBySize( 96, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 96, 64 + ofs, 7, 7 ) ); break; case DEPTH_SECRETS: - icon.frame( icon.texture.uvRectBySize( 104, 64 + (Dungeon.customSeedText.isEmpty() ? 0 : 8), 7, 7 ) ); + ofs = Dungeon.daily ? 16 : (!Dungeon.customSeedText.isEmpty() ? 8 : 0); + icon.frame( icon.texture.uvRectBySize( 104, 64 + ofs, 7, 7 ) ); break; case CHAL_COUNT: icon.frame( icon.texture.uvRectBySize( 112, 64, 7, 7 ) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java index e3886f7d6..a7fb0a366 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java @@ -103,7 +103,9 @@ public class WndGameInProgress extends Window { pos += GAP; statSlot( Messages.get(this, "gold"), info.goldCollected ); statSlot( Messages.get(this, "depth"), info.maxDepth ); - if (!info.customSeed.isEmpty()){ + if (info.daily) { + statSlot( Messages.get(this, "daily_for"), "_" + info.customSeed + "_" ); + } else if (!info.customSeed.isEmpty()){ statSlot( Messages.get(this, "custom_seed"), "_" + info.customSeed + "_" ); } else { statSlot( Messages.get(this, "dungeon_seed"), DungeonSeed.convertToCode(info.seed) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java index 3c3fb4a74..9c3ba958e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java @@ -185,7 +185,9 @@ public class WndHero extends WndTabbed { statSlot( Messages.get(this, "gold"), Statistics.goldCollected ); statSlot( Messages.get(this, "depth"), Statistics.deepestFloor ); - if (!Dungeon.customSeedText.isEmpty()){ + if (Dungeon.daily){ + statSlot( Messages.get(this, "daily_for"), "_" + Dungeon.customSeedText + "_" ); + } else if (!Dungeon.customSeedText.isEmpty()){ statSlot( Messages.get(this, "custom_seed"), "_" + Dungeon.customSeedText + "_" ); } else { statSlot( Messages.get(this, "dungeon_seed"), DungeonSeed.convertToCode(Dungeon.seed) ); 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 09841d030..6d9052fd6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java @@ -216,7 +216,13 @@ public class WndRanking extends WndTabbed { pos = statSlot(this, Messages.get(this, "ascent"), num.format(Statistics.highestAscent), pos); } if (Dungeon.seed != -1) { - pos = statSlot(this, Messages.get(this, "seed"), DungeonSeed.convertToCode(Dungeon.seed), pos); + if (Dungeon.daily){ + pos = statSlot(this, Messages.get(this, "daily_for"), "_" + DungeonSeed.convertToCode(Dungeon.seed) + "_", pos); + } else if (!Dungeon.customSeedText.isEmpty()){ + pos = statSlot(this, Messages.get(this, "custom_seed"), "_" + DungeonSeed.convertToCode(Dungeon.seed) + "_", pos); + } else { + pos = statSlot(this, Messages.get(this, "seed"), DungeonSeed.convertToCode(Dungeon.seed), pos); + } } else { pos += GAP + 5; }