From f7f40c193277389e73e565a92cd2bec807be3463 Mon Sep 17 00:00:00 2001 From: LMH Date: Mon, 16 Jan 2012 12:16:31 -1000 Subject: [PATCH] Bonusblock enhancements: sprite changable, multi-hit, can contain scripts, added sprites and test level (bug 838) --- data/images/objects/bonus_block/hiddenbonus.sprite | 8 + data/images/objects/bonus_block/invisible.png | Bin 0 -> 118 bytes data/images/objects/bonus_block/purple_0.png | Bin 0 -> 2284 bytes data/images/objects/bonus_block/purple_1.png | Bin 0 -> 2359 bytes data/images/objects/bonus_block/purple_2.png | Bin 0 -> 2351 bytes data/images/objects/bonus_block/purple_3.png | Bin 0 -> 2282 bytes data/images/objects/bonus_block/purple_4.png | Bin 0 -> 1804 bytes data/images/objects/bonus_block/purple_empty.png | Bin 0 -> 2060 bytes data/images/objects/bonus_block/purpleblock.sprite | 19 ++ data/levels/test/bonusblock.stl | 222 +++++++++++++++++++++ src/object/bonus_block.cpp | 39 +++- src/object/bonus_block.hpp | 6 +- 12 files changed, 286 insertions(+), 8 deletions(-) create mode 100644 data/images/objects/bonus_block/hiddenbonus.sprite create mode 100644 data/images/objects/bonus_block/invisible.png create mode 100644 data/images/objects/bonus_block/purple_0.png create mode 100644 data/images/objects/bonus_block/purple_1.png create mode 100644 data/images/objects/bonus_block/purple_2.png create mode 100644 data/images/objects/bonus_block/purple_3.png create mode 100644 data/images/objects/bonus_block/purple_4.png create mode 100644 data/images/objects/bonus_block/purple_empty.png create mode 100644 data/images/objects/bonus_block/purpleblock.sprite create mode 100755 data/levels/test/bonusblock.stl diff --git a/data/images/objects/bonus_block/hiddenbonus.sprite b/data/images/objects/bonus_block/hiddenbonus.sprite new file mode 100644 index 000000000..21f3cdaa5 --- /dev/null +++ b/data/images/objects/bonus_block/hiddenbonus.sprite @@ -0,0 +1,8 @@ +(supertux-sprite + (action + (name "empty") + (images "empty.png")) + (action + (name "normal") + (images "invisible.png")) +) diff --git a/data/images/objects/bonus_block/invisible.png b/data/images/objects/bonus_block/invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..31e35b2468edcc631db8deb4a04f1d757e723a0d GIT binary patch literal 118 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 literal 0 HcmV?d00001 diff --git a/data/images/objects/bonus_block/purple_2.png b/data/images/objects/bonus_block/purple_2.png new file mode 100644 index 0000000000000000000000000000000000000000..03054053a1d49ccc3173984e4a37d440a73fd86c GIT binary patch literal 2351 zcmV+~3DEY5P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipf5 z78o0mz{Irx001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8>fk{L`R9M5cmrHD1@kVsI1fS+9Fml{s7Yv`B9*F^my|_Y zb%#_5soiwjU00~fN`0tOE7}DGBnSwp&{CSD1?NE^vGX8~&BP9P#?Fi%bLVlNUl-SS zaub5s^z6Rxp8K8uIp=@QcRqzXWG4qC|3|sZ8Rho1a;M=x|NK4DgMwtgijj}LxwXy@ zMjp&w4S>M#*Y^`C6<-ek&^(n^BS1D(+&Kli(!g8ts8*{y|Jxs7TdT~ruPW;Rc5*=e z?)&dD^sGtGn2OdN9V&!CH^32Y%!|)%-lSY!pk7~D-^*mO?AUuhxm0d_PX?0u476r^ zR;C=v*UQYDtul4v5^pU2p39t3v@eu%4{7v_siX$PxqmMW}agO25 z!)zTHVMovXSji*+^_3M)pFN9cNxpsL2!tB6p)v2%`dDSK-6)5&OCs{5&*Q_J{~}w=GrDJ#glXP0#|sM!oP7HfW5eGe)yT4P zC1CZu;MS>tP_rpbSLi7QOwC{6ue^W&NM;gbwrh}#a@w4Q<&%P?6Ou;7a7`X?(_0$MWyrwsP2Msuc{!F&PcO*S$dMHfJ9@X_yc&~+W% zfYlow%M%hM88UHeockZy%EpZwzc$m;=`@Fr9^#t)F)|euReC6LE~q6z*GU=ah_C?Z zL4j#mfW&Es1oJu|@l!2k!V4VP^IXh8%W)VVALr)mEQVpQYu7Gz@7{e^B$UyQ&^~d| zdknOa3P7r;<9jOZEv*xQ#AcPyiij612-=mXoFQA!y z(?>Y-+61q?e*CUTWQ%z|ms6O13c`#k-YyGTx5T=R0MK(1UDqQ6pMyOokts=Aud{Vz zBzEZZ)D)>okzr#e)^Zp9;SfjC$7p`yGdVdK(;X}h(9)JWsTuO=-XhU4;sA`Cf}$z} zb%jR7L$;!Dt@t$t1_ok>E>^3gWe=jIvV28SyBH!`DuZn2(xpo=-QGfhR;z_fNz9@o zvrVOIzodzKM+DXyPZ);yH9_b}EJgWJf;}`kN~P=C`r7w>?A4Hz%wm{UOjpyi*jn$A z7{idvTX6tZN=1k$@1mvRRTUf?wuJjAl}fQga=9G)9)FM-bppLRB2~IeFy~)oaBwiD z>$F-V5{dP-*{7gy5EwZHYar|Z2;2@Sf*`v8*%X8|1FxzO%$aPc zJ;bXozq}5@3j)r4c%GczhwFKqZ@kMy<{upU$+5ed)cFrSBr6Iu<|AV=qhR(ZWCko6 z^Jb?HXpRa5xXlp9RtOzQYc28{*@s~m{OQ*((zCUT#koax1&`8gA!V z4HrY#aYK)B^)-(D_!xykA$Fi`+r0nof2mI>?ByW0u0nk(AhRvHWermSWE?;cMCd~! zB;6&bnP5+U!C)U}Uc)SdIbdQvpm0uoog>d2j2Uk^4yXS9Z{)>ZhRsLuZG-A{A7@_0 zp4I3*Br$ryvIJhTO-k3nTLa)!0~n5oXs?EZj^AQ3{~*x@}vIP(f-shh*Qj&b3w zvz$Es0sV3l-!h+Oc|xumzf+8~hRlFzDg>(nE$`u_ybb_=89YbQUIgk&4E>i$e>g-| zE3l$2kQD_i-=gV-x6imSF^dwb@3wT-1fsXu0nlDlSegrQE-N?-_ZTvUe9WSXzS-d| z`4@`Y3v}nYnVmh$&}R>m?%Rlc55R#&RDwyt>SvPHlE-Q(#L*iO0HrQzO)Jz+N!;sS z?uDkSm;-RdILYBBABhbh?;L-d{%{DpC`sEvEP~xzBwc$XiOtav?p7tvg3HQ`OP>CS zgsYVn?&m(1qO7s~ZV{$}k_f0MH`uamTm0VNavv2ji{2yAbd~gwPkP9w__!o!rhUtJiQsWNQspuVy~;!?9&|}>(n*Yj z?0s;IlW)Jt;iHGh_4Ke*t#abbNuGP=rv#oyLDvBVwJXF(igjYT%OUj(0gI;{+$Bky zWnwR*Uu^#a^=ld?8WtLPx*;zJYDszyDdfKa+5I}k4rq%SUIYJT$S-*+{xT}pu9LHd>B%L?NI|RIgc^X2eMQim zgXvc^GCM8$#!~FhJ;hjlt!GR?Y21%bKaPs)wb30NXUV5_u}yQjj#~*>;M03QPM_xm z3KZ_jziLG3Nah9gvY-JB3|o{-Z3?~dQLM3Y8BKa0JR@2a`I9F#?d zSfq@Pi>{i;K%%G$R*)i1nzq))_d6b^Nz+AdbfYS*j&14T>CsyE5?tXTS2-WE`9BPV Vtr4^Z%^Ls!002ovPDHLkV1g^7TE+kX literal 0 HcmV?d00001 diff --git a/data/images/objects/bonus_block/purple_3.png b/data/images/objects/bonus_block/purple_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2eed8acebc8fcfb76326af02979386347cf1b52d GIT binary patch literal 2282 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipf5 z78wO{)X0|r001I%MObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakAa8CUVIWOmV~41B zLjV8>JV``BR9M5cm&Qp_s-mTkV8s*h>|5)maIsIjWkXW!094IyC}LT3KZzF ze?owE(`|t+y6U<>AFKWiExIXCBuLPrP8%mqoY;w;mMn{+L{WSWhckC>7h{W}#RbH4MPbG|uO@Pggqj^Y1kU+|&0cr9KG{HLG4OE53V&009+?4BJd2K^YP3{FXq z`UXF5ktqGrAa-mK_BEz&G1?dOj{3x{m}axdJHPuWJ+H&w@R2wNaEm+U_dohOOFwa` zyk%ieXO5(lq~7Sh{&MejcW*Sy>3Agx>6F~9x6-gR}P~o%gfsKHvU?nWY+6 zuUU3!g&&&|sHS04kNrgws~DiEj!NM1_2RihQTait{RQ)6i%% zCZ5gZa`e+4ZY>Kqy=s_VH7J}(08U9DEP?I{hRqDAW!to(CSEQ#;WUaOyrf7H8xG$~ zIeafAZ3{}&E&*_TA4E*zBuGo(FGKN7!+_BX3_KH_G);*bDe)QTB*D8ND$lK2t1&1v zu~jCbqA%!mV=QIidETXFJQt;4ggXb$GUUqMBmggOA!R13GPFozLvkwd(=y#>jrQDp z*QL5xrE8iLZ)*JODY;pTzG+b`7AKw!qX>+`9@&VVgPI1lC~-;xZ!R4J(4%ovXswBx zf^b_hHJs;Q^9ixmmujnHO<~=p^leEfx`d)j>4kpjw%g=oK-5S{wL#5;vzU^*Wz!Y$ z7(n7a%YGy=1DUDdBN%>WQHmG%^5MgC5V6)A?=`SwMq@qQEzZ86be;+x>ksM^n0C+P7Ih{^^IRWB0CQTJi4op4;1fyO;?}1H{jHsQ= zGJCCtn2quC*|_dlAG7w_`Xz-7qlo&}0Z~g+YAtj04?%P&aIYBbX>eQtm`MOyXXsNW zB`8WxUFdCPN)_}ZrfpCaL-{oa^>)gMwZ-zSm5Jc7);#(0G2%E+$ys5r3(bE)`=41d z#W@S73Z5s4b3^hNh5K-tMvA4Ai+7bv5E=Kos?uQBDm1;&(*Q2 zSFvNC*1eR@JxS-|XH4$dl%&Bb7(n0`B{EiH241uz))TjSdp6Un1`}FDs)^@$6E)ws z|0Sh(fqXc{;d?3lj|AZ^oNbLmJeT6c)%Ybvd{GC!i6yZnszda-&+*;~jYfl5>vQ!h zhO^ZFYUqC?=x%7vw#KVpu$16T3GAtH?Wb4$F#~DG#%P0-lBk!y6hLp!rm$v6_5v2a zb(4dKdmN}I_@=-Wvrgw8^d3QXLq99q*qp$|6u@-_x+Ag6F>yW~14zywjts+Npersp zc%B7V1VxE&3M^YU>FGWNyGYs=^bfPqec8M26@xc(fz4BitPaK{7#<5+`-Zaz5H((2 z0$W+Qb0F4Y_RZ%s=XPPa!&CPm{e1iUlbZpZG;NcOU``Tu4Ph&$vzrpBe#U_48p18X z=?8|`F1e6h{c%_%zf4B_siAWg3tink5^O16ZLnue$` zqP;z$%xngra}-jTvhjqX^}+;Pq%k*ZI1^n;mFt%lkAAa_nl2(;an3?v&BDH6DF0B9 zuNg*zl);gvvtw`=(WjS1lEVbiGzj(egCRo;-xP?#5OqO>q9{TH7XI~=3KEl-I8y@m zIuzc3(y{>|4tC-^CkrOhZ|sPjghhBPe|@W%`Co@H%)`V>UN8=_Y*uUYTE^5R_looD6nkF&w7o zu3)g8Q2$Fr!9E;Vd8*%+}uq zHeCt}lii;7#=raR3kyt~3625=-U+`R{%qoud}-$1;B9k-C61|+FhW@_MjM1B@N}Ml zfT2AkNyZrm1Qe-eKtwo>ZDL}TU8~sVA)oSydlNDL3r7aC*#F`FZ2$lO07*qoM6N<$ Ef{_d}yZ`_I literal 0 HcmV?d00001 diff --git a/data/images/objects/bonus_block/purple_4.png b/data/images/objects/bonus_block/purple_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a190a0ea2f1602174c98da0825d39da81989172f GIT binary patch literal 1804 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"images/objects/bonus_block/bonusblock.sprite")), contents(), - object(0) + object(0), + hit_counter(1) { bbox.set_pos(pos); sprite->set_action("normal"); @@ -59,7 +60,8 @@ BonusBlock::BonusBlock(const Vector& pos, int data) : BonusBlock::BonusBlock(const Reader& lisp) : Block(sprite_manager->create("images/objects/bonus_block/bonusblock.sprite")), contents(), - object(0) + object(0), + hit_counter(1) { Vector pos; @@ -71,6 +73,13 @@ BonusBlock::BonusBlock(const Reader& lisp) : iter.value()->get(pos.x); } else if(token == "y") { iter.value()->get(pos.y); + } else if(token == "sprite") { + iter.value()->get(sprite_name); + sprite = sprite_manager->create(sprite_name); + } else if(token == "count") { + iter.value()->get(hit_counter); + } else if(token == "script") { + iter.value()->get(script); } else if(token == "contents") { std::string contentstring; iter.value()->get(contentstring); @@ -86,6 +95,8 @@ BonusBlock::BonusBlock(const Reader& lisp) : contents = CONTENT_1UP; } else if(contentstring == "custom") { contents = CONTENT_CUSTOM; + } else if(contentstring == "script") { + contents = CONTENT_SCRIPT; } else { log_warning << "Invalid box contents '" << contentstring << "'" << std::endl; } @@ -206,15 +217,29 @@ BonusBlock::try_open(Player *player) break; case CONTENT_CUSTOM: - SpecialRiser* riser = new SpecialRiser(get_pos(), object); - object = 0; - sector->add_object(riser); - sound_manager->play("sounds/upgrade.wav"); + { + SpecialRiser* riser = new SpecialRiser(get_pos(), object); + object = 0; + sector->add_object(riser); + sound_manager->play("sounds/upgrade.wav"); + break; + } + + case CONTENT_SCRIPT: + if(script != "") { + std::istringstream stream(script); + Sector::current()->run_script(stream, "powerup-script"); + } break; } start_bounce(player); - sprite->set_action("empty"); + if(hit_counter <= 0){ //use 0 to allow infinite hits + }else if(hit_counter == 1){ + sprite->set_action("empty"); + }else{ + hit_counter--; + } } void diff --git a/src/object/bonus_block.hpp b/src/object/bonus_block.hpp index 35c845e01..fd248f165 100644 --- a/src/object/bonus_block.hpp +++ b/src/object/bonus_block.hpp @@ -35,7 +35,8 @@ public: CONTENT_ICEGROW, CONTENT_STAR, CONTENT_1UP, - CONTENT_CUSTOM + CONTENT_CUSTOM, + CONTENT_SCRIPT }; protected: @@ -48,6 +49,9 @@ public: private: BonusBlock(const BonusBlock&); BonusBlock& operator=(const BonusBlock&); + int hit_counter; + std::string sprite_name; + std::string script; }; #endif -- 2.11.0