From 43b2b952c4dd04d873d2fc92028ebeffdc22c05b Mon Sep 17 00:00:00 2001 From: Marek Moeckel Date: Sat, 17 Sep 2005 19:07:47 +0000 Subject: [PATCH] kugelblitz electrifies water on contact - electrified water is baaaaaaad SVN-Revision: 2766 --- data/images/sprites.strf | 2 +- data/images/tiles.strf | 22 ++++++++++ data/images/tiles/water/electrified-0.png | Bin 0 -> 1907 bytes data/images/tiles/water/electrified-1.png | Bin 0 -> 1715 bytes data/images/tiles/water/electrified_waves-0.png | Bin 0 -> 1913 bytes data/images/tiles/water/electrified_waves-1.png | Bin 0 -> 1687 bytes data/levels/test/kugelblitz.stl | 2 +- data/levels/world2/dfk-level3.stl | 4 +- src/badguy/kugelblitz.cpp | 52 ++++++++++++++++++++---- src/badguy/kugelblitz.hpp | 5 ++- src/object/tilemap.cpp | 9 ++++ src/object/tilemap.hpp | 3 ++ src/sector.cpp | 1 - 13 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 data/images/tiles/water/electrified-0.png create mode 100644 data/images/tiles/water/electrified-1.png create mode 100644 data/images/tiles/water/electrified_waves-0.png create mode 100644 data/images/tiles/water/electrified_waves-1.png diff --git a/data/images/sprites.strf b/data/images/sprites.strf index 879e7c47a..fb396a4bf 100644 --- a/data/images/sprites.strf +++ b/data/images/sprites.strf @@ -1348,7 +1348,7 @@ (action (name "falling") (x-offset 0) - (y-offset ) + (y-offset 0) (images "creatures/kugelblitz/falling-0.png" "creatures/kugelblitz/falling-1.png" "creatures/kugelblitz/falling-2.png")) diff --git a/data/images/tiles.strf b/data/images/tiles.strf index c5a07aff7..dc87789af 100644 --- a/data/images/tiles.strf +++ b/data/images/tiles.strf @@ -1275,6 +1275,7 @@ "tiles/lava/lava1-4.png" ) (water #t) + (spike #t) (anim-fps 10) ) (tile @@ -1286,6 +1287,7 @@ "tiles/lava/lava2-4.png" ) (water #t) + (spike #t) (anim-fps 10) ) (tile @@ -5365,4 +5367,24 @@ ) (solid #t) ) + (tile + (id 1421) + (images + "tiles/water/electrified-0.png" + "tiles/water/electrified-1.png" + ) + (anim-fps 5) + (spike #t) + (water #t) + ) + (tile + (id 1422) + (images + "tiles/water/electrified_waves-0.png" + "tiles/water/electrified_waves-1.png" + ) + (anim-fps 5) + (spike #t) + (water #t) + ) ) diff --git a/data/images/tiles/water/electrified-0.png b/data/images/tiles/water/electrified-0.png new file mode 100644 index 0000000000000000000000000000000000000000..a2eec75f528884ad6a0e7494cd8be06b7f19f5e1 GIT binary patch literal 1907 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 JPDHLkV1k8d{Ote$ literal 0 HcmV?d00001 diff --git a/data/images/tiles/water/electrified_waves-0.png b/data/images/tiles/water/electrified_waves-0.png new file mode 100644 index 0000000000000000000000000000000000000000..62207e387820c02ca6c9391a27e5d0216be363ca GIT binary patch literal 1913 zcmV-<2Zs2GP)0|NZy*A+Nv>eEr}6 zP=jHB6uU9AI}k4-ei4+~%b;K7tknLkwHwJv2m#Wc|4WG(gOP{OPm3t2#?DKKn~#oC4!Yc<*PKiwk+4 z%AEciR4LuD8npImXIF1FR_BJ}gdl+P`n?JH_-}j1h0VTUCKyf>=d(`+)@On>UP5fm zsmrU+9=xr*@i4JDRF+~)L&VH+U>b!|jZ&Q)1M<~Y{Wv>cJ(@YrhPiWdnR)y5k?pba zkEe#Jkpm1#Ai&{h#3G&LSvj|jaa+r6SEvZy+0kdlyNK-Edv8FOTR>>%WmFJ@Qk zD1-DGFV!$}Hv5XaAeK1=at!R}#<$uL6X1a$@bD&+15|aE#aW6os}h1R4uKei80C4n zN>$QkUr{quo$K>VaA8}Nr5aHp{({Oib=-|1_h?G%HC1)S9BArj>wGvY#!?Ll!cv^2 zD5^$?VCLi$xL9Y>yci;IyKBtVc5gCewR{CSx_?sXbMA$xWi#lmIV$= zL+F{ff0ePNlf2cgA-zZ8@v}k_2?#J`VLe7foXd4&H6@xltqS{DIn14ntr=Hmi7^XH zb(W@>IcAPXCtlMI&N0@jk^7gK+r6?sDoZhz(s^a>y}d=?<{}e-Q$U zdQ{jSTL&kCh>%2_X^70lPzA?%wl@x?ks^#kU~_0R?W7t9!H=*z8U`GTq6RU-Y6?J4 zv4{{vFn6K|kGF+ddub5CPLZXHv(y<~oz;*?8Fq(GnwlInV@Q#4h@{YkYEj1tG;fsI z$SI(v{N%v}rp`Z~ENr%lJH*`8Q(I5E(95%)600$if(S;B;G~cY$tgHFMAnlq4V}6v z3cG{i=9no-gfK>GRnE^6L4@@v{PfK=kJpt)&kBUdcHg^VwF)54kRq!gv7eQ6n3d9u zF$cyWu~cQqfiXvpi*dVCHlm~`oSk@)li(hx%|Rh1Va$=ow}mk{4{s)_ITvS{qJ~*u z7=$0cvEtcQdA6%O-4@IseA_bP5Sfcon;{6BL*=+MR6Cp9x`3Ro6YD8*wo0TVr@;cH z8B0|l@MPQA94pO@^%QvPwF!6F92#>mYI9WkAWJy~h8Rvplrcx|=#H@Ep z0_Wx;b1cT!w+ow{p(-cm0rx&9f(Xrw90VDKF$${@lrF1!HX|1sYL#?-9j9nXI2&5P=?_>GFWhO^BUki_JOW!B7&kJ`5 zr*Wz3%!_h)HV{L=+-a?sAO;~lxovFriUeUA18?0QxIHwMV$WA+r`J8l04|srWimFU zQC+CjPP?EGToCVNa2z)%#nIJC{T!MZ%^-@9_Qk0V89dsP)!`xV^;pU8^@ZdVL*;h&pr`26Zr7Fm2 zHo3FeE9P)@k;o~qp86k^rm#CSYBicV=c|NDCsR|Wsj=0H1ZQ{b8`JqJb9vTxz_}<_ z7n$=ZQd@tgB11TA%A8J=L3? z;z(cb)ETD8X4jY(<#yXx4Z_(f@#ce(AqoEhq?PBF8>a`W00000NkvXXu0mjfnX-(V literal 0 HcmV?d00001 diff --git a/data/images/tiles/water/electrified_waves-1.png b/data/images/tiles/water/electrified_waves-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1744a14a1be997f0a8972f24a59f452a6ea57f43 GIT binary patch literal 1687 zcmV;I259+-P)*632of)nMKVt@c?Ba6kc}VA8zbvrUcu`CUU)S|7DhG+JQ>rF`V;qXUp{zc*hEf+{al;*~0x@#?RC`SX|mkHN40 z{`D8N@mzqEV6peSHa-W)k7v{dayPpJ2ymF7RA`Ntwejj5BR>Q6x0hdku^8spIJ?+D zmq7(Yz&&nxJG$$Vh^K#iIKnuFfyKzXpq`uY`FjAo-x-TT;*8VphvKgC_`>NrJLF*4?_L)-gSk52eWR=fq2ItC z|D2WpIm0-`yY$r!frC$1jA8*e}1cMHWG%P zAZ`un^x?DH-#NE8!hSU7;tZW)?zqFy3#B@xIavkS75BM1ukRbvrFZ{bC?`k^3g21A|=Qw@tmDL3CGzf735!c&CTQRR9K}s z=CB(L;gRz$30Z~1Y-filMVeILW}8SFjLbD0%ogwVouW&M+QMpSPTr43GiN<0mxJOG zQOwOrB0p=*+JeSDN93hOPOU-T3C*2WBl4*@b9F?8(ww;(W{zkCnUk;`lspwjfZfrU zYtY%;NkV+QH~}z=r=UIxvbA8w9me9!1;%0sP#Ros1*r&-jB zo&@A_9nNcoZLjocL2b@6PwDHQ!IhSe&5~rV_8 z_L#w&UE|>pk){kuqLxlG!yPt*GIY__m*$5rx2SU`C&44bECPl>f!b(;|_-sbyV6S(+)YSgvKvM z&i!3uSg3+%6kqHO&R88KzMB`uPH8$8L#uGLPPm7@ 0 && player.get_bbox().p2.y < + (get_bbox().p1.y + get_bbox().p2.y) / 2) { + // if it's not is it possible to squish us, then this will hurt + if(!collision_squished(player)) + player.kill(Player::SHRINK); + explode(); + return FORCE_MOVE; + } + player.kill(Player::SHRINK); + explode(); + return FORCE_MOVE; +} + +HitResponse Kugelblitz::collision_badguy(BadGuy& other , const CollisionHit& chit) { //Let the Kugelblitz explode, too? @@ -104,13 +124,13 @@ Kugelblitz::hit(const CollisionHit& chit) void Kugelblitz::active_update(float elapsed_time) { - if (lifetime.check()) { - if (!dying) { - sprite->set_action("pop"); - lifetime.start(0.2); - dying = true; - } - else remove_me(); + if (electrify_timer.check()) { + Sector::current()->solids->change_all(1421,75); + Sector::current()->solids->change_all(1422,76); + explode(); + } + else if (lifetime.check()) { + explode(); } else { if (groundhit_pos_set) { @@ -123,6 +143,11 @@ Kugelblitz::active_update(float elapsed_time) } if (Sector::current()->solids->get_tile_at(get_pos())->getAttributes() == 16) { //HIT WATER + Sector::current()->solids->change_all(75,1421); + Sector::current()->solids->change_all(76,1422); + physic.set_velocity_x(0); + physic.set_velocity_y(0); + electrify_timer.start(1); } } BadGuy::active_update(elapsed_time); @@ -133,4 +158,15 @@ Kugelblitz::kill_fall() { } +void +Kugelblitz::explode() +{ + if (!dying) { + sprite->set_action("pop"); + lifetime.start(0.2); + dying = true; + } + else remove_me(); +} + IMPLEMENT_FACTORY(Kugelblitz, "kugelblitz") diff --git a/src/badguy/kugelblitz.hpp b/src/badguy/kugelblitz.hpp index d63092207..5e591207b 100644 --- a/src/badguy/kugelblitz.hpp +++ b/src/badguy/kugelblitz.hpp @@ -29,12 +29,14 @@ public: Kugelblitz(const lisp::Lisp& reader); void activate(); - HitResponse collision_solid(GameObject& other, const CollisionHit& hit); HitResponse collision_badguy(BadGuy& other, const CollisionHit& hit); + HitResponse collision_solid(GameObject& other, const CollisionHit& hit); + HitResponse collision_player(Player& player, const CollisionHit& hit); void write(lisp::Writer& writer); void active_update(float); void kill_fall(); + void explode(); private: HitResponse hit(const CollisionHit& hit); @@ -43,6 +45,7 @@ private: bool dying; Timer movement_timer; Timer lifetime; + Timer electrify_timer; int direction; }; diff --git a/src/object/tilemap.cpp b/src/object/tilemap.cpp index d37ae5c32..8775418a6 100644 --- a/src/object/tilemap.cpp +++ b/src/object/tilemap.cpp @@ -281,4 +281,13 @@ TileMap::change_at(const Vector& pos, uint32_t newtile) change(int(pos.x)/32, int(pos.y)/32, newtile); } +void +TileMap::change_all(uint32_t oldtile, uint32_t newtile) +{ + for (size_t x = 0; x < get_width(); x++) + for (size_t y = 0; y < get_height(); y++) { + if (get_tile(x,y)->getID() == oldtile) change(x,y,newtile); + } +} + IMPLEMENT_FACTORY(TileMap, "tilemap"); diff --git a/src/object/tilemap.hpp b/src/object/tilemap.hpp index dcd74788d..e344fa097 100644 --- a/src/object/tilemap.hpp +++ b/src/object/tilemap.hpp @@ -79,6 +79,9 @@ public: void change_at(const Vector& pos, uint32_t newtile); + /// changes all tiles with the given ID + void change_all(uint32_t oldtile, uint32_t newtile); + TileManager* get_tilemanager() const { return tilemanager; diff --git a/src/sector.cpp b/src/sector.cpp index cb20718a8..5ff6b03ec 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -56,7 +56,6 @@ #include "object/bullet.hpp" #include "object/text_object.hpp" #include "badguy/jumpy.hpp" -#include "badguy/spike.hpp" #include "trigger/sequence_trigger.hpp" #include "player_status.hpp" #include "scripting/script_interpreter.hpp" -- 2.11.0