diff --git a/Source/player.cpp b/Source/player.cpp index 14e3dd4e1..d9828e222 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -874,7 +874,7 @@ void __fastcall InitPlayer(int pnum, BOOL FirstTime) plr[pnum]._px = plr[pnum].WorldX; plr[pnum]._py = plr[pnum].WorldY; - plr[pnum].walkpath[0] = -1; + plr[pnum].walkpath[0] = WALK_NONE; plr[pnum].destAction = ACTION_NONE; if ( pnum == myplr ) { @@ -2190,7 +2190,7 @@ BOOL __fastcall PM_DoWalk(int pnum) ViewY = plr[pnum].WorldY - ScrollInfo._sdy; } - if ( plr[pnum].walkpath[0] != -1 ) { + if ( plr[pnum].walkpath[0] != WALK_NONE ) { StartWalkStand(pnum); } else { StartStand(pnum, plr[pnum]._pVar3); @@ -2240,7 +2240,7 @@ BOOL __fastcall PM_DoWalk2(int pnum) ViewY = plr[pnum].WorldY - ScrollInfo._sdy; } - if ( plr[pnum].walkpath[0] != -1 ) { + if ( plr[pnum].walkpath[0] != WALK_NONE ) { StartWalkStand(pnum); } else { StartStand(pnum, plr[pnum]._pVar3); @@ -2295,7 +2295,7 @@ BOOL __fastcall PM_DoWalk3(int pnum) ViewY = plr[pnum].WorldY - ScrollInfo._sdy; } - if ( plr[pnum].walkpath[0] != -1 ) { + if ( plr[pnum].walkpath[0] != WALK_NONE ) { StartWalkStand(pnum); } else { StartStand(pnum, plr[pnum]._pVar3); @@ -3564,7 +3564,7 @@ void __fastcall ClrPlrPath(int pnum) TermMsg("ClrPlrPath: illegal player %d", pnum); } - memset(plr[pnum].walkpath, -1, sizeof(plr[pnum].walkpath)); + memset(plr[pnum].walkpath, WALK_NONE, sizeof(plr[pnum].walkpath)); } BOOL __fastcall PosOkPlayer(int pnum, int px, int py) @@ -3622,68 +3622,60 @@ BOOL __fastcall PosOkPlayer(int pnum, int px, int py) void __fastcall MakePlrPath(int pnum, int xx, int yy, BOOL endspace) { - int v4; // esi - int v5; // ebx - int v6; // esi - int v7; // edi - int v8; // eax - int v9; // eax - int v10; // ecx - int a2; // [esp+Ch] [ebp-4h] - - v4 = pnum; - v5 = xx; - a2 = pnum; - if ( (unsigned int)pnum >= MAX_PLRS ) + if ( (DWORD)pnum >= MAX_PLRS ) { TermMsg("MakePlrPath: illegal player %d", pnum); - v6 = v4; - v7 = yy; - v8 = plr[v6]._px; - plr[v6]._ptargx = v5; - plr[v6]._ptargy = yy; - if ( v8 != v5 || plr[v6]._py != yy ) - { - v9 = FindPath(PosOkPlayer, a2, v8, plr[v6]._py, v5, yy, plr[v6].walkpath); - if ( v9 ) - { - if ( !endspace ) - { - v10 = plr[v6].walkpath[--v9]; /* *((char *)&plr[v6]._pmode + v9-- + 3) */ - switch ( v10 ) - { - case 1: // N - goto LABEL_12; - case 2: // W - ++v5; - break; - case 3: // E - --v5; - break; - case 4: // S - goto LABEL_15; - case 5: // NW - ++v5; - goto LABEL_12; - case 6: // NE - --v5; -LABEL_12: - v7 = yy + 1; - break; - case 7: // SE - --v5; - goto LABEL_15; - case 8: // SW - ++v5; -LABEL_15: - v7 = yy - 1; - break; - } - plr[v6]._ptargx = v5; - plr[v6]._ptargy = v7; - } - plr[v6].walkpath[v9] = -1; + } + + plr[pnum]._ptargx = xx; + plr[pnum]._ptargy = yy; + if ( plr[pnum]._px == xx && plr[pnum]._py == yy ) { + return; + } + + int path = FindPath(PosOkPlayer, pnum, plr[pnum]._px, plr[pnum]._py, xx, yy, plr[pnum].walkpath); + if ( !path ) { + return; + } + + if ( !endspace ) { + path--; + + switch ( plr[pnum].walkpath[path] ) { + case WALK_NE: + yy++; + break; + case WALK_NW: + xx++; + break; + case WALK_SE: + xx--; + break; + case WALK_SW: + yy--; + break; + case WALK_N: + xx++; + yy++; + break; + case WALK_E: + xx--; + yy++; + break; + case WALK_S: + xx--; + yy--; + break; + case WALK_W: + xx++; + yy--; + break; } + + plr[pnum]._ptargx = xx; + plr[pnum]._ptargy = yy; } + + plr[pnum].walkpath[path] = WALK_NONE; } void __fastcall CheckPlrSpell() diff --git a/enums.h b/enums.h index db951a83d..aa427c684 100644 --- a/enums.h +++ b/enums.h @@ -2553,7 +2553,6 @@ enum _ui_classes enum _walk_path { - WALK_NONE = 0x0, WALK_NE = 0x1, WALK_NW = 0x2, WALK_SE = 0x3, @@ -2562,6 +2561,7 @@ enum _walk_path WALK_E = 0x6, WALK_S = 0x7, WALK_W = 0x8, + WALK_NONE = 0xFFFFFFFF, }; enum item_class {