From 0098ce2343ff302a74f32511ede4322cdc45943f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 3 Aug 2023 15:44:59 -0400 Subject: [PATCH] v2.2.0: added some new terrain types for blacksmith quest --- .../main/assets/environment/tiles_caves.png | Bin 18018 -> 18868 bytes .../assets/messages/levels/levels.properties | 5 ++ .../actors/hero/Hero.java | 71 ++++++++++++++++-- .../levels/MiningLevel.java | 24 ++++++ .../shatteredpixeldungeon/levels/Terrain.java | 4 + .../tiles/DungeonTerrainTilemap.java | 6 ++ .../tiles/DungeonTileSheet.java | 29 ++++++- .../tiles/DungeonWallsTilemap.java | 4 + 8 files changed, 134 insertions(+), 9 deletions(-) diff --git a/core/src/main/assets/environment/tiles_caves.png b/core/src/main/assets/environment/tiles_caves.png index 578462edd42724dbd926046e6157eff27d8c6a7d..023e39d5180e419dd2faa5537b025f70a2ee3042 100644 GIT binary patch delta 17864 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

qkzt>ggtArImMGiZ ztQQO!+xx(A_L}n2SSd6Jn-Kj`=v*XP#7Kg^I(1uq67jhG)Vjx1OKH6Wd*sC%pN=jb zwZD96fG;e+9(xis-+Cq3cLPt^4n0g6o9SxgzrF3nd(n`#cJSb>+ThE3)B&~vA=_l5 zcLl-QTwGUb`E~_;Vpyp5W(+Q=UPQf`YCopd9Yby~{*w6X?6vhZlkOerjP$X}@w63k zF$DQH{uRRSxKA_cFyyYet;4m0n16v{XJ~%|Uc7tJq>xi&_i|H*+{!e+y=e7zfoz%K zw=fil#hdiZw2RWmnU>W1pIXtFkdA4WXqJ7q-rCyYcs%R1k(*!HwAYxKCD8n;^PRvZ z;aZq6`1#B}RV>>po3@*Sewp$@!)C;4XgM=|`C#BhubEkVcog%{>(q;b>qDsqOMm{J zSuSM#P*0gE?s5{Ig-(y3&N_qi-5sn^Yz%^7 z_?f7oTwJfSbxb@X|?wiwr}PB=G5Tp$Cu~fmH8py0@l<=KSV& z&G8}f%e52coG0um?{9vYlriy4^7`AYby$gNkT~fKF5}}>=KF`<>dvpZ?xx)O4UYB+ ztqQ$udSYqKa^}+F%EacSb~C~Y6~B#>rrOfR>+=Xn#cE9lo6t7SCUJ{}KdUdpP?+xz zlvE$8_4G6`N#AnpQ1W#LjU7*iWaOW~p~&_>gZ(!(E>kjzo{e6egFMes1YOL!J^M@J zdJpk6c7*=yV`I|f@eo9XkjV2uX5P@RlXQlbnR1x?T0HL)BkVh z3j>h*wUq>Cm98PnXW=6uOi15@DAI|KdGdJN?tgpqgvhzQeYFdpd`@e<;7fmX@FMWq zU;AlwUS!(=*gnM247m2 z6Ska65ej>lH-1|^SS+)+k;+E*;i8^~#7>&sk#bW3^Mc{Z)5rD#*DQnyKmREELBYTJ zyDG-plGEn+@{P0D&GS)=Y&UQ9IovL~BCaDlaCk`AhJ~(|+TOo^KNpM5IWH;c;NTEW z1-Fm;r>Z`;Cc+ygW3;i~_%bKQ5|h00?bGEYX8nBAq<1q;w*J~T&xK|XJsv(e zU4E(YSmGxQQbO2hMA3L;4#VM?p(&K;Nt*xkrcU*%&na>0$$a<`j;~M*r7+th15D6(vU;ZDES0a=cvyvT{+kmK=zrYTE*vN(F9Xom%mHhako1aGB6#c)HHg)0S_AlUM-IRk;s zm7X0n?j-ToA#0f&qod&JMKozJN)zyoKaMcySnyq-NGpq;O232k4j}Cpo3KcsgU%T~ zNADS6A-CbXb*`;X>iA!oVb4*PvO}Me7UV&}$&fYK1jgg0CW9@is8*o2{A5lC0Z--6 ztz+)L8x(4Rr1$>GOb#~B>-bXI%~()X5g-mU<$0CL96?fEfXFxSO>8kUdE#L5R5y0( zdx_`RO^2Z(W$AZ6M-H2);WZ(?O8>kjo+Lqadvf*{hi79iW~${ZM#fM6?JC=oe7i@^`y+6~5uGNzO{rm>-8Xa?+=Ul>IMt(9i2>1B(HFv-{1+w) zem4&lD_6I1@&fd#GUW$}uU@@4K006`d(|xP^*x?Gt93&X=s~_;RBr6=em9?e9#`>M z4`f%Ms{eIGxn>3M9h{$WdYps?rr#}x-vQRyg$>7k8=NBP2PLPNb5%xG>rM{XZ-j1Z zgvA-_Fy4UPwkf{1kKTiir*e2T9y5N!u7pR!n5(9IjH>5~#(wJ@OgQf)L`nM43fIC% zT>?K-Z_y;3A#8_-ZYBV(SkX9uBI0TT0*GrkNtZ+RzCw9Y7$7cSl-$|c`8&aF?l~h+ zg4XpP4NiaW#>UE6n(+Rf0?9CXtehXHCwU&D`ff_SNV#Or$ne}E|GjUlo~pKXVFTtL z9WdwW(X~bXUR&Z#)$V@HGEAO)`H+p(JyF!*l}QefB>3*{)`$lme5s9o9rXdcD=uA< zF9AN8TLK}mh>FZnt=ik2p}sTArTZl=(y$9heh!vFd8-eoBPyZ3Y9WGCL_tTONVL1(Xzy8#>kV}x# z_j4vY$*YhFa52K1q7Xwe^Exn}fZPgrnIw*x8m#m8o-@J}xUoQ3N`uA6SvLO5#*I4F z9-qEo*Qg-pLVgoUC#>qRWt4t@Utt}DFxFWa8`rp)ePAXl(wNW#2++@>H`#2W=+%C} z8HfjG@Is=QYl@BqHDulJ!GKET3KQw%k7#$gT=jCM_a@mqQYW-SD6Wa2L6NB1(ch&;TEAD%ZW->W7ObyT8kuBN25)u1pyyNQZlkAYZlMjI z4{>PXXSK*@Ib?cBu0`Wy1a5yrDmwd1W;JMi!~+boZGjMbyptTR7R3_x1-pp)x6Z)65|^dlZaV?dHuKxDs;H z=#AG+BwswFtuL10aoG%yPatFYooe~XkVuX|mFDQMwa70^60k>`b^X?KTROXa)TjMl zhzTVwV2R{q!edj7LfB(79sj_+^r$*WiR5$&GU>+m*1j&mBV*CMnaLvp=h1$S8;*zm z2CbcuQ%rYYlKG$7mFD9eG>jOV2;2>1QNY$|-7mJf2H*-xA8JwstLTU8iPho@LhmMd z(4)azkL&-94cy}kG!TYe367%69S;ILnCY0oX*#G8M0|_tI|V6`SU$eY(3gIaS-i8n zmt}X{D?jJ--s+1$_jC_K6b66n^USlnXsBtnfn*{Z}JN}gXs3{1(HhR|1eMz^JxLl{Mk7DdFP2#3WFHVZ?ED* zm25OS`rElFfhTE~`64OHp8LF8Z-CKKuO{(ifR4F7XT%I=MCW#}If1x9bm0CE+n22~ z;%Gh5J0W|9v|ek--^CjlaV_iMF+GGrw1!YtE<;FiA-OuR>#=t|W&HX2DX8>iuhQ+7 z-oOIbK-$jGZxVt_EX>^4GO5Y%t$Jt&;Rq(ri1~&35w>;pS@n+u&0@OaifYiF@d+J3 zAd~qpN?r_KcP{oI&sj|WDkk0zptxOU0Q#OKwDOiod$PY-Rh}~&3;!M z&zzAliaCxJ(er_JV{r_lv05ikO4AEeQ z5?#RY@SAiQpFofTdb=`V(2Q zIIq&C;XKaxf76iNP35nB{?iT(>^R)#x0;Mn*?J31VuPKea3h%t)MG~A@Z9rz3QjUO zjTZS_qgP0@k^qBpD&2c0$~G1@hd;j&SRe;}%ig_%>V}umVeVf9n$EsT%M@DuKlmR- zyUcH4vGl#D7}%41?{a^1nH&l)X_L2igfGpTtf}PEr7N9bP-XyL86FteVr5{stt0y{ z!1QrEl6s{Df5*EfYwOLD|N9MUh5!J-IRQ=n0+B7C(SB09zg|9!g(SK9ehBnqy0wwu z?sq$&sC8+V(g3rlM+OjvYW`8ty9LwDhMLrzR9=7XfQlWU6JI?qWqotI!1g;N*MRl1 zPPCSkYAe(Uk{^`t!%O@KWj+W>UMWw&q;#F9@&74%@ z{3kk*Mkp$s#kXQ816fdk19ZtWrLFdV^7(2avk7MaH6b{zd2=}JW-z%X+IR>Vq&Mt0 zJ#1mcCPkILNUYn>;4-^;fG1v}F@I6UKItR>3}u<5-4;;eI0hdx8;`)ywX*3?J916Y z*^2lvBfMyePBB-8OY!0-9iaXBnxyyKef20>1LeuVYZl-pH!GR}kXcEwe}g>P?r`JG zAp@2U^L9Cr4nY}rB1vXl%@`@rXjZnr85|JrS|G5jL`{4IOzU3c06x2{-GU+{sY(#> zUitKfix{{f2y{J`14yvg9NYVbw?uiM2nK4RJJ6$JWX1uM27N!_guz`?E^*tv&1lFp zW5<~82|P+U1Ke@}&XCAS^XG&CdNeO^ej@1F3YH5neTJPj;RK}jkCqPM``wq80)$zA zhcq^LNW0%SSsOVSN@$Q1Cp_!CuuUQuwhIVgK<HGUy#oBdFMRqlXgqN<*O8f49Yrl(n2+;F9UrYcviDe*N z?n1F`&3NGA^BmUlTHlqAS3Jz!?n><||I}O*Aro1-j0J9PJAVFPx*563zPWo3D6jRO zK^-Y(KMOjP2COy~CRXwQw}EX=2=N}XK^C&UsTJeK4-_|$3~o89SYK|BONr9g0LEE9 zH$ZZa{`oXnoWe>0E<2%g_KXB>X0Rd=R(a_Y(9@$WiKV}>y&wL#vpPn({ZclprBVWx15QiqB&+;#&$r)Gm?V>x8^xNY;o)s3KysCEE8%&H$Rur?H zeP0ZKR3NJ=Xv0p|Q6DL%#b_kt6~N}J z2|^0_H#8?;T^Z3N1$M~K5EE%{0JjI-)^}Rg6@_*0p*a#kiab>eGcOT$|F4mb{H4Vm zA2NeBm5Ag4`qeIda%>dkylDtip7vYd-y*ewBl*B2-%g{q>8gr7&b32+`b1)c3B+n8 zGVU2t-78Vo1-JBnsC|i$fWCoxGi9ys%p{u=nIM&jbpxvHy*@u_YzWR^*6|XI_>We(1~RNcJ}ufQ!%z&==BGXIHAuYc9}<4)>Y}x| zV?Rm(R(q7bLmmcokV{C9&)_O{Iuy_yfj<>c+93zbF7^}XsyIq$CoFCMV*!T_^Qmc^ zKu(D;BC4vFSANHneB27Y#~V`P{!=(?4Klyy)@2^N z=oI^Z=57xGHr^oy>Zh*#{eMK-ETpHAB|lkyj%|`5p|g1QKNsu)UkLVmJEKyMk!W4g zZQYAlOe>sf$%P?LlUh%NE5O7+S|QWjuj^{$_bv_fpToWdg{RG(nC1Ux6_+WWiV?d> z{-&eTWi@=Wb325^Z#2&#+UWI@MfUT;s)}&(Mdy!n{QtM)?+|?F*NOZ?R~-z)Zp&4* zM1qdb($k|}<%0wmJQS%R|9EPRYw`+ud;ECr$Ye603sgL(`v46&2{<0W9}{rY3Wp$o z9>|snzzz5VCq#OHN;Cm_fUQK3?qpNSe|%Q}%3KbR3z>$|=m8FZMv?;DfRhU|pb1b} zFc*L501u}yUuhfvPJ}_lfv^A7L;!dH$C7U0&W2lQhA z1oJ6?S%MCbxN;kG@;LnSoXWAif~JZ8s(nUUjys>zur<9&s1mCQpir8l%aK)i@^1>W zr%*t(qFY_@YquO&|I^QAGeNZOsQs$`(c{{UW2xp71#r^WL=F2k9{!p$$D4o(_pn)m z+l|FFNKKY(KpX_d1^?OCr+iG{VV5%R{By#OXeQLvNmO!FdzQ3{`02vZu;sMHk=i{% z7z=HO{FQ=679f*e02a5N>>hiOj`|J#fU}JnYlpi|Eu)rMC(%sEp|_+ z_=L>T$pAh>9Uy<9R>&`by0Dc0>`SW*;sX^D&YKIMCG<|RG|8n|&xtMlX_j9yK09O*zsy`l`b>R;{&s&gdy`nc;C_^{Yg<)teCI*X4(-L}>MD72LKiu) z>c!ZD|MW=6`i-7W?S=@KUiMYiyCcDAm5s!|#Y5*>_7Zmv-{s!ML+`Rzyubb<6r7TOoFTaO4-xA?*vWfV>+NiU+~}LR*Vl^@rAG#^)ouAiSW`pY5Ye(OR!h&|2%Ckf|H2q1?6nzFc6~G zM73Dkt>MOJd3!)@?vKwDW4lbiVx3t2*?fK*G0_` zJTXb!u`r*$myg;__mDCVL>aJyjtO%1t9E^i1`fv%`H zLV@r$a{MR3=Z_%I+a#nGz@~#oKg(C2t86ij$S!GjUQJp`Iy=o#Xd)!M!#%I@X-HkQ zMs^68MfG_6i`xZOkM5N3Mq@4h)xe7PhN@7(`IVXSJs%mp=i5#-tQFPm?&Q$wv5f}} zgaMbb3^A{E&i!fk&sfTU{Mr(BOC#)97?~$^$M#hHLrpc$7sIqeFo*Um*pzKsV9M!R zV~P8@$U91*KwCaZFMP1(PH*yS^D6(R`yws3?6j|$$TjSmW@Tr~^#iM(rnl-pvqNzX z0vjTQkk^ef#>IP59Ufzd?%{opAhXe%~R?(h~>r zuj|xam)Jc(JrhQNRCbMk0R~NfH$;^OI-F@X@fvz-TJJ>QH0=d+Aa*(d%%a zm_k32od3o9l^*(Huqx_!4{`QkfT|c~*ylTY9nCNi8DR!Gv%gRBr6L z&vngY7%K4<#=#!R$Q_&AL_E1IywCHTIZYYB;YGK}@WMz2@PGHu_$jFF3 z=}Avg#&>!GlLpZC5CE}Y6+HkLKwCqAoE`v-il7Hm*Z?r;2jK%8Ee&weERLMswd>$Y zj%UWv%#}HwId1i{IB@9l&;*3z`Yb4RlC=y-1Ahob9|H03KeaVez%+nR^dS)cv17+N zX#g_-CV*@1&>$loCV*@H(7=+V9!rtvIbJ3L18_(dvFJHo22XtA6JY>A%4T$8z)xP* z2c8K8-F=od6n=n&?B2cGPhJiT3;;oQpJfe&A0TBBWpo$Ah=hVJHISl2LP3`rNGHkY z>VE?v=ow_yC8Mhkgm8FJcG-DzkHat^7zoE9AQW2CdJ&Liz`x@)ethkPz0TOnB2Z41>aE7n(F`&(YDzH9){6 zZ+JPD3L&hpD-B^UIT0m2|ogSeZI@^NoN zfFBw-B*uvz?oLFKKw+|q3B1>NKl9wcIYz?F&P=1sRtvizF(^OE=FBj0OMSrSxt@T}Kj)lt5@!mDo6`VNCcNnyhJn@+f+?~O078llz_peM z1QUwib@TnzwXV4G9zrVJ00_#3Rz7P^AX)#MWrr{*mor3PkGKwQ9v~SW9%g>xh8{px z3varHVQ?p4fqei#Vjv2%mZ8uIT7OVpUH2MDr=S63E&svf@HuNWfCdoPfn|ru;WO@m ztpfB6285Hd4**CO7$0M-%<(j?Asq8}8q8Us+rQk>-?eX@SBIp4xeAmYu*^ir8{Y7S zC5My&Z@P|QEVmB;6M_yQX|wE{MJH}}ah(&4$4v+VA)I9|gN)UQ%%#6*2!E5gI)Pb# zw~_%Q06m5498w0n={kmi)-!7#K=g|`AQ5OiHESP0^ou$mWr6Z!b?v$Im$oWExb~m6 z(Fg1Q4$O0Or2M?;8iv6Zbjy3s36}!HeE<+j{EIpufE#IE``XuXH=O{8p8~@3=ofWB z$|P>tL6P#4w4I8bE`Ms~nSbL4^zJ)u1cEF0#E0KOB#->~YVfUpsvh{ZN7~_o+RzvO z@x?&eL2ufodaVF4j82f638C&9-vF^@Avxs7cN8-K8ZWr&%Hu=~BP8U&R0I4Wp2NN%2-ZKfVg$rvZR=#7_eNZHb=-062<^pRImu0L6x4 xh8aNkM-vmbB<05!!wjH!tB-4J3}ylb_&;N1SX6Loz+wOZ002ovPDHLkV1k1=F9rYr delta 17007 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 Hu0mjfvZQ3Q diff --git a/core/src/main/assets/messages/levels/levels.properties b/core/src/main/assets/messages/levels/levels.properties index 907a53b3f..da5910e6d 100644 --- a/core/src/main/assets/messages/levels/levels.properties +++ b/core/src/main/assets/messages/levels/levels.properties @@ -222,6 +222,11 @@ levels.level.statue_desc=Someone wanted to adorn this place, but failed, obvious levels.level.alchemy_desc=This pot is filled with magical water. Items can be mixed into the pot to create something new! levels.level.empty_well_desc=The well has run dry. +levels.mininglevel.crystal_name=Crystal spike +levels.mininglevel.boulder_name=Boulder +levels.mininglevel.crystal_desc=There is a large and colorful crystal outcropping here. Crystal is fragile, and can easily be broken with a pickaxe, or will break if something is mined next to it. +levels.mininglevel.boulder_desc=There is a large boulder is blocking the way. It should be fairly easy to break with a pickaxe. + levels.prisonlevel.water_name=Dark cold water levels.prisonlevel.empty_deco_desc=There are old blood stains on the floor. levels.prisonlevel.bookshelf_desc=This is probably a vestige of a prison library. Might it burn? 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 40fad1dad..dfa3b9c08 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 @@ -74,6 +74,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CheckedCell; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite; +import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.items.Amulet; import com.shatteredpixel.shatteredpixeldungeon.items.Ankh; import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop; @@ -163,8 +164,10 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect; import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem; import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.tweeners.Delayer; import com.watabou.utils.Bundle; import com.watabou.utils.Callback; +import com.watabou.utils.ColorMath; import com.watabou.utils.GameMath; import com.watabou.utils.PathFinder; import com.watabou.utils.Point; @@ -1144,7 +1147,10 @@ public class Hero extends Char { public boolean actMine(HeroAction.Mine action){ if (Dungeon.level.adjacent(pos, action.dst)){ path = null; - if ((Dungeon.level.map[action.dst] == Terrain.WALL || Dungeon.level.map[action.dst] == Terrain.WALL_DECO) + if ((Dungeon.level.map[action.dst] == Terrain.WALL + || Dungeon.level.map[action.dst] == Terrain.WALL_DECO + || Dungeon.level.map[action.dst] == Terrain.MINE_CRYSTAL + || Dungeon.level.map[action.dst] == Terrain.MINE_BOULDER) && Dungeon.level.insideMap(action.dst)){ sprite.attack(action.dst, new Callback() { @Override @@ -1157,16 +1163,30 @@ public class Hero extends Char { } else { Dungeon.level.drop( gold, pos ).sprite.drop(); } + PixelScene.shake(0.5f, 0.5f); CellEmitter.center( action.dst ).burst( Speck.factory( Speck.STAR ), 7 ); Sample.INSTANCE.play( Assets.Sounds.EVOKE ); - } else { + Level.set( action.dst, Terrain.EMPTY_DECO ); + + } else if (Dungeon.level.map[action.dst] == Terrain.WALL){ + //TODO inc. hunger by 5 + PixelScene.shake(0.5f, 0.5f); CellEmitter.get( action.dst ).burst( Speck.factory( Speck.ROCK ), 2 ); Sample.INSTANCE.play( Assets.Sounds.MINE ); + Level.set( action.dst, Terrain.EMPTY_DECO ); + + } else if (Dungeon.level.map[action.dst] == Terrain.MINE_CRYSTAL){ + Splash.at(action.dst, 0xFFFFFF, 5); //TODO match color? + Sample.INSTANCE.play( Assets.Sounds.SHATTER ); + Level.set( action.dst, Terrain.EMPTY ); + + } else if (Dungeon.level.map[action.dst] == Terrain.MINE_BOULDER){ + //TODO inc. hunger by 1 + Splash.at(action.dst, ColorMath.random( 0x444444, 0x777766 ), 5); + Sample.INSTANCE.play( Assets.Sounds.MINE, 0.6f ); + Level.set( action.dst, Terrain.EMPTY ); } - PixelScene.shake(0.5f, 0.5f); - - Level.set( action.dst, Terrain.EMPTY_DECO ); for (int i : PathFinder.NEIGHBOURS9) { Dungeon.level.discoverable[action.dst + i] = true; } @@ -1174,9 +1194,41 @@ public class Hero extends Char { GameScene.updateMap( action.dst+i ); } - Dungeon.observe(); + boolean crystalAdjacent = false; + for (int i : PathFinder.NEIGHBOURS8) { + if (Dungeon.level.map[action.dst + i] == Terrain.MINE_CRYSTAL){ + crystalAdjacent = true; + break; + } + } - spendAndNext(TICK); + if (crystalAdjacent){ + sprite.parent.add(new Delayer(0.2f){ + @Override + protected void onComplete() { + boolean broke = false; + for (int i : PathFinder.NEIGHBOURS8) { + if (Dungeon.level.map[action.dst+i] == Terrain.MINE_CRYSTAL){ + Splash.at(action.dst+i, 0xFFFFFF, 5); + Level.set( action.dst+i, Terrain.EMPTY ); + broke = true; + } + } + if (broke){ + Sample.INSTANCE.play( Assets.Sounds.SHATTER ); + } + + for (int i : PathFinder.NEIGHBOURS9) { + GameScene.updateMap( action.dst+i ); + } + spendAndNext(TICK); + } + }); + } else { + spendAndNext(TICK); + } + + Dungeon.observe(); } }); } else { @@ -1676,7 +1728,10 @@ public class Hero extends Char { //TODO perhaps only trigger this if hero is already adjacent? reducing mistaps } else if (Dungeon.level instanceof MiningLevel && belongings.getItem(Pickaxe.class) != null && - (Dungeon.level.map[cell] == Terrain.WALL || Dungeon.level.map[cell] == Terrain.WALL_DECO)){ + (Dungeon.level.map[cell] == Terrain.WALL + || Dungeon.level.map[cell] == Terrain.WALL_DECO + || Dungeon.level.map[cell] == Terrain.MINE_CRYSTAL + || Dungeon.level.map[cell] == Terrain.MINE_BOULDER)){ curAction = new HeroAction.Mine( cell ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/MiningLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/MiningLevel.java index 3b535bbac..1e012570d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/MiningLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/MiningLevel.java @@ -120,6 +120,30 @@ public class MiningLevel extends CavesLevel { } } + @Override + public String tileName( int tile ) { + switch (tile) { + case Terrain.MINE_CRYSTAL: + return Messages.get(MiningLevel.class, "crystal_name"); + case Terrain.MINE_BOULDER: + return Messages.get(MiningLevel.class, "boulder_name"); + default: + return super.tileName( tile ); + } + } + + @Override + public String tileDesc( int tile ) { + switch (tile) { + case Terrain.MINE_CRYSTAL: + return Messages.get(MiningLevel.class, "crystal_desc"); + case Terrain.MINE_BOULDER: + return Messages.get(MiningLevel.class, "boulder_desc"); + default: + return super.tileDesc( tile ); + } + } + @Override public Group addVisuals() { super.addVisuals(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java index df7356da4..34b79bb4c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Terrain.java @@ -58,6 +58,10 @@ public class Terrain { public static final int CUSTOM_DECO = 23; //invisible decoration that will also be a custom visual, re-uses the old terrain ID for signs public static final int STATUE = 25; public static final int STATUE_SP = 26; + //These decorations are environment-specific + //33 and 34 are reserved for future statue-like decorations + public static final int MINE_CRYSTAL = 35; + public static final int MINE_BOULDER = 36; public static final int WATER = 29; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java index c8959d207..1704c7e44 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTerrainTilemap.java @@ -70,6 +70,12 @@ public class DungeonTerrainTilemap extends DungeonTilemap { return DungeonTileSheet.RAISED_STATUE; } else if (tile == Terrain.STATUE_SP) { return DungeonTileSheet.RAISED_STATUE_SP; + } else if (tile == Terrain.MINE_CRYSTAL) { + return DungeonTileSheet.getVisualWithAlts( + DungeonTileSheet.RAISED_MINE_CRYSTAL, + pos); + } else if (tile == Terrain.MINE_BOULDER) { + return DungeonTileSheet.RAISED_MINE_BOULDER; } else if (tile == Terrain.ALCHEMY) { return DungeonTileSheet.RAISED_ALCHEMY_POT; } else if (tile == Terrain.BARRICADE) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java index ea9e936ae..1f9dfe19c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonTileSheet.java @@ -96,6 +96,8 @@ public class DungeonTileSheet { chasmStitcheable.put( Terrain.BOOKSHELF, CHASM_FLOOR ); chasmStitcheable.put( Terrain.BARRICADE, CHASM_FLOOR ); chasmStitcheable.put( Terrain.PEDESTAL, CHASM_FLOOR ); + chasmStitcheable.put( Terrain.MINE_BOULDER, CHASM_FLOOR ); + chasmStitcheable.put( Terrain.MINE_CRYSTAL, CHASM_FLOOR ); //special floor chasmStitcheable.put( Terrain.EMPTY_SP, CHASM_FLOOR_SP ); @@ -132,6 +134,7 @@ public class DungeonTileSheet { Terrain.BARRICADE, Terrain.HIGH_GRASS, Terrain.FURROWED_GRASS, Terrain.SECRET_TRAP, Terrain.TRAP, Terrain.INACTIVE_TRAP, Terrain.EMPTY_DECO, Terrain.CUSTOM_DECO, Terrain.WELL, Terrain.STATUE, Terrain.ALCHEMY, + Terrain.MINE_CRYSTAL, Terrain.MINE_BOULDER, Terrain.DOOR, Terrain.OPEN_DOOR, Terrain.LOCKED_DOOR, Terrain.CRYSTAL_DOOR )); @@ -182,6 +185,11 @@ public class DungeonTileSheet { public static final int FLAT_STATUE = FLAT_OTHER+8; public static final int FLAT_STATUE_SP = FLAT_OTHER+9; + public static final int FLAT_MINE_CRYSTAL = FLAT_OTHER+12; + public static final int FLAT_MINE_CRYSTAL_ALT = FLAT_OTHER+13; + public static final int FLAT_MINE_CRYSTAL_ALT_2 = FLAT_OTHER+14; + public static final int FLAT_MINE_BOULDER = FLAT_OTHER+15; + /********************************************************************** * Raised Tiles, Lower Layer @@ -273,6 +281,11 @@ public class DungeonTileSheet { public static final int RAISED_STATUE = RAISED_OTHER+8; public static final int RAISED_STATUE_SP = RAISED_OTHER+9; + public static final int RAISED_MINE_CRYSTAL = RAISED_OTHER+12; + public static final int RAISED_MINE_CRYSTAL_ALT = RAISED_OTHER+13; + public static final int RAISED_MINE_CRYSTAL_ALT_2=RAISED_OTHER+14; + public static final int RAISED_MINE_BOULDER = RAISED_OTHER+15; + /********************************************************************** * Raised Tiles, Upper Layer @@ -348,6 +361,11 @@ public class DungeonTileSheet { public static final int STATUE_OVERHANG = OTHER_OVERHANG+8; public static final int STATUE_SP_OVERHANG = OTHER_OVERHANG+9; + public static final int MINE_CRYSTAL_OVERHANG = OTHER_OVERHANG+12; + public static final int MINE_CRYSTAL_OVERHANG_ALT = OTHER_OVERHANG+13; + public static final int MINE_CRYSTAL_OVERHANG_ALT_2 = OTHER_OVERHANG+14; + public static final int MINE_BOULDER_OVERHANG = OTHER_OVERHANG+15; + public static final int HIGH_GRASS_UNDERHANG = OTHER_OVERHANG+18; public static final int FURROWED_UNDERHANG = OTHER_OVERHANG+19; @@ -399,6 +417,9 @@ public class DungeonTileSheet { directFlatVisuals.put(Terrain.STATUE, FLAT_STATUE); directFlatVisuals.put(Terrain.STATUE_SP, FLAT_STATUE_SP); + directFlatVisuals.put(Terrain.MINE_CRYSTAL, FLAT_MINE_CRYSTAL); + directFlatVisuals.put(Terrain.MINE_BOULDER, FLAT_MINE_BOULDER); + directFlatVisuals.put(Terrain.SECRET_DOOR, directFlatVisuals.get(Terrain.WALL)); } @@ -434,6 +455,7 @@ public class DungeonTileSheet { commonAltVisuals.put(FLAT_BOOKSHELF, FLAT_BOOKSHELF_ALT); commonAltVisuals.put(FLAT_HIGH_GRASS, FLAT_HIGH_GRASS_ALT); commonAltVisuals.put(FLAT_FURROWED_GRASS, FLAT_FURROWED_ALT); + commonAltVisuals.put(FLAT_MINE_CRYSTAL, FLAT_MINE_CRYSTAL_ALT); commonAltVisuals.put(RAISED_WALL, RAISED_WALL_ALT); commonAltVisuals.put(RAISED_WALL_DECO, RAISED_WALL_DECO_ALT); @@ -443,14 +465,19 @@ public class DungeonTileSheet { commonAltVisuals.put(RAISED_FURROWED_GRASS, RAISED_FURROWED_ALT); commonAltVisuals.put(HIGH_GRASS_OVERHANG, HIGH_GRASS_OVERHANG_ALT); commonAltVisuals.put(FURROWED_OVERHANG, FURROWED_OVERHANG_ALT); + commonAltVisuals.put(RAISED_MINE_CRYSTAL, RAISED_MINE_CRYSTAL_ALT); commonAltVisuals.put(HIGH_GRASS_UNDERHANG, HIGH_GRASS_UNDERHANG_ALT); commonAltVisuals.put(FURROWED_UNDERHANG, FURROWED_UNDERHANG_ALT); + commonAltVisuals.put(MINE_CRYSTAL_OVERHANG, MINE_CRYSTAL_OVERHANG_ALT); } //These alt visuals trigger 5% of the time (and also override common alts when they show up) public static SparseArray rareAltVisuals = new SparseArray<>(); static { - rareAltVisuals.put(FLOOR, FLOOR_ALT_2); + rareAltVisuals.put(FLOOR, FLOOR_ALT_2); + rareAltVisuals.put(FLAT_MINE_CRYSTAL, FLAT_MINE_CRYSTAL_ALT_2); + rareAltVisuals.put(RAISED_MINE_CRYSTAL, RAISED_MINE_CRYSTAL_ALT_2); + rareAltVisuals.put(MINE_CRYSTAL_OVERHANG, MINE_CRYSTAL_OVERHANG_ALT_2); } public static int getVisualWithAlts(int visual, int pos){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonWallsTilemap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonWallsTilemap.java index 750fc9a66..ac5045fd3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonWallsTilemap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/DungeonWallsTilemap.java @@ -84,6 +84,10 @@ public class DungeonWallsTilemap extends DungeonTilemap { return DungeonTileSheet.STATUE_OVERHANG; } else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.STATUE_SP){ return DungeonTileSheet.STATUE_SP_OVERHANG; + } else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.MINE_CRYSTAL){ + return DungeonTileSheet.getVisualWithAlts(DungeonTileSheet.MINE_CRYSTAL_OVERHANG, pos + mapWidth); + } else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.MINE_BOULDER){ + return DungeonTileSheet.MINE_BOULDER_OVERHANG; } else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.ALCHEMY){ return DungeonTileSheet.ALCHEMY_POT_OVERHANG; } else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.BARRICADE){