Clean-up MycHit.cpp

Found some ASM-inaccuracies in here too
This commit is contained in:
Clownacy 2019-11-14 23:58:33 +00:00
parent dcc0f14266
commit 7df1eb9c58
2 changed files with 51 additions and 48 deletions

View file

@ -14,12 +14,12 @@
#include "Sound.h" #include "Sound.h"
#include "TextScr.h" #include "TextScr.h"
void ResetMyCharFlag() void ResetMyCharFlag(void)
{ {
gMC.flag = 0; gMC.flag = 0;
} }
void PutlittleStar() void PutlittleStar(void)
{ {
if (!(gMC.cond & 2) && gMC.ym < -0x200) if (!(gMC.cond & 2) && gMC.ym < -0x200)
{ {
@ -407,7 +407,7 @@ int JudgeHitMyCharVectDown(int x, int y)
return hit; return hit;
} }
void HitMyCharMap() void HitMyCharMap(void)
{ {
int i; int i;
@ -428,7 +428,7 @@ void HitMyCharMap()
offy[3] = 1; offy[3] = 1;
unsigned char atrb[4]; unsigned char atrb[4];
for (i = 0; i < 4; i++) for (i = 0; i < 4; ++i)
{ {
atrb[i] = GetAttribute(x + offx[i], y + offy[i]); atrb[i] = GetAttribute(x + offx[i], y + offy[i]);
@ -581,7 +581,7 @@ void HitMyCharMap()
} }
} }
if (gMC.y > gWaterY + 0x800) if (gMC.y > gWaterY + (4 * 0x200))
gMC.flag |= 0x100; gMC.flag |= 0x100;
} }
@ -589,8 +589,8 @@ int JudgeHitMyCharNPC(NPCHAR *npc)
{ {
int hit = 0; int hit = 0;
if (gMC.y - gMC.hit.top < npc->y + npc->hit.bottom - 0x600 if (gMC.y - gMC.hit.top < npc->y + npc->hit.bottom - (3 * 0x200)
&& gMC.y + gMC.hit.bottom > npc->y - npc->hit.top + 0x600 && gMC.y + gMC.hit.bottom > npc->y - npc->hit.top + (3 * 0x200)
&& gMC.x - gMC.hit.back < npc->x + npc->hit.back && gMC.x - gMC.hit.back < npc->x + npc->hit.back
&& gMC.x - gMC.hit.back > npc->x) && gMC.x - gMC.hit.back > npc->x)
{ {
@ -599,8 +599,8 @@ int JudgeHitMyCharNPC(NPCHAR *npc)
hit |= 1; hit |= 1;
} }
if (gMC.y - gMC.hit.top < npc->y + npc->hit.bottom - 0x600 if (gMC.y - gMC.hit.top < npc->y + npc->hit.bottom - (3 * 0x200)
&& gMC.y + gMC.hit.bottom > npc->y - npc->hit.top + 0x600 && gMC.y + gMC.hit.bottom > npc->y - npc->hit.top + (3 * 0x200)
&& gMC.x + gMC.hit.back - 0x200 > npc->x - npc->hit.back && gMC.x + gMC.hit.back - 0x200 > npc->x - npc->hit.back
&& gMC.x + gMC.hit.back - 0x200 < npc->x) && gMC.x + gMC.hit.back - 0x200 < npc->x)
{ {
@ -609,8 +609,8 @@ int JudgeHitMyCharNPC(NPCHAR *npc)
hit |= 4; hit |= 4;
} }
if (gMC.x - gMC.hit.back < npc->x + npc->hit.back - 0x600 if (gMC.x - gMC.hit.back < npc->x + npc->hit.back - (3 * 0x200)
&& gMC.x + gMC.hit.back > npc->x - npc->hit.back + 0x600 && gMC.x + gMC.hit.back > npc->x - npc->hit.back + (3 * 0x200)
&& gMC.y - gMC.hit.top < npc->y + npc->hit.bottom && gMC.y - gMC.hit.top < npc->y + npc->hit.bottom
&& gMC.y - gMC.hit.top > npc->y) && gMC.y - gMC.hit.top > npc->y)
{ {
@ -619,10 +619,10 @@ int JudgeHitMyCharNPC(NPCHAR *npc)
hit |= 2; hit |= 2;
} }
if (gMC.x - gMC.hit.back < npc->x + npc->hit.back - 0x600 if (gMC.x - gMC.hit.back < npc->x + npc->hit.back - (3 * 0x200)
&& gMC.x + gMC.hit.back > npc->x - npc->hit.back + 0x600 && gMC.x + gMC.hit.back > npc->x - npc->hit.back + (3 * 0x200)
&& gMC.y + gMC.hit.bottom > npc->y - npc->hit.top && gMC.y + gMC.hit.bottom > npc->y - npc->hit.top
&& gMC.hit.bottom + gMC.y < npc->y + 0x600) && gMC.hit.bottom + gMC.y < npc->y + (3 * 0x200))
{ {
if (npc->bits & NPC_BOUNCY) if (npc->bits & NPC_BOUNCY)
{ {
@ -637,6 +637,7 @@ int JudgeHitMyCharNPC(NPCHAR *npc)
hit |= 8; hit |= 8;
} }
} }
return hit; return hit;
} }
@ -644,18 +645,18 @@ unsigned char JudgeHitMyCharNPC3(NPCHAR *npc)
{ {
if (npc->direct == 0) if (npc->direct == 0)
{ {
if (gMC.x + 0x400 > npc->x - npc->hit.front if (gMC.x + (2 * 0x200) > npc->x - npc->hit.front
&& gMC.x - 0x400 < npc->x + npc->hit.back && gMC.x - (2 * 0x200) < npc->x + npc->hit.back
&& gMC.y + 0x400 > npc->y - npc->hit.top && gMC.y + (2 * 0x200) > npc->y - npc->hit.top
&& gMC.y - 0x400 < npc->y + npc->hit.bottom) && gMC.y - (2 * 0x200) < npc->y + npc->hit.bottom)
return 1; return 1;
} }
else else
{ {
if (gMC.x + 0x400 > npc->x - npc->hit.back if (gMC.x + (2 * 0x200) > npc->x - npc->hit.back
&& gMC.x - 0x400 < npc->x + npc->hit.front && gMC.x - (2 * 0x200) < npc->x + npc->hit.front
&& gMC.y + 0x400 > npc->y - npc->hit.top && gMC.y + (2 * 0x200) > npc->y - npc->hit.top
&& gMC.y - 0x400 < npc->y + npc->hit.bottom) && gMC.y - (2 * 0x200) < npc->y + npc->hit.bottom)
return 1; return 1;
} }
@ -698,7 +699,7 @@ int JudgeHitMyCharNPC4(NPCHAR *npc)
{ {
if (gMC.ym < npc->ym) if (gMC.ym < npc->ym)
{ {
gMC.y = npc->hit.bottom + npc->y + gMC.hit.top + 0x200; gMC.y = npc->y + npc->hit.bottom + gMC.hit.top + 0x200;
gMC.ym = npc->ym; gMC.ym = npc->ym;
} }
else else
@ -710,9 +711,9 @@ int JudgeHitMyCharNPC4(NPCHAR *npc)
hit |= 2; hit |= 2;
} }
if (gMC.y + gMC.hit.bottom > npc->y - npc->hit.top && gMC.hit.bottom + gMC.y < npc->y + 0x600) if (gMC.y + gMC.hit.bottom > npc->y - npc->hit.top && gMC.hit.bottom + gMC.y < npc->y + (3 * 0x200))
{ {
if (gMC.ym - npc->ym > 0x400) if (gMC.ym - npc->ym > 2 * 0x200)
PlaySoundObject(23, 1); PlaySoundObject(23, 1);
if (gMC.unit == 1) if (gMC.unit == 1)
@ -744,7 +745,7 @@ int JudgeHitMyCharNPC4(NPCHAR *npc)
if (gMC.xm < npc->xm) if (gMC.xm < npc->xm)
gMC.xm = npc->xm; gMC.xm = npc->xm;
gMC.x = npc->hit.back + npc->x + gMC.hit.back; gMC.x = npc->x + npc->hit.back + gMC.hit.back;
hit |= 1; hit |= 1;
} }
@ -764,18 +765,18 @@ int JudgeHitMyCharNPC4(NPCHAR *npc)
return hit; return hit;
} }
void HitMyCharNpChar() void HitMyCharNpChar(void)
{ {
int i; int i;
int hit = 0; int hit = 0;
if ((gMC.cond & 0x80) == 0 || (gMC.cond & 2)) if (!(gMC.cond & 0x80) || gMC.cond & 2)
return; return;
for (i = 0; i < NPC_MAX; i++) for (i = 0; i < NPC_MAX; ++i)
{ {
if ((gNPC[i].cond & 0x80) == 0) if (!(gNPC[i].cond & 0x80))
continue; continue;
hit = 0; hit = 0;
@ -796,21 +797,21 @@ void HitMyCharNpChar()
} }
// Special NPCs (pickups) // Special NPCs (pickups)
if (hit && gNPC[i].code_char == 1) if (hit != 0 && gNPC[i].code_char == 1)
{ {
PlaySoundObject(14, 1); PlaySoundObject(14, 1);
AddExpMyChar(gNPC[i].exp); AddExpMyChar(gNPC[i].exp);
gNPC[i].cond = 0; gNPC[i].cond = 0;
} }
if (hit && gNPC[i].code_char == 86) if (hit != 0 && gNPC[i].code_char == 86)
{ {
PlaySoundObject(42, 1); PlaySoundObject(42, 1);
AddBulletMyChar(gNPC[i].code_event, gNPC[i].exp); AddBulletMyChar(gNPC[i].code_event, gNPC[i].exp);
gNPC[i].cond = 0; gNPC[i].cond = 0;
} }
if (hit && gNPC[i].code_char == 87) if (hit != 0 && gNPC[i].code_char == 87)
{ {
PlaySoundObject(20, 1); PlaySoundObject(20, 1);
AddLifeMyChar(gNPC[i].exp); AddLifeMyChar(gNPC[i].exp);
@ -818,11 +819,11 @@ void HitMyCharNpChar()
} }
// Run event on contact // Run event on contact
if ((g_GameFlags & 4) == 0 && hit && gNPC[i].bits & NPC_EVENT_WHEN_TOUCHED) if (!(g_GameFlags & 4) && hit != 0 && gNPC[i].bits & NPC_EVENT_WHEN_TOUCHED)
StartTextScript(gNPC[i].code_event); StartTextScript(gNPC[i].code_event);
// NPC damage // NPC damage
if (g_GameFlags & 2 && (gNPC[i].bits & NPC_INTERACTABLE) == 0) if (g_GameFlags & 2 && !(gNPC[i].bits & NPC_INTERACTABLE))
{ {
if (gNPC[i].bits & NPC_REAR_AND_TOP_DONT_HURT) if (gNPC[i].bits & NPC_REAR_AND_TOP_DONT_HURT)
{ {
@ -835,14 +836,14 @@ void HitMyCharNpChar()
if (hit & 2 && gNPC[i].ym > 0) if (hit & 2 && gNPC[i].ym > 0)
DamageMyChar(gNPC[i].damage); DamageMyChar(gNPC[i].damage);
} }
else if (hit && gNPC[i].damage && !(g_GameFlags & 4)) else if (hit != 0 && gNPC[i].damage && !(g_GameFlags & 4))
{ {
DamageMyChar(gNPC[i].damage); DamageMyChar(gNPC[i].damage);
} }
} }
// Interaction // Interaction
if ((g_GameFlags & 4) == 0 && hit && gMC.cond & 1 && gNPC[i].bits & NPC_INTERACTABLE) if (!(g_GameFlags & 4) && hit != 0 && gMC.cond & 1 && gNPC[i].bits & NPC_INTERACTABLE)
{ {
StartTextScript(gNPC[i].code_event); StartTextScript(gNPC[i].code_event);
gMC.xm = 0; gMC.xm = 0;
@ -855,16 +856,18 @@ void HitMyCharNpChar()
SetCaret(gMC.x, gMC.y, 9, 0); SetCaret(gMC.x, gMC.y, 9, 0);
} }
void HitMyCharBoss() void HitMyCharBoss(void)
{ {
int b;
int hit = 0; int hit = 0;
if ((gMC.cond & 0x80) == 0 || (gMC.cond & 2)) if (!(gMC.cond & 0x80) || gMC.cond & 2)
return; return;
for (int b = 0; b < BOSS_MAX; b++) for (b = 0; b < BOSS_MAX; ++b)
{ {
if ((gBoss[b].cond & 0x80) == 0) if (!(gBoss[b].cond & 0x80))
continue; continue;
hit = 0; hit = 0;
@ -884,7 +887,7 @@ void HitMyCharBoss()
hit = JudgeHitMyCharNPC3(&gBoss[b]); hit = JudgeHitMyCharNPC3(&gBoss[b]);
} }
if (!(g_GameFlags & 4) && hit && gBoss[b].bits & NPC_EVENT_WHEN_TOUCHED) if (!(g_GameFlags & 4) && hit != 0 && gBoss[b].bits & NPC_EVENT_WHEN_TOUCHED)
{ {
StartTextScript(gBoss[b].code_event); StartTextScript(gBoss[b].code_event);
gMC.ques = 0; gMC.ques = 0;
@ -897,12 +900,12 @@ void HitMyCharBoss()
if (hit & 1 && gBoss[b].xm > 0) if (hit & 1 && gBoss[b].xm > 0)
DamageMyChar(gBoss[b].damage); DamageMyChar(gBoss[b].damage);
} }
else if (hit && gBoss[b].damage && !(g_GameFlags & 4)) else if (hit != 0 && gBoss[b].damage != 0 && !(g_GameFlags & 4))
{ {
DamageMyChar(gBoss[b].damage); DamageMyChar(gBoss[b].damage);
} }
if (!(g_GameFlags & 4) && hit && (gMC.cond & 1) && gBoss[b].bits & NPC_INTERACTABLE) if (!(g_GameFlags & 4) && hit != 0 && gMC.cond & 1 && gBoss[b].bits & NPC_INTERACTABLE)
{ {
StartTextScript(gBoss[b].code_event); StartTextScript(gBoss[b].code_event);
gMC.xm = 0; gMC.xm = 0;

View file

@ -1,6 +1,6 @@
#pragma once #pragma once
void ResetMyCharFlag(); void ResetMyCharFlag(void);
void HitMyCharMap(); void HitMyCharMap(void);
void HitMyCharNpChar(); void HitMyCharNpChar(void);
void HitMyCharBoss(); void HitMyCharBoss(void);