parent
d4d82d0ba8
commit
f04872b91b
3 changed files with 743 additions and 623 deletions
|
@ -515,6 +515,94 @@ addr = 0x414B20
|
||||||
name = "SetMapping"
|
name = "SetMapping"
|
||||||
addr = 0x414B40
|
addr = 0x414B40
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "InitMyChar"
|
||||||
|
addr = 0x414B50
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "AnimationMyChar"
|
||||||
|
addr = 0x414BF0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ShowMyChar"
|
||||||
|
addr = 0x415220
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "PutMyChar"
|
||||||
|
addr = 0x415250
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ActMyChar_Normal"
|
||||||
|
addr = 0x4156C0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ActMyChar_Stream"
|
||||||
|
addr = 0x416470
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ActMyChar"
|
||||||
|
addr = 0x4168C0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "AirProcess"
|
||||||
|
addr = 0x416990
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "GetMyCharPosition"
|
||||||
|
addr = 0x416AA0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SetMyCharPosition"
|
||||||
|
addr = 0x416AC0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "MoveMyChar"
|
||||||
|
addr = 0x416B30
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ZeroMyCharXMove"
|
||||||
|
addr = 0x416B50
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "GetUnitMyChar"
|
||||||
|
addr = 0x416B60
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SetMyCharDirect"
|
||||||
|
addr = 0x416B70
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ChangeMyUnit"
|
||||||
|
addr = 0x416C40
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "PitMyChar"
|
||||||
|
addr = 0x416C50
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "EquipItem"
|
||||||
|
addr = 0x416C70
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ResetCheck"
|
||||||
|
addr = 0x416CA0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SetNoise"
|
||||||
|
addr = 0x416CC0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "CutNoise"
|
||||||
|
addr = 0x416D40
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ResetNoise"
|
||||||
|
addr = 0x416D80
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SleepNoise"
|
||||||
|
addr = 0x416DF0
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "ResetMyCharFlag"
|
name = "ResetMyCharFlag"
|
||||||
addr = 0x416E20
|
addr = 0x416E20
|
||||||
|
|
352
src/MyChar.cpp
352
src/MyChar.cpp
|
@ -44,7 +44,7 @@ void InitMyChar()
|
||||||
gMC.unit = 0;
|
gMC.unit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimationMyChar(bool bKey)
|
void AnimationMyChar(BOOL bKey)
|
||||||
{
|
{
|
||||||
RECT rcLeft[12] = {
|
RECT rcLeft[12] = {
|
||||||
{0, 0, 16, 16},
|
{0, 0, 16, 16},
|
||||||
|
@ -76,8 +76,9 @@ void AnimationMyChar(bool bKey)
|
||||||
{112, 16, 128, 32},
|
{112, 16, 128, 32},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!(gMC.cond & 2))
|
if (gMC.cond & 2)
|
||||||
{
|
return;
|
||||||
|
|
||||||
if (gMC.flag & 8)
|
if (gMC.flag & 8)
|
||||||
{
|
{
|
||||||
if (gMC.cond & 1)
|
if (gMC.cond & 1)
|
||||||
|
@ -137,23 +138,21 @@ void AnimationMyChar(bool bKey)
|
||||||
{
|
{
|
||||||
gMC.ani_no = 10;
|
gMC.ani_no = 10;
|
||||||
}
|
}
|
||||||
else if (gMC.ym <= 0)
|
else
|
||||||
{
|
{
|
||||||
|
if (gMC.ym > 0)
|
||||||
|
gMC.ani_no = 1;
|
||||||
|
else
|
||||||
gMC.ani_no = 3;
|
gMC.ani_no = 3;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gMC.ani_no = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gMC.direct)
|
if (gMC.direct == 0)
|
||||||
gMC.rect = rcRight[gMC.ani_no];
|
|
||||||
else
|
|
||||||
gMC.rect = rcLeft[gMC.ani_no];
|
gMC.rect = rcLeft[gMC.ani_no];
|
||||||
}
|
else
|
||||||
|
gMC.rect = rcRight[gMC.ani_no];
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowMyChar(bool bShow)
|
void ShowMyChar(BOOL bShow)
|
||||||
{
|
{
|
||||||
if (bShow)
|
if (bShow)
|
||||||
gMC.cond &= ~2;
|
gMC.cond &= ~2;
|
||||||
|
@ -163,8 +162,11 @@ void ShowMyChar(bool bShow)
|
||||||
|
|
||||||
void PutMyChar(int fx, int fy)
|
void PutMyChar(int fx, int fy)
|
||||||
{
|
{
|
||||||
if ((gMC.cond & 0x80) && !(gMC.cond & 2))
|
int arms_offset_y;
|
||||||
{
|
|
||||||
|
if ((gMC.cond & 0x80) == 0 || (gMC.cond & 2))
|
||||||
|
return;
|
||||||
|
|
||||||
// Draw weapon
|
// Draw weapon
|
||||||
gMC.rect_arms.left = 24 * (gArmsData[gSelectedArms].code % 13);
|
gMC.rect_arms.left = 24 * (gArmsData[gSelectedArms].code % 13);
|
||||||
gMC.rect_arms.right = gMC.rect_arms.left + 24;
|
gMC.rect_arms.right = gMC.rect_arms.left + 24;
|
||||||
|
@ -177,7 +179,6 @@ void PutMyChar(int fx, int fy)
|
||||||
gMC.rect_arms.bottom += 16;
|
gMC.rect_arms.bottom += 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
int arms_offset_y;
|
|
||||||
if (gMC.up)
|
if (gMC.up)
|
||||||
{
|
{
|
||||||
arms_offset_y = -4;
|
arms_offset_y = -4;
|
||||||
|
@ -198,23 +199,24 @@ void PutMyChar(int fx, int fy)
|
||||||
if (gMC.ani_no == 1 || gMC.ani_no == 3 || gMC.ani_no == 6 || gMC.ani_no == 8)
|
if (gMC.ani_no == 1 || gMC.ani_no == 3 || gMC.ani_no == 6 || gMC.ani_no == 8)
|
||||||
++gMC.rect_arms.top;
|
++gMC.rect_arms.top;
|
||||||
|
|
||||||
if (gMC.direct)
|
if (gMC.direct == 0)
|
||||||
PutBitmap3(
|
|
||||||
&grcGame,
|
|
||||||
(gMC.x - gMC.view.left) / 0x200 - fx / 0x200,
|
|
||||||
(gMC.y - gMC.view.top) / 0x200 - fy / 0x200 + arms_offset_y,
|
|
||||||
&gMC.rect_arms,
|
|
||||||
SURFACE_ID_ARMS);
|
|
||||||
else
|
|
||||||
PutBitmap3(
|
PutBitmap3(
|
||||||
&grcGame,
|
&grcGame,
|
||||||
(gMC.x - gMC.view.left) / 0x200 - fx / 0x200 - 8,
|
(gMC.x - gMC.view.left) / 0x200 - fx / 0x200 - 8,
|
||||||
(gMC.y - gMC.view.top) / 0x200 - fy / 0x200 + arms_offset_y,
|
(gMC.y - gMC.view.top) / 0x200 - fy / 0x200 + arms_offset_y,
|
||||||
&gMC.rect_arms,
|
&gMC.rect_arms,
|
||||||
SURFACE_ID_ARMS);
|
SURFACE_ID_ARMS);
|
||||||
|
else
|
||||||
|
PutBitmap3(
|
||||||
|
&grcGame,
|
||||||
|
(gMC.x - gMC.view.left) / 0x200 - fx / 0x200,
|
||||||
|
(gMC.y - gMC.view.top) / 0x200 - fy / 0x200 + arms_offset_y,
|
||||||
|
&gMC.rect_arms,
|
||||||
|
SURFACE_ID_ARMS);
|
||||||
|
|
||||||
|
if ((gMC.shock / 2) % 2)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!((gMC.shock >> 1) & 1))
|
|
||||||
{
|
|
||||||
// Draw player
|
// Draw player
|
||||||
RECT rect = gMC.rect;
|
RECT rect = gMC.rect;
|
||||||
if (gMC.equip & 0x40)
|
if (gMC.equip & 0x40)
|
||||||
|
@ -233,18 +235,15 @@ void PutMyChar(int fx, int fy)
|
||||||
|
|
||||||
++gMC.bubble;
|
++gMC.bubble;
|
||||||
if (gMC.equip & 0x10 && gMC.flag & 0x100)
|
if (gMC.equip & 0x10 && gMC.flag & 0x100)
|
||||||
PutBitmap3(&grcGame, gMC.x / 0x200 - 12 - fx / 0x200, gMC.y / 0x200 - 12 - fy / 0x200, &rcBubble[(gMC.bubble >> 1) & 1], SURFACE_ID_CARET);
|
PutBitmap3(&grcGame, gMC.x / 0x200 - 12 - fx / 0x200, gMC.y / 0x200 - 12 - fy / 0x200, &rcBubble[(gMC.bubble / 2) % 2], SURFACE_ID_CARET);
|
||||||
else if (gMC.unit == 1)
|
else if (gMC.unit == 1)
|
||||||
PutBitmap3(&grcGame, gMC.x / 0x200 - 12 - fx / 0x200, gMC.y / 0x200 - 12 - fy / 0x200, &rcBubble[(gMC.bubble >> 1) & 1], SURFACE_ID_CARET);
|
PutBitmap3(&grcGame, gMC.x / 0x200 - 12 - fx / 0x200, gMC.y / 0x200 - 12 - fy / 0x200, &rcBubble[(gMC.bubble / 2) % 2], SURFACE_ID_CARET);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActMyChar_Normal(bool bKey)
|
void ActMyChar_Normal(BOOL bKey)
|
||||||
{
|
{
|
||||||
if (!(gMC.cond & 2))
|
|
||||||
{
|
|
||||||
// Get speeds and accelerations
|
// Get speeds and accelerations
|
||||||
|
int max_move; // Unused
|
||||||
int max_dash;
|
int max_dash;
|
||||||
int gravity1;
|
int gravity1;
|
||||||
int gravity2;
|
int gravity2;
|
||||||
|
@ -253,9 +252,16 @@ void ActMyChar_Normal(bool bKey)
|
||||||
int dash2;
|
int dash2;
|
||||||
int resist;
|
int resist;
|
||||||
|
|
||||||
|
int a;
|
||||||
|
int x;
|
||||||
|
|
||||||
|
if (gMC.cond & 2)
|
||||||
|
return;
|
||||||
|
|
||||||
if (gMC.flag & 0x100)
|
if (gMC.flag & 0x100)
|
||||||
{
|
{
|
||||||
max_dash = 0x196;
|
max_dash = 0x196;
|
||||||
|
max_move = 0x2FF;
|
||||||
gravity1 = 0x28;
|
gravity1 = 0x28;
|
||||||
gravity2 = 0x10;
|
gravity2 = 0x10;
|
||||||
jump = 0x280;
|
jump = 0x280;
|
||||||
|
@ -266,6 +272,7 @@ void ActMyChar_Normal(bool bKey)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
max_dash = 0x32C;
|
max_dash = 0x32C;
|
||||||
|
max_move = 0x5FF;
|
||||||
gravity1 = 0x50;
|
gravity1 = 0x50;
|
||||||
gravity2 = 0x20;
|
gravity2 = 0x20;
|
||||||
jump = 0x500;
|
jump = 0x500;
|
||||||
|
@ -303,9 +310,16 @@ void ActMyChar_Normal(bool bKey)
|
||||||
// Move in direction held
|
// Move in direction held
|
||||||
if (bKey)
|
if (bKey)
|
||||||
{
|
{
|
||||||
if (gKeyTrg != gKeyDown || gKey != gKeyDown || (gMC.cond & 1) || g_GameFlags & 4)
|
if (gKeyTrg == gKeyDown && gKey == gKeyDown && (gMC.cond & 1) == 0 && (g_GameFlags & 4) == 0)
|
||||||
{
|
{
|
||||||
if (gKey != gKeyDown)
|
gMC.cond |= 1;
|
||||||
|
gMC.ques = 1;
|
||||||
|
}
|
||||||
|
else if (gKey == gKeyDown)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (gKey & gKeyLeft && gMC.xm > -max_dash)
|
if (gKey & gKeyLeft && gMC.xm > -max_dash)
|
||||||
gMC.xm -= dash1;
|
gMC.xm -= dash1;
|
||||||
|
@ -318,29 +332,23 @@ void ActMyChar_Normal(bool bKey)
|
||||||
gMC.direct = 2;
|
gMC.direct = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gMC.cond |= 1;
|
|
||||||
gMC.ques = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Friction
|
// Friction
|
||||||
if (!(gMC.cond & 0x20))
|
if (!(gMC.cond & 0x20))
|
||||||
{
|
{
|
||||||
if (gMC.xm < 0)
|
if (gMC.xm < 0)
|
||||||
{
|
{
|
||||||
if (gMC.xm <= -resist)
|
if (gMC.xm > -resist)
|
||||||
gMC.xm += resist;
|
|
||||||
else
|
|
||||||
gMC.xm = 0;
|
gMC.xm = 0;
|
||||||
|
else
|
||||||
|
gMC.xm += resist;
|
||||||
}
|
}
|
||||||
if (gMC.xm > 0)
|
if (gMC.xm > 0)
|
||||||
{
|
{
|
||||||
if (gMC.xm >= resist)
|
if (gMC.xm < resist)
|
||||||
gMC.xm -= resist;
|
|
||||||
else
|
|
||||||
gMC.xm = 0;
|
gMC.xm = 0;
|
||||||
|
else
|
||||||
|
gMC.xm -= resist;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -425,17 +433,30 @@ void ActMyChar_Normal(bool bKey)
|
||||||
if (bKey)
|
if (bKey)
|
||||||
{
|
{
|
||||||
// Look up and down
|
// Look up and down
|
||||||
gMC.up = (gKey & gKeyUp) != 0;
|
if (gKey & gKeyUp)
|
||||||
gMC.down = gKey & gKeyDown && !(gMC.flag & 8);
|
gMC.up = TRUE;
|
||||||
|
else
|
||||||
|
gMC.up = FALSE;
|
||||||
|
|
||||||
|
if (gKey & gKeyDown && (gMC.flag & 8) == 0)
|
||||||
|
gMC.down = TRUE;
|
||||||
|
else
|
||||||
|
gMC.down = FALSE;
|
||||||
|
|
||||||
if (gKeyTrg & gKeyJump
|
if (gKeyTrg & gKeyJump
|
||||||
&& (gMC.flag & 8 || gMC.flag & 0x10 || gMC.flag & 0x20)
|
&& (gMC.flag & 8 || gMC.flag & 0x10 || gMC.flag & 0x20))
|
||||||
&& !(gMC.flag & 0x2000))
|
{
|
||||||
|
if (gMC.flag & 0x2000)
|
||||||
|
{
|
||||||
|
// Another weird empty case needed for accurate assembly
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
gMC.ym = -jump;
|
gMC.ym = -jump;
|
||||||
PlaySoundObject(15, 1);
|
PlaySoundObject(15, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Stop interacting when moved
|
// Stop interacting when moved
|
||||||
if (bKey && (gKeyShot | gKeyJump | gKeyUp | gKeyRight | gKeyLeft) & gKey)
|
if (bKey && (gKeyShot | gKeyJump | gKeyUp | gKeyRight | gKeyLeft) & gKey)
|
||||||
|
@ -533,7 +554,7 @@ void ActMyChar_Normal(bool bKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keep player on slopes
|
// Keep player on slopes
|
||||||
if (bKey && !(gKeyTrg & gKeyJump))
|
if (!bKey || !(gKeyTrg & gKeyJump))
|
||||||
{
|
{
|
||||||
if (gMC.flag & 0x10 && gMC.xm < 0)
|
if (gMC.flag & 0x10 && gMC.xm < 0)
|
||||||
gMC.ym = -gMC.xm;
|
gMC.ym = -gMC.xm;
|
||||||
|
@ -547,19 +568,15 @@ void ActMyChar_Normal(bool bKey)
|
||||||
gMC.ym = 0x400;
|
gMC.ym = 0x400;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Limit speed
|
if (0)
|
||||||
if (!(gMC.flag & 0x100) || gMC.flag & 0xF000)
|
|
||||||
{
|
{
|
||||||
if (gMC.xm < -0x5FF)
|
// There used to be an if here that didn't do anything, but the compiler optimised it out.
|
||||||
gMC.xm = -0x5FF;
|
// We only know this was here because empty ifs mess with the register usage.
|
||||||
if (gMC.xm > 0x5FF)
|
// Since there's no code, we have no idea what the original condition actually was.
|
||||||
gMC.xm = 0x5FF;
|
|
||||||
if (gMC.ym < -0x5FF)
|
|
||||||
gMC.ym = -0x5FF;
|
|
||||||
if (gMC.ym > 0x5FF)
|
|
||||||
gMC.ym = 0x5FF;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// Limit speed
|
||||||
|
if ((gMC.flag & 0x100) && (gMC.flag & 0xF000) == 0)
|
||||||
{
|
{
|
||||||
if (gMC.xm < -0x2FF)
|
if (gMC.xm < -0x2FF)
|
||||||
gMC.xm = -0x2FF;
|
gMC.xm = -0x2FF;
|
||||||
|
@ -570,6 +587,17 @@ void ActMyChar_Normal(bool bKey)
|
||||||
if (gMC.ym > 0x2FF)
|
if (gMC.ym > 0x2FF)
|
||||||
gMC.ym = 0x2FF;
|
gMC.ym = 0x2FF;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gMC.xm < -0x5FF)
|
||||||
|
gMC.xm = -0x5FF;
|
||||||
|
if (gMC.xm > 0x5FF)
|
||||||
|
gMC.xm = 0x5FF;
|
||||||
|
if (gMC.ym < -0x5FF)
|
||||||
|
gMC.ym = -0x5FF;
|
||||||
|
if (gMC.ym > 0x5FF)
|
||||||
|
gMC.ym = 0x5FF;
|
||||||
|
}
|
||||||
|
|
||||||
// Water splashing
|
// Water splashing
|
||||||
if (!gMC.sprash && gMC.flag & 0x100)
|
if (!gMC.sprash && gMC.flag & 0x100)
|
||||||
|
@ -580,23 +608,29 @@ void ActMyChar_Normal(bool bKey)
|
||||||
else
|
else
|
||||||
dir = 0;
|
dir = 0;
|
||||||
|
|
||||||
if (gMC.flag & 8 || gMC.ym <= 0x200)
|
if ((gMC.flag & 8) == 0 && gMC.ym > 0x200)
|
||||||
{
|
{
|
||||||
if (gMC.xm > 0x200 || gMC.xm < -0x200)
|
for (a = 0; a < 8; a++)
|
||||||
{
|
{
|
||||||
for (int a = 0; a < 8; a++)
|
x = gMC.x + (Random(-8, 8) * 0x200);
|
||||||
SetNpChar(73, gMC.x + (Random(-8, 8) << 9), gMC.y, gMC.xm + Random(-0x200, 0x200), Random(-0x200, 0x80), dir, 0, 0);
|
SetNpChar(73, x, gMC.y, gMC.xm + Random(-0x200, 0x200), Random(-0x200, 0x80) - gMC.ym / 2, dir, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
PlaySoundObject(56, 1);
|
PlaySoundObject(56, 1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int a = 0; a < 8; a++)
|
if (gMC.xm > 0x200 || gMC.xm < -0x200)
|
||||||
SetNpChar(73, gMC.x + (Random(-8, 8) << 9), gMC.y, gMC.xm + Random(-0x200, 0x200), Random(-0x200, 0x80) - gMC.ym / 2, dir, 0, 0);
|
{
|
||||||
|
for (a = 0; a < 8; a++)
|
||||||
|
{
|
||||||
|
x = gMC.x + (Random(-8, 8) * 0x200);
|
||||||
|
SetNpChar(73, x, gMC.y, gMC.xm + Random(-0x200, 0x200), Random(-0x200, 0x80), dir, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
PlaySoundObject(56, 1);
|
PlaySoundObject(56, 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gMC.sprash = 1;
|
gMC.sprash = 1;
|
||||||
}
|
}
|
||||||
|
@ -609,18 +643,18 @@ void ActMyChar_Normal(bool bKey)
|
||||||
DamageMyChar(10);
|
DamageMyChar(10);
|
||||||
|
|
||||||
// Camera
|
// Camera
|
||||||
if (gMC.direct)
|
if (gMC.direct == 0)
|
||||||
{
|
|
||||||
gMC.index_x += 0x200;
|
|
||||||
if (gMC.index_x > 0x8000)
|
|
||||||
gMC.index_x = 0x8000;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
gMC.index_x -= 0x200;
|
gMC.index_x -= 0x200;
|
||||||
if (gMC.index_x < -0x8000)
|
if (gMC.index_x < -0x8000)
|
||||||
gMC.index_x = -0x8000;
|
gMC.index_x = -0x8000;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gMC.index_x += 0x200;
|
||||||
|
if (gMC.index_x > 0x8000)
|
||||||
|
gMC.index_x = 0x8000;
|
||||||
|
}
|
||||||
if (gKey & gKeyUp && bKey)
|
if (gKey & gKeyUp && bKey)
|
||||||
{
|
{
|
||||||
gMC.index_y -= 0x200;
|
gMC.index_y -= 0x200;
|
||||||
|
@ -645,16 +679,22 @@ void ActMyChar_Normal(bool bKey)
|
||||||
gMC.tgt_y = gMC.y + gMC.index_y;
|
gMC.tgt_y = gMC.y + gMC.index_y;
|
||||||
|
|
||||||
// Change position
|
// Change position
|
||||||
if (gMC.xm > resist || gMC.xm < -resist)
|
if (gMC.xm <= resist && gMC.xm >= -resist)
|
||||||
gMC.x += gMC.xm;
|
{
|
||||||
gMC.y += gMC.ym;
|
// Okay, this is getting stupid. Why the HELL is the code written like this?
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gMC.x += gMC.xm;
|
||||||
|
}
|
||||||
|
|
||||||
|
gMC.y += gMC.ym;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActMyChar_Stream(bool bKey)
|
void ActMyChar_Stream(BOOL bKey)
|
||||||
{
|
{
|
||||||
gMC.up = false;
|
gMC.up = FALSE;
|
||||||
gMC.down = false;
|
gMC.down = FALSE;
|
||||||
|
|
||||||
if (bKey)
|
if (bKey)
|
||||||
{
|
{
|
||||||
|
@ -666,17 +706,18 @@ void ActMyChar_Stream(bool bKey)
|
||||||
if (gKey & gKeyRight)
|
if (gKey & gKeyRight)
|
||||||
gMC.xm += 0x100;
|
gMC.xm += 0x100;
|
||||||
}
|
}
|
||||||
else if (gMC.xm > 0x7F || gMC.xm < -0x7F)
|
else if (gMC.xm < 0x80 && gMC.xm > -0x80)
|
||||||
{
|
|
||||||
if (gMC.xm > 0)
|
|
||||||
gMC.xm -= 0x80;
|
|
||||||
else if (gMC.xm < 0)
|
|
||||||
gMC.xm += 0x80;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
gMC.xm = 0;
|
gMC.xm = 0;
|
||||||
}
|
}
|
||||||
|
else if (gMC.xm > 0)
|
||||||
|
{
|
||||||
|
gMC.xm -= 0x80;
|
||||||
|
}
|
||||||
|
else if (gMC.xm < 0)
|
||||||
|
{
|
||||||
|
gMC.xm += 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
if (gKey & (gKeyDown | gKeyUp))
|
if (gKey & (gKeyDown | gKeyUp))
|
||||||
{
|
{
|
||||||
|
@ -686,44 +727,35 @@ void ActMyChar_Stream(bool bKey)
|
||||||
if (gKey & gKeyDown)
|
if (gKey & gKeyDown)
|
||||||
gMC.ym += 0x100;
|
gMC.ym += 0x100;
|
||||||
}
|
}
|
||||||
else if (gMC.ym > 0x7F || gMC.ym < -0x7F)
|
else if (gMC.ym < 0x80 && gMC.ym > -0x80)
|
||||||
{
|
|
||||||
if (gMC.ym > 0)
|
|
||||||
gMC.ym -= 0x80;
|
|
||||||
else if (gMC.ym < 0)
|
|
||||||
gMC.ym += 0x80;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
gMC.ym = 0;
|
gMC.ym = 0;
|
||||||
}
|
}
|
||||||
|
else if (gMC.ym > 0)
|
||||||
|
{
|
||||||
|
gMC.ym -= 0x80;
|
||||||
|
}
|
||||||
|
else if (gMC.ym < 0)
|
||||||
|
{
|
||||||
|
gMC.ym += 0x80;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gMC.xm > 0x7F || gMC.xm < -0x3F)
|
if (gMC.xm < 0x80 && gMC.xm > -0x40)
|
||||||
{
|
gMC.xm = 0;
|
||||||
if (gMC.xm > 0)
|
else if (gMC.xm > 0)
|
||||||
gMC.xm -= 0x80;
|
gMC.xm -= 0x80;
|
||||||
else if (gMC.xm < 0)
|
else if (gMC.xm < 0)
|
||||||
gMC.xm += 0x80;
|
gMC.xm += 0x80;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gMC.xm = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gMC.ym > 0x7F || gMC.ym < -0x3F)
|
if (gMC.ym < 0x80 && gMC.ym > -0x40)
|
||||||
{
|
gMC.ym = 0;
|
||||||
if (gMC.ym > 0)
|
else if (gMC.ym > 0)
|
||||||
gMC.ym -= 0x80;
|
gMC.ym -= 0x80;
|
||||||
else if (gMC.ym < 0)
|
else if (gMC.ym < 0)
|
||||||
gMC.ym += 0x80;
|
gMC.ym += 0x80;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gMC.ym = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gMC.ym < -0x200 && gMC.flag & 2)
|
if (gMC.ym < -0x200 && gMC.flag & 2)
|
||||||
SetCaret(gMC.x, gMC.y - gMC.hit.top, 13, 5);
|
SetCaret(gMC.x, gMC.y - gMC.hit.top, 13, 5);
|
||||||
|
@ -785,7 +817,11 @@ void AirProcess()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gMC.flag & 0x100)
|
if ((gMC.flag & 0x100) == 0)
|
||||||
|
{
|
||||||
|
gMC.air = 1000;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (--gMC.air <= 0)
|
if (--gMC.air <= 0)
|
||||||
{
|
{
|
||||||
|
@ -799,19 +835,15 @@ void AirProcess()
|
||||||
// Drown
|
// Drown
|
||||||
StartTextScript(41);
|
StartTextScript(41);
|
||||||
|
|
||||||
if (gMC.direct)
|
if (gMC.direct == 0)
|
||||||
SetCaret(gMC.x, gMC.y, 8, 2);
|
|
||||||
else
|
|
||||||
SetCaret(gMC.x, gMC.y, 8, 0);
|
SetCaret(gMC.x, gMC.y, 8, 0);
|
||||||
|
else
|
||||||
|
SetCaret(gMC.x, gMC.y, 8, 2);
|
||||||
|
|
||||||
gMC.cond &= ~0x80;
|
gMC.cond &= ~0x80;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gMC.air = 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gMC.flag & 0x100)
|
if (gMC.flag & 0x100)
|
||||||
{
|
{
|
||||||
|
@ -824,10 +856,11 @@ void AirProcess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActMyChar(bool bKey)
|
void ActMyChar(BOOL bKey)
|
||||||
{
|
{
|
||||||
if (gMC.cond & 0x80)
|
if ((gMC.cond & 0x80) == 0)
|
||||||
{
|
return;
|
||||||
|
|
||||||
if (gMC.exp_wait)
|
if (gMC.exp_wait)
|
||||||
--gMC.exp_wait;
|
--gMC.exp_wait;
|
||||||
|
|
||||||
|
@ -852,13 +885,9 @@ void ActMyChar(bool bKey)
|
||||||
case 1:
|
case 1:
|
||||||
ActMyChar_Stream(bKey);
|
ActMyChar_Stream(bKey);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gMC.cond &= ~0x20;
|
gMC.cond &= ~0x20;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetMyCharPosition(int *x, int *y)
|
void GetMyCharPosition(int *x, int *y)
|
||||||
|
@ -871,8 +900,8 @@ void SetMyCharPosition(int x, int y)
|
||||||
{
|
{
|
||||||
gMC.x = x;
|
gMC.x = x;
|
||||||
gMC.y = y;
|
gMC.y = y;
|
||||||
gMC.tgt_x = x;
|
gMC.tgt_x = gMC.x;
|
||||||
gMC.tgt_y = y;
|
gMC.tgt_y = gMC.y;
|
||||||
gMC.index_x = 0;
|
gMC.index_x = 0;
|
||||||
gMC.index_y = 0;
|
gMC.index_y = 0;
|
||||||
gMC.xm = 0;
|
gMC.xm = 0;
|
||||||
|
@ -897,42 +926,41 @@ int GetUnitMyChar()
|
||||||
return gMC.unit;
|
return gMC.unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetMyCharDirect(uint8_t dir)
|
void SetMyCharDirect(unsigned char dir)
|
||||||
{
|
{
|
||||||
switch (dir)
|
if (dir == 3)
|
||||||
{
|
{
|
||||||
case 3:
|
|
||||||
gMC.cond |= 1;
|
gMC.cond |= 1;
|
||||||
break;
|
}
|
||||||
|
else
|
||||||
default:
|
{
|
||||||
gMC.cond &= ~1;
|
gMC.cond &= ~1;
|
||||||
|
|
||||||
if (dir < 10)
|
if (dir < 10)
|
||||||
{
|
{
|
||||||
gMC.direct = dir;
|
gMC.direct = dir;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < NPC_MAX; i++)
|
|
||||||
{
|
|
||||||
if (gNPC[i].code_event == dir)
|
|
||||||
{
|
|
||||||
if (gMC.x <= gNPC[i].x)
|
|
||||||
gMC.direct = 2;
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < NPC_MAX; i++)
|
||||||
|
if (gNPC[i].code_event == dir)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i == NPC_MAX)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (gMC.x > gNPC[i].x)
|
||||||
gMC.direct = 0;
|
gMC.direct = 0;
|
||||||
break;
|
else
|
||||||
|
gMC.direct = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
gMC.xm = 0;
|
gMC.xm = 0;
|
||||||
AnimationMyChar(false);
|
AnimationMyChar(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChangeMyUnit(uint8_t a)
|
void ChangeMyUnit(unsigned char a)
|
||||||
{
|
{
|
||||||
gMC.unit = a;
|
gMC.unit = a;
|
||||||
}
|
}
|
||||||
|
@ -942,7 +970,7 @@ void PitMyChar()
|
||||||
gMC.y += 0x4000;
|
gMC.y += 0x4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EquipItem(int flag, bool b)
|
void EquipItem(int flag, BOOL b)
|
||||||
{
|
{
|
||||||
if (b)
|
if (b)
|
||||||
gMC.equip |= flag;
|
gMC.equip |= flag;
|
||||||
|
@ -960,16 +988,18 @@ void SetNoise(int no, int freq)
|
||||||
noise_freq = freq;
|
noise_freq = freq;
|
||||||
noise_no = no;
|
noise_no = no;
|
||||||
|
|
||||||
if (no == 1)
|
switch (noise_no)
|
||||||
{
|
{
|
||||||
|
case 1:
|
||||||
ChangeSoundFrequency(40, noise_freq);
|
ChangeSoundFrequency(40, noise_freq);
|
||||||
ChangeSoundFrequency(41, noise_freq + 100);
|
ChangeSoundFrequency(41, noise_freq + 100);
|
||||||
PlaySoundObject(40, -1);
|
PlaySoundObject(40, -1);
|
||||||
PlaySoundObject(41, -1);
|
PlaySoundObject(41, -1);
|
||||||
}
|
break;
|
||||||
else if (no == 2)
|
|
||||||
{
|
case 2:
|
||||||
PlaySoundObject(58, -1);
|
PlaySoundObject(58, -1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -983,16 +1013,18 @@ void CutNoise()
|
||||||
|
|
||||||
void ResetNoise()
|
void ResetNoise()
|
||||||
{
|
{
|
||||||
if (noise_no == 1)
|
switch (noise_no)
|
||||||
{
|
{
|
||||||
|
case 1:
|
||||||
ChangeSoundFrequency(40, noise_freq);
|
ChangeSoundFrequency(40, noise_freq);
|
||||||
ChangeSoundFrequency(41, noise_freq + 100);
|
ChangeSoundFrequency(41, noise_freq + 100);
|
||||||
PlaySoundObject(40, -1);
|
PlaySoundObject(40, -1);
|
||||||
PlaySoundObject(41, -1);
|
PlaySoundObject(41, -1);
|
||||||
}
|
break;
|
||||||
else if (noise_no == 2)
|
|
||||||
{
|
case 2:
|
||||||
PlaySoundObject(58, -1);
|
PlaySoundObject(58, -1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
42
src/MyChar.h
42
src/MyChar.h
|
@ -6,11 +6,11 @@
|
||||||
|
|
||||||
struct MYCHAR
|
struct MYCHAR
|
||||||
{
|
{
|
||||||
uint8_t cond;
|
unsigned char cond;
|
||||||
unsigned int flag;
|
unsigned int flag;
|
||||||
int direct;
|
int direct;
|
||||||
int up;
|
BOOL up;
|
||||||
int down;
|
BOOL down;
|
||||||
int unit;
|
int unit;
|
||||||
int equip;
|
int equip;
|
||||||
int x;
|
int x;
|
||||||
|
@ -30,41 +30,41 @@ struct MYCHAR
|
||||||
int level;
|
int level;
|
||||||
int exp_wait;
|
int exp_wait;
|
||||||
int exp_count;
|
int exp_count;
|
||||||
uint8_t shock;
|
unsigned char shock;
|
||||||
uint8_t no_life;
|
unsigned char no_life;
|
||||||
uint8_t rensha;
|
unsigned char rensha;
|
||||||
uint8_t bubble;
|
unsigned char bubble;
|
||||||
int16_t life;
|
short life;
|
||||||
int16_t star;
|
short star;
|
||||||
int16_t max_life;
|
short max_life;
|
||||||
int16_t a;
|
short a;
|
||||||
int lifeBr;
|
int lifeBr;
|
||||||
int lifeBr_count;
|
int lifeBr_count;
|
||||||
int air;
|
int air;
|
||||||
int air_get;
|
int air_get;
|
||||||
int8_t sprash;
|
signed char sprash;
|
||||||
int8_t ques;
|
signed char ques;
|
||||||
int8_t boost_sw;
|
signed char boost_sw;
|
||||||
int boost_cnt;
|
int boost_cnt;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern MYCHAR gMC;
|
extern MYCHAR gMC;
|
||||||
|
|
||||||
void InitMyChar();
|
void InitMyChar();
|
||||||
void AnimationMyChar(bool bKey);
|
void AnimationMyChar(BOOL bKey);
|
||||||
void ShowMyChar(bool bShow);
|
void ShowMyChar(BOOL bShow);
|
||||||
void PutMyChar(int fx, int fy);
|
void PutMyChar(int fx, int fy);
|
||||||
void ActMyChar_Normal(bool bKey);
|
void ActMyChar_Normal(BOOL bKey);
|
||||||
void ActMyChar(bool bKey);
|
void ActMyChar(BOOL bKey);
|
||||||
void GetMyCharPosition(int *x, int *y);
|
void GetMyCharPosition(int *x, int *y);
|
||||||
void SetMyCharPosition(int x, int y);
|
void SetMyCharPosition(int x, int y);
|
||||||
void MoveMyChar(int x, int y);
|
void MoveMyChar(int x, int y);
|
||||||
void ZeroMyCharXMove();
|
void ZeroMyCharXMove();
|
||||||
int GetUnitMyChar();
|
int GetUnitMyChar();
|
||||||
void SetMyCharDirect(uint8_t dir);
|
void SetMyCharDirect(unsigned char dir);
|
||||||
void ChangeMyUnit(uint8_t a);
|
void ChangeMyUnit(unsigned char a);
|
||||||
void PitMyChar();
|
void PitMyChar();
|
||||||
void EquipItem(int flag, bool b);
|
void EquipItem(int flag, BOOL b);
|
||||||
void ResetCheck();
|
void ResetCheck();
|
||||||
void SetNoise(int no, int freq);
|
void SetNoise(int no, int freq);
|
||||||
void CutNoise();
|
void CutNoise();
|
||||||
|
|
Loading…
Add table
Reference in a new issue