From 861064bf121f7dee3cddf8c9b942641fbc3b6376 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Thu, 12 Sep 2019 16:47:14 +0200 Subject: [PATCH 01/18] Started improving on balfrog.cpp Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 138 +++++++++++++++++++++++++++++------------------ src/NpChar.h | 16 ++++++ src/Stage.h | 7 +++ 3 files changed, 108 insertions(+), 53 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 63177d27..17b348fd 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -8,8 +8,38 @@ #include "MyChar.h" #include "NpChar.h" #include "Sound.h" +#include "Stage.h" #include "Triangle.h" +enum BalfrogStates +{ + BALFROG_INITIALIZE = 0, + BALFROG_START = 10, + BALFROG_INITIALIZE_FLICKER = 20, + BALFROG_FLICKER = 21, + BALFROG_WAIT = 100, + BALFROG_INITIALIZE_HOP_1 = 101, + BALFROG_INITIALIZE_HOP_2 = 102, + BALFROG_HOP = 103, + BALFROG_MIDAIR = 104, + BALFROG_INITIALIZE_LAND = 110, + BALFROG_LAND = 111, + BALFROG_INITIALIZE_SHOOT = 113, + BALFROG_INITIALIZE_LEAP_1 = 120, + BALFROG_INITIALIZE_LEAP_2 = 121, + BALFROG_INITIALIZE_LEAP_3 = 122, + BALFROG_LEAP = 123, + BALFROG_LEAP_MIDAIR = 124, + BALFROG_DIE = 130, + BALFROG_DIE_FLASHING = 131, + BALFROG_REVERT = 132, + BALFROG_NOP_START = 140, + BALFROG_NOP = 141, + BALFROG_GO_INTO_CEILING = 142, + BALFROG_GONE_INTO_CEILING = 143 +}; + + // Balfrog's mouth static void ActBossChar02_01(void) { @@ -27,33 +57,33 @@ static void ActBossChar02_01(void) { case 0: boss->hit_voice = 52; - boss->hit.front = 0x2000; - boss->hit.top = 0x2000; - boss->hit.back = 0x2000; - boss->hit.bottom = 0x2000; + boss->hit.front = PIXELS_TO_UNITS(16); + boss->hit.top = PIXELS_TO_UNITS(16); + boss->hit.back = PIXELS_TO_UNITS(16); + boss->hit.bottom = PIXELS_TO_UNITS(16); boss->size = 3; boss->bits = NPC_INVULNERABLE; break; case 1: - boss->x = gBoss[0].x + -0x3000 * minus; - boss->y = gBoss[0].y - 0x3000; + boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(24); break; case 2: - boss->x = gBoss[0].x + -0x3000 * minus; - boss->y = gBoss[0].y - 0x2800; + boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(20); break; case 3: case 4: - boss->x = gBoss[0].x + -0x3000 * minus; - boss->y = gBoss[0].y - 0x2000; + boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(32); break; case 5: - boss->x = gBoss[0].x + -0x3000 * minus; - boss->y = gBoss[0].y - 0x5600; + boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); break; } } @@ -66,10 +96,10 @@ static void ActBossChar02_02(void) { case 0: boss->hit_voice = 52; - boss->hit.front = 0x3000; - boss->hit.top = 0x2000; - boss->hit.back = 0x3000; - boss->hit.bottom = 0x2000; + boss->hit.front = PIXELS_TO_UNITS(24); + boss->hit.top = PIXELS_TO_UNITS(16); + boss->hit.back = PIXELS_TO_UNITS(24); + boss->hit.bottom = PIXELS_TO_UNITS(16); boss->size = 3; boss->bits = NPC_INVULNERABLE; break; @@ -93,7 +123,7 @@ void ActBossChar_Frog(void) int ym; int xm; - // Rects 1-4 are for when Balfrog is a frog, 5-8 for when he reverts and goes into the ceiling + // Rects 1-4 are for when Balfrog is a frog, 5-8 for when he reverts into Balrog and goes into the ceiling RECT rcLeft[9] = { {0, 0, 0, 0}, {0, 48, 80, 112}, @@ -122,19 +152,19 @@ void ActBossChar_Frog(void) switch (boss->act_no) { - case 0: - boss->x = 0xC000; - boss->y = 0x19000; + case BALFROG_INITIALIZE: + boss->x = TILES_TO_UNITS(6); + boss->y = (TILES_TO_UNITS(12) + PIXELS_TO_UNITS(8)); boss->direct = 2; - boss->view.front = 0x6000; - boss->view.top = 0x6000; - boss->view.back = 0x4000; - boss->view.bottom = 0x2000; + boss->view.front = TILES_TO_UNITS(3); + boss->view.top = TILES_TO_UNITS(3); + boss->view.back = TILES_TO_UNITS(2); + boss->view.bottom = TILES_TO_UNITS(1); boss->hit_voice = 52; - boss->hit.front = 0x3000; - boss->hit.top = 0x2000; - boss->hit.back = 0x3000; - boss->hit.bottom = 0x2000; + boss->hit.front = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->hit.top = TILES_TO_UNITS(1); + boss->hit.back = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->hit.bottom = TILES_TO_UNITS(1); boss->size = 3; boss->exp = 1; boss->code_event = 1000; @@ -142,27 +172,29 @@ void ActBossChar_Frog(void) boss->life = 300; break; - case 10: - boss->act_no = 11; + case BALFROG_START: + boss->act_no = (BALFROG_START + 1); boss->ani_no = 3; - boss->cond = 0x80; + boss->cond = NPCCOND_ALIVE; boss->rect = rcRight[0]; - gBoss[1].cond = 0x90; + + gBoss[1].cond = (NPCCOND_ALIVE | NPCCOND_DAMAGE_BOSS); gBoss[1].code_event = 1000; - gBoss[2].cond = 0x80; + gBoss[2].cond = NPCCOND_ALIVE; + gBoss[1].damage = 5; gBoss[2].damage = 5; for (i = 0; i < 8; ++i) - SetNpChar(4, boss->x + (Random(-12, 12) * 0x200), boss->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); break; - case 20: - boss->act_no = 21; + case BALFROG_INITIALIZE_FLICKER: + boss->act_no = BALFROG_FLICKER; boss->act_wait = 0; // Fallthrough - case 21: + case BALFROG_FLICKER: if (++boss->act_wait / 2 % 2) boss->ani_no = 3; else @@ -170,62 +202,62 @@ void ActBossChar_Frog(void) break; - case 100: - boss->act_no = 101; + case BALFROG_WAIT: + boss->act_no = BALFROG_INITIALIZE_HOP_1; boss->act_wait = 0; boss->ani_no = 1; boss->xm = 0; // Fallthrough - case 101: + case BALFROG_INITIALIZE_HOP_1: if (++boss->act_wait > 50) { - boss->act_no = 102; + boss->act_no = BALFROG_INITIALIZE_HOP_2; boss->ani_wait = 0; boss->ani_no = 2; } break; - case 102: + case BALFROG_INITIALIZE_HOP_2: if (++boss->ani_wait > 10) { - boss->act_no = 103; + boss->act_no = BALFROG_HOP; boss->ani_wait = 0; boss->ani_no = 1; } break; - case 103: + case BALFROG_HOP: if (++boss->ani_wait > 4) { - boss->act_no = 104; + boss->act_no = BALFROG_MIDAIR; boss->ani_no = 5; - boss->ym = -0x400; + boss->ym = -PIXELS_TO_UNITS(2); PlaySoundObject(25, 1); if (boss->direct == 0) - boss->xm = -0x200; + boss->xm = -PIXELS_TO_UNITS(1); else - boss->xm = 0x200; + boss->xm = PIXELS_TO_UNITS(1); - boss->view.top = 0x8000; - boss->view.bottom = 0x3000; + boss->view.top = TILES_TO_UNITS(4); + boss->view.bottom = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); } break; - case 104: + case BALFROG_MIDAIR: if (boss->direct == 0 && boss->flag & 1) { boss->direct = 2; - boss->xm = 0x200; + boss->xm = PIXELS_TO_UNITS(1); } if (boss->direct == 2 && boss->flag & 4) { boss->direct = 0; - boss->xm = -0x200; + boss->xm = -PIXELS_TO_UNITS(1); } if (boss->flag & 8) diff --git a/src/NpChar.h b/src/NpChar.h index 3062b890..a10190a6 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -26,6 +26,22 @@ enum NPCFlags NPC_SHOW_DAMAGE = 1<<15 // Show the number of damage taken when harmed }; +enum NPCCond +{ + NPCCOND_DAMAGE_BOSS = 0x10, // (gBoss npc exclusive) When set, damage the main boss + NPCCOND_ALIVE = 0x80 // Whether the NPC is alive or not +}; + +enum NPCNames +{ + NPC_NULL = 0, + NPC_EXP = 1, + NPC_ENEMY_BEHEMOTH = 2, + NPC_NULL_DELETES_ITSELF = 3, + NPC_SMOKE = 4, + // To be finished later +}; + struct NPCHAR { unsigned char cond; diff --git a/src/Stage.h b/src/Stage.h index 1f628d02..b7869ef5 100644 --- a/src/Stage.h +++ b/src/Stage.h @@ -66,3 +66,10 @@ extern MusicID gMusicNo; BOOL TransferStage(int no, int w, int x, int y); void ChangeMusic(MusicID no); void ReCallMusic(); + +#define TILES_TO_UNITS(x) ((x) * 0x2000) +#define UNITS_TO_TILES(x) ((x) / 0x2000) +#define TILES_TO_PIXELS(x) ((x) * 0x10) +#define PIXELS_TO_TILES(x) ((x) / 0x10) +#define PIXELS_TO_UNITS(x) ((x) * 0x200) +#define UNITS_TO_PIXELS(x) ((x) / 0x200) From 9bef4b1d49363a395feee19d6b2c70d733df41ac Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Fri, 13 Sep 2019 18:49:17 +0200 Subject: [PATCH 02/18] Commented BossFrog entirely Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 333 +++++++++++++++++++++++--------------------- src/CommonDefines.h | 27 ++++ src/NpChar.h | 10 +- src/Sound.h | 14 ++ src/Stage.h | 7 - 5 files changed, 224 insertions(+), 167 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 17b348fd..02244bb5 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -3,12 +3,12 @@ #include "WindowsWrapper.h" #include "Boss.h" +#include "CommonDefines.h" #include "Frame.h" #include "Game.h" #include "MyChar.h" #include "NpChar.h" #include "Sound.h" -#include "Stage.h" #include "Triangle.h" enum BalfrogStates @@ -24,7 +24,9 @@ enum BalfrogStates BALFROG_MIDAIR = 104, BALFROG_INITIALIZE_LAND = 110, BALFROG_LAND = 111, - BALFROG_INITIALIZE_SHOOT = 113, + BALFROG_INITIALIZE_SHOOT = 112, + BALFROG_SHOOT = 113, + BALFROG_AFTER_SHOOT_WAIT = 114, BALFROG_INITIALIZE_LEAP_1 = 120, BALFROG_INITIALIZE_LEAP_2 = 121, BALFROG_INITIALIZE_LEAP_3 = 122, @@ -39,6 +41,18 @@ enum BalfrogStates BALFROG_GONE_INTO_CEILING = 143 }; +enum BalfrogAnims +{ + BALFANI_NOTHING = 0, + BALFANI_STANDING_STILL = 1, + BALFANI_MOUTH_BARELY_OPEN_CROUCHING = 2, + BALFANI_MOUTH_OPEN_CROUCHING = 3, + BALFANI_MOUTH_OPEN_CROUCHING_FLASHING = 4, + BALFANI_JUMPING = 5, + BALFANI_BALROG_WHITE = 6, + BALFANI_BALROG_CROUCHING = 7, + BALFANI_BALROG_JUMPING = 8 +}; // Balfrog's mouth static void ActBossChar02_01(void) @@ -46,7 +60,7 @@ static void ActBossChar02_01(void) NPCHAR *boss; int minus; - if (gBoss[0].direct == 0) + if (gBoss[0].direct == DIR_LEFT) minus = 1; else minus = -1; @@ -55,8 +69,8 @@ static void ActBossChar02_01(void) switch (gBoss[0].ani_no) { - case 0: - boss->hit_voice = 52; + case BALFANI_NOTHING: + boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = PIXELS_TO_UNITS(16); boss->hit.top = PIXELS_TO_UNITS(16); boss->hit.back = PIXELS_TO_UNITS(16); @@ -65,23 +79,23 @@ static void ActBossChar02_01(void) boss->bits = NPC_INVULNERABLE; break; - case 1: + case BALFANI_STANDING_STILL: boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(24); break; - case 2: + case BALFANI_MOUTH_BARELY_OPEN_CROUCHING: boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(20); break; - case 3: - case 4: + case BALFANI_MOUTH_OPEN_CROUCHING: + case BALFANI_MOUTH_OPEN_CROUCHING_FLASHING: boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(32); break; - case 5: + case BALFANI_JUMPING: boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); break; @@ -94,8 +108,8 @@ static void ActBossChar02_02(void) switch (gBoss[0].ani_no) { - case 0: - boss->hit_voice = 52; + case BALFANI_NOTHING: + boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = PIXELS_TO_UNITS(24); boss->hit.top = PIXELS_TO_UNITS(16); boss->hit.back = PIXELS_TO_UNITS(24); @@ -104,11 +118,11 @@ static void ActBossChar02_02(void) boss->bits = NPC_INVULNERABLE; break; - case 1: - case 2: - case 3: - case 4: - case 5: + case BALFANI_STANDING_STILL: + case BALFANI_MOUTH_BARELY_OPEN_CROUCHING: + case BALFANI_MOUTH_OPEN_CROUCHING: + case BALFANI_MOUTH_OPEN_CROUCHING_FLASHING: + case BALFANI_JUMPING: boss->x = gBoss[0].x; boss->y = gBoss[0].y; break; @@ -125,17 +139,18 @@ void ActBossChar_Frog(void) // Rects 1-4 are for when Balfrog is a frog, 5-8 for when he reverts into Balrog and goes into the ceiling RECT rcLeft[9] = { - {0, 0, 0, 0}, - {0, 48, 80, 112}, - {0, 112, 80, 176}, - {0, 176, 80, 240}, - {160, 48, 240, 112}, - {160, 112, 240, 200}, - {200, 0, 240, 24}, - {80, 0, 120, 24}, - {120, 0, 160, 24}, + {0, 0, 0, 0}, // Nothing + {0, 48, 80, 112}, // Balfrog standing still + {0, 112, 80, 176}, // Balfrog with his mouth barely open, crouching + {0, 176, 80, 240}, // Balfrog with his mouth open, crouching + {160, 48, 240, 112}, // Balfrog with his mouth open, crouching, flashing + {160, 112, 240, 200}, // Balfrog jumping + {200, 0, 240, 24}, // Balrog completely white + {80, 0, 120, 24}, // Balrog crouching + {120, 0, 160, 24}, // Balrog jumping }; + // See above RECT rcRight[9] = { {0, 0, 0, 0}, {80, 48, 160, 112}, @@ -155,12 +170,12 @@ void ActBossChar_Frog(void) case BALFROG_INITIALIZE: boss->x = TILES_TO_UNITS(6); boss->y = (TILES_TO_UNITS(12) + PIXELS_TO_UNITS(8)); - boss->direct = 2; + boss->direct = DIR_RIGHT; boss->view.front = TILES_TO_UNITS(3); boss->view.top = TILES_TO_UNITS(3); boss->view.back = TILES_TO_UNITS(2); boss->view.bottom = TILES_TO_UNITS(1); - boss->hit_voice = 52; + boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); boss->hit.top = TILES_TO_UNITS(1); boss->hit.back = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); @@ -174,7 +189,7 @@ void ActBossChar_Frog(void) case BALFROG_START: boss->act_no = (BALFROG_START + 1); - boss->ani_no = 3; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; boss->cond = NPCCOND_ALIVE; boss->rect = rcRight[0]; @@ -186,7 +201,7 @@ void ActBossChar_Frog(void) gBoss[2].damage = 5; for (i = 0; i < 8; ++i) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); break; @@ -196,24 +211,24 @@ void ActBossChar_Frog(void) // Fallthrough case BALFROG_FLICKER: if (++boss->act_wait / 2 % 2) - boss->ani_no = 3; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; else - boss->ani_no = 0; + boss->ani_no = BALFANI_NOTHING; break; case BALFROG_WAIT: boss->act_no = BALFROG_INITIALIZE_HOP_1; boss->act_wait = 0; - boss->ani_no = 1; + boss->ani_no = BALFANI_STANDING_STILL; boss->xm = 0; // Fallthrough case BALFROG_INITIALIZE_HOP_1: - if (++boss->act_wait > 50) + if (++boss->act_wait > SECONDS_TO_FRAMES(1)) { boss->act_no = BALFROG_INITIALIZE_HOP_2; boss->ani_wait = 0; - boss->ani_no = 2; + boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; } break; @@ -223,7 +238,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_HOP; boss->ani_wait = 0; - boss->ani_no = 1; + boss->ani_no = BALFANI_STANDING_STILL; } break; @@ -232,11 +247,11 @@ void ActBossChar_Frog(void) if (++boss->ani_wait > 4) { boss->act_no = BALFROG_MIDAIR; - boss->ani_no = 5; + boss->ani_no = BALFANI_JUMPING; boss->ym = -PIXELS_TO_UNITS(2); PlaySoundObject(25, 1); - if (boss->direct == 0) + if (boss->direct == DIR_LEFT) boss->xm = -PIXELS_TO_UNITS(1); else boss->xm = PIXELS_TO_UNITS(1); @@ -248,71 +263,71 @@ void ActBossChar_Frog(void) break; case BALFROG_MIDAIR: - if (boss->direct == 0 && boss->flag & 1) + if (boss->direct == DIR_LEFT && boss->flag & COLL_LEFT_WALL) { - boss->direct = 2; + boss->direct = DIR_RIGHT; boss->xm = PIXELS_TO_UNITS(1); } - if (boss->direct == 2 && boss->flag & 4) + if (boss->direct == DIR_RIGHT && boss->flag & COLL_RIGHT_WALL) { - boss->direct = 0; + boss->direct = DIR_LEFT; boss->xm = -PIXELS_TO_UNITS(1); } - if (boss->flag & 8) + if (boss->flag & COLL_GROUND) { - PlaySoundObject(26, 1); + PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(30); - boss->act_no = 100; - boss->ani_no = 1; - boss->view.top = 0x6000; - boss->view.bottom = 0x2000; + boss->act_no = BALFROG_WAIT; + boss->ani_no = BALFANI_STANDING_STILL; + boss->view.top = TILES_TO_UNITS(3); + boss->view.bottom = TILES_TO_UNITS(1); - if (boss->direct == 0 && boss->x < gMC.x) + if (boss->direct == DIR_LEFT && boss->x < gMC.x) { - boss->direct = 2; - boss->act_no = 110; + boss->direct = DIR_RIGHT; + boss->act_no = BALFROG_INITIALIZE_LAND; } - if (boss->direct == 2 && boss->x > gMC.x) + if (boss->direct == DIR_RIGHT && boss->x > gMC.x) { - boss->direct = 0; - boss->act_no = 110; + boss->direct = DIR_LEFT; + boss->act_no = BALFROG_INITIALIZE_LAND; } - SetNpChar(110, Random(4, 16) * 0x2000, Random(0, 4) * 0x2000, 0, 0, 4, 0, 0x80); + SetNpChar(110, TILES_TO_UNITS(Random(4, 16)), TILES_TO_UNITS(Random(0, 4)), 0, 0, DIR_AUTO, NULL, 0x80); for (i = 0; i < 4; ++i) - SetNpChar(4, boss->x + (Random(-12, 12) * 0x200), boss->y + boss->hit.bottom, Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + boss->hit.bottom, Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); } break; - case 110: - boss->ani_no = 1; + case BALFROG_INITIALIZE_LAND: + boss->ani_no = BALFANI_STANDING_STILL; boss->act_wait = 0; - boss->act_no = 111; + boss->act_no = BALFROG_LAND; // Fallthrough - case 111: + case BALFROG_LAND: ++boss->act_wait; boss->xm = 8 * boss->xm / 9; - if (boss->act_wait > 50) + if (boss->act_wait > SECONDS_TO_FRAMES(1)) { - boss->ani_no = 2; + boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; boss->ani_wait = 0; - boss->act_no = 112; + boss->act_no = BALFROG_INITIALIZE_SHOOT; } break; - case 112: + case BALFROG_INITIALIZE_SHOOT: if (++boss->ani_wait > 4) { - boss->act_no = 113; + boss->act_no = BALFROG_SHOOT; boss->act_wait = 0; - boss->ani_no = 3; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; boss->count1 = 16; gBoss[1].bits |= NPC_SHOOTABLE; boss->tgt_x = boss->life; @@ -320,18 +335,18 @@ void ActBossChar_Frog(void) break; - case 113: + case BALFROG_SHOOT: if (boss->shock) { if (boss->count2++ / 2 % 2) - boss->ani_no = 4; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING_FLASHING; else - boss->ani_no = 3; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; } else { boss->count2 = 0; - boss->ani_no = 3; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; } boss->xm = 10 * boss->xm / 11; @@ -341,28 +356,28 @@ void ActBossChar_Frog(void) boss->act_wait = 0; --boss->count1; - if (boss->direct == 0) - deg = GetArktan(boss->x - 0x4000 - gMC.x, boss->y - 0x1000 - gMC.y); + if (boss->direct == DIR_LEFT) + deg = GetArktan(boss->x - TILES_TO_UNITS(2) - gMC.x, boss->y - PIXELS_TO_UNITS(8) - gMC.y); else - deg = GetArktan(boss->x + 0x4000 - gMC.x, boss->y - 0x1000 - gMC.y); + deg = GetArktan(boss->x + TILES_TO_UNITS(2) - gMC.x, boss->y - PIXELS_TO_UNITS(8) - gMC.y); - deg += (unsigned char)Random(-16, 16); + deg += (unsigned char)Random(-0x10, 0x10); ym = GetSin(deg); xm = GetCos(deg); - if (boss->direct == 0) - SetNpChar(108, boss->x - 0x4000, boss->y - 0x1000, xm, ym, 0, 0, 0x100); + if (boss->direct == DIR_LEFT) + SetNpChar(NPC_PROJECTILE_BALFROG_SPITBALL, boss->x - TILES_TO_UNITS(2), boss->y - PIXELS_TO_UNITS(8), xm, ym, DIR_LEFT, NULL, 0x100); else - SetNpChar(108, boss->x + 0x4000, boss->y - 0x1000, xm, ym, 0, 0, 0x100); + SetNpChar(NPC_PROJECTILE_BALFROG_SPITBALL, boss->x + TILES_TO_UNITS(2), boss->y - PIXELS_TO_UNITS(8), xm, ym, DIR_LEFT, NULL, 0x100); - PlaySoundObject(39, 1); + PlaySoundObject(SND_ENEMY_SHOOT_PROJETILE, 1); if (boss->count1 == 0 || boss->life < boss->tgt_x - 90) { - boss->act_no = 114; + boss->act_no = BALFROG_AFTER_SHOOT_WAIT; boss->act_wait = 0; - boss->ani_no = 2; + boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; boss->ani_wait = 0; gBoss[1].bits &= ~NPC_SHOOTABLE; } @@ -370,188 +385,188 @@ void ActBossChar_Frog(void) break; - case 114: + case BALFROG_AFTER_SHOOT_WAIT: if (++boss->ani_wait > 10) { if (++gBoss[1].count1 > 2) { gBoss[1].count1 = 0; - boss->act_no = 120; + boss->act_no = BALFROG_INITIALIZE_LEAP_1; } else { - boss->act_no = 100; + boss->act_no = BALFROG_WAIT; } boss->ani_wait = 0; - boss->ani_no = 1; + boss->ani_no = BALFANI_STANDING_STILL; } break; - case 120: - boss->act_no = 121; + case BALFROG_INITIALIZE_LEAP_1: + boss->act_no = BALFROG_INITIALIZE_LEAP_2; boss->act_wait = 0; - boss->ani_no = 1; + boss->ani_no = BALFANI_STANDING_STILL; boss->xm = 0; // Fallthrough - case 121: - if (++boss->act_wait > 50) + case BALFROG_INITIALIZE_LEAP_2: + if (++boss->act_wait > SECONDS_TO_FRAMES(1)) { - boss->act_no = 122; + boss->act_no = BALFROG_INITIALIZE_LEAP_3; boss->ani_wait = 0; - boss->ani_no = 2; + boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; } break; - case 122: + case BALFROG_INITIALIZE_LEAP_3: if (++boss->ani_wait > 20) { - boss->act_no = 123; + boss->act_no = BALFROG_LEAP; boss->ani_wait = 0; - boss->ani_no = 1; + boss->ani_no = BALFANI_STANDING_STILL; } break; - case 123: + case BALFROG_LEAP: if (++boss->ani_wait > 4) { - boss->act_no = 124; - boss->ani_no = 5; - boss->ym = -0xA00; - boss->view.top = 0x8000; - boss->view.bottom = 0x3000; - PlaySoundObject(25, 1); + boss->act_no = BALFROG_LEAP_MIDAIR; + boss->ani_no = BALFANI_JUMPING; + boss->ym = -PIXELS_TO_UNITS(5); + boss->view.top = TILES_TO_UNITS(4); + boss->view.bottom = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + PlaySoundObject(SND_SILLY_EXPLOSION, 1); } break; - case 124: - if (boss->flag & 8) + case BALFROG_LEAP_MIDAIR: + if (boss->flag & COLL_GROUND) { - PlaySoundObject(26, 1); + PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(60); - boss->act_no = 100; - boss->ani_no = 1; - boss->view.top = 0x6000; - boss->view.bottom = 0x2000; + boss->act_no = BALFROG_WAIT; + boss->ani_no = BALFANI_STANDING_STILL; + boss->view.top = TILES_TO_UNITS(3); + boss->view.bottom = TILES_TO_UNITS(1); for (i = 0; i < 2; ++i) - SetNpChar(104, Random(4, 16) * 0x2000, Random(0, 4) * 0x2000, 0, 0, 4, 0, 0x80); + SetNpChar(NPC_ENEMY_FROG, TILES_TO_UNITS(Random(4, 16)), TILES_TO_UNITS(Random(0, 4)), 0, 0, DIR_AUTO, NULL, 0x80); for (i = 0; i < 6; ++i) - SetNpChar(110, Random(4, 16) * 0x2000, Random(0, 4) * 0x2000, 0, 0, 4, 0, 0x80); + SetNpChar(NPC_ENEMY_PUCHI, TILES_TO_UNITS(Random(4, 16)), TILES_TO_UNITS(Random(0, 4)), 0, 0, DIR_AUTO, NULL, 0x80); for (i = 0; i < 8; ++i) - SetNpChar(4, boss->x + (Random(-12, 12) * 0x200), boss->y + boss->hit.bottom, Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + boss->hit.bottom, Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); - if (boss->direct == 0 && boss->x < gMC.x) + if (boss->direct == DIR_LEFT && boss->x < gMC.x) { - boss->direct = 2; - boss->act_no = 110; + boss->direct = DIR_RIGHT; + boss->act_no = BALFROG_INITIALIZE_LAND; } - if (boss->direct == 2 && boss->x > gMC.x) + if (boss->direct == DIR_RIGHT && boss->x > gMC.x) { - boss->direct = 0; - boss->act_no = 110; + boss->direct = DIR_LEFT; + boss->act_no = BALFROG_INITIALIZE_LAND; } } break; - case 130: - boss->act_no = 131; - boss->ani_no = 3; + case BALFROG_DIE: + boss->act_no = BALFROG_DIE_FLASHING; + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; boss->act_wait = 0; boss->xm = 0; - PlaySoundObject(72, 1); + PlaySoundObject(SND_EXPLOSION, 1); for (i = 0; i < 8; ++i) - SetNpChar(4, boss->x + (Random(-12, 12) * 0x200), boss->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); gBoss[1].cond = 0; gBoss[2].cond = 0; // Fallthrough - case 131: + case BALFROG_DIE_FLASHING: if (++boss->act_wait % 5 == 0) - SetNpChar(4, boss->x + (Random(-12, 12) * 0x200), boss->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); if (boss->act_wait / 2 % 2) - boss->x -= 0x200; + boss->x -= PIXELS_TO_UNITS(1); else - boss->x += 0x200; + boss->x += PIXELS_TO_UNITS(1); - if (boss->act_wait > 100) + if (boss->act_wait > SECONDS_TO_FRAMES(2)) { boss->act_wait = 0; - boss->act_no = 132; + boss->act_no = BALFROG_REVERT; } break; - case 132: + case BALFROG_REVERT: if (++boss->act_wait / 2 % 2) { - boss->view.front = 0x2800; - boss->view.top = 0x1800; - boss->view.back = 0x2800; - boss->view.bottom = 0x1800; - boss->ani_no = 6; + boss->view.front = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->view.top = PIXELS_TO_UNITS(12); + boss->view.back = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->view.bottom = PIXELS_TO_UNITS(12); + boss->ani_no = BALFANI_BALROG_WHITE; } else { - boss->view.front = 0x6000; - boss->view.top = 0x6000; - boss->view.back = 0x4000; - boss->view.bottom = 0x2000; - boss->ani_no = 3; + boss->view.front = TILES_TO_UNITS(3); + boss->view.top = TILES_TO_UNITS(3); + boss->view.back = TILES_TO_UNITS(2); + boss->view.bottom = TILES_TO_UNITS(1); + boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; } if (boss->act_wait % 9 == 0) - SetNpChar(4, boss->x + (Random(-12, 12) * 0x200), boss->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); - if (boss->act_wait > 150) + if (boss->act_wait > SECONDS_TO_FRAMES(3)) { - boss->act_no = 140; - boss->hit.bottom = 0x1800; + boss->act_no = BALFROG_NOP_START; + boss->hit.bottom = PIXELS_TO_UNITS(12); } break; - case 140: - boss->act_no = 141; + case BALFROG_NOP_START: + boss->act_no = BALFROG_NOP; // Fallthrough - case 141: - if (boss->flag & 8) + case BALFROG_NOP: + if (boss->flag & COLL_GROUND) { - boss->act_no = 142; + boss->act_no = BALFROG_GO_INTO_CEILING; boss->act_wait = 0; - boss->ani_no = 7; + boss->ani_no = BALFANI_BALROG_CROUCHING; } break; - case 142: + case BALFROG_GO_INTO_CEILING: if (++boss->act_wait > 30) { - boss->ani_no = 8; - boss->ym = -0xA00; + boss->ani_no = BALFANI_BALROG_JUMPING; + boss->ym = -PIXELS_TO_UNITS(5); boss->bits |= NPC_IGNORE_SOLIDITY; - boss->act_no = 143; + boss->act_no = BALFROG_GONE_INTO_CEILING; } break; - case 143: - boss->ym = -0xA00; + case BALFROG_GONE_INTO_CEILING: + boss->ym = -PIXELS_TO_UNITS(5); if (boss->y < 0) { boss->cond = 0; - PlaySoundObject(26, 1); + PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(30); } @@ -559,13 +574,13 @@ void ActBossChar_Frog(void) } boss->ym += 0x40; - if (boss->ym > 0x5FF) - boss->ym = 0x5FF; + if (boss->ym > (PIXELS_TO_UNITS(3) - 1)) + boss->ym = (PIXELS_TO_UNITS(3) - 1); boss->x += boss->xm; boss->y += boss->ym; - if (boss->direct == 0) + if (boss->direct == DIR_LEFT) boss->rect = rcLeft[boss->ani_no]; else boss->rect = rcRight[boss->ani_no]; diff --git a/src/CommonDefines.h b/src/CommonDefines.h index de0c7298..126cd4db 100644 --- a/src/CommonDefines.h +++ b/src/CommonDefines.h @@ -2,3 +2,30 @@ #define WINDOW_WIDTH 320 #define WINDOW_HEIGHT 240 + +enum Direction +{ + DIR_LEFT = 0, + DIR_UP = 1, + DIR_RIGHT = 2, + DIR_DOWN = 3, + DIR_AUTO = 4 +}; + +enum Collisions +{ + COLL_LEFT_WALL = 1, // Touching a left wall + COLL_CEILING = 2, // Touching a ceiling + COLL_RIGHT_WALL = 4, // Touching a right wall + COLL_GROUND = 8, // Touching the ground + // To be continued +}; + +#define TILES_TO_UNITS(x) ((x) * 0x2000) +#define UNITS_TO_TILES(x) ((x) / 0x2000) +#define TILES_TO_PIXELS(x) ((x) * 0x10) +#define PIXELS_TO_TILES(x) ((x) / 0x10) +#define PIXELS_TO_UNITS(x) ((x) * 0x200) +#define UNITS_TO_PIXELS(x) ((x) / 0x200) +#define SECONDS_TO_FRAMES(x) ((x) * 50) +#define FRAMES_TO_SECONDS(x) ((x) / 50) diff --git a/src/NpChar.h b/src/NpChar.h index a10190a6..ffd36232 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -39,7 +39,15 @@ enum NPCNames NPC_ENEMY_BEHEMOTH = 2, NPC_NULL_DELETES_ITSELF = 3, NPC_SMOKE = 4, - // To be finished later + // To be continued + NPC_ENEMY_FROG = 104, + NPC_SPEECH_BALLOON_HEY_LOW = 105, + NPC_SPEECH_BALLOON_HEY_HIGH = 106, + NPC_MALCO_UNDAMAGED = 107, + NPC_PROJECTILE_BALFROG_SPITBALL = 108, + NPC_MALCO_DAMAGED = 109, + NPC_ENEMY_PUCHI = 110, + // To be continued }; struct NPCHAR diff --git a/src/Sound.h b/src/Sound.h index 26e0fa0d..9c6e3f1a 100644 --- a/src/Sound.h +++ b/src/Sound.h @@ -23,3 +23,17 @@ void ChangeSoundFrequency(int no, unsigned long rate); void ChangeSoundVolume(int no, long volume); void ChangeSoundPan(int no, long pan); int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no); + +enum SoundEffectNames +{ + // To be continued + SND_SILLY_EXPLOSION = 25, + SND_LARGE_OBJECT_HIT_GROUND = 26, + // To be continued + SND_ENEMY_SHOOT_PROJETILE = 39, + // To be continued + SND_BEHEMOTH_LARGE_HURT = 52, + // To be continued + SND_EXPLOSION = 72, + // To be continued +}; diff --git a/src/Stage.h b/src/Stage.h index b7869ef5..1f628d02 100644 --- a/src/Stage.h +++ b/src/Stage.h @@ -66,10 +66,3 @@ extern MusicID gMusicNo; BOOL TransferStage(int no, int w, int x, int y); void ChangeMusic(MusicID no); void ReCallMusic(); - -#define TILES_TO_UNITS(x) ((x) * 0x2000) -#define UNITS_TO_TILES(x) ((x) / 0x2000) -#define TILES_TO_PIXELS(x) ((x) * 0x10) -#define PIXELS_TO_TILES(x) ((x) / 0x10) -#define PIXELS_TO_UNITS(x) ((x) * 0x200) -#define UNITS_TO_PIXELS(x) ((x) / 0x200) From e2c57e6dbc3a9c0e74557ad9a42f98f20bb9e5a6 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Fri, 13 Sep 2019 20:35:37 +0200 Subject: [PATCH 03/18] Alphabetized macros in BossFrog and re-ordered some stuff to go along with Clownacy's coding standards Also changed NPC_NULL_DELETES_ITSELF to NPC_DAMAGE_TEXT_HOLDER as Fayti pointed out the misnomer Note to self : Make a PR with coding standards Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 26 +++++++++++++------------- src/CommonDefines.h | 32 ++++++++++++++++---------------- src/NpChar.h | 2 +- src/Sound.h | 22 +++++++++++----------- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 02244bb5..22c12f6c 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -11,6 +11,19 @@ #include "Sound.h" #include "Triangle.h" +enum BalfrogAnims +{ + BALFANI_NOTHING = 0, + BALFANI_STANDING_STILL = 1, + BALFANI_MOUTH_BARELY_OPEN_CROUCHING = 2, + BALFANI_MOUTH_OPEN_CROUCHING = 3, + BALFANI_MOUTH_OPEN_CROUCHING_FLASHING = 4, + BALFANI_JUMPING = 5, + BALFANI_BALROG_WHITE = 6, + BALFANI_BALROG_CROUCHING = 7, + BALFANI_BALROG_JUMPING = 8 +}; + enum BalfrogStates { BALFROG_INITIALIZE = 0, @@ -41,19 +54,6 @@ enum BalfrogStates BALFROG_GONE_INTO_CEILING = 143 }; -enum BalfrogAnims -{ - BALFANI_NOTHING = 0, - BALFANI_STANDING_STILL = 1, - BALFANI_MOUTH_BARELY_OPEN_CROUCHING = 2, - BALFANI_MOUTH_OPEN_CROUCHING = 3, - BALFANI_MOUTH_OPEN_CROUCHING_FLASHING = 4, - BALFANI_JUMPING = 5, - BALFANI_BALROG_WHITE = 6, - BALFANI_BALROG_CROUCHING = 7, - BALFANI_BALROG_JUMPING = 8 -}; - // Balfrog's mouth static void ActBossChar02_01(void) { diff --git a/src/CommonDefines.h b/src/CommonDefines.h index 126cd4db..a3350f01 100644 --- a/src/CommonDefines.h +++ b/src/CommonDefines.h @@ -3,14 +3,14 @@ #define WINDOW_WIDTH 320 #define WINDOW_HEIGHT 240 -enum Direction -{ - DIR_LEFT = 0, - DIR_UP = 1, - DIR_RIGHT = 2, - DIR_DOWN = 3, - DIR_AUTO = 4 -}; +#define TILES_TO_UNITS(x) ((x) * 0x2000) +#define UNITS_TO_TILES(x) ((x) / 0x2000) +#define TILES_TO_PIXELS(x) ((x) * 0x10) +#define PIXELS_TO_TILES(x) ((x) / 0x10) +#define PIXELS_TO_UNITS(x) ((x) * 0x200) +#define UNITS_TO_PIXELS(x) ((x) / 0x200) +#define SECONDS_TO_FRAMES(x) ((x) * 50) +#define FRAMES_TO_SECONDS(x) ((x) / 50) enum Collisions { @@ -21,11 +21,11 @@ enum Collisions // To be continued }; -#define TILES_TO_UNITS(x) ((x) * 0x2000) -#define UNITS_TO_TILES(x) ((x) / 0x2000) -#define TILES_TO_PIXELS(x) ((x) * 0x10) -#define PIXELS_TO_TILES(x) ((x) / 0x10) -#define PIXELS_TO_UNITS(x) ((x) * 0x200) -#define UNITS_TO_PIXELS(x) ((x) / 0x200) -#define SECONDS_TO_FRAMES(x) ((x) * 50) -#define FRAMES_TO_SECONDS(x) ((x) / 50) +enum Direction +{ + DIR_LEFT = 0, + DIR_UP = 1, + DIR_RIGHT = 2, + DIR_DOWN = 3, + DIR_AUTO = 4 +}; diff --git a/src/NpChar.h b/src/NpChar.h index ffd36232..185a26b8 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -37,7 +37,7 @@ enum NPCNames NPC_NULL = 0, NPC_EXP = 1, NPC_ENEMY_BEHEMOTH = 2, - NPC_NULL_DELETES_ITSELF = 3, + NPC_DAMAGE_TEXT_HOLDER = 3, NPC_SMOKE = 4, // To be continued NPC_ENEMY_FROG = 104, diff --git a/src/Sound.h b/src/Sound.h index 9c6e3f1a..e2a3f9f5 100644 --- a/src/Sound.h +++ b/src/Sound.h @@ -13,17 +13,6 @@ #define SE_MAX 160 // According to the Organya source code release, this is the real name for this constant -extern LPDIRECTSOUND lpDS; -extern LPDIRECTSOUNDBUFFER lpSECONDARYBUFFER[SE_MAX]; - -BOOL InitDirectSound(HWND hwnd); -void EndDirectSound(void); -void PlaySoundObject(int no, int mode); -void ChangeSoundFrequency(int no, unsigned long rate); -void ChangeSoundVolume(int no, long volume); -void ChangeSoundPan(int no, long pan); -int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no); - enum SoundEffectNames { // To be continued @@ -37,3 +26,14 @@ enum SoundEffectNames SND_EXPLOSION = 72, // To be continued }; + +extern LPDIRECTSOUND lpDS; +extern LPDIRECTSOUNDBUFFER lpSECONDARYBUFFER[SE_MAX]; + +BOOL InitDirectSound(HWND hwnd); +void EndDirectSound(void); +void PlaySoundObject(int no, int mode); +void ChangeSoundFrequency(int no, unsigned long rate); +void ChangeSoundVolume(int no, long volume); +void ChangeSoundPan(int no, long pan); +int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no); From ac498c2be4fd864f9eb2762f09ecbf05d65c9c8d Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sat, 14 Sep 2019 20:07:35 +0200 Subject: [PATCH 04/18] After intense debate with Cucky and BLink, ended up changing "PIXELS_TO_UNITS(3) - 1" to "0x5FF" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🙄 Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 22c12f6c..2dd8c582 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -574,8 +574,8 @@ void ActBossChar_Frog(void) } boss->ym += 0x40; - if (boss->ym > (PIXELS_TO_UNITS(3) - 1)) - boss->ym = (PIXELS_TO_UNITS(3) - 1); + if (boss->ym > 0x5FF) + boss->ym = 0x5FF; boss->x += boss->xm; boss->y += boss->ym; From 041bd0e5f948d4b501f1a5589e0f98b4b67110cc Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sat, 14 Sep 2019 20:47:28 +0200 Subject: [PATCH 05/18] Used doubles for TILES_TO_UNITS weirdly written stuff Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 2dd8c582..172c71c3 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -71,33 +71,33 @@ static void ActBossChar02_01(void) { case BALFANI_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; - boss->hit.front = PIXELS_TO_UNITS(16); - boss->hit.top = PIXELS_TO_UNITS(16); - boss->hit.back = PIXELS_TO_UNITS(16); - boss->hit.bottom = PIXELS_TO_UNITS(16); + boss->hit.front = TILES_TO_UNITS(1); + boss->hit.top = TILES_TO_UNITS(1); + boss->hit.back = TILES_TO_UNITS(1); + boss->hit.bottom = TILES_TO_UNITS(1); boss->size = 3; boss->bits = NPC_INVULNERABLE; break; case BALFANI_STANDING_STILL: - boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; - boss->y = gBoss[0].y - PIXELS_TO_UNITS(24); + boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + boss->y = gBoss[0].y - TILES_TO_UNITS(1.5); break; case BALFANI_MOUTH_BARELY_OPEN_CROUCHING: - boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; - boss->y = gBoss[0].y - PIXELS_TO_UNITS(20); + boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + boss->y = gBoss[0].y - TILES_TO_UNITS(1.25); break; case BALFANI_MOUTH_OPEN_CROUCHING: case BALFANI_MOUTH_OPEN_CROUCHING_FLASHING: - boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; - boss->y = gBoss[0].y - PIXELS_TO_UNITS(32); + boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + boss->y = gBoss[0].y - TILES_TO_UNITS(2); break; case BALFANI_JUMPING: - boss->x = gBoss[0].x + -PIXELS_TO_UNITS(24) * minus; - boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); + boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); // 2.6873 tiles break; } } @@ -110,10 +110,10 @@ static void ActBossChar02_02(void) { case BALFANI_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; - boss->hit.front = PIXELS_TO_UNITS(24); - boss->hit.top = PIXELS_TO_UNITS(16); - boss->hit.back = PIXELS_TO_UNITS(24); - boss->hit.bottom = PIXELS_TO_UNITS(16); + boss->hit.front = TILES_TO_UNITS(1.5); + boss->hit.top = TILES_TO_UNITS(1); + boss->hit.back = TILES_TO_UNITS(1.5); + boss->hit.bottom = TILES_TO_UNITS(1); boss->size = 3; boss->bits = NPC_INVULNERABLE; break; @@ -169,16 +169,16 @@ void ActBossChar_Frog(void) { case BALFROG_INITIALIZE: boss->x = TILES_TO_UNITS(6); - boss->y = (TILES_TO_UNITS(12) + PIXELS_TO_UNITS(8)); + boss->y = TILES_TO_UNITS(12.5); boss->direct = DIR_RIGHT; boss->view.front = TILES_TO_UNITS(3); boss->view.top = TILES_TO_UNITS(3); boss->view.back = TILES_TO_UNITS(2); boss->view.bottom = TILES_TO_UNITS(1); boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; - boss->hit.front = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->hit.front = TILES_TO_UNITS(1.5); boss->hit.top = TILES_TO_UNITS(1); - boss->hit.back = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->hit.back = TILES_TO_UNITS(1.5); boss->hit.bottom = TILES_TO_UNITS(1); boss->size = 3; boss->exp = 1; @@ -257,7 +257,7 @@ void ActBossChar_Frog(void) boss->xm = PIXELS_TO_UNITS(1); boss->view.top = TILES_TO_UNITS(4); - boss->view.bottom = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->view.bottom = TILES_TO_UNITS(1.5); } break; @@ -437,7 +437,7 @@ void ActBossChar_Frog(void) boss->ani_no = BALFANI_JUMPING; boss->ym = -PIXELS_TO_UNITS(5); boss->view.top = TILES_TO_UNITS(4); - boss->view.bottom = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->view.bottom = TILES_TO_UNITS(1.5); PlaySoundObject(SND_SILLY_EXPLOSION, 1); } @@ -510,9 +510,9 @@ void ActBossChar_Frog(void) case BALFROG_REVERT: if (++boss->act_wait / 2 % 2) { - boss->view.front = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->view.front = TILES_TO_UNITS(1.5); boss->view.top = PIXELS_TO_UNITS(12); - boss->view.back = TILES_TO_UNITS(1) + PIXELS_TO_UNITS(8); + boss->view.back = TILES_TO_UNITS(1.5); boss->view.bottom = PIXELS_TO_UNITS(12); boss->ani_no = BALFANI_BALROG_WHITE; } From fcc1e3cc23f050ca5b01d18fef6adcea8e93352f Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 10:48:18 +0200 Subject: [PATCH 06/18] Added some common macro utilities used by most NPCs I'm pretty sure Pixel didn't actually use macros for this but I don't think just having this kind of stuff copied around everywhere is really great either Forgot to commit and push this yesterday Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 14 +++----------- src/NpChar.h | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 172c71c3..82541d2f 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -573,17 +573,9 @@ void ActBossChar_Frog(void) break; } - boss->ym += 0x40; - if (boss->ym > 0x5FF) - boss->ym = 0x5FF; - - boss->x += boss->xm; - boss->y += boss->ym; - - if (boss->direct == DIR_LEFT) - boss->rect = rcLeft[boss->ani_no]; - else - boss->rect = rcRight[boss->ani_no]; + NPC_DO_GRAVITY(boss, 0x40, 0x5FF); + NPC_UPDATE_POSITIONS_WITH_VELOCITIES(boss); + NPC_SET_RECT_FROM_LEFT_RIGHT(boss, rcLeft, rcRight); ActBossChar02_01(); ActBossChar02_02(); diff --git a/src/NpChar.h b/src/NpChar.h index 185a26b8..7fb14295 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -1,11 +1,30 @@ #pragma once +#include "CommonDefines.h" #include "WindowsWrapper.h" #include "Draw.h" #define NPC_MAX 0x200 +#define NPC_CAP_Y_VELOCITY(npc, maxYVel) \ + if (npc->ym > (maxYVel)) \ + npc->ym = (maxYVel) + +#define NPC_DO_GRAVITY(npc, ymAdd, maxYVel) \ + npc->ym += ymAdd; \ + NPC_CAP_Y_VELOCITY(npc, maxYVel) + +#define NPC_UPDATE_POSITIONS_WITH_VELOCITIES(npc) \ + npc->x += npc->xm; \ + npc->y = npc->ym; + +#define NPC_SET_RECT_FROM_LEFT_RIGHT(npc, rcLeft, rcRight) \ + if (npc->direct == DIR_LEFT) \ + npc->rect = rcLeft[npc->ani_no]; \ + else \ + npc->rect = rcRight[npc->ani_no]; + // Be careful when changing these: they're baked into the 'npc.tbl' file enum NPCFlags { From 0d833b38a8e1c8123b1ac48850a580decadaf2a4 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 10:50:46 +0200 Subject: [PATCH 07/18] Prevent some annoying warnings popping up everywhere Signed-off-by: Gabriel Ravier --- src/NpChar.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NpChar.h b/src/NpChar.h index 7fb14295..53a6e83b 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -17,13 +17,13 @@ #define NPC_UPDATE_POSITIONS_WITH_VELOCITIES(npc) \ npc->x += npc->xm; \ - npc->y = npc->ym; + npc->y = npc->ym #define NPC_SET_RECT_FROM_LEFT_RIGHT(npc, rcLeft, rcRight) \ if (npc->direct == DIR_LEFT) \ npc->rect = rcLeft[npc->ani_no]; \ else \ - npc->rect = rcRight[npc->ani_no]; + npc->rect = rcRight[npc->ani_no] // Be careful when changing these: they're baked into the 'npc.tbl' file enum NPCFlags From 4070f1b9727826439124d258568333839e051dbf Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 10:58:55 +0200 Subject: [PATCH 08/18] Changed some stuff to conform to Clownacy's PR review Changed BalfrogAnims to BalfrogSprites Changed BALFANI_[name] to BALFROG_SPRT_[name] Changed -[macro](val) to [macro](-val) Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 128 +++++++++++++++++++++++------------------------ 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 82541d2f..0b3b34fe 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -11,17 +11,17 @@ #include "Sound.h" #include "Triangle.h" -enum BalfrogAnims +enum BalfrogSprites { - BALFANI_NOTHING = 0, - BALFANI_STANDING_STILL = 1, - BALFANI_MOUTH_BARELY_OPEN_CROUCHING = 2, - BALFANI_MOUTH_OPEN_CROUCHING = 3, - BALFANI_MOUTH_OPEN_CROUCHING_FLASHING = 4, - BALFANI_JUMPING = 5, - BALFANI_BALROG_WHITE = 6, - BALFANI_BALROG_CROUCHING = 7, - BALFANI_BALROG_JUMPING = 8 + BALFROG_SPRT_NOTHING = 0, + BALFROG_SPRT_STANDING_STILL = 1, + BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING = 2, + BALFROG_SPRT_MOUTH_OPEN_CROUCHING = 3, + BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING = 4, + BALFROG_SPRT_JUMPING = 5, + BALFROG_SPRT_BALROG_WHITE = 6, + BALFROG_SPRT_BALROG_CROUCHING = 7, + BALFROG_SPRT_BALROG_JUMPING = 8 }; enum BalfrogStates @@ -69,7 +69,7 @@ static void ActBossChar02_01(void) switch (gBoss[0].ani_no) { - case BALFANI_NOTHING: + case BALFROG_SPRT_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = TILES_TO_UNITS(1); boss->hit.top = TILES_TO_UNITS(1); @@ -79,24 +79,24 @@ static void ActBossChar02_01(void) boss->bits = NPC_INVULNERABLE; break; - case BALFANI_STANDING_STILL: - boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + case BALFROG_SPRT_STANDING_STILL: + boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; boss->y = gBoss[0].y - TILES_TO_UNITS(1.5); break; - case BALFANI_MOUTH_BARELY_OPEN_CROUCHING: - boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + case BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING: + boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; boss->y = gBoss[0].y - TILES_TO_UNITS(1.25); break; - case BALFANI_MOUTH_OPEN_CROUCHING: - case BALFANI_MOUTH_OPEN_CROUCHING_FLASHING: - boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + case BALFROG_SPRT_MOUTH_OPEN_CROUCHING: + case BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING: + boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; boss->y = gBoss[0].y - TILES_TO_UNITS(2); break; - case BALFANI_JUMPING: - boss->x = gBoss[0].x + -TILES_TO_UNITS(1.5) * minus; + case BALFROG_SPRT_JUMPING: + boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); // 2.6873 tiles break; } @@ -108,7 +108,7 @@ static void ActBossChar02_02(void) switch (gBoss[0].ani_no) { - case BALFANI_NOTHING: + case BALFROG_SPRT_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = TILES_TO_UNITS(1.5); boss->hit.top = TILES_TO_UNITS(1); @@ -118,11 +118,11 @@ static void ActBossChar02_02(void) boss->bits = NPC_INVULNERABLE; break; - case BALFANI_STANDING_STILL: - case BALFANI_MOUTH_BARELY_OPEN_CROUCHING: - case BALFANI_MOUTH_OPEN_CROUCHING: - case BALFANI_MOUTH_OPEN_CROUCHING_FLASHING: - case BALFANI_JUMPING: + case BALFROG_SPRT_STANDING_STILL: + case BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING: + case BALFROG_SPRT_MOUTH_OPEN_CROUCHING: + case BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING: + case BALFROG_SPRT_JUMPING: boss->x = gBoss[0].x; boss->y = gBoss[0].y; break; @@ -189,7 +189,7 @@ void ActBossChar_Frog(void) case BALFROG_START: boss->act_no = (BALFROG_START + 1); - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; boss->cond = NPCCOND_ALIVE; boss->rect = rcRight[0]; @@ -201,7 +201,7 @@ void ActBossChar_Frog(void) gBoss[2].damage = 5; for (i = 0; i < 8; ++i) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(PIXELS_TO_UNITS(-3), 0), DIR_LEFT, NULL, 0x100); break; @@ -211,16 +211,16 @@ void ActBossChar_Frog(void) // Fallthrough case BALFROG_FLICKER: if (++boss->act_wait / 2 % 2) - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; else - boss->ani_no = BALFANI_NOTHING; + boss->ani_no = BALFROG_SPRT_NOTHING; break; case BALFROG_WAIT: boss->act_no = BALFROG_INITIALIZE_HOP_1; boss->act_wait = 0; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; boss->xm = 0; // Fallthrough case BALFROG_INITIALIZE_HOP_1: @@ -228,7 +228,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_INITIALIZE_HOP_2; boss->ani_wait = 0; - boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; } break; @@ -238,7 +238,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_HOP; boss->ani_wait = 0; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; } break; @@ -247,12 +247,12 @@ void ActBossChar_Frog(void) if (++boss->ani_wait > 4) { boss->act_no = BALFROG_MIDAIR; - boss->ani_no = BALFANI_JUMPING; - boss->ym = -PIXELS_TO_UNITS(2); + boss->ani_no = BALFROG_SPRT_JUMPING; + boss->ym = PIXELS_TO_UNITS(-2); PlaySoundObject(25, 1); if (boss->direct == DIR_LEFT) - boss->xm = -PIXELS_TO_UNITS(1); + boss->xm = PIXELS_TO_UNITS(-1); else boss->xm = PIXELS_TO_UNITS(1); @@ -272,7 +272,7 @@ void ActBossChar_Frog(void) if (boss->direct == DIR_RIGHT && boss->flag & COLL_RIGHT_WALL) { boss->direct = DIR_LEFT; - boss->xm = -PIXELS_TO_UNITS(1); + boss->xm = PIXELS_TO_UNITS(-1); } if (boss->flag & COLL_GROUND) @@ -280,7 +280,7 @@ void ActBossChar_Frog(void) PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(30); boss->act_no = BALFROG_WAIT; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; boss->view.top = TILES_TO_UNITS(3); boss->view.bottom = TILES_TO_UNITS(1); @@ -299,13 +299,13 @@ void ActBossChar_Frog(void) SetNpChar(110, TILES_TO_UNITS(Random(4, 16)), TILES_TO_UNITS(Random(0, 4)), 0, 0, DIR_AUTO, NULL, 0x80); for (i = 0; i < 4; ++i) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + boss->hit.bottom, Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + boss->hit.bottom, Random(-341, 341), Random(PIXELS_TO_UNITS(-3), 0), DIR_LEFT, NULL, 0x100); } break; case BALFROG_INITIALIZE_LAND: - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; boss->act_wait = 0; boss->act_no = BALFROG_LAND; // Fallthrough @@ -315,7 +315,7 @@ void ActBossChar_Frog(void) if (boss->act_wait > SECONDS_TO_FRAMES(1)) { - boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; boss->ani_wait = 0; boss->act_no = BALFROG_INITIALIZE_SHOOT; } @@ -327,7 +327,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_SHOOT; boss->act_wait = 0; - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; boss->count1 = 16; gBoss[1].bits |= NPC_SHOOTABLE; boss->tgt_x = boss->life; @@ -339,14 +339,14 @@ void ActBossChar_Frog(void) if (boss->shock) { if (boss->count2++ / 2 % 2) - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING_FLASHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING; else - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; } else { boss->count2 = 0; - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; } boss->xm = 10 * boss->xm / 11; @@ -377,7 +377,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_AFTER_SHOOT_WAIT; boss->act_wait = 0; - boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; boss->ani_wait = 0; gBoss[1].bits &= ~NPC_SHOOTABLE; } @@ -399,7 +399,7 @@ void ActBossChar_Frog(void) } boss->ani_wait = 0; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; } break; @@ -407,7 +407,7 @@ void ActBossChar_Frog(void) case BALFROG_INITIALIZE_LEAP_1: boss->act_no = BALFROG_INITIALIZE_LEAP_2; boss->act_wait = 0; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; boss->xm = 0; // Fallthrough case BALFROG_INITIALIZE_LEAP_2: @@ -415,7 +415,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_INITIALIZE_LEAP_3; boss->ani_wait = 0; - boss->ani_no = BALFANI_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; } break; @@ -425,7 +425,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_LEAP; boss->ani_wait = 0; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; } break; @@ -434,8 +434,8 @@ void ActBossChar_Frog(void) if (++boss->ani_wait > 4) { boss->act_no = BALFROG_LEAP_MIDAIR; - boss->ani_no = BALFANI_JUMPING; - boss->ym = -PIXELS_TO_UNITS(5); + boss->ani_no = BALFROG_SPRT_JUMPING; + boss->ym = PIXELS_TO_UNITS(-5); boss->view.top = TILES_TO_UNITS(4); boss->view.bottom = TILES_TO_UNITS(1.5); PlaySoundObject(SND_SILLY_EXPLOSION, 1); @@ -449,7 +449,7 @@ void ActBossChar_Frog(void) PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(60); boss->act_no = BALFROG_WAIT; - boss->ani_no = BALFANI_STANDING_STILL; + boss->ani_no = BALFROG_SPRT_STANDING_STILL; boss->view.top = TILES_TO_UNITS(3); boss->view.bottom = TILES_TO_UNITS(1); @@ -460,7 +460,7 @@ void ActBossChar_Frog(void) SetNpChar(NPC_ENEMY_PUCHI, TILES_TO_UNITS(Random(4, 16)), TILES_TO_UNITS(Random(0, 4)), 0, 0, DIR_AUTO, NULL, 0x80); for (i = 0; i < 8; ++i) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + boss->hit.bottom, Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + boss->hit.bottom, Random(-341, 341), Random(PIXELS_TO_UNITS(-3), 0), DIR_LEFT, NULL, 0x100); if (boss->direct == DIR_LEFT && boss->x < gMC.x) { @@ -479,20 +479,20 @@ void ActBossChar_Frog(void) case BALFROG_DIE: boss->act_no = BALFROG_DIE_FLASHING; - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; boss->act_wait = 0; boss->xm = 0; PlaySoundObject(SND_EXPLOSION, 1); for (i = 0; i < 8; ++i) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(PIXELS_TO_UNITS(-3), 0), DIR_LEFT, NULL, 0x100); gBoss[1].cond = 0; gBoss[2].cond = 0; // Fallthrough case BALFROG_DIE_FLASHING: if (++boss->act_wait % 5 == 0) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(PIXELS_TO_UNITS(-3), 0), DIR_LEFT, NULL, 0x100); if (boss->act_wait / 2 % 2) boss->x -= PIXELS_TO_UNITS(1); @@ -514,7 +514,7 @@ void ActBossChar_Frog(void) boss->view.top = PIXELS_TO_UNITS(12); boss->view.back = TILES_TO_UNITS(1.5); boss->view.bottom = PIXELS_TO_UNITS(12); - boss->ani_no = BALFANI_BALROG_WHITE; + boss->ani_no = BALFROG_SPRT_BALROG_WHITE; } else { @@ -522,11 +522,11 @@ void ActBossChar_Frog(void) boss->view.top = TILES_TO_UNITS(3); boss->view.back = TILES_TO_UNITS(2); boss->view.bottom = TILES_TO_UNITS(1); - boss->ani_no = BALFANI_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; } if (boss->act_wait % 9 == 0) - SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(-PIXELS_TO_UNITS(3), 0), DIR_LEFT, NULL, 0x100); + SetNpChar(NPC_SMOKE, boss->x + PIXELS_TO_UNITS(Random(-12, 12)), boss->y + PIXELS_TO_UNITS(Random(-12, 12)), Random(-341, 341), Random(PIXELS_TO_UNITS(-3), 0), DIR_LEFT, NULL, 0x100); if (boss->act_wait > SECONDS_TO_FRAMES(3)) { @@ -544,7 +544,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_GO_INTO_CEILING; boss->act_wait = 0; - boss->ani_no = BALFANI_BALROG_CROUCHING; + boss->ani_no = BALFROG_SPRT_BALROG_CROUCHING; } break; @@ -552,8 +552,8 @@ void ActBossChar_Frog(void) case BALFROG_GO_INTO_CEILING: if (++boss->act_wait > 30) { - boss->ani_no = BALFANI_BALROG_JUMPING; - boss->ym = -PIXELS_TO_UNITS(5); + boss->ani_no = BALFROG_SPRT_BALROG_JUMPING; + boss->ym = PIXELS_TO_UNITS(-5); boss->bits |= NPC_IGNORE_SOLIDITY; boss->act_no = BALFROG_GONE_INTO_CEILING; } @@ -561,7 +561,7 @@ void ActBossChar_Frog(void) break; case BALFROG_GONE_INTO_CEILING: - boss->ym = -PIXELS_TO_UNITS(5); + boss->ym = PIXELS_TO_UNITS(-5); if (boss->y < 0) { From 08131d527a4b49d1bd3f2fd44cac1e76dce401a6 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 14:12:35 +0200 Subject: [PATCH 09/18] Converted hitbox measurements to pixels Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 0b3b34fe..84295242 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -71,32 +71,32 @@ static void ActBossChar02_01(void) { case BALFROG_SPRT_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; - boss->hit.front = TILES_TO_UNITS(1); - boss->hit.top = TILES_TO_UNITS(1); - boss->hit.back = TILES_TO_UNITS(1); - boss->hit.bottom = TILES_TO_UNITS(1); + boss->hit.front = PIXELS_TO_UNITS(16); + boss->hit.top = PIXELS_TO_UNITS(16); + boss->hit.back = PIXELS_TO_UNITS(16); + boss->hit.bottom = PIXELS_TO_UNITS(16); boss->size = 3; boss->bits = NPC_INVULNERABLE; break; case BALFROG_SPRT_STANDING_STILL: - boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; - boss->y = gBoss[0].y - TILES_TO_UNITS(1.5); + boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(24); break; case BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING: - boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; - boss->y = gBoss[0].y - TILES_TO_UNITS(1.25); + boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(20); break; case BALFROG_SPRT_MOUTH_OPEN_CROUCHING: case BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING: - boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; - boss->y = gBoss[0].y - TILES_TO_UNITS(2); + boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; + boss->y = gBoss[0].y - PIXELS_TO_UNITS(32); break; case BALFROG_SPRT_JUMPING: - boss->x = gBoss[0].x + TILES_TO_UNITS(-1.5) * minus; + boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); // 2.6873 tiles break; } @@ -110,10 +110,10 @@ static void ActBossChar02_02(void) { case BALFROG_SPRT_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; - boss->hit.front = TILES_TO_UNITS(1.5); - boss->hit.top = TILES_TO_UNITS(1); - boss->hit.back = TILES_TO_UNITS(1.5); - boss->hit.bottom = TILES_TO_UNITS(1); + boss->hit.front = PIXELS_TO_UNITS(24); + boss->hit.top = PIXELS_TO_UNITS(16); + boss->hit.back = PIXELS_TO_UNITS(24); + boss->hit.bottom = PIXELS_TO_UNITS(16); boss->size = 3; boss->bits = NPC_INVULNERABLE; break; @@ -176,10 +176,10 @@ void ActBossChar_Frog(void) boss->view.back = TILES_TO_UNITS(2); boss->view.bottom = TILES_TO_UNITS(1); boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; - boss->hit.front = TILES_TO_UNITS(1.5); - boss->hit.top = TILES_TO_UNITS(1); - boss->hit.back = TILES_TO_UNITS(1.5); - boss->hit.bottom = TILES_TO_UNITS(1); + boss->hit.front = PIXELS_TO_UNITS(24); + boss->hit.top = PIXELS_TO_UNITS(16); + boss->hit.back = PIXELS_TO_UNITS(24); + boss->hit.bottom = PIXELS_TO_UNITS(16); boss->size = 3; boss->exp = 1; boss->code_event = 1000; From 6eadf6c4a5681740dc6f4bf7b6188ad6c19cbbbd Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 14:16:44 +0200 Subject: [PATCH 10/18] Changed view stuff to be measured in pixels, not tiles Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 84295242..62cdc935 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -171,10 +171,10 @@ void ActBossChar_Frog(void) boss->x = TILES_TO_UNITS(6); boss->y = TILES_TO_UNITS(12.5); boss->direct = DIR_RIGHT; - boss->view.front = TILES_TO_UNITS(3); - boss->view.top = TILES_TO_UNITS(3); - boss->view.back = TILES_TO_UNITS(2); - boss->view.bottom = TILES_TO_UNITS(1); + boss->view.front = PIXELS_TO_UNITS(48); + boss->view.top = PIXELS_TO_UNITS(48); + boss->view.back = PIXELS_TO_UNITS(32); + boss->view.bottom = PIXELS_TO_UNITS(16); boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = PIXELS_TO_UNITS(24); boss->hit.top = PIXELS_TO_UNITS(16); @@ -256,8 +256,8 @@ void ActBossChar_Frog(void) else boss->xm = PIXELS_TO_UNITS(1); - boss->view.top = TILES_TO_UNITS(4); - boss->view.bottom = TILES_TO_UNITS(1.5); + boss->view.top = PIXELS_TO_UNITS(64); + boss->view.bottom = PIXELS_TO_UNITS(24); } break; @@ -281,8 +281,8 @@ void ActBossChar_Frog(void) SetQuake(30); boss->act_no = BALFROG_WAIT; boss->ani_no = BALFROG_SPRT_STANDING_STILL; - boss->view.top = TILES_TO_UNITS(3); - boss->view.bottom = TILES_TO_UNITS(1); + boss->view.top = PIXELS_TO_UNITS(48); + boss->view.bottom = PIXELS_TO_UNITS(16); if (boss->direct == DIR_LEFT && boss->x < gMC.x) { @@ -436,8 +436,8 @@ void ActBossChar_Frog(void) boss->act_no = BALFROG_LEAP_MIDAIR; boss->ani_no = BALFROG_SPRT_JUMPING; boss->ym = PIXELS_TO_UNITS(-5); - boss->view.top = TILES_TO_UNITS(4); - boss->view.bottom = TILES_TO_UNITS(1.5); + boss->view.top = PIXELS_TO_UNITS(64); + boss->view.bottom = PIXELS_TO_UNITS(24); PlaySoundObject(SND_SILLY_EXPLOSION, 1); } @@ -450,8 +450,8 @@ void ActBossChar_Frog(void) SetQuake(60); boss->act_no = BALFROG_WAIT; boss->ani_no = BALFROG_SPRT_STANDING_STILL; - boss->view.top = TILES_TO_UNITS(3); - boss->view.bottom = TILES_TO_UNITS(1); + boss->view.top = PIXELS_TO_UNITS(48); + boss->view.bottom = PIXELS_TO_UNITS(16); for (i = 0; i < 2; ++i) SetNpChar(NPC_ENEMY_FROG, TILES_TO_UNITS(Random(4, 16)), TILES_TO_UNITS(Random(0, 4)), 0, 0, DIR_AUTO, NULL, 0x80); @@ -510,18 +510,18 @@ void ActBossChar_Frog(void) case BALFROG_REVERT: if (++boss->act_wait / 2 % 2) { - boss->view.front = TILES_TO_UNITS(1.5); + boss->view.front = PIXELS_TO_UNITS(24); boss->view.top = PIXELS_TO_UNITS(12); - boss->view.back = TILES_TO_UNITS(1.5); + boss->view.back = PIXELS_TO_UNITS(24); boss->view.bottom = PIXELS_TO_UNITS(12); boss->ani_no = BALFROG_SPRT_BALROG_WHITE; } else { - boss->view.front = TILES_TO_UNITS(3); - boss->view.top = TILES_TO_UNITS(3); - boss->view.back = TILES_TO_UNITS(2); - boss->view.bottom = TILES_TO_UNITS(1); + boss->view.front = PIXELS_TO_UNITS(48); + boss->view.top = PIXELS_TO_UNITS(48); + boss->view.back = PIXELS_TO_UNITS(32); + boss->view.bottom = PIXELS_TO_UNITS(16); boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; } From 04113870a5e6c1e196a1dfa4f42c02909631a820 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 15:51:32 +0200 Subject: [PATCH 11/18] Removed tiles comments when useless Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 62cdc935..0af8eb9d 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -97,7 +97,7 @@ static void ActBossChar02_01(void) case BALFROG_SPRT_JUMPING: boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; - boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); // 2.6873 tiles + boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); break; } } From 58a02a609cbb96dc11f5f31943b558e7adf3ce3b Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 15:58:04 +0200 Subject: [PATCH 12/18] Defined TILES_TO_UNITS and UNITS_TO_TILES in terms of TILES_TO_PIXELS, PIXELS_TO_TILES, PIXELS_TO_UNITS and UNITS_TO_PIXELS Signed-off-by: Gabriel Ravier --- src/CommonDefines.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/CommonDefines.h b/src/CommonDefines.h index a3350f01..d0e72807 100644 --- a/src/CommonDefines.h +++ b/src/CommonDefines.h @@ -3,12 +3,13 @@ #define WINDOW_WIDTH 320 #define WINDOW_HEIGHT 240 -#define TILES_TO_UNITS(x) ((x) * 0x2000) -#define UNITS_TO_TILES(x) ((x) / 0x2000) #define TILES_TO_PIXELS(x) ((x) * 0x10) #define PIXELS_TO_TILES(x) ((x) / 0x10) #define PIXELS_TO_UNITS(x) ((x) * 0x200) #define UNITS_TO_PIXELS(x) ((x) / 0x200) +#define TILES_TO_UNITS(x) (PIXELS_TO_UNITS(TILES_TO_PIXELS(x))) // * 0x2000 +#define UNITS_TO_TILES(x) (PIXELS_TO_TILES(UNITS_TO_PIXELS(x))) // / 0x2000 + #define SECONDS_TO_FRAMES(x) ((x) * 50) #define FRAMES_TO_SECONDS(x) ((x) / 50) From 002e0f77605f73311d35f335c8895b855c2ebdf0 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 16:00:06 +0200 Subject: [PATCH 13/18] Changed erroneous "=" to "+=" Signed-off-by: Gabriel Ravier --- src/NpChar.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NpChar.h b/src/NpChar.h index 53a6e83b..3c141d11 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -17,7 +17,7 @@ #define NPC_UPDATE_POSITIONS_WITH_VELOCITIES(npc) \ npc->x += npc->xm; \ - npc->y = npc->ym + npc->y += npc->ym #define NPC_SET_RECT_FROM_LEFT_RIGHT(npc, rcLeft, rcRight) \ if (npc->direct == DIR_LEFT) \ From 9e5e2a0e26d36c13deb87901cca97738ded0ae98 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 16:05:24 +0200 Subject: [PATCH 14/18] Indented some comments Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 18 +++++++++--------- src/CommonDefines.h | 8 ++++---- src/NpChar.h | 12 ++++++------ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 0af8eb9d..35811729 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -139,15 +139,15 @@ void ActBossChar_Frog(void) // Rects 1-4 are for when Balfrog is a frog, 5-8 for when he reverts into Balrog and goes into the ceiling RECT rcLeft[9] = { - {0, 0, 0, 0}, // Nothing - {0, 48, 80, 112}, // Balfrog standing still - {0, 112, 80, 176}, // Balfrog with his mouth barely open, crouching - {0, 176, 80, 240}, // Balfrog with his mouth open, crouching - {160, 48, 240, 112}, // Balfrog with his mouth open, crouching, flashing - {160, 112, 240, 200}, // Balfrog jumping - {200, 0, 240, 24}, // Balrog completely white - {80, 0, 120, 24}, // Balrog crouching - {120, 0, 160, 24}, // Balrog jumping + {0, 0, 0, 0}, // Nothing + {0, 48, 80, 112}, // Balfrog standing still + {0, 112, 80, 176}, // Balfrog with his mouth barely open, crouching + {0, 176, 80, 240}, // Balfrog with his mouth open, crouching + {160, 48, 240, 112}, // Balfrog with his mouth open, crouching, flashing + {160, 112, 240, 200}, // Balfrog jumping + {200, 0, 240, 24}, // Balrog completely white + {80, 0, 120, 24}, // Balrog crouching + {120, 0, 160, 24}, // Balrog jumping }; // See above diff --git a/src/CommonDefines.h b/src/CommonDefines.h index d0e72807..71393f06 100644 --- a/src/CommonDefines.h +++ b/src/CommonDefines.h @@ -15,10 +15,10 @@ enum Collisions { - COLL_LEFT_WALL = 1, // Touching a left wall - COLL_CEILING = 2, // Touching a ceiling - COLL_RIGHT_WALL = 4, // Touching a right wall - COLL_GROUND = 8, // Touching the ground + COLL_LEFT_WALL = 1, // Touching a left wall + COLL_CEILING = 2, // Touching a ceiling + COLL_RIGHT_WALL = 4, // Touching a right wall + COLL_GROUND = 8, // Touching the ground // To be continued }; diff --git a/src/NpChar.h b/src/NpChar.h index 3c141d11..aa88bddd 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -25,6 +25,12 @@ else \ npc->rect = rcRight[npc->ani_no] +enum NPCCond +{ + NPCCOND_DAMAGE_BOSS = 0x10, // (gBoss npc exclusive) When set, damage the main boss + NPCCOND_ALIVE = 0x80 // Whether the NPC is alive or not +}; + // Be careful when changing these: they're baked into the 'npc.tbl' file enum NPCFlags { @@ -45,12 +51,6 @@ enum NPCFlags NPC_SHOW_DAMAGE = 1<<15 // Show the number of damage taken when harmed }; -enum NPCCond -{ - NPCCOND_DAMAGE_BOSS = 0x10, // (gBoss npc exclusive) When set, damage the main boss - NPCCOND_ALIVE = 0x80 // Whether the NPC is alive or not -}; - enum NPCNames { NPC_NULL = 0, From 0cf2a20a9a3316361593cb67f5b5d4b01e38b48e Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 16:07:03 +0200 Subject: [PATCH 15/18] Corrected erroneous `PIXELS_TO_UNITS(32)` to `PIXELS_TO_UNITS(16)` Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 35811729..b788f374 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -92,7 +92,7 @@ static void ActBossChar02_01(void) case BALFROG_SPRT_MOUTH_OPEN_CROUCHING: case BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING: boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; - boss->y = gBoss[0].y - PIXELS_TO_UNITS(32); + boss->y = gBoss[0].y - PIXELS_TO_UNITS(16); break; case BALFROG_SPRT_JUMPING: From c9517bffc401750bfba6eb038d4103f86d4af649 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 16:10:46 +0200 Subject: [PATCH 16/18] Un-abbreviated "SPRITE" from "SPRT" in sprite macro names Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 94 ++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index b788f374..9685713c 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -13,15 +13,15 @@ enum BalfrogSprites { - BALFROG_SPRT_NOTHING = 0, - BALFROG_SPRT_STANDING_STILL = 1, - BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING = 2, - BALFROG_SPRT_MOUTH_OPEN_CROUCHING = 3, - BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING = 4, - BALFROG_SPRT_JUMPING = 5, - BALFROG_SPRT_BALROG_WHITE = 6, - BALFROG_SPRT_BALROG_CROUCHING = 7, - BALFROG_SPRT_BALROG_JUMPING = 8 + BALFROG_SPRITE_NOTHING = 0, + BALFROG_SPRITE_STANDING_STILL = 1, + BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING = 2, + BALFROG_SPRITE_MOUTH_OPEN_CROUCHING = 3, + BALFROG_SPRITE_MOUTH_OPEN_CROUCHING_FLASHING = 4, + BALFROG_SPRITE_JUMPING = 5, + BALFROG_SPRITE_BALROG_WHITE = 6, + BALFROG_SPRITE_BALROG_CROUCHING = 7, + BALFROG_SPRITE_BALROG_JUMPING = 8 }; enum BalfrogStates @@ -69,7 +69,7 @@ static void ActBossChar02_01(void) switch (gBoss[0].ani_no) { - case BALFROG_SPRT_NOTHING: + case BALFROG_SPRITE_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = PIXELS_TO_UNITS(16); boss->hit.top = PIXELS_TO_UNITS(16); @@ -79,23 +79,23 @@ static void ActBossChar02_01(void) boss->bits = NPC_INVULNERABLE; break; - case BALFROG_SPRT_STANDING_STILL: + case BALFROG_SPRITE_STANDING_STILL: boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(24); break; - case BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING: + case BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING: boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(20); break; - case BALFROG_SPRT_MOUTH_OPEN_CROUCHING: - case BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING: + case BALFROG_SPRITE_MOUTH_OPEN_CROUCHING: + case BALFROG_SPRITE_MOUTH_OPEN_CROUCHING_FLASHING: boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(16); break; - case BALFROG_SPRT_JUMPING: + case BALFROG_SPRITE_JUMPING: boss->x = gBoss[0].x + PIXELS_TO_UNITS(-24) * minus; boss->y = gBoss[0].y - PIXELS_TO_UNITS(43); break; @@ -108,7 +108,7 @@ static void ActBossChar02_02(void) switch (gBoss[0].ani_no) { - case BALFROG_SPRT_NOTHING: + case BALFROG_SPRITE_NOTHING: boss->hit_voice = SND_BEHEMOTH_LARGE_HURT; boss->hit.front = PIXELS_TO_UNITS(24); boss->hit.top = PIXELS_TO_UNITS(16); @@ -118,11 +118,11 @@ static void ActBossChar02_02(void) boss->bits = NPC_INVULNERABLE; break; - case BALFROG_SPRT_STANDING_STILL: - case BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING: - case BALFROG_SPRT_MOUTH_OPEN_CROUCHING: - case BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING: - case BALFROG_SPRT_JUMPING: + case BALFROG_SPRITE_STANDING_STILL: + case BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING: + case BALFROG_SPRITE_MOUTH_OPEN_CROUCHING: + case BALFROG_SPRITE_MOUTH_OPEN_CROUCHING_FLASHING: + case BALFROG_SPRITE_JUMPING: boss->x = gBoss[0].x; boss->y = gBoss[0].y; break; @@ -189,7 +189,7 @@ void ActBossChar_Frog(void) case BALFROG_START: boss->act_no = (BALFROG_START + 1); - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; boss->cond = NPCCOND_ALIVE; boss->rect = rcRight[0]; @@ -211,16 +211,16 @@ void ActBossChar_Frog(void) // Fallthrough case BALFROG_FLICKER: if (++boss->act_wait / 2 % 2) - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; else - boss->ani_no = BALFROG_SPRT_NOTHING; + boss->ani_no = BALFROG_SPRITE_NOTHING; break; case BALFROG_WAIT: boss->act_no = BALFROG_INITIALIZE_HOP_1; boss->act_wait = 0; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; boss->xm = 0; // Fallthrough case BALFROG_INITIALIZE_HOP_1: @@ -228,7 +228,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_INITIALIZE_HOP_2; boss->ani_wait = 0; - boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING; } break; @@ -238,7 +238,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_HOP; boss->ani_wait = 0; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; } break; @@ -247,7 +247,7 @@ void ActBossChar_Frog(void) if (++boss->ani_wait > 4) { boss->act_no = BALFROG_MIDAIR; - boss->ani_no = BALFROG_SPRT_JUMPING; + boss->ani_no = BALFROG_SPRITE_JUMPING; boss->ym = PIXELS_TO_UNITS(-2); PlaySoundObject(25, 1); @@ -280,7 +280,7 @@ void ActBossChar_Frog(void) PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(30); boss->act_no = BALFROG_WAIT; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; boss->view.top = PIXELS_TO_UNITS(48); boss->view.bottom = PIXELS_TO_UNITS(16); @@ -305,7 +305,7 @@ void ActBossChar_Frog(void) break; case BALFROG_INITIALIZE_LAND: - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; boss->act_wait = 0; boss->act_no = BALFROG_LAND; // Fallthrough @@ -315,7 +315,7 @@ void ActBossChar_Frog(void) if (boss->act_wait > SECONDS_TO_FRAMES(1)) { - boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING; boss->ani_wait = 0; boss->act_no = BALFROG_INITIALIZE_SHOOT; } @@ -327,7 +327,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_SHOOT; boss->act_wait = 0; - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; boss->count1 = 16; gBoss[1].bits |= NPC_SHOOTABLE; boss->tgt_x = boss->life; @@ -339,14 +339,14 @@ void ActBossChar_Frog(void) if (boss->shock) { if (boss->count2++ / 2 % 2) - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING_FLASHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING_FLASHING; else - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; } else { boss->count2 = 0; - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; } boss->xm = 10 * boss->xm / 11; @@ -377,7 +377,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_AFTER_SHOOT_WAIT; boss->act_wait = 0; - boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING; boss->ani_wait = 0; gBoss[1].bits &= ~NPC_SHOOTABLE; } @@ -399,7 +399,7 @@ void ActBossChar_Frog(void) } boss->ani_wait = 0; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; } break; @@ -407,7 +407,7 @@ void ActBossChar_Frog(void) case BALFROG_INITIALIZE_LEAP_1: boss->act_no = BALFROG_INITIALIZE_LEAP_2; boss->act_wait = 0; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; boss->xm = 0; // Fallthrough case BALFROG_INITIALIZE_LEAP_2: @@ -415,7 +415,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_INITIALIZE_LEAP_3; boss->ani_wait = 0; - boss->ani_no = BALFROG_SPRT_MOUTH_BARELY_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_BARELY_OPEN_CROUCHING; } break; @@ -425,7 +425,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_LEAP; boss->ani_wait = 0; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; } break; @@ -434,7 +434,7 @@ void ActBossChar_Frog(void) if (++boss->ani_wait > 4) { boss->act_no = BALFROG_LEAP_MIDAIR; - boss->ani_no = BALFROG_SPRT_JUMPING; + boss->ani_no = BALFROG_SPRITE_JUMPING; boss->ym = PIXELS_TO_UNITS(-5); boss->view.top = PIXELS_TO_UNITS(64); boss->view.bottom = PIXELS_TO_UNITS(24); @@ -449,7 +449,7 @@ void ActBossChar_Frog(void) PlaySoundObject(SND_LARGE_OBJECT_HIT_GROUND, 1); SetQuake(60); boss->act_no = BALFROG_WAIT; - boss->ani_no = BALFROG_SPRT_STANDING_STILL; + boss->ani_no = BALFROG_SPRITE_STANDING_STILL; boss->view.top = PIXELS_TO_UNITS(48); boss->view.bottom = PIXELS_TO_UNITS(16); @@ -479,7 +479,7 @@ void ActBossChar_Frog(void) case BALFROG_DIE: boss->act_no = BALFROG_DIE_FLASHING; - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; boss->act_wait = 0; boss->xm = 0; PlaySoundObject(SND_EXPLOSION, 1); @@ -514,7 +514,7 @@ void ActBossChar_Frog(void) boss->view.top = PIXELS_TO_UNITS(12); boss->view.back = PIXELS_TO_UNITS(24); boss->view.bottom = PIXELS_TO_UNITS(12); - boss->ani_no = BALFROG_SPRT_BALROG_WHITE; + boss->ani_no = BALFROG_SPRITE_BALROG_WHITE; } else { @@ -522,7 +522,7 @@ void ActBossChar_Frog(void) boss->view.top = PIXELS_TO_UNITS(48); boss->view.back = PIXELS_TO_UNITS(32); boss->view.bottom = PIXELS_TO_UNITS(16); - boss->ani_no = BALFROG_SPRT_MOUTH_OPEN_CROUCHING; + boss->ani_no = BALFROG_SPRITE_MOUTH_OPEN_CROUCHING; } if (boss->act_wait % 9 == 0) @@ -544,7 +544,7 @@ void ActBossChar_Frog(void) { boss->act_no = BALFROG_GO_INTO_CEILING; boss->act_wait = 0; - boss->ani_no = BALFROG_SPRT_BALROG_CROUCHING; + boss->ani_no = BALFROG_SPRITE_BALROG_CROUCHING; } break; @@ -552,7 +552,7 @@ void ActBossChar_Frog(void) case BALFROG_GO_INTO_CEILING: if (++boss->act_wait > 30) { - boss->ani_no = BALFROG_SPRT_BALROG_JUMPING; + boss->ani_no = BALFROG_SPRITE_BALROG_JUMPING; boss->ym = PIXELS_TO_UNITS(-5); boss->bits |= NPC_IGNORE_SOLIDITY; boss->act_no = BALFROG_GONE_INTO_CEILING; From c68923fdd579da8ef8c903df987b9f2ffc5844d0 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 16:13:13 +0200 Subject: [PATCH 17/18] Corrected erroneous "PIXELS_TO_UNITS(24)"s to "PIXELS_TO_UNITS(20)"s Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 9685713c..939d0779 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -510,9 +510,9 @@ void ActBossChar_Frog(void) case BALFROG_REVERT: if (++boss->act_wait / 2 % 2) { - boss->view.front = PIXELS_TO_UNITS(24); + boss->view.front = PIXELS_TO_UNITS(20); boss->view.top = PIXELS_TO_UNITS(12); - boss->view.back = PIXELS_TO_UNITS(24); + boss->view.back = PIXELS_TO_UNITS(20); boss->view.bottom = PIXELS_TO_UNITS(12); boss->ani_no = BALFROG_SPRITE_BALROG_WHITE; } From cc4de5e44c4c7b7175b101d11939a6b43b484798 Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Sun, 15 Sep 2019 18:16:46 +0200 Subject: [PATCH 18/18] Remove NPC utility macros Signed-off-by: Gabriel Ravier --- src/BossFrog.cpp | 14 +++++++++++--- src/NpChar.h | 18 ------------------ 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/BossFrog.cpp b/src/BossFrog.cpp index 939d0779..c61b0eb8 100644 --- a/src/BossFrog.cpp +++ b/src/BossFrog.cpp @@ -573,9 +573,17 @@ void ActBossChar_Frog(void) break; } - NPC_DO_GRAVITY(boss, 0x40, 0x5FF); - NPC_UPDATE_POSITIONS_WITH_VELOCITIES(boss); - NPC_SET_RECT_FROM_LEFT_RIGHT(boss, rcLeft, rcRight); + boss->ym += 0x40; + if (boss->ym > 0x5FF) + boss->ym = 0x5FF; + + boss->x += boss->xm; + boss->y += boss->ym; + + if (boss->direct == DIR_LEFT) + boss->rect = rcLeft[boss->ani_no]; + else + boss->rect = rcRight[boss->ani_no]; ActBossChar02_01(); ActBossChar02_02(); diff --git a/src/NpChar.h b/src/NpChar.h index aa88bddd..9dd481e6 100644 --- a/src/NpChar.h +++ b/src/NpChar.h @@ -7,24 +7,6 @@ #define NPC_MAX 0x200 -#define NPC_CAP_Y_VELOCITY(npc, maxYVel) \ - if (npc->ym > (maxYVel)) \ - npc->ym = (maxYVel) - -#define NPC_DO_GRAVITY(npc, ymAdd, maxYVel) \ - npc->ym += ymAdd; \ - NPC_CAP_Y_VELOCITY(npc, maxYVel) - -#define NPC_UPDATE_POSITIONS_WITH_VELOCITIES(npc) \ - npc->x += npc->xm; \ - npc->y += npc->ym - -#define NPC_SET_RECT_FROM_LEFT_RIGHT(npc, rcLeft, rcRight) \ - if (npc->direct == DIR_LEFT) \ - npc->rect = rcLeft[npc->ani_no]; \ - else \ - npc->rect = rcRight[npc->ani_no] - enum NPCCond { NPCCOND_DAMAGE_BOSS = 0x10, // (gBoss npc exclusive) When set, damage the main boss