Made BossLife.cpp ASM-accurate

This commit is contained in:
Clownacy 2019-04-06 13:43:35 +01:00
parent a38ee793a2
commit 3a856e4d9d
2 changed files with 44 additions and 42 deletions

View file

@ -9,7 +9,7 @@
static struct static struct
{ {
bool flag; BOOL flag;
int *pLife; int *pLife;
int max; int max;
int br; int br;
@ -18,33 +18,32 @@ static struct
void InitBossLife(void) void InitBossLife(void)
{ {
gBL.flag = false; gBL.flag = FALSE;
} }
bool StartBossLife(int code_event) BOOL StartBossLife(int code_event)
{ {
for (int i = 0; i < 0x200; ++i) int i = 0;
{ while (i < 0x200 && gNPC[i].code_event != code_event)
if (gNPC[i].code_event == code_event) ++i;
{
gBL.flag = true; if (i == 0x200)
return FALSE;
gBL.flag = TRUE;
gBL.max = gNPC[i].life; gBL.max = gNPC[i].life;
gBL.br = gNPC[i].life; gBL.br = gNPC[i].life;
gBL.pLife = &gNPC[i].life; gBL.pLife = &gNPC[i].life;
return true; return TRUE;
}
}
return false;
} }
bool StartBossLife2(void) BOOL StartBossLife2(void)
{ {
gBL.flag = true; gBL.flag = TRUE;
gBL.max = gBoss[0].life; gBL.max = gBoss[0].life;
gBL.br = gBoss[0].life; gBL.br = gBoss[0].life;
gBL.pLife = &gBoss[0].life; gBL.pLife = &gBoss[0].life;
return true; return TRUE;
} }
void PutBossLife(void) void PutBossLife(void)
@ -55,20 +54,26 @@ void PutBossLife(void)
RECT rcLife = {0, 24, 0, 32}; RECT rcLife = {0, 24, 0, 32};
RECT rcBr = {0, 32, 232, 40}; RECT rcBr = {0, 32, 232, 40};
if (gBL.flag) if (gBL.flag == FALSE)
return;
if (*gBL.pLife < 1)
{ {
if (*gBL.pLife >= 1) gBL.flag = FALSE;
}
else
{ {
rcLife.right = 198 * *gBL.pLife / gBL.max; rcLife.right = 198 * *gBL.pLife / gBL.max;
if (gBL.br <= *gBL.pLife) if (gBL.br > *gBL.pLife)
{
if (++gBL.count > 30)
--gBL.br;
}
else
{ {
gBL.count = 0; gBL.count = 0;
} }
else if (++gBL.count > 30)
{
--gBL.br;
}
rcBr.right = 198 * gBL.br / gBL.max; rcBr.right = 198 * gBL.br / gBL.max;
@ -78,9 +83,4 @@ void PutBossLife(void)
PutBitmap3(&grcGame, (WINDOW_WIDTH - 176) / 2, WINDOW_HEIGHT - 16, &rcLife, SURFACE_ID_TEXT_BOX); PutBitmap3(&grcGame, (WINDOW_WIDTH - 176) / 2, WINDOW_HEIGHT - 16, &rcLife, SURFACE_ID_TEXT_BOX);
PutBitmap3(&grcGame, (WINDOW_WIDTH - 240) / 2, WINDOW_HEIGHT - 16, &rcText, SURFACE_ID_TEXT_BOX); PutBitmap3(&grcGame, (WINDOW_WIDTH - 240) / 2, WINDOW_HEIGHT - 16, &rcText, SURFACE_ID_TEXT_BOX);
} }
else
{
gBL.flag = false;
}
}
} }

View file

@ -1,6 +1,8 @@
#pragma once #pragma once
#include "WindowsWrapper.h"
void InitBossLife(void); void InitBossLife(void);
bool StartBossLife(int code_event); BOOL StartBossLife(int code_event);
bool StartBossLife2(void); BOOL StartBossLife2(void);
void PutBossLife(void); void PutBossLife(void);