Made Frame.cpp ASM-accurate

I'll re-add widescreen support next
This commit is contained in:
Clownacy 2019-03-07 18:07:26 +00:00
parent 7eae431e3a
commit b57bb0fdbc

View file

@ -16,59 +16,38 @@ void MoveFrame3()
int16_t map_w, map_l; int16_t map_w, map_l;
GetMapData(0, &map_w, &map_l); GetMapData(0, &map_w, &map_l);
gFrame.x += (*gFrame.tgt_x - (WINDOW_WIDTH << 8) - gFrame.x) / gFrame.wait; gFrame.x += (*gFrame.tgt_x - (WINDOW_WIDTH * 0x100) - gFrame.x) / gFrame.wait;
gFrame.y += (*gFrame.tgt_y - (WINDOW_HEIGHT << 8) - gFrame.y) / gFrame.wait; gFrame.y += (*gFrame.tgt_y - (WINDOW_HEIGHT * 0x100) - gFrame.y) / gFrame.wait;
//Keep in bounds if (gFrame.x / 0x200 < 0)
const int num_x = ((WINDOW_WIDTH + 0xF) >> 4) + 1;
const int num_y = ((WINDOW_HEIGHT + 0xF) >> 4) + 1;
if (map_w >= num_x)
{
if (gFrame.x <= -0x200)
gFrame.x = 0; gFrame.x = 0;
if (gFrame.x > ((((map_w - 1) << 4) - ((g_GameFlags & 8) ? 320 : WINDOW_WIDTH))) << 9) if (gFrame.y / 0x200 < 0)
gFrame.x = (((map_w - 1) << 4) - ((g_GameFlags & 8) ? 320 : WINDOW_WIDTH)) << 9;
}
else
{
gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 8;
}
if (map_l >= num_y)
{
if (gFrame.y <= -0x200)
gFrame.y = 0; gFrame.y = 0;
if (gFrame.y > ((((map_l - 1) << 4) - ((g_GameFlags & 8) ? 240 : WINDOW_HEIGHT))) << 9)
gFrame.y = (((map_l - 1) << 4) - ((g_GameFlags & 8) ? 240 : WINDOW_HEIGHT)) << 9; if (gFrame.x > ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200)
} gFrame.x = ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200;
else if (gFrame.y > ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200)
{ gFrame.y = ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200;
gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 8;
}
//Quake //Quake
if (gFrame.quake2) if (gFrame.quake2)
{ {
gFrame.x += (Random(-5, 5) << 9); gFrame.x += (Random(-5, 5) * 0x200);
gFrame.y += (Random(-3, 3) << 9); gFrame.y += (Random(-3, 3) * 0x200);
--gFrame.quake2; --gFrame.quake2;
} }
else if (gFrame.quake) else if (gFrame.quake)
{ {
gFrame.x += (Random(-1, 1) << 9); gFrame.x += (Random(-1, 1) * 0x200);
gFrame.y += (Random(-1, 1) << 9); gFrame.y += (Random(-1, 1) * 0x200);
--gFrame.quake; --gFrame.quake;
} }
//Keep in bounds // This code exists in the Linux port, but not the Windows version
if (map_w >= num_x && map_l >= num_y) /* if (gFrame.x / 0x200 < 0)
{
if (gFrame.x <= -0x200)
gFrame.x = 0; gFrame.x = 0;
if (gFrame.y <= -0x200) if (gFrame.y / 0x200 < 0)
gFrame.y = 0; gFrame.y = 0;*/
}
} }
void GetFramePosition(int *fx, int *fy) void GetFramePosition(int *fx, int *fy)
@ -91,15 +70,15 @@ void SetFramePosition(int fx, int fy)
gFrame.y = fy; gFrame.y = fy;
//Keep in bounds //Keep in bounds
if (gFrame.x <= -0x200) if (gFrame.x / 0x200 < 0)
gFrame.x = 0; gFrame.x = 0;
if (gFrame.y <= -0x200) if (gFrame.y / 0x200 < 0)
gFrame.y = 0; gFrame.y = 0;
if (gFrame.x > ((((map_w - 1) << 4) - WINDOW_WIDTH)) << 9) if (gFrame.x > ((((map_w - 1) * 0x10) - WINDOW_WIDTH)) * 0x200)
gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 9; gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200;
if (gFrame.y > ((((map_l - 1) << 4) - WINDOW_HEIGHT)) << 9) if (gFrame.y > ((((map_l - 1) * 0x10) - WINDOW_HEIGHT)) * 0x200)
gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 9; gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200;
} }
void SetFrameMyChar() void SetFrameMyChar()
@ -115,15 +94,15 @@ void SetFrameMyChar()
gFrame.y = mc_y - (WINDOW_HEIGHT << 8); gFrame.y = mc_y - (WINDOW_HEIGHT << 8);
//Keep in bounds //Keep in bounds
if (gFrame.x <= -0x200) if (gFrame.x / 0x200 < 0)
gFrame.x = 0; gFrame.x = 0;
if (gFrame.y <= -0x200) if (gFrame.y / 0x200 < 0)
gFrame.y = 0; gFrame.y = 0;
if (gFrame.x > ((((map_w - 1) << 4) - WINDOW_WIDTH)) << 9) if (gFrame.x > ((((map_w - 1) * 0x10) - WINDOW_WIDTH)) * 0x200)
gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 9; gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200;
if (gFrame.y > ((((map_l - 1) << 4) - WINDOW_HEIGHT)) << 9) if (gFrame.y > ((((map_l - 1) * 0x10) - WINDOW_HEIGHT)) * 0x200)
gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 9; gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200;
} }
void SetFrameTargetMyChar(int wait) void SetFrameTargetMyChar(int wait)
@ -135,16 +114,17 @@ void SetFrameTargetMyChar(int wait)
void SetFrameTargetNpChar(int event, int wait) void SetFrameTargetNpChar(int event, int wait)
{ {
for (int i = 0; i < NPC_MAX; i++) int i;
{ for (i = 0; i < NPC_MAX; i++)
if (gNPC[i].code_event == event) if (gNPC[i].code_event == event)
{ break;
if (i == NPC_MAX)
return;
gFrame.tgt_x = &gNPC[i].x; gFrame.tgt_x = &gNPC[i].x;
gFrame.tgt_y = &gNPC[i].y; gFrame.tgt_y = &gNPC[i].y;
gFrame.wait = wait; gFrame.wait = wait;
break;
}
}
} }
void SetFrameTargetBoss(int no, int wait) void SetFrameTargetBoss(int no, int wait)