diff --git a/src/Frame.cpp b/src/Frame.cpp index c20e67f8..cabfe71a 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -15,60 +15,39 @@ void MoveFrame3() { int16_t map_w, map_l; GetMapData(0, &map_w, &map_l); - - gFrame.x += (*gFrame.tgt_x - (WINDOW_WIDTH << 8) - gFrame.x) / gFrame.wait; - gFrame.y += (*gFrame.tgt_y - (WINDOW_HEIGHT << 8) - gFrame.y) / gFrame.wait; - - //Keep in bounds - 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; - if (gFrame.x > ((((map_w - 1) << 4) - ((g_GameFlags & 8) ? 320 : WINDOW_WIDTH))) << 9) - 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; - 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; - } - else - { - gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 8; - } + + gFrame.x += (*gFrame.tgt_x - (WINDOW_WIDTH * 0x100) - gFrame.x) / gFrame.wait; + gFrame.y += (*gFrame.tgt_y - (WINDOW_HEIGHT * 0x100) - gFrame.y) / gFrame.wait; + + if (gFrame.x / 0x200 < 0) + gFrame.x = 0; + if (gFrame.y / 0x200 < 0) + gFrame.y = 0; + + if (gFrame.x > ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200) + gFrame.x = ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200; + if (gFrame.y > ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200) + gFrame.y = ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200; //Quake if (gFrame.quake2) { - gFrame.x += (Random(-5, 5) << 9); - gFrame.y += (Random(-3, 3) << 9); + gFrame.x += (Random(-5, 5) * 0x200); + gFrame.y += (Random(-3, 3) * 0x200); --gFrame.quake2; } else if (gFrame.quake) { - gFrame.x += (Random(-1, 1) << 9); - gFrame.y += (Random(-1, 1) << 9); + gFrame.x += (Random(-1, 1) * 0x200); + gFrame.y += (Random(-1, 1) * 0x200); --gFrame.quake; } - - //Keep in bounds - if (map_w >= num_x && map_l >= num_y) - { - if (gFrame.x <= -0x200) - gFrame.x = 0; - if (gFrame.y <= -0x200) - gFrame.y = 0; - } + + // This code exists in the Linux port, but not the Windows version +/* if (gFrame.x / 0x200 < 0) + gFrame.x = 0; + if (gFrame.y / 0x200 < 0) + gFrame.y = 0;*/ } void GetFramePosition(int *fx, int *fy) @@ -91,15 +70,15 @@ void SetFramePosition(int fx, int fy) gFrame.y = fy; //Keep in bounds - if (gFrame.x <= -0x200) + if (gFrame.x / 0x200 < 0) gFrame.x = 0; - if (gFrame.y <= -0x200) + if (gFrame.y / 0x200 < 0) gFrame.y = 0; - if (gFrame.x > ((((map_w - 1) << 4) - WINDOW_WIDTH)) << 9) - gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 9; - if (gFrame.y > ((((map_l - 1) << 4) - WINDOW_HEIGHT)) << 9) - gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 9; + if (gFrame.x > ((((map_w - 1) * 0x10) - WINDOW_WIDTH)) * 0x200) + gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200; + if (gFrame.y > ((((map_l - 1) * 0x10) - WINDOW_HEIGHT)) * 0x200) + gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200; } void SetFrameMyChar() @@ -115,15 +94,15 @@ void SetFrameMyChar() gFrame.y = mc_y - (WINDOW_HEIGHT << 8); //Keep in bounds - if (gFrame.x <= -0x200) + if (gFrame.x / 0x200 < 0) gFrame.x = 0; - if (gFrame.y <= -0x200) + if (gFrame.y / 0x200 < 0) gFrame.y = 0; - if (gFrame.x > ((((map_w - 1) << 4) - WINDOW_WIDTH)) << 9) - gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 9; - if (gFrame.y > ((((map_l - 1) << 4) - WINDOW_HEIGHT)) << 9) - gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 9; + if (gFrame.x > ((((map_w - 1) * 0x10) - WINDOW_WIDTH)) * 0x200) + gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200; + if (gFrame.y > ((((map_l - 1) * 0x10) - WINDOW_HEIGHT)) * 0x200) + gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200; } void SetFrameTargetMyChar(int wait) @@ -135,16 +114,17 @@ void SetFrameTargetMyChar(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) - { - gFrame.tgt_x = &gNPC[i].x; - gFrame.tgt_y = &gNPC[i].y; - gFrame.wait = wait; break; - } - } + + if (i == NPC_MAX) + return; + + gFrame.tgt_x = &gNPC[i].x; + gFrame.tgt_y = &gNPC[i].y; + gFrame.wait = wait; } void SetFrameTargetBoss(int no, int wait)