Browse Source

Fix AutomapZoomIn, AutomapZoomOut, AutomapZoomReset (#349)

Clean DrawAutomapGame (binary exact)
Clean GetAutomapType ("not eax" instead of "not ax")
pull/25/head
squidcc 8 years ago committed by Robin Eklind
parent
commit
99f1a7c1d8
  1. 115
      Source/automap.cpp

115
Source/automap.cpp

@ -2,6 +2,7 @@
#include "../types.h"
// BUGFIX: only the first 256 elements are ever read
USHORT automaptype[512];
static int MapX;
static int MapY;
@ -188,9 +189,9 @@ void __cdecl AutomapZoomIn()
AutoMapScale += 5;
AutoMapPosBits = (AutoMapScale << 6) / 100;
AutoMapXPos = AutoMapPosBits >> 1;
AutoMapYPos = AutoMapPosBits >> 2;
AMPlayerX = AutoMapPosBits >> 3;
AMPlayerY = AutoMapPosBits >> 4;
AutoMapYPos = AutoMapXPos >> 1;
AMPlayerX = AutoMapYPos >> 1;
AMPlayerY = AMPlayerX >> 1;
}
}
// 4B84B8: using guessed type int AutoMapPosBits;
@ -206,9 +207,9 @@ void __cdecl AutomapZoomOut()
AutoMapScale -= 5;
AutoMapPosBits = (AutoMapScale << 6) / 100;
AutoMapXPos = AutoMapPosBits >> 1;
AutoMapYPos = AutoMapPosBits >> 2;
AMPlayerX = AutoMapPosBits >> 3;
AMPlayerY = AutoMapPosBits >> 4;
AutoMapYPos = AutoMapXPos >> 1;
AMPlayerX = AutoMapYPos >> 1;
AMPlayerY = AMPlayerX >> 1;
}
}
// 4B84B8: using guessed type int AutoMapPosBits;
@ -647,86 +648,54 @@ LABEL_25:
USHORT __fastcall GetAutomapType(int x, int y, BOOL view)
{
int v3; // edi
int v4; // esi
int v6; // eax
USHORT v7; // bp
v3 = y;
v4 = x;
if ( view )
{
if ( x == -1 && y >= 0 && y < 40 && automapview[0][y] )
{
x = 0;
return ~GetAutomapType(x, y, 0) & 0x4000;
}
if ( y == -1 )
{
if ( view ) {
if ( x == -1 && y >= 0 && y < DMAXY && automapview[0][y] )
return ~GetAutomapType(0, y, FALSE) & (MAPFLAG_SQUARE << 8);
if ( y == -1 ) {
if ( x < 0 )
return 0;
if ( x < 40 && automapview[x][0] )
{
y = 0;
return ~GetAutomapType(x, y, 0) & 0x4000;
}
if ( x < DMAXX && automapview[x][0] )
return ~GetAutomapType(x, 0, FALSE) & (MAPFLAG_SQUARE << 8);
}
}
if ( x < 0 )
return 0;
if ( x >= 40 )
return 0;
if ( y < 0 )
return 0;
if ( y >= 40 )
return 0;
v6 = y + 40 * x;
if ( !automapview[0][v6] && view )
return 0;
v7 = automaptype[(unsigned char)dungeon[0][v6]];
if ( v7 == 7 && (GetAutomapType(x - 1, y, 0) >> 8) & 8 )
{
if ( (GetAutomapType(v4, v3 - 1, 0) >> 8) & 4 )
v7 = 1;
if ( x >= 0 && x < DMAXX && y >= 0 && y < DMAXY ) {
if ( automapview[x][y] || !view ) {
USHORT type = automaptype[(UCHAR)dungeon[x][y]];
if ( type == 7 && GetAutomapType(x - 1, y, FALSE) & (MAPFLAG_HORZARCH << 8)
&& GetAutomapType(x, y - 1, FALSE) & (MAPFLAG_VERTARCH << 8) ) {
type = 1;
}
return type;
}
}
return v7;
return 0;
}
void __cdecl DrawAutomapGame()
{
int v0; // esi
char *v1; // eax
char *v2; // eax
char v3[256]; // [esp+4h] [ebp-100h]
v0 = 20;
if ( (unsigned char)gbMaxPlayers > 1u )
{
v1 = strcpy(v3, "game: ");
strcat(v1, szPlayerName);
PrintGameStr(8, 20, v3, 3);
v0 = 35;
if ( szPlayerDescript[0] )
{
v2 = strcpy(v3, "password: ");
strcat(v2, szPlayerDescript);
PrintGameStr(8, 35, v3, 3);
v0 = 50;
char desc[256];
int nextline = 20;
if ( gbMaxPlayers > 1 ) {
strcat(strcpy(desc, "game: "), szPlayerName);
PrintGameStr(8, 20, desc, COL_GOLD);
nextline = 35;
if ( szPlayerDescript[0] ) {
strcat(strcpy(desc, "password: "), szPlayerDescript);
PrintGameStr(8, 35, desc, COL_GOLD);
nextline = 50;
}
}
if ( setlevel )
{
PrintGameStr(8, v0, quest_level_names[(unsigned char)setlvlnum], 3);
}
else if ( currlevel )
{
sprintf(v3, "Level: %i", currlevel);
PrintGameStr(8, v0, v3, 3);
PrintGameStr(8, nextline, quest_level_names[(UCHAR)setlvlnum], COL_GOLD);
else if ( currlevel ) {
sprintf(desc, "Level: %i", currlevel);
PrintGameStr(8, nextline, desc, COL_GOLD);
}
}
// 5CCB10: using guessed type char setlvlnum;
// 5CF31D: using guessed type char setlevel;
// 679660: using guessed type char gbMaxPlayers;
void __fastcall SetAutomapView(int x, int y)
{
@ -803,9 +772,9 @@ void __cdecl AutomapZoomReset()
AutoMapYOfs = 0;
AutoMapPosBits = (AutoMapScale << 6) / 100;
AutoMapXPos = AutoMapPosBits >> 1;
AutoMapYPos = AutoMapPosBits >> 2;
AMPlayerX = AutoMapPosBits >> 3;
AMPlayerY = AutoMapPosBits >> 4;
AutoMapYPos = AutoMapXPos >> 1;
AMPlayerX = AutoMapYPos >> 1;
AMPlayerY = AMPlayerX >> 1;
}
// 4B84B0: using guessed type int AutoMapXOfs;
// 4B84B4: using guessed type int AutoMapYOfs;

Loading…
Cancel
Save