From f5ecc2033967068c6b1fd7360191e48a7339beb5 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Wed, 24 Jul 2024 14:08:39 -0500 Subject: [PATCH] Prepare Witch class animations and spritesheet. --- Adventures in Lestoria/Animation.cpp | 67 ++++++++++++++++++ Adventures in Lestoria/BulletTypes.h | 10 ++- .../assets/config/Player.txt | 25 ++++--- .../assets/config/gfx/gfx.txt | 1 + Adventures in Lestoria/assets/nico-witch.png | Bin 0 -> 8018 bytes Adventures in Lestoria/assets/nico-witch.xcf | Bin 0 -> 30115 bytes 6 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 Adventures in Lestoria/assets/nico-witch.png create mode 100644 Adventures in Lestoria/assets/nico-witch.xcf diff --git a/Adventures in Lestoria/Animation.cpp b/Adventures in Lestoria/Animation.cpp index d607d590..70f006b2 100644 --- a/Adventures in Lestoria/Animation.cpp +++ b/Adventures in Lestoria/Animation.cpp @@ -268,6 +268,73 @@ void sig::Animation::InitializeAnimations(){ ANIMATION_DATA["TRAPPER_SETTRAP_E"]=pl_trapper_setTrap_e; ANIMATION_DATA["TRAPPER_SETTRAP_W"]=pl_trapper_setTrap_w; + //Witch animations + SetupClassWalkIdleAnimations(GFX["nico-witch.png"],"WITCH"); + Animate2D::FrameSequence pl_wizard_idle_attack_s; + pl_wizard_idle_attack_s.AddFrame({&GFX["nico-witch.png"],{vi2d{4,0}*24,{24,24}}}); + ANIMATION_DATA["WITCH_IDLE_ATTACK_S"]=pl_wizard_idle_attack_s; + Animate2D::FrameSequence pl_wizard_idle_attack_e; + pl_wizard_idle_attack_e.AddFrame({&GFX["nico-witch.png"],{vi2d{4,3}*24,{24,24}}}); + ANIMATION_DATA["WITCH_IDLE_ATTACK_E"]=pl_wizard_idle_attack_e; + Animate2D::FrameSequence pl_wizard_idle_attack_w; + pl_wizard_idle_attack_w.AddFrame({&GFX["nico-witch.png"],{vi2d{4,2}*24,{24,24}}}); + ANIMATION_DATA["WITCH_IDLE_ATTACK_W"]=pl_wizard_idle_attack_w; + Animate2D::FrameSequence pl_wizard_idle_attack_n; + pl_wizard_idle_attack_n.AddFrame({&GFX["nico-witch.png"],{vi2d{4,1}*24,{24,24}}}); + ANIMATION_DATA["WITCH_IDLE_ATTACK_N"]=pl_wizard_idle_attack_n; + Animate2D::FrameSequence pl_wizard_attack_s(0.2f); + for(int i=0;i<3;i++){ + pl_wizard_attack_s.AddFrame({&GFX["nico-witch.png"],{vi2d{4+i,0}*24,{24,24}}}); + if(i==1){ + pl_wizard_attack_s.AddFrame({&GFX["nico-witch.png"],{vi2d{4,0}*24,{24,24}}}); + } + } + ANIMATION_DATA["WITCH_ATTACK_S"]=pl_wizard_attack_s; + Animate2D::FrameSequence pl_wizard_attack_e(0.2f); + for(int i=0;i<3;i++){ + pl_wizard_attack_e.AddFrame({&GFX["nico-witch.png"],{vi2d{4+i,3}*24,{24,24}}}); + if(i==1){ + pl_wizard_attack_e.AddFrame({&GFX["nico-witch.png"],{vi2d{4,3}*24,{24,24}}}); + } + } + ANIMATION_DATA["WITCH_ATTACK_E"]=pl_wizard_attack_e; + Animate2D::FrameSequence pl_wizard_attack_w(0.2f); + for(int i=0;i<3;i++){ + pl_wizard_attack_w.AddFrame({&GFX["nico-witch.png"],{vi2d{4+i,2}*24,{24,24}}}); + if(i==1){ + pl_wizard_attack_w.AddFrame({&GFX["nico-witch.png"],{vi2d{4,2}*24,{24,24}}}); + } + } + ANIMATION_DATA["WITCH_ATTACK_W"]=pl_wizard_attack_w; + Animate2D::FrameSequence pl_wizard_attack_n(0.2f); + for(int i=0;i<3;i++){ + pl_wizard_attack_n.AddFrame({&GFX["nico-witch.png"],{vi2d{4+i,1}*24,{24,24}}}); + if(i==1){ + pl_wizard_attack_n.AddFrame({&GFX["nico-witch.png"],{vi2d{4,1}*24,{24,24}}}); + } + } + ANIMATION_DATA["WITCH_ATTACK_N"]=pl_wizard_attack_n; + Animate2D::FrameSequence pl_wizard_cast_s(0.1f); + for(int i=0;i<2;i++){ + pl_wizard_cast_s.AddFrame({&GFX["nico-witch.png"],{vi2d{7+i,0}*24,{24,24}}}); + } + ANIMATION_DATA["WITCH_CAST_S"]=pl_wizard_cast_s; + Animate2D::FrameSequence pl_wizard_cast_e(0.1f); + for(int i=0;i<2;i++){ + pl_wizard_cast_e.AddFrame({&GFX["nico-witch.png"],{vi2d{7+i,3}*24,{24,24}}}); + } + ANIMATION_DATA["WITCH_CAST_E"]=pl_wizard_cast_e; + Animate2D::FrameSequence pl_wizard_cast_n(0.1f); + for(int i=0;i<2;i++){ + pl_wizard_cast_n.AddFrame({&GFX["nico-witch.png"],{vi2d{7+i,1}*24,{24,24}}}); + } + ANIMATION_DATA["WITCH_CAST_N"]=pl_wizard_cast_n; + Animate2D::FrameSequence pl_wizard_cast_w(0.1f); + for(int i=0;i<2;i++){ + pl_wizard_cast_w.AddFrame({&GFX["nico-witch.png"],{vi2d{7+i,2}*24,{24,24}}}); + } + ANIMATION_DATA["WITCH_CAST_W"]=pl_wizard_cast_w; + CreateHorizontalAnimationSequence("ground-slam-attack-back.png",5,{64,64},{0.02f,Animate2D::Style::OneShot}); CreateHorizontalAnimationSequence("ground-slam-attack-front.png",5,{64,64},{0.02f,Animate2D::Style::OneShot}); CreateHorizontalAnimationSequence("battlecry_effect.png",5,{84,84},{0.02f,Animate2D::Style::OneShot}); diff --git a/Adventures in Lestoria/BulletTypes.h b/Adventures in Lestoria/BulletTypes.h index 35122972..94c8c161 100644 --- a/Adventures in Lestoria/BulletTypes.h +++ b/Adventures in Lestoria/BulletTypes.h @@ -316,4 +316,12 @@ private: float automaticDetonationTime{}; float activationWaitTime{}; float lastBeepTime{}; -}; \ No newline at end of file +}; + +struct PurpleEnergyBall:public Bullet{ + PurpleEnergyBall(vf2d pos,float radius,float homingRadius,int damage,bool upperLevel,bool hitsMultiple=false,float lifetime=INFINITE,bool friendly=false,Pixel col=WHITE,vf2d scale={1,1}); + void Update(float fElapsedTime)override; +private: + const float initialScale; + const float homingRadius; +} \ No newline at end of file diff --git a/Adventures in Lestoria/assets/config/Player.txt b/Adventures in Lestoria/assets/config/Player.txt index 8b5beee9..d3114205 100644 --- a/Adventures in Lestoria/assets/config/Player.txt +++ b/Adventures in Lestoria/assets/config/Player.txt @@ -71,16 +71,16 @@ Player Health Warning Outline Color = 255,0,0,255 # Each attack will have _N,_E,_S,_W appended to them once read in-game. - PLAYER_ANIMATION[0] = WARRIOR_WALK - PLAYER_ANIMATION[1] = WARRIOR_IDLE - PLAYER_ANIMATION[2] = WARRIOR_SWINGSWORD - PLAYER_ANIMATION[3] = WARRIOR_SWINGSONICSWORD - PLAYER_ANIMATION[4] = RANGER_WALK - PLAYER_ANIMATION[5] = RANGER_IDLE - PLAYER_ANIMATION[6] = RANGER_SHOOT - PLAYER_ANIMATION[7] = WIZARD_WALK - PLAYER_ANIMATION[8] = WIZARD_IDLE_ATTACK - PLAYER_ANIMATION[9] = WIZARD_ATTACK + PLAYER_ANIMATION[0] = WARRIOR_WALK + PLAYER_ANIMATION[1] = WARRIOR_IDLE + PLAYER_ANIMATION[2] = WARRIOR_SWINGSWORD + PLAYER_ANIMATION[3] = WARRIOR_SWINGSONICSWORD + PLAYER_ANIMATION[4] = RANGER_WALK + PLAYER_ANIMATION[5] = RANGER_IDLE + PLAYER_ANIMATION[6] = RANGER_SHOOT + PLAYER_ANIMATION[7] = WIZARD_WALK + PLAYER_ANIMATION[8] = WIZARD_IDLE_ATTACK + PLAYER_ANIMATION[9] = WIZARD_ATTACK PLAYER_ANIMATION[10] = WIZARD_CAST PLAYER_ANIMATION[11] = WIZARD_IDLE PLAYER_ANIMATION[12] = THIEF_IDLE @@ -91,6 +91,11 @@ Player PLAYER_ANIMATION[17] = TRAPPER_WALK PLAYER_ANIMATION[18] = TRAPPER_SHOOT PLAYER_ANIMATION[19] = TRAPPER_SETTRAP + PLAYER_ANIMATION[20] = WITCH_WALK + PLAYER_ANIMATION[21] = WITCH_IDLE_ATTACK + PLAYER_ANIMATION[22] = WITCH_ATTACK + PLAYER_ANIMATION[23] = WITCH_CAST + PLAYER_ANIMATION[24] = WITCH_IDLE } PlayerXP diff --git a/Adventures in Lestoria/assets/config/gfx/gfx.txt b/Adventures in Lestoria/assets/config/gfx/gfx.txt index 1c064c57..74693f0c 100644 --- a/Adventures in Lestoria/assets/config/gfx/gfx.txt +++ b/Adventures in Lestoria/assets/config/gfx/gfx.txt @@ -117,6 +117,7 @@ Images GFX_Thief_Sheet = nico-thief.png GFX_Trapper_Sheet = nico-trapper.png + GFX_Witch_Sheet = nico-witch.png # Ability Icons GFX_Warrior_BattleCry_Icon = Ability Icons/battlecry.png diff --git a/Adventures in Lestoria/assets/nico-witch.png b/Adventures in Lestoria/assets/nico-witch.png new file mode 100644 index 0000000000000000000000000000000000000000..8356ae10295a4d578e7a448ec378c239223ac818 GIT binary patch literal 8018 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