Made BossOhm.cpp ASM-accurate

There were a few decompilation mistakes in here
This commit is contained in:
Clownacy 2019-04-08 11:50:41 +01:00
parent 3a856e4d9d
commit 9e22db16fd

View file

@ -13,41 +13,45 @@
#include "NpChar.h" #include "NpChar.h"
#include "Sound.h" #include "Sound.h"
void ActBoss01_12() static void ActBoss01_12()
{ {
int i;
RECT rcLeft[1] = {80, 56, 104, 72}; RECT rcLeft[1] = {80, 56, 104, 72};
RECT rcRight[1] = {104, 56, 128, 72}; RECT rcRight[1] = {104, 56, 128, 72};
for (int i = 1; i <= 2; i++) for (i = 1; i < 3; ++i)
{ {
gBoss[i].y = (gBoss[i].y + gBoss[i + 2].y - 0x1000) / 2; gBoss[i].y = (gBoss[0].y + gBoss[i + 2].y - 0x1000) / 2;
if (gBoss[i].direct) if (gBoss[i].direct == 0)
{ {
gBoss[i].rect = rcRight[gBoss[i].count2]; gBoss[i].x = gBoss[0].x - 0x2000;
gBoss[i].x = gBoss[0].x + 0x2000; gBoss[i].rect = rcLeft[gBoss[i].ani_no];
} }
else else
{ {
gBoss[i].rect = rcLeft[gBoss[i].count2]; gBoss[i].rect = rcRight[gBoss[i].ani_no];
gBoss[i].x = gBoss[0].x - 0x2000; gBoss[i].x = gBoss[0].x + 0x2000;
} }
} }
} }
void ActBoss01_34() static void ActBoss01_34()
{ {
int i;
RECT rcLeft[2] = { RECT rcLeft[2] = {
{0, 56, 40, 88}, {0, 56, 40, 88},
{40, 56, 80, 88}, {40, 56, 80, 88},
}; };
RECT rcRight[2] = { RECT rcRight[2] = {
{ 0, 88, 40, 120 }, {0, 88, 40, 120},
{ 40, 88, 80, 120 }, {40, 88, 80, 120},
}; };
for (int i = 3; i <= 4; i++) for (i = 3; i < 5; ++i)
{ {
switch (gBoss[i].act_no) switch (gBoss[i].act_no)
{ {
@ -55,41 +59,44 @@ void ActBoss01_34()
gBoss[i].act_no = 1; gBoss[i].act_no = 1;
// Fallthrough // Fallthrough
case 1: case 1:
gBoss[i].y = gBoss[0].y;
if (i == 3) if (i == 3)
gBoss[i].x = gBoss[0].x - 0x2000; gBoss[i].x = gBoss[0].x - 0x2000;
if (i == 4) if (i == 4)
gBoss[i].x = gBoss[0].x + 0x2000; gBoss[i].x = gBoss[0].x + 0x2000;
gBoss[i].y = gBoss[0].y;
break; break;
case 3: case 3:
gBoss[i].tgt_y = gBoss[0].y + 0x3000;
if (i == 3) if (i == 3)
gBoss[i].x = gBoss[0].x - 0x2000; gBoss[i].x = gBoss[0].x - 0x2000;
if (i == 4) if (i == 4)
gBoss[i].x = gBoss[0].x + 0x2000; gBoss[i].x = gBoss[0].x + 0x2000;
gBoss[i].tgt_y = gBoss[0].y + 0x3000;
gBoss[i].y += (gBoss[i].tgt_y - gBoss[i].y) / 2; gBoss[i].y += (gBoss[i].tgt_y - gBoss[i].y) / 2;
break; break;
default:
break;
} }
gBoss[i].count2 = !((gBoss[i].flag & 8) && gBoss[i].y > gBoss[i].tgt_y); if ((gBoss[i].flag & 8) || gBoss[i].y <= gBoss[i].tgt_y)
gBoss[i].ani_no = 0;
else
gBoss[i].ani_no = 1;
if (gBoss[i].direct == 0) if (gBoss[i].direct == 0)
gBoss[i].rect = rcLeft[gBoss[i].count2]; gBoss[i].rect = rcLeft[gBoss[i].ani_no];
else else
gBoss[i].rect = rcRight[gBoss[i].count2]; gBoss[i].rect = rcRight[gBoss[i].ani_no];
} }
} }
void ActBoss01_5() static void ActBoss01_5()
{ {
if (gBoss[5].act_no == 0) switch (gBoss[5].act_no)
{ {
case 0:
gBoss[5].bits |= npc_solidSoft | npc_ignoreSolid; gBoss[5].bits |= npc_solidSoft | npc_ignoreSolid;
gBoss[5].hit.front = 0x2800; gBoss[5].hit.front = 0x2800;
@ -98,12 +105,11 @@ void ActBoss01_5()
gBoss[5].hit.bottom = 0x2000; gBoss[5].hit.bottom = 0x2000;
gBoss[5].act_no = 1; gBoss[5].act_no = 1;
} // Fallthrough
case 1:
if (gBoss[5].act_no == 1)
{
gBoss[5].x = gBoss[0].x; gBoss[5].x = gBoss[0].x;
gBoss[5].y = gBoss[0].y; gBoss[5].y = gBoss[0].y;
break;
} }
} }
@ -120,8 +126,8 @@ void ActBossChar_Omega()
gBoss[0].view.back = 0x5000; gBoss[0].view.back = 0x5000;
gBoss[0].view.bottom = 0x2000; gBoss[0].view.bottom = 0x2000;
gBoss[0].tgt_x = 0x1B6000; gBoss[0].tgt_x = gBoss[0].x;
gBoss[0].tgt_y = 0x20000; gBoss[0].tgt_y = gBoss[0].y;
gBoss[0].hit_voice = 52; gBoss[0].hit_voice = 52;
@ -145,7 +151,7 @@ void ActBossChar_Omega()
gBoss[1].bits = npc_ignoreSolid; gBoss[1].bits = npc_ignoreSolid;
memcpy(&gBoss[2], &gBoss[1], sizeof(gBoss[2])); gBoss[2] = gBoss[1];
gBoss[1].direct = 0; gBoss[1].direct = 0;
gBoss[2].direct = 2; gBoss[2].direct = 2;
@ -166,10 +172,12 @@ void ActBossChar_Omega()
gBoss[3].bits = npc_ignoreSolid; gBoss[3].bits = npc_ignoreSolid;
gBoss[3].x = gBoss[0].x - 0x2000;
gBoss[3].y = gBoss[0].y; gBoss[3].y = gBoss[0].y;
gBoss[3].direct = 0; gBoss[3].direct = 0;
memcpy(&gBoss[4], &gBoss[3], sizeof(gBoss[4])); gBoss[4] = gBoss[3];
gBoss[4].direct = 2; gBoss[4].direct = 2;
gBoss[3].x = gBoss[0].x + 0x2000; gBoss[3].x = gBoss[0].x + 0x2000;
gBoss[5].cond = 0x80; gBoss[5].cond = 0x80;
@ -184,16 +192,17 @@ void ActBossChar_Omega()
SetQuake(2); SetQuake(2);
gBoss[0].y -= 0x200; gBoss[0].y -= 0x200;
if (!(++gBoss[0].act_wait & 3)) if (!(++gBoss[0].act_wait % 4))
PlaySoundObject(26, 1); PlaySoundObject(26, 1);
if (gBoss[0].act_wait >= 48) if (gBoss[0].act_wait == 48)
{ {
gBoss[0].act_no = 40;
gBoss[0].act_wait = 0; gBoss[0].act_wait = 0;
gBoss[0].act_no = 40;
if (gBoss[0].life > 280)
break;
if (gBoss[0].life <= 280)
{
gBoss[0].act_no = 110; gBoss[0].act_no = 110;
gBoss[0].bits |= npc_shootable; gBoss[0].bits |= npc_shootable;
@ -205,11 +214,10 @@ void ActBossChar_Omega()
gBoss[4].act_no = 3; gBoss[4].act_no = 3;
gBoss[5].hit.top = 0x2000; gBoss[5].hit.top = 0x2000;
} }
}
break; break;
case 40: case 40:
if (++gBoss[0].act_wait >= 48) if (++gBoss[0].act_wait == 48)
{ {
gBoss[0].act_wait = 0; gBoss[0].act_wait = 0;
gBoss[0].act_no = 50; gBoss[0].act_no = 50;
@ -239,7 +247,7 @@ void ActBossChar_Omega()
case 60: //Shoot out of mouth case 60: //Shoot out of mouth
if (++gBoss[0].act_wait > 20 && gBoss[0].act_wait < 80 && !(gBoss[0].act_wait % 3)) if (++gBoss[0].act_wait > 20 && gBoss[0].act_wait < 80 && !(gBoss[0].act_wait % 3))
{ {
if (Random(0, 9) <= 7) if (Random(0, 9) < 8)
SetNpChar(48, gBoss[0].x, gBoss[0].y - 0x2000, Random(-0x100, 0x100), -0x333, 0, NULL, 0x100); SetNpChar(48, gBoss[0].x, gBoss[0].y - 0x2000, Random(-0x100, 0x100), -0x333, 0, NULL, 0x100);
else else
SetNpChar(48, gBoss[0].x, gBoss[0].y - 0x2000, Random(-0x100, 0x100), -0x333, 2, NULL, 0x100); SetNpChar(48, gBoss[0].x, gBoss[0].y - 0x2000, Random(-0x100, 0x100), -0x333, 2, NULL, 0x100);
@ -247,7 +255,7 @@ void ActBossChar_Omega()
PlaySoundObject(39, 1); PlaySoundObject(39, 1);
} }
if (gBoss[0].act_wait >= 200 || CountArmsBullet(6)) if (gBoss[0].act_wait == 200 || CountArmsBullet(6))
{ {
gBoss[0].count1 = 0; gBoss[0].count1 = 0;
gBoss[0].act_no = 70; gBoss[0].act_no = 70;
@ -267,7 +275,7 @@ void ActBossChar_Omega()
if (!gBoss[0].count2) if (!gBoss[0].count2)
{ {
PlaySoundObject(102, 1); PlaySoundObject(102, 0);
PlaySoundObject(12, 1); PlaySoundObject(12, 1);
gBoss[0].act_no = 80; gBoss[0].act_no = 80;
@ -284,7 +292,7 @@ void ActBossChar_Omega()
break; break;
case 80: case 80:
if (++gBoss[0].act_wait >= 48) if (++gBoss[0].act_wait == 48)
{ {
gBoss[0].act_wait = 0; gBoss[0].act_wait = 0;
gBoss[0].act_no = 90; gBoss[0].act_no = 90;
@ -295,10 +303,10 @@ void ActBossChar_Omega()
SetQuake(2); SetQuake(2);
gBoss[0].y += 0x200; gBoss[0].y += 0x200;
if (!(++gBoss[0].act_wait & 3)) if (!(++gBoss[0].act_wait % 4))
PlaySoundObject(26, 1); PlaySoundObject(26, 1);
if (gBoss[0].act_wait >= 48) if (gBoss[0].act_wait == 48)
{ {
gBoss[0].act_wait = 0; gBoss[0].act_wait = 0;
gBoss[0].act_no = 100; gBoss[0].act_no = 100;
@ -306,7 +314,7 @@ void ActBossChar_Omega()
break; break;
case 100: //Move to proper position for coming out of the ground case 100: //Move to proper position for coming out of the ground
if (++gBoss[0].act_wait >= 120) if (++gBoss[0].act_wait == 120)
{ {
gBoss[0].act_wait = 0; gBoss[0].act_wait = 0;
gBoss[0].act_no = 30; gBoss[0].act_no = 30;
@ -333,7 +341,7 @@ void ActBossChar_Omega()
break; break;
case 120: case 120:
if (++gBoss[0].act_wait >= 50 || CountArmsBullet(6)) if (++gBoss[0].act_wait == 50 || CountArmsBullet(6))
{ {
gBoss[0].act_no = 130; gBoss[0].act_no = 130;
PlaySoundObject(102, 1); PlaySoundObject(102, 1);
@ -368,7 +376,7 @@ void ActBossChar_Omega()
gBoss[0].ym = -0x5FF; gBoss[0].ym = -0x5FF;
PlaySoundObject(102, 1); PlaySoundObject(102, 0);
PlaySoundObject(12, 1); PlaySoundObject(12, 1);
PlaySoundObject(25, 1); PlaySoundObject(25, 1);
@ -470,14 +478,6 @@ void ActBossChar_Omega()
gBoss[0].act_wait = 0; gBoss[0].act_wait = 0;
gBoss[0].damage = 0; gBoss[0].damage = 0;
gBoss[5].damage = 0; gBoss[5].damage = 0;
DeleteNpCharCode(48, 1);
for (int i = 0; i < NPC_MAX; i++)
{
if (gNPC[i].cond & 0x80)
{
if (gNPC[i].code_char == 48)
gNPC[i].cond = 0;
}
}
} }
} }