From 124172b6ad7ede337b85d2568f264e5cc8f418be Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 13 Mar 2020 23:29:04 -0400 Subject: [PATCH] v0.8.0: Visual improvements, primarily to demon halls area/enemies --- core/src/main/assets/dm100.png | Bin 8012 -> 532 bytes core/src/main/assets/ripper.png | Bin 536 -> 555 bytes core/src/main/assets/spawner.png | Bin 408 -> 5563 bytes .../levels/LastLevel.java | 65 ++++++++++++++---- .../levels/NewHallsBossLevel.java | 3 +- .../rooms/special/DemonSpawnerRoom.java | 23 ++++++- .../sprites/GhoulSprite.java | 3 - .../sprites/RipperSprite.java | 13 ++-- .../sprites/SpawnerSprite.java | 53 +++++++++++--- 9 files changed, 125 insertions(+), 35 deletions(-) diff --git a/core/src/main/assets/dm100.png b/core/src/main/assets/dm100.png index dcbc9f3f54b76fd824f611f9824390fb1dc4b9b7..7c35f7ee51a5f388ad5882d89abf149216c61047 100644 GIT binary patch delta 518 zcmV+h0{Q*SK9mHI7=Hu<0000B{k(br000|MOjJbx005eonSFhLJ3B!oB`yE|W}2Fr zLPAXd000~#o8kZf00DGTPE!Ct=GbNc00E~-L_t(|0ko2_%G*E?geRBd(pn1XWm#NW zfeda1N**8(_lFy|2?6O9{MgxHGhhUAjKSN??cDx1pY}JltADDtjklBnK2$qU+P25q zcx$i%>h|F6H@0g-^8%B~f1wntfV!K&wmXjrD?{@FlgfVyM8OKEzyAc={dqTIWoTYt zQu!}|C|CjYmmi63Tb)9I8*t+uRA5s1E08Bj!3wDNpJ)Gj2cQ9<@WBM1rwXhHQ15g% zfjqT|#NYyIOMfl)FJDE=7J$!F zVPN2(sr;-j7Kk>nSqe5i0u$dmBEs~*T;6}QL!U3;J%2Ln5Wzr1jQB^)-dn3-00g2< zY!?Ihz`a_)CO~Qopbv!#UzO{HVjwDkXcPYj7=h@@N}cW_xS|HUM@V*vJsJTZn8r1L z>WLp=@Q0f_bwBDp5+Dd5fGvHD?7cH>*rNG6n7ODSfg6kh0E;bUc2B+y+W-In07*qo IM6N<$f;_n1`~Uy| literal 8012 zcmeHMc{r49-yRPkYqG1D23cy%jNN35v4t#2N@A9Kn3%=PFk_dpgpeYUBr1d=TSO6| zjcBt)MW}4aTKHz@>G6Eu^S$r)9LM+m_l(0F_jO(8@BCfYd7r=QzV2gA+3&LuhhXFojCS6MO(LJ%9p$0VV+t0x`Rb z(!8k(cLYzayjBV3GUWKG%f(?n&uv&|RB>45>9a3^It>LQk~dU- zeGm8{J)r^IRa(5bV1TaODOoo^2bPA(eYjJrls+|O_OX2;`|!ei?*zYl_FeY_?)$@R zsbNO_Jn6}b6GskMpGx-*tgTGs{nYF|Rd9DW{c+-%A9tg^ZQHnUfe>W0`G>)td$!Bd z&0kgyeSI95RS?#4^)9XPeE+4ErMcFytMfe#Gdr(*oj&#a-lk>6*5P?wB}4zp^dyG> z4ON4zt~+y->@!~%t8I19z0P!TZyuB)Tou&48W;^da1W`IK?jE_3*QdO|GY| z1gDl-hnzlL0HlUY<&ViOh!x!q+y<_+);I1twh*g$?^Wi_8GqTrFBhz>@ug3oVS)N# zeqXb;w&{JprreMFn0Q3w;GHLm@o~K&!>XXx;nS{Riu2RV2U&F@`~?vnVOIlg)u(*H z@_k<5srXiN7<)0y{%!6RZ=&CqjoA zYACk1qrkQ%wm>Me+I$=F+ji4tDO%wnycy^BbNRF| zaIHu%#J?xx@hgMb-p6qVEp{9^5;Ffyd|~4`$l-5E?NSKrwkrQmgzIv8fe$ZuhGfs0 z&z%1tcR95`FGbRE4!LA<`nkmnEjD;4*ZqlcVVS`DK#}nFAxx?{sp!a{8lE5#dqpzh zi)2Rgw3z^}>tKi7a>F|e!6FPmcJxX^{$?6 z%BS7sSx#9Rxm7bYp)O3U?}ZylF}rr#N+%%8F9f#;D!N*uaflbMb>%-5kD(Hp4=lPg z(QUGMwD&d-;)!L*??QIZPdf3)=(QE!xiJ%>tf_8?bW`no1Gez^aPUq#s(7GQ{*d|N zt0x(09CilI(>^uQSv|u$Lwrq2+xduO8`P{u`SalpD?ZJuYJN(U?YT3fzUL&~?1SJp zN~&cPZ7cU1ayAK`Fuf+*b}nk{S2j9ATa$8#_T3Ls*4jh1cm+>&Xl zeyBRBJP(Ui#`_-!-)FO@@KBUwI=554q^e-v9-yTse)f40Uj%1TDe zizkIgp_g$@0v8nJE=kI`jk0$}cld}3-ls_`x-hy$f13eSJWJaIuL(0Yr|nX`kYIe` zXm4w-r|tB{gPPS$+n}4OBkfmmn?2N#Nb&SIi00w$fMflx(W4}u9kSP+^hoq(DRQEo zZ3;sp(R#-$%V-SZtyzH_%ns?S`!$yc(Zu*ZrOdq$AM@K>DPVp`NTnTafKp%ahJS+y zGcpb2pRA>Z&as#3Wt&=uhy~FLhq5PZ2v=O>OHq=l9kmUEb&^IoTCoe=w&f zR57*ZU4o@qOuQ54;R|^jMHn|N@XP1+a*VzF16>oYxFh{xvVW2B^mFJ~u|-kdgn z_Rx9y(olj$U38yc8vN z+~GxLbb{%f!I43!7am-Y3YD^;vm2>(Qz56{Vqdf!KtD=0k5J7l5jt@6jLIWJ%UzHo zaffasK0E5=#=I3N=y&WE(zo2SQ;V54x$9h)Nt){9c!=B%$?6x%?>Qp#Lk&U^m6@{XX;sg!!*&HcvQqSSM>UOo_*hL z%t!FMMQpwj(0MafF*3*+E?UiD5`1*&NDet8#wa_2k%M4389N@iT>-QQTBg2pWegn$ zQr`0@MeS-e5vC-H@hy9Q2tqLIYNlFE$OUfEQPCs#`*7Slz+ux5&e{DhG@EQ4jtC#u z>pS7RcTOpDbl^vcmgc+DUmQdQE6wh@xU~!S%xzZ#3EzxKw-ARtMkI4SMZUUFh(30w zR)3H974P{{!P(J@L#$az($%sv&PQQjZ^%sgk9m=EBg@g4qr~mU3GG|jW-LsemM-p6 zFXn7>Mgn}h^QAwa1rtlY$oTSdHu1c>;u|P2o{wfc8`EjidRp1-m22@e`>ZjjU>0eU zr<&s_Gxk0zcr=|N)bf5rx#>Ppd7R2^JDnXbFdofGKD`drPC-a|-ZQ7(LQ+?a&OBZTZ$?7c9#-Jo(M z0DgnXGq|zyR2rBxDW``tC%jh~RE2hJNkB8ZE}s{_k~qKAFS=CTzfw|rZ{%G7R(;Yv zx_~3#W6&9S)+rG9%i|w`LdUX?e+IGjg5mbOrV}>rc#TiFH*XIXeyd*pG}jw=sxcJNlIT-C}iyH7Ml}V(2g8}Nu*!L31RmQXL+W-N!lbYacyTE zK%)qzruJ5*roW#zS!phYoH4L`V7#@-eSi5Cah}~Vx?K7DBv58tlKB{sUFRxHZV2r- zAIfVhlPo4_QC~hV(2RLm-*o68&%r&Let>+bbVvG`%`4}{4mUC>y@`xDS;hn?+Zj{P zrOlm}4k%z95NF*)IB!noY}qE&5Z`EHaOtq+16pw3gXY&Yylr0%=Y~fds5>}=Ayd0L z1>=~R%wwG$dK042E)I?{ZKo^*tHD$9uYvRZx{_NZnD`b;rQsOUMof0(kObb$RPmC6 z(9Qz$1(SzBh~BPwe7rtm>89moYtZ4~#t|^9~Zfe}7Z)St)!)x~e06 znJSpJtWewiqQSy=LYv~-_hQgsfXXux)}d%hRWP#Mp2hRFZ6u@AxF6bH{%Q8ro90o@ zq-({gr0^4_9=XO{-m(+pK4WA38mE^-LAj#T8vlDc#X%t90|eF^fQzjS5=$nkp>bpk zpvELpSl$4E^o^JlG}arSgE4?7fn)%gsJRCL6L1EQgIcz5TZ$>*MX(H{0{a8^Ibj36 zv3fX&ks+Tx6UibV0(3N(N%SGnkW2%}Dld|C&F+Rlz^f3tw*kb()*ft1rUGD1HBB`* z)Qm~+SBDt#f%U04Jkk+m{*!{$GJtr|=@cXk#$Yhi7#eD1swWJgr>6<HadQp)3TH z7C@q-nNSiUyyC@vKo>+h5Tn+D{c(dcv4!3JjqJhY^W?ilEWW{Qt=J zmk~54){7X-5ulO%s93@OU}kLt6E!C_&54?tv1gvMe<{0YyB{}u3;%ULB~6$*(WWBu4H zRwx4qdjd!t8B4$+S1;i@x_F!>Rs)K~qj6A8tfnSZ7mo*^aBVaij>TcHn!4KSsH{jd zI+}z9*iMb< zBW=i7G`k*F!2ph3DnEgN#6pc;|u=+QP`foV>HDg+`V#(Bib@}%LzH6|JBsjL)K(j_XJ_h zd99E2WMVz&V85PpKV8Bur2pXOr~Cec8CcZ+B>7wV{v+2va{Vm@{ucNjcl{&R-%{Xj zf&X#W|C?NVf4nOLB-Xi)!Fm&3Atm*Jxf@SR?gc2>K2poTS8 zv?csTIB~;(wZ7Su00@-%Ov#&bH_j;7X;U#m2>qVJ!UJTO<)LO$HYCxcQRrL=0#Rtw zANs4l#tTKuQ%6F}(1t7^@qN8<0*-$`)nf}s74=@|f&j>fkrn+xM4>gj+a_ruw2W}M z4pYX4bwA+A9CR-tp>GFh2-S(-U&$ig3AjW!RTb*?;6aG6?0C@Rd{MZ9bbIN=Gu21E znf}E+G*|m!aZ&!~SN>W&_or?fK~|r58m+>sn>BKinGn-XeD?!%hPPx&amY{&py7!ed_p zs7m45mBHrZ#3Af&o2C#PW)A25kv-o#=qBUiJCu!LtG$x75O9vXhnF{(2-1h$&k7ev zxvUVW_qD>{qLi+>J5rYW_xLS#+13=a0Cii!Jf-;vS;c3sS?LwtP`?dE01%jhR0!vNN)IFtNq*fK-CT z$u{vGBZoUuF^PQd72a}8wkB@0DNFolb~*63p1Y@q7lyeq7aqJaYn1FGmnJriH@&id zSvi_@% diff --git a/core/src/main/assets/ripper.png b/core/src/main/assets/ripper.png index f557bd822e6f0d47a661ad3e586feb6121b6f589..41d5bf0ad2864cf754da60c0a95ae1b1dc50ba56 100644 GIT binary patch delta 530 zcmV+t0`2{n1giv)B!4zgOjJex|NmfMU~g}4W@cv0W&mnxY5)KLFE1}qQBhY{S7tK+ zJ3BikCnp{r9vB!H5)u+kO-(B+D{fvy@Bjb+0d!JMQvg8b*k%9#0i#JoK~#7F%#?wO zgfI+5b#q(wrZw&V|LirST^*nY2+9T)UNjq=M|JwI=330xW`DlB#v$fct(o}JjPn;; z8iklee&mPw(u^}T-{WE&;vJS%WF@{ZLrl%^#5`H!5O0yNEK4B1FvGm{#$Ei%FCUEO zYZzjdtu}%A!VGh301`too;(fo;D!fJsQd~Wm}!1I!#jyz)(8eC=Hb&o5AIkQ-qgz? zD>KaxW=1=mt$&dfERtnBD1bvaR&E9$i0Q<;@oAo}J16JC&dwk4(nPY1)9dhl&$ZSY z<5N(_m?pq(C=hpM7GuRT$(Y2@&dx3XACVi&2**d(Ps6 zJ#>z7KW3as813xrC@|g*8JJu~So(+cegPg$HO0j2U4QXF&ZTiKQPbWSd(z`9v9RHO zXP|MHq3W+j456}NTulHf-&nBq1v|5M01TM3YWbMSx#-lnHl0g^{*zPot+e?c~?0NDj8%c8;jKt{w9`5h#N_DEgc15k=7_4qS0)HFHU=#oVvl=6t UABLMM01E&B07*qoM6N<$fCdCzrP|PBI4rW zSXfxu+1a_dxsZ^M(b3UwZ*NFQNGd8S92^`#KtL506`5a8V*mgE0d!JMQvg8b*k%9# z0fb3JK~#7FV!#a;36R4AV0sJCPWkRA48t&d|690F+--gTSAV_MimnjRech1GAK+)S zNZ2IQx4s{;h;7!_Z*8U(j;0$6k6nY!Y&Bokg$Xwelk&VQ(=xT$&Z=o`$wg(uIq&_A zc%Ofq$m5T_4~EUGn)a4lR3=>3Oca@q+0H)HXcvAV)-tXs6RsBU6h9xcomB(WVr&_G zcfD<};j;KS#D5D-o1dby%0lDN*piE$g9(=vK=zVz1cxSbl(Wie8e2j$E?L()hgQ%I z5X2P@E!M{+RMsE*QA;&t=sD2bhb;1W`W)1e*9gS8;(!4u*u8QQB(RtdW!!iUEMwp{ zoZi41YoHgViA>aBBJhzRg*WJliFhreZbRRXETHdCFLz+ycm3v-X$o(AXfwQ%o3mO* zOe`P}$>QgtR4`)6Lgw=eU?Rg^0Ei5|@9zwRgIT1M;+7H$3%gK;Q%3o3bk4z@-9P|R z77*Sz>jk#}DC$FpvmgWLl(UqfTxc#jcLo0S3%NEgPw^-;S^xk507*qoM6N<$f;u1X A_y7O^ diff --git a/core/src/main/assets/spawner.png b/core/src/main/assets/spawner.png index a1f1caf8bb44ce2fa6360417643e24764c6b2382..8ecfd0eb595202cd68b9098face06d2dcbde5790 100644 GIT binary patch literal 5563 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 JPDHLkV1kCpxqtuw delta 394 zcmV;50d@YnE0_b27=Hu<0000B{k(br000$GOjJex|Nm(tBa<;P!bnKPqXDftI;Ca@ z7)K_q00001bW%=J06^y0W&i*IF-b&0RCocsk%4K&FbqVS5tKhcr3L)05j;Xh$o@N& zBRWC8QHg=p0FM*K_prX^vzh;zd3MzXuAjM(= 50){ + data[i] ++; + } + + if (Statistics.amuletObtained && data[i] > 40){ + data[i] += 8; + } + + if (map[cell] != Terrain.CHASM && map[cell+Dungeon.level.width] == Terrain.CHASM) { + data[i+tileW] = 6; + } + + i++; + cell++; + if (i % tileW == 0){ + cell = tileX + (tileY + i / tileW) * Dungeon.level.width(); + } + } + } if (map[cell] == Terrain.EMPTY_DECO) { - data[i] = 27; + if (Statistics.amuletObtained){ + data[i] = 31; + } else { + data[i] = 27; + } } else if (map[cell] == Terrain.EMPTY) { data[i] = 19; - if (map[cell+Dungeon.level.width] == Terrain.CHASM) { - data[i+tileW] = 6; - } } else if (data[i] == 0) { data[i] = -1; } @@ -271,9 +308,9 @@ public class LastLevel extends Level { -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 8, 9, 10, 11, 19, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 19, 19, 19, 20, 21, 22, 0, 0, 0, - 0, 0, 0, 0, 24, 25, 26, 27, 19, 27, 28, 29, 30, 0, 0, 0, + 0, 0, 0, 0, 24, 25, 26, 31, 19, 31, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 19, 19, 19, 28, 29, 30, 0, 0, 0, - 0, 0, 0, 0, 24, 25, 26, 27, 19, 27, 28, 29, 30, 0, 0, 0, + 0, 0, 0, 0, 24, 25, 26, 31, 19, 31, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 24, 25, 34, 35, 35, 35, 34, 29, 30, 0, 0, 0, 0, 0, 0, 0, 40, 41, 36, 36, 36, 36, 36, 40, 41, 0, 0, 0, 0, 0, 0, 0, 48, 49, 36, 36, 36, 36, 36, 48, 49, 0, 0, 0, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewHallsBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewHallsBossLevel.java index ab214c482..eca66c96e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewHallsBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewHallsBossLevel.java @@ -279,7 +279,7 @@ public class NewHallsBossLevel extends Level { } private static final int[] map = new int[]{ - 8, 9, 10, 11, 11, 11, 12, 13, 14, + 8, 9, 10, 11, 11, 11, 12, 13, 14, 16, 17, 18, 19, 19, 19, 20, 21, 22, 24, 25, 26, 27, 19, 27, 28, 29, 30, 24, 25, 26, 19, 19, 19, 28, 29, 30, @@ -301,6 +301,7 @@ public class NewHallsBossLevel extends Level { int[] data = map.clone(); if (Dungeon.level.map[Dungeon.level.exit] == Terrain.EXIT) { data[4] = 19; + data[21] = data[23] = data[39] = data[41] = 31; } vis.map(data, tileW); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/DemonSpawnerRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/DemonSpawnerRoom.java index fec1e261a..21ed00cf0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/DemonSpawnerRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/DemonSpawnerRoom.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.DemonSpawner; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; @@ -74,7 +75,12 @@ public class DemonSpawnerRoom extends SpecialRoom { return false; } - private static class CustomFloor extends CustomTilemap { + @Override + public boolean canPlaceGrass(Point p) { + return false; + } + + public static class CustomFloor extends CustomTilemap { { texture = Assets.HALLS_SP; @@ -90,8 +96,19 @@ public class DemonSpawnerRoom extends SpecialRoom { if (i % tileW == 0){ cell = tileX + (tileY + i / tileW) * Dungeon.level.width(); } - if (map[cell] == Terrain.EMPTY_DECO) data[i] = 27; - else data[i] = 19; + + if (Dungeon.level.findMob(cell) instanceof DemonSpawner){ + data[i] = 5 + 4*8; + } else if (map[cell] == Terrain.EMPTY_DECO) { + if (Statistics.amuletObtained){ + data[i] = 31; + } else { + data[i] = 27; + } + } else { + data[i] = 19; + } + cell++; } v.map( data, tileW ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/GhoulSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/GhoulSprite.java index c29a243ef..e345f72a6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/GhoulSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/GhoulSprite.java @@ -38,9 +38,6 @@ public class GhoulSprite extends MobSprite { idle = new Animation( 2, true ); idle.frames( frames, 0, 0, 0, 1 ); - run = new Animation( 15, true ); - run.frames( frames, 0, 2, 3, 4 ); - run = new Animation( 12, true ); run.frames( frames, 2, 3, 4, 5, 6, 7 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RipperSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RipperSprite.java index 7e6a8a5e0..3ba57ac0c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RipperSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/RipperSprite.java @@ -32,22 +32,25 @@ public class RipperSprite extends MobSprite { texture( Assets.RIPPER ); - TextureFilm frames = new TextureFilm( texture, 12, 15 ); + TextureFilm frames = new TextureFilm( texture, 12, 14 ); idle = new Animation( 2, true ); - idle.frames( frames, 0, 0, 0, 1, 0, 0, 1, 1 ); + idle.frames( frames, 0, 0, 0, 1 ); run = new Animation( 15, true ); run.frames( frames, 0, 2, 3, 4 ); - //TODO shoudl probably have 2 attack animations, like monks + run = new Animation( 18, true ); + run.frames( frames, 2, 3, 4, 5, 6, 7 ); + + //TODO should probably have 2 attack animations, like monks attack = new Animation( 12, false ); - attack.frames( frames, 0, 5, 6 ); + attack.frames( frames, 0, 8, 9 ); zap = attack.clone(); die = new Animation( 15, false ); - die.frames( frames, 0, 7, 8, 8, 9, 10 ); + die.frames( frames, 0, 10, 11, 12, 13 ); play( idle ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SpawnerSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SpawnerSprite.java index 80163e884..60cf2595a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SpawnerSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/SpawnerSprite.java @@ -22,31 +22,66 @@ package com.shatteredpixel.shatteredpixeldungeon.sprites; import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; +import com.watabou.noosa.Game; import com.watabou.noosa.TextureFilm; +import com.watabou.utils.PointF; public class SpawnerSprite extends MobSprite { - //TODO just a recolored golem sprite atm + //TODO need to improve the base public SpawnerSprite() { super(); texture( Assets.SPAWNER ); + perspectiveRaise = 8 / 16f; + shadowOffset = 1.25f; + shadowHeight = 0.4f; + shadowWidth = 1f; + TextureFilm frames = new TextureFilm( texture, 16, 16 ); - idle = new Animation( 4, true ); - idle.frames( frames, 0, 1 ); + idle = new Animation( 6, true ); + idle.frames( frames, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ); - run = new Animation( 12, true ); - run.frames( frames, 2, 3, 4, 5 ); + run = idle.clone(); - attack = new Animation( 10, false ); - attack.frames( frames, 6, 7, 8 ); + attack = idle.clone(); - die = new Animation( 15, false ); - die.frames( frames, 9, 10, 11, 12, 13 ); + die = idle.clone(); play( idle ); } + private float baseY = Float.NaN; + + @Override + public void place(int cell) { + super.place(cell); + baseY = y; + } + + @Override + public void update() { + super.update(); + if (!paused){ + if (Float.isNaN(baseY)) baseY = y; + y = baseY + (float)(Math.sin(Game.timeTotal)/3f); + shadowOffset = 1.25f - 0.6f*(float)(Math.sin(Game.timeTotal)/3f); + } + } + + @Override + public void die() { + Splash.at( center(), blood(), 100 ); + killAndErase(); + } + + @Override + public void bloodBurstA(PointF from, int damage) { + if (alive) { + super.bloodBurstA(from, damage); + } + } }