commit
2c502f3821
32 changed files with 3210 additions and 96 deletions
3
Makefile
3
Makefile
|
@ -45,6 +45,7 @@ SOURCES = \
|
|||
BossFrog \
|
||||
BossLife \
|
||||
BossOhm \
|
||||
BossX \
|
||||
BulHit \
|
||||
Bullet \
|
||||
Caret \
|
||||
|
@ -77,11 +78,13 @@ SOURCES = \
|
|||
NpcAct100 \
|
||||
NpcAct120 \
|
||||
NpcAct140 \
|
||||
NpcAct160 \
|
||||
NpcAct180 \
|
||||
NpcAct200 \
|
||||
NpcAct260 \
|
||||
NpcAct280 \
|
||||
NpcAct300 \
|
||||
NpcAct320 \
|
||||
NpcAct340 \
|
||||
NpChar \
|
||||
NpcHit \
|
||||
|
|
|
@ -267,8 +267,8 @@ void PutCampObject()
|
|||
int y;
|
||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2, &rcBoxTop, 26);
|
||||
for (y = 1; y < 18; y++)
|
||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2 * (y + 1), &rcBoxBody, 26);
|
||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2 * (y + 1), &rcBoxBottom, 26);
|
||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, ((WINDOW_HEIGHT - 240) / 2) + (8 * (y + 1)), &rcBoxBody, 26);
|
||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, ((WINDOW_HEIGHT - 240) / 2) + (8 * (y + 1)), &rcBoxBottom, 26);
|
||||
|
||||
//Move titles
|
||||
if (gCampTitleY > (WINDOW_HEIGHT - 208) / 2)
|
||||
|
@ -283,9 +283,9 @@ void PutCampObject()
|
|||
++flash;
|
||||
|
||||
if (gCampActive)
|
||||
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, 24, &rcCur1[1], 26);
|
||||
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT / 2) - 96, &rcCur1[1], 26);
|
||||
else
|
||||
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, 24, &rcCur1[(flash >> 1) & 1], 26);
|
||||
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT / 2) - 96, &rcCur1[(flash >> 1) & 1], 26);
|
||||
|
||||
//Draw arms
|
||||
for (int i = 0; i < ARMS_MAX && gArmsData[i].code; i++)
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "Boss.h"
|
||||
#include "BossFrog.h"
|
||||
#include "BossOhm.h"
|
||||
#include "BossX.h"
|
||||
#include "NpChar.h"
|
||||
#include "MyChar.h"
|
||||
#include "Sound.h"
|
||||
|
@ -188,7 +189,7 @@ BOSSFUNCTION gpBossFuncTbl[10] =
|
|||
ActBossChar_0,
|
||||
ActBossChar_Omega,
|
||||
ActBossChar_Frog,
|
||||
nullptr, //ActBossChar_MonstX,
|
||||
ActBossChar_MonstX,
|
||||
nullptr, //ActBossChar_Core,
|
||||
nullptr, //ActBossChar_Ironhead,
|
||||
nullptr, //ActBossChar_Twin,
|
||||
|
|
|
@ -51,6 +51,7 @@ void ActBoss01_34()
|
|||
{
|
||||
case 0:
|
||||
gBoss[i].act_no = 1;
|
||||
// Fallthrough
|
||||
case 1:
|
||||
if (i == 3)
|
||||
gBoss[i].x = gBoss[0].x - 0x2000;
|
||||
|
@ -150,6 +151,7 @@ void ActBossChar_Omega()
|
|||
gBoss[0].act_no = 30;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].ani_no = 0;
|
||||
// Fallthrough
|
||||
case 30:
|
||||
SetQuake(2);
|
||||
gBoss[0].y -= 0x200;
|
||||
|
|
851
src/BossX.cpp
Normal file
851
src/BossX.cpp
Normal file
|
@ -0,0 +1,851 @@
|
|||
#include "BossX.h"
|
||||
|
||||
#include "Boss.h"
|
||||
#include "Flash.h"
|
||||
#include "Frame.h"
|
||||
#include "Game.h"
|
||||
#include "MyChar.h"
|
||||
#include "NpChar.h"
|
||||
#include "Sound.h"
|
||||
#include "Triangle.h"
|
||||
#include "WindowsWrapper.h"
|
||||
|
||||
static void ActBossChar03_01(NPCHAR *npc)
|
||||
{
|
||||
RECT rcUp[6];
|
||||
RECT rcDown[6];
|
||||
|
||||
rcUp[0] = {0, 0, 72, 32};
|
||||
rcUp[1] = {0, 32, 72, 64};
|
||||
rcUp[2] = {72, 0, 144, 32};
|
||||
rcUp[3] = {144, 0, 216, 32};
|
||||
rcUp[4] = {72, 32, 144, 64};
|
||||
rcUp[5] = {144, 32, 216, 64};
|
||||
|
||||
rcDown[0] = {0, 64, 72, 96};
|
||||
rcDown[1] = {0, 96, 72, 128};
|
||||
rcDown[2] = {72, 64, 144, 96};
|
||||
rcDown[3] = {144, 64, 216, 96};
|
||||
rcDown[4] = {72, 96, 144, 128};
|
||||
rcDown[5] = {144, 96, 216, 128};
|
||||
|
||||
switch (npc->act_no)
|
||||
{
|
||||
case 10:
|
||||
npc->ani_no = 0;
|
||||
npc->bits &= ~0x10;
|
||||
break;
|
||||
|
||||
case 100:
|
||||
npc->bits |= 0x10;
|
||||
npc->act_no = 101;
|
||||
npc->act_wait = 0;
|
||||
npc->ani_no = 2;
|
||||
npc->ani_wait = 0;
|
||||
// Fallthrough
|
||||
case 101:
|
||||
if (++npc->act_wait > 30)
|
||||
npc->act_no = 102;
|
||||
|
||||
if (++npc->ani_wait > 0)
|
||||
{
|
||||
npc->ani_wait = 0;
|
||||
++npc->ani_no;
|
||||
}
|
||||
|
||||
if ( npc->ani_no > 3 )
|
||||
npc->ani_no = 2;
|
||||
|
||||
npc->xm -= 0x20;
|
||||
break;
|
||||
|
||||
case 102:
|
||||
npc->bits &= ~0x10;
|
||||
npc->act_no = 103;
|
||||
npc->ani_no = 0;
|
||||
npc->ani_wait = 0;
|
||||
// Fallthrough
|
||||
case 103:
|
||||
++npc->act_wait;
|
||||
|
||||
if (++npc->ani_wait > 1)
|
||||
{
|
||||
npc->ani_wait = 0;
|
||||
++npc->ani_no;
|
||||
}
|
||||
|
||||
if (npc->ani_no > 1)
|
||||
npc->ani_no = 0;
|
||||
|
||||
npc->xm -= 0x20;
|
||||
break;
|
||||
|
||||
case 200:
|
||||
npc->bits |= 0x10;
|
||||
npc->bits |= 0x80;
|
||||
npc->act_no = 201;
|
||||
npc->act_wait = 0;
|
||||
npc->ani_no = 4;
|
||||
npc->ani_wait = 0;
|
||||
// Fallthrough
|
||||
case 201:
|
||||
if (++npc->act_wait > 30)
|
||||
npc->act_no = 202;
|
||||
|
||||
if (++npc->ani_wait > 0)
|
||||
{
|
||||
npc->ani_wait = 0;
|
||||
++npc->ani_no;
|
||||
}
|
||||
|
||||
if ( npc->ani_no > 5 )
|
||||
npc->ani_no = 4;
|
||||
|
||||
npc->xm += 0x20;
|
||||
break;
|
||||
|
||||
case 202:
|
||||
npc->bits &= ~0x10;
|
||||
npc->act_no = 203;
|
||||
npc->ani_no = 0;
|
||||
npc->ani_wait = 0;
|
||||
// Fallthrough
|
||||
case 203:
|
||||
++npc->act_wait;
|
||||
|
||||
if (++npc->ani_wait > 1)
|
||||
{
|
||||
npc->ani_wait = 0;
|
||||
++npc->ani_no;
|
||||
}
|
||||
|
||||
if (npc->ani_no > 1)
|
||||
npc->ani_no = 0;
|
||||
|
||||
npc->xm += 0x20;
|
||||
break;
|
||||
|
||||
case 300:
|
||||
npc->act_no = 301;
|
||||
npc->ani_no = 4;
|
||||
npc->ani_wait = 0;
|
||||
npc->bits |= 0x10;
|
||||
// Fallthrough
|
||||
case 301:
|
||||
if (++npc->ani_wait > 0)
|
||||
{
|
||||
npc->ani_wait = 0;
|
||||
++npc->ani_no;
|
||||
}
|
||||
|
||||
if (npc->ani_no > 5)
|
||||
npc->ani_no = 4;
|
||||
|
||||
npc->xm += 0x20;
|
||||
|
||||
if (npc->xm > 0)
|
||||
{
|
||||
npc->xm = 0;
|
||||
npc->act_no = 10;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 400:
|
||||
npc->act_no = 401;
|
||||
npc->ani_no = 2;
|
||||
npc->ani_wait = 0;
|
||||
npc->bits |= 0x10;
|
||||
// Fallthrough
|
||||
case 401:
|
||||
if (++npc->ani_wait > 0)
|
||||
{
|
||||
npc->ani_wait = 0;
|
||||
++npc->ani_no;
|
||||
}
|
||||
|
||||
if (npc->ani_no > 3)
|
||||
npc->ani_no = 2;
|
||||
|
||||
npc->xm -= 0x20;
|
||||
|
||||
if (npc->xm < 0)
|
||||
{
|
||||
npc->xm = 0;
|
||||
npc->act_no = 10;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if ((npc->act_no == 101 || npc->act_no == 201 || npc->act_no == 301 || npc->act_no == 401) && npc->act_wait % 2 == 1)
|
||||
PlaySoundObject(112, 1);
|
||||
|
||||
if ((npc->act_no == 103 || npc->act_no == 203) && npc->act_wait % 4 == 1)
|
||||
PlaySoundObject(111, 1);
|
||||
|
||||
if (npc->act_no < 100 || gMC.y >= npc->y + 0x800 || gMC.y <= npc->y - 0x800)
|
||||
{
|
||||
npc->damage = 0;
|
||||
npc->bits &= ~0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
npc->damage = 10;
|
||||
npc->bits |= 0x80;
|
||||
}
|
||||
|
||||
if (npc->xm > 0x400)
|
||||
npc->xm = 0x400;
|
||||
if (npc->xm < -0x400)
|
||||
npc->xm = -0x400;
|
||||
|
||||
npc->x += npc->xm;
|
||||
|
||||
if (npc->direct == 1)
|
||||
npc->rect = rcUp[npc->ani_no];
|
||||
else
|
||||
npc->rect = rcDown[npc->ani_no];
|
||||
}
|
||||
|
||||
static void ActBossChar03_02(NPCHAR *npc)
|
||||
{
|
||||
RECT rect[4];
|
||||
|
||||
rect[0] = {0, 128, 72, 160};
|
||||
rect[1] = {72, 128, 144, 160};
|
||||
rect[2] = {0, 160, 72, 192};
|
||||
rect[3] = {72, 160, 144, 192};
|
||||
|
||||
switch (npc->act_no)
|
||||
{
|
||||
case 10:
|
||||
npc->act_no = 11;
|
||||
npc->act_wait = 30 * npc->ani_no + 30;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
if (npc->act_wait)
|
||||
{
|
||||
--npc->act_wait;
|
||||
}
|
||||
else
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int direct;
|
||||
|
||||
switch (npc->ani_no)
|
||||
{
|
||||
case 0:
|
||||
direct = 3;
|
||||
x = -0x3C00;
|
||||
y = 0xC00;
|
||||
break;
|
||||
case 1:
|
||||
direct = 2;
|
||||
x = 0x3C00;
|
||||
y = 0xC00;
|
||||
break;
|
||||
case 2:
|
||||
direct = 0;
|
||||
x = -0x3C00;
|
||||
y = -0xC00;
|
||||
break;
|
||||
case 3:
|
||||
direct = 1;
|
||||
x = 0x3C00;
|
||||
y = -0xC00;
|
||||
break;
|
||||
}
|
||||
|
||||
SetNpChar(158, npc->x + x, npc->y + y, 0, 0, direct, 0, 0x100);
|
||||
PlaySoundObject(39, 1);
|
||||
npc->act_wait = 120;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
npc->x = (gBoss[0].x + gBoss[npc->count1].x) / 2;
|
||||
npc->y = (gBoss[0].y + gBoss[npc->count1].y) / 2;
|
||||
|
||||
npc->rect = rect[npc->ani_no];
|
||||
}
|
||||
|
||||
static void ActBossChar03_03(NPCHAR *npc)
|
||||
{
|
||||
switch (npc->act_no)
|
||||
{
|
||||
case 10:
|
||||
npc->tgt_x += 0x200;
|
||||
|
||||
if (npc->tgt_x > 0x4000)
|
||||
{
|
||||
npc->tgt_x = 0x4000;
|
||||
npc->act_no = 0;
|
||||
gBoss[3].act_no = 10;
|
||||
gBoss[4].act_no = 10;
|
||||
gBoss[5].act_no = 10;
|
||||
gBoss[6].act_no = 10;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 20:
|
||||
npc->tgt_x -= 0x200;
|
||||
|
||||
if (npc->tgt_x < 0)
|
||||
{
|
||||
npc->tgt_x = 0;
|
||||
npc->act_no = 0;
|
||||
gBoss[3].act_no = 0;
|
||||
gBoss[4].act_no = 0;
|
||||
gBoss[5].act_no = 0;
|
||||
gBoss[6].act_no = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 30:
|
||||
npc->tgt_x += 0x200;
|
||||
|
||||
if (npc->tgt_x > 0x2800)
|
||||
{
|
||||
npc->tgt_x = 0x2800;
|
||||
npc->act_no = 0;
|
||||
gBoss[7].act_no = 10;
|
||||
gBoss[13].act_no = 10;
|
||||
gBoss[14].act_no = 10;
|
||||
gBoss[15].act_no = 10;
|
||||
gBoss[16].act_no = 10;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 40:
|
||||
npc->tgt_x -= 0x200;
|
||||
|
||||
if (npc->tgt_x < 0)
|
||||
{
|
||||
npc->tgt_x = 0;
|
||||
npc->act_no = 0;
|
||||
gBoss[7].act_no = 0;
|
||||
gBoss[13].act_no = 0;
|
||||
gBoss[14].act_no = 0;
|
||||
gBoss[15].act_no = 0;
|
||||
gBoss[16].act_no = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
RECT rcLeft = {216, 96, 264, 144};
|
||||
RECT rcRight = {264, 96, 312, 144};
|
||||
|
||||
if (npc->direct == 0)
|
||||
{
|
||||
npc->rect = rcLeft;
|
||||
npc->x = gBoss[0].x - npc->tgt_x - 0x3000;
|
||||
npc->y = gBoss[0].y;
|
||||
}
|
||||
else
|
||||
{
|
||||
npc->rect = rcRight;
|
||||
npc->x = gBoss[0].x + npc->tgt_x + 0x3000;
|
||||
npc->y = gBoss[0].y;
|
||||
}
|
||||
}
|
||||
|
||||
static void ActBossChar03_04(NPCHAR *npc)
|
||||
{
|
||||
RECT rect[8];
|
||||
|
||||
rect[0] = {0, 192, 16, 208};
|
||||
rect[1] = {16, 192, 32, 208};
|
||||
rect[2] = {32, 192, 48, 208};
|
||||
rect[3] = {48, 192, 64, 208};
|
||||
rect[4] = {0, 208, 16, 224};
|
||||
rect[5] = {16, 208, 32, 224};
|
||||
rect[6] = {32, 208, 48, 224};
|
||||
rect[7] = {48, 208, 64, 224};
|
||||
|
||||
switch (npc->act_no)
|
||||
{
|
||||
case 0:
|
||||
npc->bits &= ~0x20;
|
||||
npc->ani_no = 0;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
npc->act_no = 11;
|
||||
npc->act_wait = 10 * npc->tgt_x + 40;
|
||||
npc->bits |= 0x20;
|
||||
// Fallthrough
|
||||
case 11:
|
||||
npc->ani_no = npc->act_wait < 16 && npc->act_wait / 2 % 2;
|
||||
|
||||
if (npc->act_wait)
|
||||
{
|
||||
--npc->act_wait;
|
||||
}
|
||||
else
|
||||
{
|
||||
const unsigned char deg = GetArktan(npc->x - gMC.x, npc->y - gMC.y) + Random(-2, 2);
|
||||
const int ym = 3 * GetSin(deg);
|
||||
const int xm = 3 * GetCos(deg);
|
||||
SetNpChar(156, npc->x, npc->y, xm, ym, 0, 0, 0x100);
|
||||
PlaySoundObject(39, 1);
|
||||
npc->act_wait = 40;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
switch (npc->tgt_x)
|
||||
{
|
||||
case 0:
|
||||
npc->x = gBoss[0].x - 0x2C00;
|
||||
npc->y = gBoss[0].y - 0x2000;
|
||||
break;
|
||||
case 1:
|
||||
npc->x = gBoss[0].x + 0x3800;
|
||||
npc->y = gBoss[0].y - 0x2000;
|
||||
break;
|
||||
case 2:
|
||||
npc->x = gBoss[0].x - 0x1E00;
|
||||
npc->y = gBoss[0].y + 0x1C00;
|
||||
break;
|
||||
case 3:
|
||||
npc->x = gBoss[0].x + 0x2200;
|
||||
npc->y = gBoss[0].y + 0x1C00;
|
||||
break;
|
||||
}
|
||||
|
||||
npc->rect = rect[npc->tgt_x + 4 * npc->ani_no];
|
||||
}
|
||||
|
||||
static void ActBossChar03_face(NPCHAR *npc)
|
||||
{
|
||||
RECT rect[3];
|
||||
|
||||
rect[0] = {216, 0, 320, 48};
|
||||
rect[1] = {216, 48, 320, 96};
|
||||
rect[2] = {216, 144, 320, 192};
|
||||
|
||||
switch (npc->act_no)
|
||||
{
|
||||
case 0:
|
||||
gBoss[0].bits &= ~0x20;
|
||||
npc->ani_no = 0;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
npc->act_no = 11;
|
||||
npc->act_wait = 10 * npc->tgt_x + 40;
|
||||
gBoss[0].bits |= 0x20;
|
||||
// Fallthrough
|
||||
case 11:
|
||||
if (gBoss[0].shock)
|
||||
{
|
||||
static unsigned char flash;
|
||||
|
||||
if ((flash++ >> 1) & 1)
|
||||
npc->ani_no = 1;
|
||||
else
|
||||
npc->ani_no = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
npc->ani_no = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
gBoss[7].x = gBoss[0].x;
|
||||
gBoss[7].y = gBoss[0].y;
|
||||
|
||||
if (gBoss[0].act_no <= 10)
|
||||
npc->ani_no = 2;
|
||||
|
||||
npc->rect = rect[npc->ani_no];
|
||||
}
|
||||
|
||||
void ActBossChar_MonstX(void)
|
||||
{
|
||||
switch (gBoss[0].act_no)
|
||||
{
|
||||
case 0:
|
||||
gBoss[0].life = 1;
|
||||
gBoss[0].x = -0x28000;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
gBoss[0].life = 700;
|
||||
gBoss[0].exp = 1;
|
||||
gBoss[0].act_no = 1;
|
||||
gBoss[0].x = 0x100000;
|
||||
gBoss[0].y = 102400;
|
||||
gBoss[0].hit_voice = 54;
|
||||
gBoss[0].hit.front = 0x3000;
|
||||
gBoss[0].hit.top = 0x3000;
|
||||
gBoss[0].hit.back = 0x3000;
|
||||
gBoss[0].hit.bottom = 0x3000;
|
||||
gBoss[0].bits = 0x8208;
|
||||
gBoss[0].size = 3;
|
||||
gBoss[0].code_event = 1000;
|
||||
gBoss[0].ani_no = 0;
|
||||
gBoss[1].cond = 0x80;
|
||||
gBoss[1].size = 3;
|
||||
gBoss[1].direct = 0;
|
||||
gBoss[1].view.front = 0x3000;
|
||||
gBoss[1].view.top = 0x3000;
|
||||
gBoss[1].view.back = 0x3000;
|
||||
gBoss[1].view.bottom = 0x3000;
|
||||
gBoss[1].bits = 8;
|
||||
gBoss[2] = gBoss[1];
|
||||
gBoss[2].direct = 2;
|
||||
gBoss[3].cond = 0x80;
|
||||
gBoss[3].life = 60;
|
||||
gBoss[3].hit_voice = 54;
|
||||
gBoss[3].destroy_voice = 71;
|
||||
gBoss[3].size = 2;
|
||||
gBoss[3].view.front = 0x1000;
|
||||
gBoss[3].view.top = 0x1000;
|
||||
gBoss[3].view.back = 0x1000;
|
||||
gBoss[3].view.bottom = 0x1000;
|
||||
gBoss[3].hit.front = 0xA00;
|
||||
gBoss[3].hit.back = 0xA00;
|
||||
gBoss[3].hit.top = 0xA00;
|
||||
gBoss[3].hit.bottom = 0xA00;
|
||||
gBoss[3].bits = 8;
|
||||
gBoss[3].tgt_x = 0;
|
||||
gBoss[4] = gBoss[3];
|
||||
gBoss[4].tgt_x = 1;
|
||||
gBoss[5] = gBoss[3];
|
||||
gBoss[5].tgt_x = 2;
|
||||
gBoss[5].life = 100;
|
||||
gBoss[6] = gBoss[3];
|
||||
gBoss[6].tgt_x = 3;
|
||||
gBoss[6].life = 100;
|
||||
gBoss[7].cond = 0x80;
|
||||
gBoss[7].x = 0x100000;
|
||||
gBoss[7].y = 0x19000;
|
||||
gBoss[7].view.front = 0x6800;
|
||||
gBoss[7].view.top = 0x3000;
|
||||
gBoss[7].view.back = 0x6800;
|
||||
gBoss[7].view.bottom = 0x3000;
|
||||
gBoss[7].hit_voice = 52;
|
||||
gBoss[7].hit.front = 0x1000;
|
||||
gBoss[7].hit.top = 0x3000;
|
||||
gBoss[7].hit.back = 0x1000;
|
||||
gBoss[7].hit.bottom = 0x2000;
|
||||
gBoss[7].bits = 8;
|
||||
gBoss[7].size = 3;
|
||||
gBoss[7].ani_no = 0;
|
||||
gBoss[9].cond = 0x80;
|
||||
gBoss[9].act_no = 0;
|
||||
gBoss[9].direct = 1;
|
||||
gBoss[9].x = 0xF8000;
|
||||
gBoss[9].y = 0x12000;
|
||||
gBoss[9].view.front = 0x4800;
|
||||
gBoss[9].view.top = 0x1000;
|
||||
gBoss[9].view.back = 0x4800;
|
||||
gBoss[9].view.bottom = 0x3000;
|
||||
gBoss[9].hit_voice = 52;
|
||||
gBoss[9].hit.front = 0x3800;
|
||||
gBoss[9].hit.top = 0x1000;
|
||||
gBoss[9].hit.back = 0x3800;
|
||||
gBoss[9].hit.bottom = 0x2000;
|
||||
gBoss[9].bits = 141;
|
||||
gBoss[9].size = 3;
|
||||
gBoss[10] = gBoss[9];
|
||||
gBoss[10].x = 0x108000;
|
||||
gBoss[11] = gBoss[9];
|
||||
gBoss[11].direct = 3;
|
||||
gBoss[11].x = 0xF8000;
|
||||
gBoss[11].y = 0x20000;
|
||||
gBoss[11].view.top = 0x3000;
|
||||
gBoss[11].view.bottom = 0x1000;
|
||||
gBoss[11].hit.top = 0x2000;
|
||||
gBoss[11].hit.bottom = 0x1000;
|
||||
gBoss[12] = gBoss[11];
|
||||
gBoss[12].x = 0x108000;
|
||||
gBoss[13] = gBoss[9];
|
||||
gBoss[13].cond = 0x80;
|
||||
gBoss[13].view.top = 0x2000;
|
||||
gBoss[13].view.bottom = 0x2000;
|
||||
gBoss[13].view.front = 0x3C00;
|
||||
gBoss[13].view.back = 0x5400;
|
||||
gBoss[13].count1 = 9;
|
||||
gBoss[13].ani_no = 0;
|
||||
gBoss[13].bits = 8;
|
||||
gBoss[14] = gBoss[13];
|
||||
gBoss[14].view.front = 0x5400;
|
||||
gBoss[14].view.back = 0x3C00;
|
||||
gBoss[14].count1 = 10;
|
||||
gBoss[14].ani_no = 1;
|
||||
gBoss[14].bits = 8;
|
||||
gBoss[15] = gBoss[13];
|
||||
gBoss[15].view.top = 0x2000;
|
||||
gBoss[15].view.bottom = 0x2000;
|
||||
gBoss[15].count1 = 11;
|
||||
gBoss[15].ani_no = 2;
|
||||
gBoss[15].bits = 8;
|
||||
gBoss[16] = gBoss[15];
|
||||
gBoss[16].view.front = 0x5400;
|
||||
gBoss[16].view.back = 0x3C00;
|
||||
gBoss[16].count1 = 12;
|
||||
gBoss[16].ani_no = 3;
|
||||
gBoss[16].bits = 8;
|
||||
gBoss[0].act_no = 2;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
gBoss[0].act_no = 11;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].count1 = 0;
|
||||
// Fallthrough
|
||||
case 11:
|
||||
if (++gBoss[0].act_wait > 100)
|
||||
{
|
||||
gBoss[0].act_wait = 0;
|
||||
|
||||
if (gMC.x < gBoss[0].x)
|
||||
gBoss[0].act_no = 100;
|
||||
else
|
||||
gBoss[0].act_no = 200;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 100:
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].act_no = 101;
|
||||
++gBoss[0].count1;
|
||||
// Fallthrough
|
||||
case 101:
|
||||
if (++gBoss[0].act_wait == 4)
|
||||
gBoss[9].act_no = 100;
|
||||
if (gBoss[0].act_wait == 8)
|
||||
gBoss[10].act_no = 100;
|
||||
if (gBoss[0].act_wait == 10)
|
||||
gBoss[11].act_no = 100;
|
||||
if (gBoss[0].act_wait == 12)
|
||||
gBoss[12].act_no = 100;
|
||||
if (gBoss[0].act_wait > 120 && gBoss[0].count1 > 2)
|
||||
gBoss[0].act_no = 300;
|
||||
if (gBoss[0].act_wait > 121 && gMC.x > gBoss[0].x)
|
||||
gBoss[0].act_no = 200;
|
||||
|
||||
break;
|
||||
|
||||
case 200:
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].act_no = 201;
|
||||
++gBoss[0].count1;
|
||||
// Fallthrough
|
||||
case 201:
|
||||
if (++gBoss[0].act_wait == 4)
|
||||
gBoss[9].act_no = 200;
|
||||
if (gBoss[0].act_wait == 8)
|
||||
gBoss[10].act_no = 200;
|
||||
if (gBoss[0].act_wait == 10)
|
||||
gBoss[11].act_no = 200;
|
||||
if (gBoss[0].act_wait == 12)
|
||||
gBoss[12].act_no = 200;
|
||||
if (gBoss[0].act_wait > 120 && gBoss[0].count1 > 2)
|
||||
gBoss[0].act_no = 400;
|
||||
if (gBoss[0].act_wait > 121 && gMC.x < gBoss[0].x)
|
||||
gBoss[0].act_no = 100;
|
||||
|
||||
break;
|
||||
|
||||
case 300:
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].act_no = 301;
|
||||
// Fallthrough
|
||||
case 301:
|
||||
if (++gBoss[0].act_wait == 4)
|
||||
gBoss[9].act_no = 300;
|
||||
if (gBoss[0].act_wait == 8)
|
||||
gBoss[10].act_no = 300;
|
||||
if (gBoss[0].act_wait == 10)
|
||||
gBoss[11].act_no = 300;
|
||||
if (gBoss[0].act_wait == 12)
|
||||
gBoss[12].act_no = 300;
|
||||
if (gBoss[0].act_wait > 50)
|
||||
{
|
||||
if (gBoss[3].cond || gBoss[4].cond || gBoss[5].cond || gBoss[6].cond)
|
||||
gBoss[0].act_no = 500;
|
||||
else
|
||||
gBoss[0].act_no = 600;
|
||||
}
|
||||
break;
|
||||
|
||||
case 400:
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].act_no = 401;
|
||||
// Fallthrough
|
||||
case 401:
|
||||
if (++gBoss[0].act_wait == 4)
|
||||
gBoss[9].act_no = 400;
|
||||
if (gBoss[0].act_wait == 8)
|
||||
gBoss[10].act_no = 400;
|
||||
if (gBoss[0].act_wait == 10)
|
||||
gBoss[11].act_no = 400;
|
||||
if (gBoss[0].act_wait == 12)
|
||||
gBoss[12].act_no = 400;
|
||||
if (gBoss[0].act_wait > 50)
|
||||
{
|
||||
if (gBoss[3].cond || gBoss[4].cond || gBoss[5].cond || gBoss[6].cond)
|
||||
gBoss[0].act_no = 500;
|
||||
else
|
||||
gBoss[0].act_no = 600;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 500:
|
||||
gBoss[0].act_no = 501;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[1].act_no = 10;
|
||||
gBoss[2].act_no = 10;
|
||||
// Fallthrough
|
||||
case 501:
|
||||
if (++gBoss[0].act_wait > 300)
|
||||
{
|
||||
gBoss[0].act_no = 502;
|
||||
gBoss[0].act_wait = 0;
|
||||
}
|
||||
|
||||
if (gBoss[3].cond == 0 && gBoss[4].cond == 0 && gBoss[5].cond == 0 && gBoss[6].cond == 0)
|
||||
{
|
||||
gBoss[0].act_no = 502;
|
||||
gBoss[0].act_wait = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 502:
|
||||
gBoss[0].act_no = 503;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].count1 = 0;
|
||||
gBoss[1].act_no = 20;
|
||||
gBoss[2].act_no = 20;
|
||||
// Fallthrough
|
||||
case 503:
|
||||
if (++gBoss[0].act_wait > 50)
|
||||
{
|
||||
if (gMC.x < gBoss[0].x)
|
||||
gBoss[0].act_no = 100;
|
||||
else
|
||||
gBoss[0].act_no = 200;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 600:
|
||||
gBoss[0].act_no = 601;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].count2 = gBoss[0].life;
|
||||
gBoss[1].act_no = 30;
|
||||
gBoss[2].act_no = 30;
|
||||
// Fallthrough
|
||||
case 601:
|
||||
++gBoss[0].act_wait;
|
||||
|
||||
if (gBoss[0].life < gBoss[0].count2 - 200 || gBoss[0].act_wait > 300)
|
||||
{
|
||||
gBoss[0].act_no = 602;
|
||||
gBoss[0].act_wait = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 602:
|
||||
gBoss[0].act_no = 603;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].count1 = 0;
|
||||
gBoss[1].act_no = 40;
|
||||
gBoss[2].act_no = 40;
|
||||
break;
|
||||
|
||||
case 603:
|
||||
if (++gBoss[0].act_wait > 50)
|
||||
{
|
||||
if (gMC.x < gBoss[0].x)
|
||||
gBoss[0].act_no = 100;
|
||||
else
|
||||
gBoss[0].act_no = 200;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1000:
|
||||
SetQuake(2);
|
||||
|
||||
if (++gBoss[0].act_wait % 8 == 0)
|
||||
PlaySoundObject(52, 1);
|
||||
|
||||
SetDestroyNpChar(gBoss[0].x + (Random(-0x48, 0x48) * 0x200), gBoss[0].y + (Random(-0x40, 0x40) * 0x200), 1, 1);
|
||||
|
||||
if (gBoss[0].act_wait > 100)
|
||||
{
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].act_no = 1001;
|
||||
SetFlash(gBoss[0].x, gBoss[0].y, 1);
|
||||
PlaySoundObject(35, 1);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1001:
|
||||
SetQuake(40);
|
||||
|
||||
if (++gBoss[0].act_wait > 50)
|
||||
{
|
||||
for (int i = 0; i < 20; ++i)
|
||||
gBoss[i].cond = 0;
|
||||
|
||||
DeleteNpCharCode(158, 1);
|
||||
SetNpChar(159, gBoss[0].x, gBoss[0].y - 0x3000, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
ActBossChar03_01(&gBoss[9]);
|
||||
ActBossChar03_01(&gBoss[10]);
|
||||
ActBossChar03_01(&gBoss[11]);
|
||||
ActBossChar03_01(&gBoss[12]);
|
||||
gBoss[0].x += ((gBoss[11].x + gBoss[10].x + gBoss[9].x + gBoss[12].x) / 4 - gBoss[0].x) / 16;
|
||||
ActBossChar03_face(&gBoss[7]);
|
||||
ActBossChar03_02(&gBoss[13]);
|
||||
ActBossChar03_02(&gBoss[14]);
|
||||
ActBossChar03_02(&gBoss[15]);
|
||||
ActBossChar03_02(&gBoss[16]);
|
||||
ActBossChar03_03(&gBoss[1]);
|
||||
ActBossChar03_03(&gBoss[2]);
|
||||
|
||||
if (gBoss[3].cond)
|
||||
ActBossChar03_04(&gBoss[3]);
|
||||
if (gBoss[4].cond)
|
||||
ActBossChar03_04(&gBoss[4]);
|
||||
if (gBoss[5].cond)
|
||||
ActBossChar03_04(&gBoss[5]);
|
||||
if (gBoss[6].cond)
|
||||
ActBossChar03_04(&gBoss[6]);
|
||||
|
||||
if (gBoss[0].life == 0 && gBoss[0].act_no < 1000)
|
||||
{
|
||||
gBoss[0].act_no = 1000;
|
||||
gBoss[0].act_wait = 0;
|
||||
gBoss[0].shock = 0x96;
|
||||
gBoss[9].act_no = 300;
|
||||
gBoss[10].act_no = 300;
|
||||
gBoss[11].act_no = 300;
|
||||
gBoss[12].act_no = 300;
|
||||
}
|
||||
}
|
3
src/BossX.h
Normal file
3
src/BossX.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
void ActBossChar_MonstX(void);
|
|
@ -915,7 +915,7 @@ void ActBullet_Bom(BULLET *bul, int level)
|
|||
}
|
||||
|
||||
PlaySoundObject(44, 1);
|
||||
|
||||
// Fallthrough
|
||||
case 1:
|
||||
if (level == 1)
|
||||
{
|
||||
|
|
|
@ -17,7 +17,7 @@ void InitCaret()
|
|||
|
||||
void ActCaret00(CARET *crt)
|
||||
{
|
||||
;
|
||||
(void)crt;
|
||||
}
|
||||
|
||||
void ActCaret01(CARET *crt)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#define PATH_LENGTH 260 //Pixel had the path size locked to 260 (dangerously low), if you tried to open the executable in a path with more than around 220 characters, it'd crash.
|
||||
|
||||
#define WINDOW_WIDTH 320
|
||||
#define WINDOW_HEIGHT 240
|
||||
#define WINDOW_WIDTH ((320*16)/9)
|
||||
#define WINDOW_HEIGHT 320
|
||||
|
|
|
@ -145,9 +145,9 @@ static void FlushSurface(int surf_no)
|
|||
unsigned char (*src_pixels)[surf[surf_no].surface->pitch / 4][4] = (unsigned char (*)[surf[surf_no].surface->pitch/ 4][4])surf[surf_no].surface->pixels;
|
||||
unsigned char (*dst_pixels)[pitch / 4][4] = (unsigned char (*)[pitch/ 4][4])raw_pixels;
|
||||
|
||||
for (unsigned int h = 0; h < surf[surf_no].surface->h; ++h)
|
||||
for (int h = 0; h < surf[surf_no].surface->h; ++h)
|
||||
{
|
||||
for (unsigned int w = 0; w < surf[surf_no].surface->w; ++w)
|
||||
for (int w = 0; w < surf[surf_no].surface->w; ++w)
|
||||
{
|
||||
dst_pixels[h][w][0] = src_pixels[h][w][0];
|
||||
dst_pixels[h][w][1] = src_pixels[h][w][1];
|
||||
|
|
|
@ -10,7 +10,7 @@ int Call_Escape()
|
|||
{
|
||||
RECT rc = {0, 128, 208, 144};
|
||||
|
||||
while (Flip_SystemTask())
|
||||
while (1)
|
||||
{
|
||||
//Get pressed keys
|
||||
GetTrg();
|
||||
|
@ -35,9 +35,14 @@ int Call_Escape()
|
|||
CortBox(&grcFull, 0x000000);
|
||||
PutBitmap3(&grcFull, (WINDOW_WIDTH - 208) / 2, (WINDOW_HEIGHT - 16) / 2, &rc, 26);
|
||||
PutFramePerSecound();
|
||||
|
||||
if (!Flip_SystemTask())
|
||||
{
|
||||
//Quit if window is closed
|
||||
gKeyTrg = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
//Quit if window is closed
|
||||
gKeyTrg = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ static unsigned long UTF8ToCode(const unsigned char *string, unsigned int *bytes
|
|||
case 3:
|
||||
case 4:
|
||||
length = zero_bit;
|
||||
charcode = string[0] & (1 << (8 - zero_bit)) - 1;
|
||||
charcode = (string[0] & (1 << (8 - zero_bit))) - 1;
|
||||
|
||||
for (unsigned int i = 1; i < zero_bit; ++i)
|
||||
{
|
||||
|
@ -230,7 +230,7 @@ void DrawText(FontObject *font_object, SDL_Surface *surface, int x, int y, unsig
|
|||
const int letter_x = x + pen_x + face->glyph->bitmap_left;
|
||||
const int letter_y = y + ((FT_MulFix(face->ascender, face->size->metrics.y_scale) - face->glyph->metrics.horiBearingY + (64 / 2)) / 64);
|
||||
|
||||
for (int iy = MAX(-letter_y, 0); letter_y + iy < MIN(letter_y + converted.rows, surface->h); ++iy)
|
||||
for (int iy = MAX(-letter_y, 0); letter_y + iy < MIN(letter_y + converted.rows, (unsigned int)surface->h); ++iy)
|
||||
{
|
||||
if (face->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_LCD)
|
||||
{
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "NpChar.h"
|
||||
#include "Game.h"
|
||||
#include "CommonDefines.h"
|
||||
#include "Boss.h"
|
||||
|
||||
FRAME gFrame;
|
||||
|
||||
|
@ -148,8 +149,8 @@ void SetFrameTargetNpChar(int event, int wait)
|
|||
|
||||
void SetFrameTargetBoss(int no, int wait)
|
||||
{
|
||||
//gFrame.tgt_x = &gBoss[no].x;
|
||||
//gFrame.tgt_y = &gBoss[no].y;
|
||||
gFrame.tgt_x = &gBoss[no].x;
|
||||
gFrame.tgt_y = &gBoss[no].y;
|
||||
gFrame.wait = wait;
|
||||
}
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ void PutNumber4(int x, int y, int value, bool bZero)
|
|||
}
|
||||
|
||||
//Draw digit
|
||||
if ( bZero && offset == 2 || sw != 0 || offset == 3 )
|
||||
if ((bZero && offset == 2) || sw != 0 || offset == 3 )
|
||||
PutBitmap3(&rcClient, x + 8 * offset, y, &rect[a], SURFACE_ID_TEXT_BOX);
|
||||
|
||||
//Go to next digit
|
||||
|
@ -119,7 +119,7 @@ int ModeOpening()
|
|||
|
||||
CutNoise();
|
||||
|
||||
int wait = 0;
|
||||
unsigned int wait = 0;
|
||||
while (wait < 500)
|
||||
{
|
||||
//Increase timer
|
||||
|
@ -295,7 +295,7 @@ int ModeTitle()
|
|||
gMC.equip |= 0x100;
|
||||
|
||||
//Start loop
|
||||
int wait = 0;
|
||||
unsigned int wait = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
|
|
29
src/NpcAct.h
29
src/NpcAct.h
|
@ -149,12 +149,37 @@ void ActNpc143(NPCHAR *npc);
|
|||
void ActNpc144(NPCHAR *npc);
|
||||
void ActNpc145(NPCHAR *npc);
|
||||
void ActNpc146(NPCHAR *npc);
|
||||
|
||||
void ActNpc147(NPCHAR *npc);
|
||||
void ActNpc148(NPCHAR *npc);
|
||||
void ActNpc149(NPCHAR *npc);
|
||||
void ActNpc150(NPCHAR *npc);
|
||||
void ActNpc151(NPCHAR *npc);
|
||||
|
||||
void ActNpc153(NPCHAR *npc);
|
||||
void ActNpc154(NPCHAR *npc);
|
||||
void ActNpc155(NPCHAR *npc);
|
||||
void ActNpc156(NPCHAR *npc);
|
||||
void ActNpc157(NPCHAR *npc);
|
||||
void ActNpc158(NPCHAR *npc);
|
||||
void ActNpc159(NPCHAR *npc);
|
||||
void ActNpc160(NPCHAR *npc);
|
||||
void ActNpc161(NPCHAR *npc);
|
||||
void ActNpc162(NPCHAR *npc);
|
||||
void ActNpc163(NPCHAR *npc);
|
||||
void ActNpc164(NPCHAR *npc);
|
||||
void ActNpc165(NPCHAR *npc);
|
||||
void ActNpc166(NPCHAR *npc);
|
||||
void ActNpc167(NPCHAR *npc);
|
||||
void ActNpc168(NPCHAR *npc);
|
||||
void ActNpc169(NPCHAR *npc);
|
||||
void ActNpc170(NPCHAR *npc);
|
||||
|
||||
void ActNpc173(NPCHAR *npc);
|
||||
void ActNpc174(NPCHAR *npc);
|
||||
|
||||
void ActNpc192(NPCHAR *npc);
|
||||
void ActNpc193(NPCHAR *npc);
|
||||
void ActNpc194(NPCHAR *npc);
|
||||
|
||||
void ActNpc199(NPCHAR *npc);
|
||||
|
||||
|
@ -172,6 +197,8 @@ void ActNpc300(NPCHAR *npc);
|
|||
|
||||
void ActNpc302(NPCHAR *npc);
|
||||
|
||||
void ActNpc334(NPCHAR *npc);
|
||||
|
||||
void ActNpc355(NPCHAR *npc);
|
||||
|
||||
void ActNpc359(NPCHAR *npc);
|
||||
|
|
|
@ -414,7 +414,7 @@ void ActNpc005(NPCHAR *npc)
|
|||
case 0: //Init
|
||||
npc->y += 0x600;
|
||||
npc->act_no = 1;
|
||||
|
||||
// Fallthrough
|
||||
case 1: //Waiting
|
||||
//Look at player
|
||||
if (npc->x <= gMC.x)
|
||||
|
|
|
@ -52,7 +52,7 @@ void ActNpc021(NPCHAR *npc)
|
|||
break;
|
||||
}
|
||||
|
||||
RECT rect[0];
|
||||
RECT rect[1];
|
||||
|
||||
rect[0] = {224, 40, 240, 48};
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ void ActNpc040(NPCHAR *npc)
|
|||
npc->act_no = 1;
|
||||
npc->ani_no = 0;
|
||||
npc->ani_wait = 0;
|
||||
// Fallthrough
|
||||
case 1:
|
||||
if (Random(0, 120) == 10)
|
||||
{
|
||||
|
@ -65,6 +66,7 @@ void ActNpc040(NPCHAR *npc)
|
|||
npc->act_no = 4;
|
||||
npc->ani_no = 2;
|
||||
npc->ani_wait = 0;
|
||||
// Fallthrough
|
||||
case 4:
|
||||
if (++npc->ani_wait > 4)
|
||||
{
|
||||
|
|
|
@ -639,7 +639,7 @@ void ActNpc064(NPCHAR *npc)
|
|||
case 0: //Init
|
||||
npc->y += 0x600;
|
||||
npc->act_no = 1;
|
||||
|
||||
// Fallthrough
|
||||
case 1: //Waiting
|
||||
//Look at player
|
||||
if (npc->x <= gMC.x)
|
||||
|
|
File diff suppressed because it is too large
Load diff
1154
src/NpcAct160.cpp
Normal file
1154
src/NpcAct160.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -129,6 +129,22 @@ void ActNpc193(NPCHAR *npc)
|
|||
npc->rect = rc[0];
|
||||
}
|
||||
|
||||
//Blue robot (broken)
|
||||
void ActNpc194(NPCHAR *npc)
|
||||
{
|
||||
RECT rc[1];
|
||||
|
||||
rc[0] = {192, 120, 224, 128};
|
||||
|
||||
if (npc->act_no == 0)
|
||||
{
|
||||
npc->act_no = 1;
|
||||
npc->y += 0x800;
|
||||
}
|
||||
|
||||
npc->rect = rc[0];
|
||||
}
|
||||
|
||||
//Water/wind particles
|
||||
void ActNpc199(NPCHAR *npc)
|
||||
{
|
||||
|
|
|
@ -34,5 +34,5 @@ void ActNpc219(NPCHAR *npc)
|
|||
else if (Random(0, 40) == 1)
|
||||
SetNpChar(4, npc->x + (Random(-20, 20) * 0x200), npc->y, 0, -0x200, 0, 0, 0x100);
|
||||
|
||||
npc->rect = rc[1];
|
||||
}
|
||||
npc->rect = rc[0];
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
//Quake
|
||||
void ActNpc292(NPCHAR *npc)
|
||||
{
|
||||
(void)npc;
|
||||
|
||||
SetQuake(10);
|
||||
}
|
||||
|
||||
|
|
56
src/NpcAct320.cpp
Normal file
56
src/NpcAct320.cpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include "WindowsWrapper.h"
|
||||
|
||||
#include "NpcAct.h"
|
||||
|
||||
#include "MyChar.h"
|
||||
#include "NpChar.h"
|
||||
#include "Game.h"
|
||||
#include "Sound.h"
|
||||
#include "Back.h"
|
||||
#include "Triangle.h"
|
||||
|
||||
//Sweat
|
||||
void ActNpc334(NPCHAR *npc)
|
||||
{
|
||||
RECT rcLeft[2];
|
||||
RECT rcRight[2];
|
||||
|
||||
rcLeft[0] = {160, 184, 168, 200};
|
||||
rcLeft[1] = {168, 184, 176, 200};
|
||||
|
||||
rcRight[0] = {176, 184, 184, 200};
|
||||
rcRight[1] = {184, 184, 192, 200};
|
||||
|
||||
switch (npc->act_no)
|
||||
{
|
||||
case 0:
|
||||
npc->act_no = 10;
|
||||
|
||||
if (npc->direct == 0)
|
||||
{
|
||||
npc->x += 0x1400;
|
||||
npc->y -= 0x2400;
|
||||
}
|
||||
else
|
||||
{
|
||||
npc->x = gMC.x - 0x1400;
|
||||
npc->y = gMC.y - 0x400;
|
||||
}
|
||||
// Fallthrough
|
||||
case 10:
|
||||
if (++npc->act_wait / 8 & 1)
|
||||
npc->ani_no = 0;
|
||||
else
|
||||
npc->ani_no = 1;
|
||||
|
||||
if (npc->act_wait >= 64)
|
||||
npc->cond = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (npc->direct == 0)
|
||||
npc->rect = rcLeft[npc->ani_no];
|
||||
else
|
||||
npc->rect = rcRight[npc->ani_no];
|
||||
}
|
|
@ -19,7 +19,7 @@ bool LoadNpcTable(const char *path)
|
|||
|
||||
const size_t tblSize = SDL_RWsize(fp);
|
||||
|
||||
const int npcCount = tblSize / 0x18;
|
||||
const size_t npcCount = tblSize / 0x18;
|
||||
gNpcTable = (NPC_TABLE*)malloc(npcCount * sizeof(NPC_TABLE));
|
||||
|
||||
for (size_t i = 0; i < npcCount; i++) //bits
|
||||
|
@ -203,34 +203,34 @@ NPCFUNCTION gpNpcFuncTbl[361] =
|
|||
ActNpc144,
|
||||
ActNpc145,
|
||||
ActNpc146,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
ActNpc147,
|
||||
ActNpc148,
|
||||
ActNpc149,
|
||||
ActNpc150,
|
||||
ActNpc151,
|
||||
nullptr,
|
||||
ActNpc153,
|
||||
ActNpc154,
|
||||
ActNpc155,
|
||||
ActNpc156,
|
||||
ActNpc157,
|
||||
ActNpc158,
|
||||
ActNpc159,
|
||||
ActNpc160,
|
||||
ActNpc161,
|
||||
ActNpc162,
|
||||
ActNpc163,
|
||||
ActNpc164,
|
||||
ActNpc165,
|
||||
ActNpc166,
|
||||
ActNpc167,
|
||||
ActNpc168,
|
||||
ActNpc169,
|
||||
ActNpc170,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
ActNpc173,
|
||||
ActNpc174,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
|
@ -250,7 +250,7 @@ NPCFUNCTION gpNpcFuncTbl[361] =
|
|||
nullptr,
|
||||
ActNpc192,
|
||||
ActNpc193,
|
||||
nullptr,
|
||||
ActNpc194,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
|
@ -390,7 +390,7 @@ NPCFUNCTION gpNpcFuncTbl[361] =
|
|||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
ActNpc334,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
|
|
|
@ -123,7 +123,7 @@ bool MakeSoundObject8(int8_t *wavep, int8_t track, int8_t pipi)
|
|||
uint8_t *wp_sub = wp;
|
||||
size_t wav_tp = 0;
|
||||
|
||||
for (int i = 0; i < data_size; i++)
|
||||
for (size_t i = 0; i < data_size; i++)
|
||||
{
|
||||
uint8_t work = *(wavep+wav_tp);
|
||||
work += 0x80;
|
||||
|
|
|
@ -97,15 +97,15 @@ void PutStageSelectObject(void)
|
|||
RECT rcCur[2];
|
||||
RECT rcTitle1;
|
||||
|
||||
rcView = {0, 0, 320, 240};
|
||||
rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||
rcCur[0] = {80, 88, 112, 104};
|
||||
rcCur[1] = {80, 104, 112, 120};
|
||||
rcTitle1 = {80, 64, 144, 72};
|
||||
|
||||
if (gStageSelectTitleY > 46)
|
||||
if (gStageSelectTitleY > (WINDOW_HEIGHT / 2) - 74)
|
||||
--gStageSelectTitleY;
|
||||
|
||||
PutBitmap3(&rcView, 128, gStageSelectTitleY, &rcTitle1, SURFACE_ID_TEXT_BOX);
|
||||
PutBitmap3(&rcView, (WINDOW_WIDTH / 2) - 32, gStageSelectTitleY, &rcTitle1, SURFACE_ID_TEXT_BOX);
|
||||
|
||||
int stage_num;
|
||||
for (stage_num = 0; gPermitStage[stage_num].index; ++stage_num);
|
||||
|
@ -114,9 +114,9 @@ void PutStageSelectObject(void)
|
|||
|
||||
if (stage_num)
|
||||
{
|
||||
int stage_x = (320 - 40 * stage_num) / 2;
|
||||
int stage_x = (WINDOW_WIDTH - 40 * stage_num) / 2;
|
||||
|
||||
PutBitmap3(&rcView, stage_x + 40 * gSelectedStage, 64, &rcCur[(flash >> 1) % 2], SURFACE_ID_TEXT_BOX);
|
||||
PutBitmap3(&rcView, stage_x + 40 * gSelectedStage, (WINDOW_HEIGHT / 2) - 56, &rcCur[(flash >> 1) % 2], SURFACE_ID_TEXT_BOX);
|
||||
|
||||
for (int i = 0; i < 8 && gPermitStage[i].index; ++i)
|
||||
{
|
||||
|
@ -126,7 +126,7 @@ void PutStageSelectObject(void)
|
|||
rcStage.top = 16 * (gPermitStage[i].index / 8);
|
||||
rcStage.bottom = rcStage.top + 16;
|
||||
|
||||
PutBitmap3(&rcView, stage_x + 40 * i, 64, &rcStage, SURFACE_ID_STAGE_ITEM);
|
||||
PutBitmap3(&rcView, stage_x + 40 * i, (WINDOW_HEIGHT / 2) - 56, &rcStage, SURFACE_ID_STAGE_ITEM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -135,13 +135,13 @@ int StageSelectLoop(int *p_event)
|
|||
{
|
||||
char old_script_path[260];
|
||||
|
||||
RECT rcView = {0, 0, 320, 240};
|
||||
RECT rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||
|
||||
gSelectedStage = 0;
|
||||
BackupSurface(10, &grcFull);
|
||||
GetTextScriptPath(old_script_path);
|
||||
LoadTextScript2("StageSelect.tsc");
|
||||
gStageSelectTitleY = 54;
|
||||
gStageSelectTitleY = (WINDOW_HEIGHT / 2) - 66;
|
||||
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
||||
|
||||
do
|
||||
|
|
|
@ -886,7 +886,7 @@ void ShootBullet_Spur(int level)
|
|||
bMax = false;
|
||||
}
|
||||
|
||||
if (gKey & gKeyShot == 0)
|
||||
if (!(gKey & gKeyShot))
|
||||
ZeroExpMyChar();
|
||||
|
||||
switch (level)
|
||||
|
|
|
@ -76,18 +76,12 @@ SOUNDBUFFER::~SOUNDBUFFER()
|
|||
|
||||
void SOUNDBUFFER::Release()
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
//TODO: find a better and more stable(?) way to handle this function
|
||||
delete this;
|
||||
}
|
||||
|
||||
void SOUNDBUFFER::Lock(uint8_t **outBuffer, size_t *outSize)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
|
||||
if (outBuffer != nullptr)
|
||||
|
@ -99,17 +93,11 @@ void SOUNDBUFFER::Lock(uint8_t **outBuffer, size_t *outSize)
|
|||
|
||||
void SOUNDBUFFER::Unlock()
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_UnlockAudioDevice(audioDevice);
|
||||
}
|
||||
|
||||
void SOUNDBUFFER::SetCurrentPosition(uint32_t dwNewPosition)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
samplePosition = dwNewPosition;
|
||||
SDL_UnlockAudioDevice(audioDevice);
|
||||
|
@ -117,9 +105,6 @@ void SOUNDBUFFER::SetCurrentPosition(uint32_t dwNewPosition)
|
|||
|
||||
void SOUNDBUFFER::SetFrequency(uint32_t dwFrequency)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
frequency = (double)dwFrequency;
|
||||
SDL_UnlockAudioDevice(audioDevice);
|
||||
|
@ -134,9 +119,6 @@ float MillibelToVolume(int32_t lVolume)
|
|||
|
||||
void SOUNDBUFFER::SetVolume(int32_t lVolume)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
volume = MillibelToVolume(lVolume);
|
||||
SDL_UnlockAudioDevice(audioDevice);
|
||||
|
@ -144,9 +126,6 @@ void SOUNDBUFFER::SetVolume(int32_t lVolume)
|
|||
|
||||
void SOUNDBUFFER::SetPan(int32_t lPan)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
volume_l = MillibelToVolume(-lPan);
|
||||
volume_r = MillibelToVolume(lPan);
|
||||
|
@ -155,9 +134,6 @@ void SOUNDBUFFER::SetPan(int32_t lPan)
|
|||
|
||||
void SOUNDBUFFER::Play(bool bLooping)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
playing = true;
|
||||
looping = bLooping;
|
||||
|
@ -166,9 +142,6 @@ void SOUNDBUFFER::Play(bool bLooping)
|
|||
|
||||
void SOUNDBUFFER::Stop()
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
SDL_LockAudioDevice(audioDevice);
|
||||
playing = false;
|
||||
SDL_UnlockAudioDevice(audioDevice);
|
||||
|
@ -176,9 +149,6 @@ void SOUNDBUFFER::Stop()
|
|||
|
||||
void SOUNDBUFFER::Mix(float (*buffer)[2], size_t samples)
|
||||
{
|
||||
if (this == NULL)
|
||||
return;
|
||||
|
||||
if (!playing) //This sound buffer isn't playing
|
||||
return;
|
||||
|
||||
|
@ -225,6 +195,8 @@ void SOUNDBUFFER::Mix(float (*buffer)[2], size_t samples)
|
|||
//Sound mixer
|
||||
void AudioCallback(void *userdata, uint8_t *stream, int len)
|
||||
{
|
||||
(void)userdata;
|
||||
|
||||
float (*buffer)[2] = (float(*)[2])stream;
|
||||
const size_t samples = len / (sizeof(float) * 2);
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "Map.h"
|
||||
#include "BossLife.h"
|
||||
#include "SelStage.h"
|
||||
#include "Flash.h"
|
||||
|
||||
#define IS_COMMAND(c1, c2, c3) gTS.data[gTS.p_read + 1] == c1 && gTS.data[gTS.p_read + 2] == c2 && gTS.data[gTS.p_read + 3] == c3
|
||||
|
||||
|
@ -472,7 +473,7 @@ void PutTextScript()
|
|||
|
||||
PutBitmap3(&grcFull, (WINDOW_WIDTH + 112) / 2, i, &rect_yesno, 26);
|
||||
if (gTS.wait == 16)
|
||||
PutBitmap3(&grcFull, 41 * gTS.select + (WINDOW_WIDTH + 102) / 2, 154, &rect_cur, 26);
|
||||
PutBitmap3(&grcFull, 41 * gTS.select + (WINDOW_WIDTH + 102) / 2, WINDOW_HEIGHT - 86, &rect_cur, 26);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -521,7 +522,6 @@ int TextScriptProc()
|
|||
else if (gTS.flags & 0x10)
|
||||
{
|
||||
//SAT/CAT/TUR printing
|
||||
x;
|
||||
for (x = gTS.p_read; ; x++)
|
||||
{
|
||||
//Break if reaches command, or new-line
|
||||
|
@ -673,6 +673,14 @@ int TextScriptProc()
|
|||
SubArmsData(z);
|
||||
gTS.p_read += 8;
|
||||
}
|
||||
else if (IS_COMMAND('T','A','M'))
|
||||
{
|
||||
x = GetTextScriptNo(gTS.p_read + 4);
|
||||
y = GetTextScriptNo(gTS.p_read + 9);
|
||||
z = GetTextScriptNo(gTS.p_read + 14);
|
||||
TradeArms(x, y, z);
|
||||
gTS.p_read += 18;
|
||||
}
|
||||
else if (IS_COMMAND('P','S','+'))
|
||||
{
|
||||
x = GetTextScriptNo(gTS.p_read + 4);
|
||||
|
@ -943,6 +951,11 @@ int TextScriptProc()
|
|||
SetQuake(z);
|
||||
gTS.p_read += 8;
|
||||
}
|
||||
else if (IS_COMMAND('F','L','A'))
|
||||
{
|
||||
SetFlash(0, 0, 2);
|
||||
gTS.p_read += 4;
|
||||
}
|
||||
else if (IS_COMMAND('F','A','I'))
|
||||
{
|
||||
z = GetTextScriptNo(gTS.p_read + 4);
|
||||
|
@ -977,6 +990,13 @@ int TextScriptProc()
|
|||
SetFrameTargetNpChar(x, y);
|
||||
gTS.p_read += 13;
|
||||
}
|
||||
else if (IS_COMMAND('F','O','B'))
|
||||
{
|
||||
x = GetTextScriptNo(gTS.p_read + 4);
|
||||
y = GetTextScriptNo(gTS.p_read + 9);
|
||||
SetFrameTargetBoss(x, y);
|
||||
gTS.p_read += 13;
|
||||
}
|
||||
else if (IS_COMMAND('S','O','U'))
|
||||
{
|
||||
z = GetTextScriptNo(gTS.p_read + 4);
|
||||
|
|
|
@ -21,7 +21,7 @@ void SetValueView(int *px, int *py, int value)
|
|||
int i;
|
||||
|
||||
//TODO: Boi I'm reaaaally boutta getcho pickle chin aah boi, egg head like collard greens head ass boi, ol' hell dat bell dirt aaah boi stank ah boi afro head ass, lip gloss chin ah boi ugly ahhh boi *snort* uglaaaa
|
||||
for (i = 0; i < VALUEVIEW_MAX && (!gVV[i].flag || gVV[i].px != px || (gVV[i].value >= 0 || value >= 0) && (gVV[i].value <= 0 || value <= 0)); i++);
|
||||
for (i = 0; i < VALUEVIEW_MAX && (!gVV[i].flag || gVV[i].px != px || ((gVV[i].value >= 0 || value >= 0) && (gVV[i].value <= 0 || value <= 0))); i++);
|
||||
|
||||
int index;
|
||||
if (i == VALUEVIEW_MAX)
|
||||
|
|
Loading…
Add table
Reference in a new issue