From eece33925e38520fd1f6ded71428c6c57cb8328e Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 18 Aug 2018 14:45:17 -0400 Subject: [PATCH] v0.7.0: implemented more food-based alchemy --- core/src/main/assets/items.png | Bin 16857 -> 17037 bytes .../actors/buffs/Hunger.java | 3 +- .../shatteredpixeldungeon/items/Recipe.java | 12 +- .../items/artifacts/HornOfPlenty.java | 24 +--- .../items/food/Feast.java | 104 ++++++++++++++++++ .../items/food/Food.java | 36 +++--- .../items/food/FrozenCarpaccio.java | 12 +- .../items/food/MysteryMeat.java | 10 +- .../items/food/Pasty.java | 32 +++--- .../items/food/StewedMeat.java | 79 +++++++++++++ .../sprites/ItemSpriteSheet.java | 20 ++-- .../messages/items/items.properties | 23 ++-- 12 files changed, 265 insertions(+), 90 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Feast.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/StewedMeat.java diff --git a/core/src/main/assets/items.png b/core/src/main/assets/items.png index 71d4d1f91cf06ef897700748e648f1c26c79d1f4..0d431364c56b90dfc56caece167dde794ce9b8e2 100644 GIT binary patch literal 17037 zcmbVz2UJr{*Y2c2s6i2_5>NpZDORK=f{Ka=3X0MKB1#8AL|PJ%^4h=(C|y*f2I)Nk zUPVO(={-T|0SP4#NW1a;oU>=oo;h=7_Uw6P&(2-zv*r?_3Zei2 ziBl(!od*CSAfW&$BzX9~EM)^=YJ2L~QQO;)xd!29jy=zrxTo=R*e6myHo>7?56;NB zmd2cWy6>QVisoapr<>lnA{F*Z$q)W@b)b~*vXA2#O*yKv>5Y24{Fu_t>kgSM8|q`r zJsGZ~;J(YG+1}8qf`WYZT*YeGqHP2@av_rB9P&YBci@T0u<%#fQxzJk-mkd_N^L#Ecek?tn;vwZ4*RBN|=O8W! zYk&WZsPCR)_SifbaQEfw{U$A(sawItn@gsIhzI)z72W-1q#38KnAn*rnpwY;1JA|@ zdfF&p$g!MhahNk@s8y-NS#HB>bbZ{-K9U!~_CfaAJgSw5_4$1CwV7%<1so7Y$MUc=3`|KNZC zmeZ{XoLzg|z8w*rj}EH>ac0X_@TEA$ah)+Cgyk)3(7a8-U&55Xp0!Y;!KZi(ZWa9X z91X6#cSX_y2eQ8zJ=!_8U5(}+3FMkjKU@Cp>M;j@Ku~_w)*;HVSWAWqcEMHP~>SDxdtIvqFPv}% z`Dw~O<0nM-Yaol?uaVZ*HXQN}mh~zBI~-HTEArxc`sr2j%8UIQ9Zh~~tdx&_e0cPwHp9Olrt{?-)?zr*kK!p(A;1PlOqlhippljL(Pasb<>K-Z8BboY;TfzdbW&z zrKzD2<_?k35*H?P6pk5otZ{^BE3EZh!YD|d<*Q}25xB{h76NNdJc_<`rJ-#?Fo@d8 z|2&GnUpQI)f|vn{e@ z*75a-zOcag@rRy!#d`aOKDM$)(`EDn<}T?+E`R$sZ$oiw!_GRT8%;%ZO1FOY987xO zIC{7jWfY(>>F&e4;knl>vcXpd1!Rx2>*?;Tx7>qDXa!a_pF*h_6XRzj5Fvb8OgMwgG*kF$TaguIgnw>c+ZfbB*6 zu*-?hrt+Nu(=B|h&&2J_rU*u9hj`R*#?hvrNXrZu!+y7L>FFFZq){;U zMza*QoygwO1M|5bY)q-Fz6dT;{E9 zfKh6=r#Uo%?^&E13_OB3R`hv;e`lh=7n$?PVCFW?sa@sW^$R2zkMht*TqOq{Tl^gl^e&IwM-p-IQV+m3{ZwYNnxv2dsT^k^F?N0WY8fV>fM@(}BOnB2sz z8vFd>J>3V!_RxaAajm8M?6NaN>>woX->qT)np|@Ouv$-2-o52+K(m= z8OMU;^#VMDGMg8ECYQbW6njW&42M4zdjhz4g*L6LJ`&-(UNCQ~yu;9KAYXpx@W4~E z*?;w}A+*CZ;Qhl%-f^Y^zSphM*?5dR^ETB*26_s?wDF`QdbTiUb32LXuDDqd%tG30 zVObrIYF-M8a0G!Fk+Q1htIGiKD0>F~+Q54#d9}xvHmI5fBN|Qvk0GhQXszWQ`WM;- zhOy4`zC(bJ3FvH!6>foVwegj>;o1{jm6#qgF5J+ z4H7hi(vC^U!A$WA+7n>J?VKYBHK5dW1SB}G=XV&xaFYy`ury>C95U8^L~)OFC0(Id z3b}73#g3u36?kw}f9Vn-*mrKys~_&mTFgaRpp-iSjYYnN%3>H1i#1q_Ms&Im`1&3* zRt5gvhk2V;1qZF1ltAUmhn(vzbn7Vjqz&DDf7(lCJtlQwJcd}&O$pm?j-0wpi6BAfHMi+xl)`<<ioUo!Z$ z{^04AZ)i!W=B7~7>3tspU)*85=6)P7RS^Y5)Qv9yFuq)dWF05YY-e2n9tcX&tO(&% z#(9WKk|-#%1u1W!M1>51JP0EaAgO2JAUmO`*V7zA(Z(o!>zWlQ3x|HQzEl&KEfsd= zy-%b`5b_;R;iO%O>}rR+yI7x5gUewe5l;R{P-_c1XQ(Z3Mk5i=Z+@xAlA9)zt&5sQSLXU+MW{*So7Z7$Uz5(Gr~&*Skj2- zux9`D3!%w*fmwXkvO;D=N%CrUctc;Efh2yWpimhiMx5%+t?4)-O#sIB??djx-S!#FqL@u$g+ z#zvF7KE;_K?LC`oL>8z$y$q|A5?DHG^E}h5QHrPeF)>$570YsOlRw~Lft13_6F!_h zXhvD#txY?pACAPw@P{=&b|p!vaF%}8X?p%665*LmfuX30yG;dh{zqK4)!LX+WLm##VLRlF6Os8B1O#!2{r0k@{?Az1o5-DX5&qYz;^Z7>BeQsH zsQ?}q58Eh5y6xBo{T$ZJ=QtdgSd>ldRDD#a!Lhx8?A|h_!8&NBa@mSyXB-;K*|3P0 zjVBh&!-x!ZD8-qS?2Q0pI*K5M>;t5Dr4TI3LP#+DqTo!M5OEgbA}}t^3xdT90 z|I@7q0$LfVP|(W|6k3%51{8VbXH{T^9SYlQEx1ZP4J=Rt{!L2s6i9V2^cJ~wCz{+T zD{dR^lq8(cRit3#3^{ni>p81Kry5581EBsJr~W@b9`4?yXQ4XNOD6DnsX_G|-z#j~ z6anq-#g#)c+VQK>p(~5RuTP<|S=8IVBtpkxW#J!}O5NMWCz5eVZ!D5e-*1co78i2% zgI8<(P7588NyQQL&p-<@>cS9}s*|?nMgjctuCSMj5IBq3hm*x(LVi2eEPpqgXv6VJ zheN25(K=#uzq4a`4+klw1y#f~Q?a4hOXxBZZ66hgs_(t3l|6FBY1c&t9_A zrQT&YKxx_W%A5NKe=1(0pJ_IYp z90jJ38Tbv)xdY>nj;^j9$f$FogsgdnVs;ym9KCL-Cvzsq+57}dH}C^2SZ*vA`ryud zenIi(1lfxByqDg^k2Oj4rI)WK$wPCBClZf(UKg1B@p{Q{nC`3NKyv7007Y^K$2My* z`+ztwN_J(--!v>-jKU@+`C+gS-FZ<$y%sP{p_AScXp2YWVj@@tqMBOQVR5Wf66u%78E47c31 zG+nJ>bS@EnseeKIz)0dYk8?ja9!wqT;||r|8K2P)Kg|zyC^LD`OBSq<7)euS)fAe!yjF&V@$H;L5xoE|#&P`a8G+=VXhq`;K*9?n z^INQO)rwiz(Z0#+S*tTZV&a?XCXP6ud#7LsCUmdgFb0nq$)Z+=@b_?R+-J72zXVmy z?PwpaP8NkobF%kx4B#h_oa}QfSuOjWj^n6914 zq^w<8hyxz~HthWtUe@KLXsVb&AA%lfD zQD>XbwR&4GtwB%tz^nmA90Xj~D8!KCT+THR$6^RW-*OvKJgS*S<1WJeP)uE*2&<>w zOZ5Z;2j9*L5XW|FRaQL9m(_J-kjSeSdj^Bg`FmAs8?NTO8f)Eef{Jqq&lvHAa{4ms z-CwkJF#6#8m6vlSggK-U;|mPMklTVU_+-;Jub${^e5%nTNMn8WjkH?hkQiwbsRxQ# zJJm#B6e}X%nlBhvro&V^^ciJIy`V%G>sFVY`n4C+vqKX`E+*|_eZwSPL;lU^@|6eh ztPc$Dj`NHIVAP+jH#pszSnrh<;7+a9$Z|=mDcm zd5Cbyr0!Q(=SPSXO*Vt|OgtE74ae|pOsc=xx<#M|k)!D41qj2nCU@{BHF)(_V5_|Jc#=(3QtI2p*95nBRW#klHS}rfD7&sLP9)+I02hDg?YjRWcFifLd-6BA)_oqRrfWcOG&iS33wn6 zg5EOjEmm2$iqWNjyu|D5eUs)@Xe|tlRJk$q>09oDWW`)xwOXbIr+loQxD`gk8H}~w zw(hC&M_#3%fLB8J*fHYym`u9_UEJDc#?%@wd}e^@AFFCT$x6qMhrK)SkbQw6L$TTi zAJhda=oo8Nm&Wea;FccP7-aeD!|+!VtpoTpM$4Z*6sRR`(sqoj>T_9_mzx*YF6M#Q z22F=z5+QL!1o0SM7%_PJ%x;!ALj`)n>2;!~LnK`QFTh#R z=8NDUr>5!kSl@Pr#u8{cbA_Z9n+(2=4y@AG$F&Jr>5^_4-AmrmMRU!>20 zb*JLuiv(hJe@)b6AaFcdBcpOT1LvSAXQ?lx&Bra~MH2Y;2Q1}fC5_l&4O6H*_7CQ5 zbl*Q+D2 zM19A1*XIuGhfyXN1ux~oWT3sypedey>x~TOgI?xARlraZC&rljfodh5dJLAh@8-L$ zSrhS33C|wWr18A(S@ICdh7irpcvG@BoOcu{;b#EvOoV_8Lz zLI20F-{_io!K*~8tVW!4x0$jA!nVeNHE%fn>zaRUUP>{$Agop%0)91YzWue!E7C!T z*e1gZ&Ai(zC3l*|49F7ad>|au!qR>V4ahcj;f~6JBn}mZi zw8h)+#qeUZzzTmP#hqq#a}kz~A~iG$Hfd<#kB#qZM#n-b%9`tUJ4Mf^)%g$HM!xeS z)IRq&=6n+c&_u3h?`&9df!5g6epBGL6LhDL577Kgfd`|)P!%{zlGhXJ#98txT1CRc z8>fl2o8Dyuj}C1+_B#>&t(qP5Z7#|2*k;Sy#c!#6%-@jfR5J4mf0!9amzh4ht~|Kz ze;R(9@jmEHM!e8YHh)O38=f##(IzS3K_?3*=MPG3ZA^T?4=hY_c;%w6EF>iKdR=!Q z(bb^B{|@`Q=1TiUS_IuY_e-bU!ZTi1?nj%#__larm`z))Ze&PyFAm8zgxiwhi+54bK>Vl zZ%ZbREPh;6%Y)m+KWubP+7t`Qg|;&lW#X`|_lv`{G}3RLR|2!-%N4ue0cVMj4meA* za32MAxt1Sb!pXn5{e2HfMsyyI@n)=dcoDe%Lk6OF?W*lybI9w?ST+o=t;rfoLPChH z*amNWaXlgzAme})I2>kYE zbN&fhDWgoyd|TnHf+%EuMK}dPzNo^HN^(GvowVQ>F`hj?rCge3UPXS)9V!qOw9lsF z@R&KaNs_P;fmKXgf12q8<(&0g&+B;0uu)pB+RA&Nj8)|XnRGJHefKk*futR{ zG*;y(G7VU&-j?(+yI@}l^2U2>SMawwCkdRSQ1^LVC~%9%Y->&j7;i%{9>?v?8$0Ov zU!KhidB-th)J12SG7{4S|rip}JuxAxWUN^3Mg* z(EYEs>oeNPl1zC9YED3+Z%l^l6y^o12U|#Ty26D7^!iZyb0t=thUFtAR%^mGO?^h@ zk0HUmJrhHk(P5#CIhol5%u9S1*!P8Ym4aX^_Gp2La zi8mqe6&S8mqDaehL0>t|CXJ5A_pLJp?gVZA(jQJNTG@YgF^q&BU=~ZIqLndN(%Qx* z=Y`YM_60#53bRfdc>Euh!@`nbL%pDcV3R2${ynenOM%rwGGAH2?qcM96Y|Qh>J!x~ z{GFJajWJRld&LeOVO<^JdmbiyZ0hXmQY*_{&JWUx3?u$X_(eEZ0fZYZPj8Bxo6Bp;gv6ipiS$ z{d;olgj@R8lznCj5|2^eYH=Q@sB>^ka7zyVqZDOJ8+1mneQt$Fy?|KDK^1rcXJ1== z=<@52fv()D%vz-Y3!{dWAnA!$kr?&kLpQmGR)tcm7bNoTf{R5@^zban2cb3Gd_q%L zO0fOWcMHLv+mByu`kCzdwe22V-NktC!%AAkSnmC?Tu6jZp&4-b!lgIyqssj58aJC! zWDbs7D}h%nuDQ;4VOX<-^?n1TgT$EnA9=;`hgrAZ?PLZPOp6!h%0XB@;7 z6eA=d8Y>4|fGQAtB56Q~t+~|ko}k#0=>CGb)?}Yt1*NIe4mKKocT;@GEF>ZL3hXmE z#_$tSrb~@R`Ysb)xRsl$GexcpCZJzdQ4CJ z*){r+dPF-x!>7EhTZph*^HFM4IOlVcw1D;%haoX(8;2Z}piWMvtoOw{a6F=-v% zteT>WKnib)qwRt_?l=qwdN5)G5T(C2M!0CP6t|hnHW4P6RedD8DcFh>Hj!QNb06jm zYacb}qr607I>b<^h1{bN;ucxTv{NPS9?NA008!#gmjeQ%6o%m{fNEi4Jk|wxxJK?! zd8bSiCB}%x!KODU9pI*2Z4d>jcYCDb26(*%7-r>S4y@mXWA{f~ss8aL z=<*$0j;xf&HgGW8iW%({OGH6VB+3B+K2!Z`3rB7(6-w)M@GlyHo!q4lKiRz>e#Jp2 z6TKe@KZpSFE;<&Y9E4)@V2F~UfGtbaiDNRNZy zf8Ny)Hzsma!3R~M0zWkj%<-1tDoKhnkgPh?^0Cag%nmn0CrxmBlJMc4jIQ9MO*0bF zYy~~93Fq5}>xk;JeoU>XhWDNqx@5rHsg zigM^fThwts6N+U7-*y=nzKclR3|9Ldd2l^Zz;0PJ03m@l0Hrd>5N`qe2}Cp(k9-A0 zd63e#Y7ynTHyPFRl2Je7`~U1y`i}x$52J5s(htl|bK0|(=?=`{^2=HrUi9j_J7oT= zZL!+0Y)4(o>HSRU#^r5M4{=y2eN);({iVl28KLTQaAe_Ky!+DM2VVPdzdYAOp_P<| z-}`XyXb?^~*IdniR|JER4r8HMjr5MP4vz49LC&12z=G z{Fmq4lqCKCxr1N&vCmM9{*bYDaSRjT;zA2Bi_D@nEV+cver*`P+qJe=mO^-`jT*Ik zT%1_sm#@Jg@Rl>>!DQH`qY|`u3kZiBf0~5SEkOv~jGVG_3F7jx{C+pVx107(IoP?xe^P|M8%E^+5Jo@ywm{Bg zUSk!|P7w%Xz~SjoW`GNK!`uJDNQl!MZYwYL0&D65uBE<|feZRD5$JVfQ_@%*c@M|! zTqI4{qK&*d=q>iveU=)&(4Ozda^QvUX+2id*kbj4#4ha62 zJ)E`zl51#gQ+pCR)9FMTiuGfu3eLM&$&n;nYqMgsI^VjS+f2?E<$sy=zBCZUC>u%~ zEcC`?ncaD_c`xUnzVP!v{bGFoR-%v4iT=&_~O3W|r^>R+fwC{S}BM4^8ep)<~ zg42oV6d)8cRTzGk?HGZyp)jiHka>e))-*hC$DG_p&euy^ztCVXnj zz>07#@?R&o+Q}gk0${KWpO;Ta4_^MgUhMPSj=xZKy~l2&ZfQ0|G5G?9McBEpp7`>` z1@eXCrL!axo_FX1pT{fQ5QH3*&fYlQ;=CXVG9?R0YP~vu)&+ZR`IQMWl`nO;6_Y@O z!Oa(Rh>6o=MhMZWef?t=cO7EFo$(7YrsTF>-1sJtH1U{nDHdkkq)sL3^}!-)b^0^W zf@;J!C94`!XM|WKE*W$!CO~UDpcrGNe~8Og3=4r|wU03+zODB^iJOtgfSE8NN^#bS z!x&$`v6LBvIb)9gd9rv-aHxX7-#%mc)ot6Pd4Qk~8Y~Dd8?bEye-Kr%R7k3ew%ZW$ zAGr@BZ~GlFf&aiR+g*XV0@=R0{|YGi4;vX+Q!D0k!Q+!iQRBvJcARE~&+XqX_-}VN zwi?BqGBjbi_(y4eIiQa#x2!qeyPiBVSZcBs?(J(FMfEBB7IQcbn}sR=ek5FWx%z~GM4V$)Q<6!4_}=dxYg@WJYi75TXv(rr!U64&zn`DC<4S-2JnL%#${>#<_;J>hM3mN zOg6Q)@IfDltJ{T#Bd z`5GDyJXm68F6vQ}2mRLHpS{zbw~6B!(>e;R3XViduRRh#PnfO#e0f*-gadUW$tBYs ztXZWH!)7k~J~YiyW_Rb~R%RC8X)p%g$<93$C-z))@FiBlDVPTs!3knv*`!eH3CnYW zmjolbMTv6wuVp>C!N_S>LD{6-$?u`ULq^uszt zZ&;uf4!auvpfmb|lIn+rHK4>IliUHpu_$4w#ctx8UdCg40rXjoajIH9&i=rNkE}}C z-bxGLE$z@)ihS@_n5l3_xd>Gd2lEtOeVn-t!Dh|aGg{fx;GHm860!~W49KuG$baGxoX1t5F0e^eaEUN8eKf?7g^NnydW%{afjzx zIOh~e9`dVKe;BN=UBcR-$4(Mwx2KM@gZ=YTLG6!?K`AemOVQRoSU?;otm97tYaVaV zyKgvdFwBkrx30=Gz*-R>c{A!-6Je~hUU6{i2Y*S2cST_=-o}jB4{(`s-Nr<9VJwl* zFuwgo@WSz>^~N0^0%fw^RrIlEfJ%fz!eyt*OKS@*d%cMzU)OXSX5aQ?)&wC`^c<~N zI-^C~gHT1EK0J@3ABs_D**jZ(62bV20Etyr;+zoUmuL1bkg}dAL!nxuT&MimMndoKeB{VVV#!6COy)-I_p zg45Mg2ugO(RQmorFKEiU>tbhb?~~AYh0yCJL@HiBShOA1nmSu?4|1j;nCZh6oWe>% zpvBob(dbwa)>Bnt>krkeJAmfRy8lPvQtg_=qgGB~AJD6YuliCFLeJ4}f~%`wX)Jet zF*F4V7%t9aWhX0^rp@7}Uod{%)`BQUc*t+xo()gMD^6xiBH9>G{7DNO@X1)@B;sY3 zY_yfx-QO68^%HTBfCe1s+*l75Y;iWS@9*h62}<5v2h+j*D1k$98>qxVCtIv0aEOx$ zW3H7M^?#q339IA~skVuN2!ao+ZCE#_{0s)UqVNi7VO$j}4JC>O7ajYw2|5P}NIx77 zHgN)08$hivmf_k1lUoXh$N`IFyylEB>5@v}w|HDUapOmOhZ91@s7rM0oS><{2xp3z zF|xlxOovYzn-Uqhvqc(XlkJ%#a^h-UpTH;@>;PZA7#}lNOm0o_w;VAu0HfgxdcjUx zKn=s@VfkvwODkt{tEx0JyTpq|#fbig-8qtsA$r~*V{EU{gUG>(Mu!@gk-sj2{)aUp zkVk^JgHN%7W-#^m>mj<88H&XEsTky@K8)uy|lvY8Uho zu|?x|oz_~00>V!d>pHF?y;3IW>YweB{^a*h7(RtA(in}4 zM`8C$=$a9i^_hYbCi=wnX2l`p{SvY7>Tn0Z5gw^e?A<;%CGZ9vCj~8Gj;qnXbeE|w z%I&bywiCw>cgn&+Ri4UUP?ddfz!4{I`8r~ZexiB(K`fIuBUREvw>OKNYMc03ov9&k zns0tY55`(EFeUPD|Q<; zFVIBA8}$#as%0@W8LI~fD~Y06^7Z$2Fb;A6O$WC37*B#yY8nW65NWdn!|tC^M>`2s z9{_gXtrXgHA+;0@&fnbeNZBIn`@O8U@SO{(Z_!{llfRe4BZ0+l*c-?ZX3f6i81VW= zc?>yavmg@wzx}bO-psFwXv|neSFt~_5`X-FukC<$!n;r^j{D35`S6}dWJ3`kT-}z z-)$9ox}ZG4@)ki*$jm-uBzXCk@>+HF5{HoB*lS>~$4JfRPKFN^D0?LqR8f0K^S{fu zJ1Pp_d+{ec8_!OV$zgo%5#DO<&*Xg0%eAHT_`9;iXu~LI$>w(wS$Q9+N(CHVazNe| z;oj5eXOXu@a=m++(GsBHud*tLB8s# zZ=Ve#gcZ%tW<9g#oPR@QdvQBiL!`CTs_zR`BYbY=TeQ!T7Xk7Ww~g}IpZZaOTn?`! z!#SM?CrNkEdj@Sz->3Cmn$ffLWy|pK=&Tv`n>V%mxBUy*p!xID4Z&BSeN64uzgaqC z1lkb3E2?MLi;XD(_n2t6v|tMUY51StqqL-_g83IsSjw>aT&6?aUw3!zy?}A@dS>M6 zx6WYM%uN594e9m!IL^;+PcrCLfAS9B?aewIdcK{@TD)VKb>g#n3IESGRh)5|EfeGi zJe|^bPyWL>F1?G{A?V)z@oy5npU*2B-Q1PE&*$9oLfy3_d~oNz?3j<|`JZ*3fPtXzMIgu<9g{$s%E3%vyMx%qk{L<8BeS5L2FaDJi;Bz!=F3p z*RKgmS#X1{H|SW9H-5;f4IC1}pWG&jU3y&tpoB{x3ZqS=pk=YNL@^acD?*C(3yS32 zfWUdxf^5e>*&q*@z;kXqo|8ki8($k+yT>u%I6tPwQ#F^^jPT=lG@kTnp=Cj4J(AV1 zos9YqAxn%k*a8rMw`KN=CP`^`h-l9a!Dy(Qzq>Ih7@R*N(z%P-FX%E>`}v{Vyw{UK z#w&se&MWI)4fW!`n8j}_{))f)bXu`n-D>vF$kAF<1mlY&=-!PKSb~MIi!OZEtl}yt z8wCq)km)DLy<0A#@LI6j{1K~Yq1iCa627i=pF&gN)~Ihn+_2OaJ5;^+0=gvJ>OXN*p4~ag2Aw?6yKCWJ>vKmV2W>k zLQ6{8ak?ev_Gkk!_6{=pX|KE_~{=vTJSejyut1+Sw4)knQ&mmS?#|B4Q19-vqMBVQt`MYxf?7qf*g;6j>9nG z$50$s7VLkQjKMI>&Uc^)w2gtp^PgvuqfM&5tJIy_v!pp)rXg9X_+~p_cRGmfu6O!4 z9udhlYkW4cOJ-eWrLK5*=fA|*^Sa6Z;tjMm9{3k8wJ_r9tsL8NyN+N!Sx^T#8qdhT zF!1pFW8Bfq^z?7|XIC&g#p>)_!_~#=Y~E9wf7{Mgl^DvfwdT%#!2frw4b@X7theXM zV)*O-Hy8htU}NCN6PWye6zt!(CpJ_rppkJS1X5Vy|AuPk0vE^1aI1!21xO0Kd{*rFzmM=aoQTG`(zdza+GLfckTI&u9S*aKd^SfX>LR(hc3}hc zp5Zm1EX)2zpWy$p|Kwc5@9hj2!1Nj%H&>PA>7)hu@;27+uYM#G&yi7DP2`PgiTb&k zvwX=|{-jMMQ>|n6o7h*a82q)PqR*1Z?2(0Q3*KTp8|9n+q;to0|8Dl4weOy^W4tMA zH!;-9EX%ZkHtpP?4fS`&k8*1tLv+_m62p|%wK!@B-B}O1S)c9DrhZ}S$G0XM4d_~E z{*ds~*aj_@^VDzl1Ep;bNk&&6MyzLhj~7Tf>>#YVdpn4nJSX*}xtQiXfLW#6_YXxc zR1ECs`!W5jYGJW_|fm8ql*b4@QLQUM#M-0=N#mcN7-&9xq0L#YMi4TG4{hQ zCo~q-fa3J|^XxAH6Pg-Z<&Y>gN?U|nlzXE>ZDSz0Fx@}why8kKEVO!>!k#MFdYbkz zwpFh_KP8RNo_FGDZ$~p!dt?cW(+!Q@bk8WOw z{@sk;Ldn-szM#Y_FY$q_@&=(LF6%i(7zOVL>Q~Kg-n%%r?xEvw2J_LWrBr-hl<+RpVa=G7QYFow{KK66- zgnLw3@Y%45gvmosnyJrF^?iy723@j5gyYa$0WrCo#SF}{0$YnwVpFL5)zy6Rj zc9R;>tGxC(Svi8wnTag}55s=Du}5{<{et2nKCXs*LSK^8;++4i7!@Q|+QqLtK-|Sr zcOcJiIN7Il1)qG9Fl)kjgK$wjeECvjiX#2Nugu$!lLkd-8J-w5^2TagBiOt0hMo0e zwdE=zE5Kp8;br@whFrh!_=qpJLO$h=yj}CJkXk8Pc!VkcR`g3)_G4F-9c1rb9V6bf z;^F-Q1VbJ_^+bl)?3=yjWir*`U%EM^lWCxq6;Or1Es@1d{(h`JXY~Z(9o$rwLt5V0 zY+Y@qh&R?)pSMeX6fS|ji5XlTEy$^h4Zk%MOVc@tv0*STy~(=KyNz3rz|m6vM*z=v zV$4sIKOw;9t4G&Fi?h#f86WzvP`|bO8sm+&-loeP4X@@C9ZVaM^_+LF9z4KyJfQg&@?^9sH|^i*pKjp%?X~HqPBQ!@a~4uac-~FY{}f$*0Nt> z^Ld{zpSf!bgVH>AF@*imeCrR7344MLhk`8LClugrHxcYD{ofBoh+x3NWx(-`P{vp- zOH_*zM9Wv8B7zvpiR6Ji=0ZP)GlnX=`Rk$H>6T#X%3Hmji25$0^ayip*6W+8D`heY znx-j=DP#|>6{^&e$NEjM$Rx91mtVnMW}Eom_577~JCL+EQyJmK-TI#zeY{%ug+sPM z@Q@}{d)UjSHH7YRc^1);bv?n!T~H>hDbsK*a-CsU_$01vD?YsVG7zngrAGUA%46ff z;rqGO;QS6wd*B`;*vYAF4UvtjTI_2-#w_0-+`ghNfH!iy7L;Y@t7n3L=rn$A_E)$J z)DhIH*$ehS?>p|1T0`T!#ocyM%0C?Qxg}c!Mv}a|dpxIEM^qaT!8#PCzYqgT7(Z8T4pTttX!)qN4SUVaw zIg36(5_o67*hSJ7;@Vcz#_OLVb^)#MLsr~KMrvRmcPrlJRLYZP|Jn243Hdi}>?*w? zmd|KGwck>=wta#xI{$AePr|XXJ9uNku?zt{+TC zkv|p_OoI^CrQGpmoqHCPv-}(e8|tweg2-gFY$>4__6&>XFhW*X2Y_NhqidZ(ylbj#{VJ#q1Vo5<)Og=T5G1BGL4?p6u}YY(;6eYwCuMXUULc5BG! zf%XP=f5gNK|GD!}Pkt*uvRErhFiX?zzF$4|_jq#AOGgPTu^Hb|?L6cVqh(R3htIp>pYBDXDC-l<%e zR@{U)#;+x`TSJ~b!wzn!-q~9m$~}8X?a^yr<>a^~%zUBZuBZu-u_|{`^yZUKP*kR1{Zt*A{iLW4!L9dpw^#c@DI;HY|})}Oa#&l^=+Ws zcs+<3cYw4Tf%6h`449`bX;5Z2dkkx+SXarFAMB-m^*1gTX-(v=)=jP-4HE93{X=+G$lXC-;8Xbo`;Gy ze&)!iVIj7_@wDyOZ|T2U(9ehmzk45S)`6UX+;iU`-7x%bHIl*4k71UW*k?ljh@Lur L_E@p0OZ5K$pea|* literal 16857 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 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Hunger.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Hunger.java index a865fc161..259ab28b8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Hunger.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Hunger.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty; +import com.shatteredpixel.shatteredpixeldungeon.items.food.Feast; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -61,7 +62,7 @@ public class Hunger extends Buff implements Hero.Doom { @Override public boolean act() { - if (Dungeon.level.locked){ + if (Dungeon.level.locked || target.buff(Feast.WellFed.class) == null){ spend(STEP); return true; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java index 30ecfa514..63f312a68 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java @@ -24,6 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon.items; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit; +import com.shatteredpixel.shatteredpixeldungeon.items.food.Feast; +import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfEarthenPower; @@ -130,7 +132,8 @@ public abstract class Recipe { //******* private static Recipe[] oneIngredientRecipes = new Recipe[]{ - new Scroll.ScrollToStone() + new Scroll.ScrollToStone(), + new StewedMeat.oneMeat() }; private static Recipe[] twoIngredientRecipes = new Recipe[]{ @@ -138,14 +141,17 @@ public abstract class Recipe { new TippedDart.TipDart(), new ElixirOfDragonsBlood.Recipe(), new ElixirOfEarthenPower.Recipe(), - new ElixirOfToxicEssence.Recipe() + new ElixirOfToxicEssence.Recipe(), + new StewedMeat.twoMeat() }; private static Recipe[] threeIngredientRecipes = new Recipe[]{ new Potion.SeedToPotion(), new ExoticPotion.PotionToExotic(), new ExoticScroll.ScrollToExotic(), - new Bomb.EnhanceBomb() + new Bomb.EnhanceBomb(), + new StewedMeat.threeMeat(), + new Feast.Recipe() }; public static Recipe findRecipe(ArrayList ingredients){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java index cee2fd40d..4f41d2407 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java @@ -25,16 +25,12 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; -import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit; import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -87,28 +83,12 @@ public class HornOfPlenty extends Artifact { if (!isEquipped(hero)) GLog.i( Messages.get(Artifact.class, "need_to_equip") ); else if (charge == 0) GLog.i( Messages.get(this, "no_food") ); else { - //consume as many + //consume as much food as it takes to be full, to a minimum of 1 int chargesToUse = Math.max( 1, hero.buff(Hunger.class).hunger() / (int)(Hunger.STARVING/10)); if (chargesToUse > charge) chargesToUse = charge; hero.buff(Hunger.class).satisfy((Hunger.STARVING/10) * chargesToUse); - //if you get at least 80 food energy from the horn - switch (hero.heroClass) { - case WARRIOR: - if (hero.HP < hero.HT) { - hero.HP = Math.min(hero.HP + 5, hero.HT); - hero.sprite.emitter().burst(Speck.factory(Speck.HEALING), 1); - } - break; - case MAGE: - //1 charge - Buff.affect( hero, Recharging.class, 4f ); - ScrollOfRecharging.charge(hero); - break; - case ROGUE: - case HUNTRESS: - break; - } + Food.foodProc( hero ); Statistics.foodEaten++; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Feast.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Feast.java new file mode 100644 index 000000000..ea35d49a4 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Feast.java @@ -0,0 +1,104 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.food; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +import java.util.ArrayList; + +public class Feast extends Food { + + { + image = ItemSpriteSheet.FEAST; + energy = Hunger.STARVING*2f; + } + + @Override + protected void satisfy(Hero hero) { + super.satisfy( hero ); + + Buff.affect(hero, WellFed.class, Hunger.STARVING); + } + + @Override + public int price() { + return 50 * quantity; + } + + //TODO visuals, is this the effect we want as well? + public static class WellFed extends FlavourBuff { + + } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe { + + @Override + public boolean testIngredients(ArrayList ingredients) { + boolean pasty = false; + boolean ration = false; + boolean meat = false; + + for (Item ingredient : ingredients){ + if (ingredient.quantity() > 0) { + if (ingredient instanceof Pasty) { + pasty = true; + } else if (ingredient.getClass() == Food.class) { + ration = true; + } else if (ingredient instanceof MysteryMeat + || ingredient instanceof StewedMeat + || ingredient instanceof ChargrilledMeat + || ingredient instanceof FrozenCarpaccio) { + meat = true; + } + } + } + + return pasty && ration && meat; + } + + @Override + public int cost(ArrayList ingredients) { + return 8; + } + + @Override + public Item brew(ArrayList ingredients) { + if (!testIngredients(ingredients)) return null; + + for (Item ingredient : ingredients){ + ingredient.quantity(ingredient.quantity() - 1); + } + + return sampleOutput(null); + } + + @Override + public Item sampleOutput(ArrayList ingredients) { + return new Feast(); + } + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java index 5b7ffe786..99f48b4d7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java @@ -71,10 +71,30 @@ public class Food extends Item { detach( hero.belongings.backpack ); - (hero.buff( Hunger.class )).satisfy( energy ); + satisfy(hero); GLog.i( message ); - switch (hero.heroClass) { + foodProc( hero ); + + hero.sprite.operate( hero.pos ); + hero.busy(); + SpellSprite.show( hero, SpellSprite.FOOD ); + Sample.INSTANCE.play( Assets.SND_EAT ); + + hero.spend( TIME_TO_EAT ); + + Statistics.foodEaten++; + Badges.validateFoodEaten(); + + } + } + + protected void satisfy( Hero hero ){ + (hero.buff( Hunger.class )).satisfy( energy ); + } + + public static void foodProc( Hero hero ){ + switch (hero.heroClass) { case WARRIOR: if (hero.HP < hero.HT) { hero.HP = Math.min( hero.HP + 5, hero.HT ); @@ -89,18 +109,6 @@ public class Food extends Item { case ROGUE: case HUNTRESS: break; - } - - hero.sprite.operate( hero.pos ); - hero.busy(); - SpellSprite.show( hero, SpellSprite.FOOD ); - Sample.INSTANCE.play( Assets.SND_EAT ); - - hero.spend( TIME_TO_EAT ); - - Statistics.foodEaten++; - Badges.validateFoodEaten(); - } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java index d8cfa51ad..9a6c842ed 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/FrozenCarpaccio.java @@ -47,15 +47,11 @@ public class FrozenCarpaccio extends Food { } @Override - public void execute( Hero hero, String action ) { - - super.execute( hero, action ); - - if (action.equals( AC_EAT )) { - effect(hero); - } + protected void satisfy(Hero hero) { + super.satisfy(hero); + effect(hero); } - + public int price() { return 10 * quantity; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MysteryMeat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MysteryMeat.java index 5e886736f..b4e6b6e2b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MysteryMeat.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/MysteryMeat.java @@ -42,13 +42,9 @@ public class MysteryMeat extends Food { } @Override - public void execute( Hero hero, String action ) { - - super.execute( hero, action ); - - if (action.equals( AC_EAT )) { - effect(hero); - } + protected void satisfy(Hero hero) { + super.satisfy(hero); + effect(hero); } public int price() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java index 831923e8a..919331ec4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java @@ -98,23 +98,21 @@ public class Pasty extends Food { } @Override - public void execute(Hero hero, String action) { - super.execute(hero, action); - - if (action.equals(AC_EAT)){ - switch(holiday){ - case NONE: - break; //do nothing extra - case HWEEN: - //heals for 10% max hp - hero.HP = Math.min(hero.HP + hero.HT/10, hero.HT); - hero.sprite.emitter().burst( Speck.factory( Speck.HEALING ), 1 ); - break; - case XMAS: - Buff.affect( hero, Recharging.class, 2f ); //half of a charge - ScrollOfRecharging.charge( hero ); - break; - } + protected void satisfy(Hero hero) { + super.satisfy(hero); + + switch(holiday){ + case NONE: + break; //do nothing extra + case HWEEN: + //heals for 10% max hp + hero.HP = Math.min(hero.HP + hero.HT/10, hero.HT); + hero.sprite.emitter().burst( Speck.factory( Speck.HEALING ), 1 ); + break; + case XMAS: + Buff.affect( hero, Recharging.class, 2f ); //half of a charge + ScrollOfRecharging.charge( hero ); + break; } } 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 new file mode 100644 index 000000000..a467abdaf --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/StewedMeat.java @@ -0,0 +1,79 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.food; + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; +import com.shatteredpixel.shatteredpixeldungeon.items.Recipe; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class StewedMeat extends Food { + + { + image = ItemSpriteSheet.STEWED; + energy = Hunger.HUNGRY/2f; + } + + @Override + public int price() { + return 8 * quantity; + } + + public static class oneMeat extends Recipe.SimpleRecipe{ + { + inputs = new Class[]{MysteryMeat.class}; + inQuantity = new int[]{1}; + + cost = 2; + + output = StewedMeat.class; + outQuantity = 1; + } + } + + public static class twoMeat extends Recipe.SimpleRecipe{ + { + inputs = new Class[]{MysteryMeat.class}; + inQuantity = new int[]{2}; + + cost = 3; + + output = StewedMeat.class; + outQuantity = 2; + } + } + + //red meat + //blue meat + + public static class threeMeat extends Recipe.SimpleRecipe{ + { + inputs = new Class[]{MysteryMeat.class}; + inQuantity = new int[]{3}; + + cost = 4; + + output = StewedMeat.class; + outQuantity = 3; + } + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 1554a8068..e92a0b7cf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -528,23 +528,27 @@ public class ItemSpriteSheet { private static final int FOOD = xy(1, 28); //16 slots public static final int MEAT = FOOD+0; public static final int STEAK = FOOD+1; - public static final int OVERPRICED = FOOD+2; - public static final int CARPACCIO = FOOD+3; - public static final int RATION = FOOD+4; - public static final int PASTY = FOOD+5; - public static final int PUMPKIN_PIE = FOOD+6; - public static final int CANDY_CANE = FOOD+7; - public static final int BLANDFRUIT = FOOD+8; - public static final int BLAND_CHUNKS= FOOD+9; + public static final int STEWED = FOOD+2; + public static final int OVERPRICED = FOOD+3; + public static final int CARPACCIO = FOOD+4; + public static final int RATION = FOOD+5; + public static final int PASTY = FOOD+6; + public static final int PUMPKIN_PIE = FOOD+7; + public static final int CANDY_CANE = FOOD+8; + public static final int FEAST = FOOD+9; + public static final int BLANDFRUIT = FOOD+10; + public static final int BLAND_CHUNKS= FOOD+11; static{ assignItemRect(MEAT, 15, 11); assignItemRect(STEAK, 15, 11); + assignItemRect(STEWED, 15, 11); assignItemRect(OVERPRICED, 14, 11); assignItemRect(CARPACCIO, 15, 11); assignItemRect(RATION, 16, 12); assignItemRect(PASTY, 16, 11); assignItemRect(PUMPKIN_PIE, 16, 12); assignItemRect(CANDY_CANE, 13, 16); + assignItemRect(FEAST, 16, 11); assignItemRect(BLANDFRUIT, 9, 12); assignItemRect(BLAND_CHUNKS,14, 6); } diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index fe2d289c6..1fa2ac148 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -409,6 +409,9 @@ items.food.blandfruit$chunks.desc=The blandfruit has exploded on impact, leaving items.food.chargrilledmeat.name=chargrilled meat items.food.chargrilledmeat.desc=It looks like a decent steak. +items.food.feast.name=feast +items.food.feast.desc=TODO + items.food.food.name=ration of food items.food.food.ac_eat=EAT items.food.food.eat_msg=That food tasted delicious! @@ -429,17 +432,20 @@ items.food.mysterymeat.not_well=You are not feeling well. items.food.mysterymeat.stuffed=You are stuffed. items.food.mysterymeat.desc=Eat at your own risk! +items.food.pasty.pasty=pasty +items.food.pasty.pie=pumpkin pie +items.food.pasty.cane=candy cane +items.food.pasty.pasty_desc=This is authentic Cornish pasty with traditional filling of beef and potato. +items.food.pasty.pie_desc=A great big slice of pumpkin pie! Its sweet and spicy flavor will fill you up and give you a tiny bit of healing.\n\nHappy Halloween! +items.food.pasty.cane_desc=A huge sugary sweet candy cane! It's big enough to fill you up, and the sugar might give your wands a tiny bit of extra charge too.\n\nHappy Holidays! + items.food.smallration.name=small food ration items.food.smallration.eat_msg=That food tasted ok. items.food.smallration.desc=It looks exactly like a standard ration of food but smaller. -items.food.pasty.pasty=pasty -items.food.pasty.pie=pumpkin pie -items.food.pasty.cane=candy cane - -items.food.pasty.pasty_desc=This is authentic Cornish pasty with traditional filling of beef and potato. -items.food.pasty.pie_desc=A great big slice of pumpkin pie! Its sweet and spicy flavor will fill you up and give you a tiny bit of healing.\n\nHappy Halloween! -items.food.pasty.cane_desc=A huge sugary sweet candy cane! It's big enough to fill you up, and the sugar might give your wands a tiny bit of extra charge too.\n\nHappy Holidays! +items.food.stewedmeat.name=stewed meat +items.food.stewedmeat.eat_msg=That food tasted ok. +items.food.stewedmeat.desc=TODO @@ -810,9 +816,6 @@ items.scrolls.exotic.scrollofantimagic.desc=The incantation on this scroll will items.scrolls.exotic.scrollofconfusion.name=scroll of confusion items.scrolls.exotic.scrollofconfusion.desc=When read aloud, this scroll will unleash confusing magic on all targets in sight, blinding and disorienting them. -items.scrolls.exotic.scrollofdistortion.name=scroll of distortion -items.scrolls.exotic.scrollofdistortion.desc=This scroll contains powerful magic capable of warping reality. - items.scrolls.exotic.scrollofdivination.name=scroll of divination items.scrolls.exotic.scrollofdivination.nothing_left=There is nothing left to identify! items.scrolls.exotic.scrollofdivination.desc=This scroll will permanently identify four random item types: potion colors, scroll runes, and ring gems. The items identified won't necessary be ones you're carrying.