From 84b9939dde15625226b3005ccb4892bc46f0257c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Thu, 24 Oct 2019 23:51:24 +0200 Subject: [PATCH] Add warrior --- assets.h | 39 +++++++++++ assets/monster_warrior_attack.png | Bin 750 -> 7490 bytes assets/monster_warrior_idle.png | Bin 785 -> 7838 bytes levels.h | 3 +- main.c | 108 ++++++++++++++++++++++-------- 5 files changed, 120 insertions(+), 30 deletions(-) diff --git a/assets.h b/assets.h index 541298a..0b2938e 100644 --- a/assets.h +++ b/assets.h @@ -656,6 +656,45 @@ SFG_PROGRAM_MEMORY uint8_t SFG_monsterSprites[][SFG_TEXTURE_STORE_SIZE] = 51,51,33,0,0,0,0,0,26,172,221,222,16,1,17,118,34,38,97,0,0,0,0,0,26,204,221,238, 16,0,0,17,17,17,16,0,0,0,0,0,26,205,238,17,0,0,0,0,0,0,0,0,0,0,0,0,17,17,17,0,0, 0,0,0,0,0,0,0,0,0,0 + }, + { // 6. warrior idle +175,0,3,5,1,4,6,7,2,62,170,63,92,93,95,151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,17,17,17,17, +17,17,16,0,0,0,0,0,0,0,23,119,119,119,119,119,119,119,113,0,0,0,0,0,0,1,136,255, +153,187,187,187,185,153,241,0,0,0,0,0,0,1,17,17,17,17,17,17,17,31,133,16,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,85,16,0,0,1,17,16,0,0,0,0,0,0,0,0,0,21,81,0,1,19,53,82,0, +0,0,0,0,0,0,0,0,1,33,1,22,99,51,82,0,0,17,0,0,0,0,0,0,1,40,22,102,51,51,36,0,0, +23,16,0,17,16,0,0,18,40,119,102,99,50,68,0,0,22,113,17,234,113,0,1,85,85,85,54, +51,50,68,0,0,19,103,122,234,102,16,24,60,205,51,38,99,50,68,0,0,1,51,54,162,54, +65,130,57,220,211,38,51,50,68,0,0,0,21,51,102,99,72,34,57,156,211,38,99,51,36,0, +1,17,34,85,51,102,52,34,57,220,211,38,51,51,82,0,19,51,51,51,51,51,84,34,60,205, +50,86,99,53,82,0,1,17,34,37,51,53,84,34,51,51,35,102,50,34,36,0,0,0,18,85,85,85, +72,40,51,50,55,98,34,34,36,0,0,1,37,85,162,82,72,136,34,36,117,34,36,68,68,0,0, +21,85,42,234,34,65,132,34,36,82,36,68,34,36,0,0,21,33,17,234,33,0,20,34,36,36, +68,66,83,82,0,0,18,16,0,17,16,0,1,17,17,36,68,68,68,68,0,0,17,0,0,0,0,0,0,0,1, +36,68,68,34,36,0,0,0,0,0,0,0,0,0,0,0,18,36,66,83,82,0,0,0,0,0,0,0,0,0,0,0,1,18, +36,68,68,0,0,0,0,0,0,0,0,0,0,0,0,1,18,34,36,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,16,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0 + }, + { // 7, warrior attacking +175,0,5,1,3,4,2,7,6,63,170,92,93,62,95,148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +17,0,0,1,17,16,0,0,0,0,0,0,0,0,0,1,71,16,1,18,37,84,0,0,1,16,0,0,0,0,0,18,73,17, +24,130,34,84,0,0,1,113,16,1,17,0,1,36,63,115,72,34,34,67,0,0,1,135,113,30,167, +16,1,102,99,150,68,130,36,51,0,0,0,24,119,174,168,33,22,82,35,247,52,34,36,51,0, +0,0,18,34,138,162,131,102,43,188,57,100,66,36,51,0,0,0,1,82,40,136,35,68,45,203, +61,115,66,36,51,0,0,1,17,20,85,40,130,52,45,219,195,150,68,34,67,0,0,18,34,34, +34,34,37,52,45,203,195,151,52,34,84,0,0,1,17,68,82,34,85,52,43,188,34,57,100,66, +84,0,0,0,1,69,85,85,83,68,34,34,36,57,115,69,84,0,0,0,20,85,90,165,67,102,34,34, +66,99,148,100,67,0,0,0,21,84,174,164,67,54,68,67,84,67,215,51,51,0,0,1,84,17,30, +164,16,3,102,99,70,51,57,52,84,0,0,1,65,0,1,17,0,0,51,51,70,51,51,115,51,0,0,1, +16,0,0,0,0,0,0,1,100,51,51,147,68,0,0,0,0,0,0,0,0,0,0,0,17,68,102,55,19,0,0,0,0, +0,0,0,0,0,0,0,0,17,20,57,17,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,16,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } }; diff --git a/assets/monster_warrior_attack.png b/assets/monster_warrior_attack.png index 588f19bf457facf874ac24cb072393dbc6640c34..54acd722f422676d765346c1654b77e840e5a00c 100644 GIT binary patch literal 7490 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 F_g@-!^*sOp delta 664 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 ie+c#7JNMlx_zPAO9z!Nd`<3nh0000coords[0]); - pos.y = SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[1]); + pos.x = SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[0]); + pos.y = SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[1]); - dir.x = SFG_player.camera.position.x - pos.x; - dir.y = SFG_player.camera.position.y - pos.y; + dir.x = SFG_player.camera.position.x - pos.x; + dir.y = SFG_player.camera.position.y - pos.y; - dir = RCL_normalize(dir); + dir = RCL_normalize(dir); - SFG_launchProjectile( - SFG_PROJECTILE_FIREBALL, - pos, - SFG_floorHeightAt( - SFG_MONSTER_COORD_TO_SQUARES(monster->coords[0]), - SFG_MONSTER_COORD_TO_SQUARES(monster->coords[1]) - ) + RCL_UNITS_PER_SQUARE / 2, - dir, - 0, - SFG_ELEMENT_COLLISION_DISTANCE - ); + SFG_launchProjectile( + SFG_PROJECTILE_FIREBALL, + pos, + SFG_floorHeightAt( + SFG_MONSTER_COORD_TO_SQUARES(monster->coords[0]), + SFG_MONSTER_COORD_TO_SQUARES(monster->coords[1]) + ) + RCL_UNITS_PER_SQUARE / 2, + dir, + 0, + SFG_ELEMENT_COLLISION_DISTANCE + ); + } } else state = SFG_MONSTER_STATE_IDLE; } else if (state == SFG_MONSTER_STATE_IDLE) { - switch (SFG_random() % 8) + if (melee) { - case 0: state = SFG_MONSTER_STATE_GOING_E; break; - case 1: state = SFG_MONSTER_STATE_GOING_W; break; - case 2: state = SFG_MONSTER_STATE_GOING_N; break; - case 3: state = SFG_MONSTER_STATE_GOING_S; break; - case 4: state = SFG_MONSTER_STATE_GOING_NE; break; - case 5: state = SFG_MONSTER_STATE_GOING_NW; break; - case 6: state = SFG_MONSTER_STATE_GOING_SE; break; - case 7: state = SFG_MONSTER_STATE_GOING_SW; break; - default: break; + // melee monsters walk towards player + + uint8_t mX = SFG_MONSTER_COORD_TO_SQUARES(monster->coords[0]); + uint8_t mY = SFG_MONSTER_COORD_TO_SQUARES(monster->coords[1]); + + if (mX > SFG_player.squarePosition[0]) + { + if (mY > SFG_player.squarePosition[1]) + state = SFG_MONSTER_STATE_GOING_NW; + else if (mY < SFG_player.squarePosition[1]) + state = SFG_MONSTER_STATE_GOING_SW; + else + state = SFG_MONSTER_STATE_GOING_W; + } + else if (mX < SFG_player.squarePosition[0]) + { + if (mY > SFG_player.squarePosition[1]) + state = SFG_MONSTER_STATE_GOING_NE; + else if (mY < SFG_player.squarePosition[1]) + state = SFG_MONSTER_STATE_GOING_SE; + else + state = SFG_MONSTER_STATE_GOING_E; + } + else + { + if (mY > SFG_player.squarePosition[1]) + state = SFG_MONSTER_STATE_GOING_N; + else if (mY < SFG_player.squarePosition[1]) + state = SFG_MONSTER_STATE_GOING_S; + } + } + else + { + // ranged monsters choose direction randomly + + switch (SFG_random() % 8) + { + case 0: state = SFG_MONSTER_STATE_GOING_E; break; + case 1: state = SFG_MONSTER_STATE_GOING_W; break; + case 2: state = SFG_MONSTER_STATE_GOING_N; break; + case 3: state = SFG_MONSTER_STATE_GOING_S; break; + case 4: state = SFG_MONSTER_STATE_GOING_NE; break; + case 5: state = SFG_MONSTER_STATE_GOING_NW; break; + case 6: state = SFG_MONSTER_STATE_GOING_SE; break; + case 7: state = SFG_MONSTER_STATE_GOING_SW; break; + default: break; + } } } else if (state == SFG_MONSTER_STATE_ATTACKING)