Browse Source

Cleanup town_clear_x_buf (#669)

pull/39/head
galaxyhaxz 7 years ago committed by GitHub
parent
commit
068f19d523
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 188
      Source/town.cpp
  2. 4
      Source/town.h

188
Source/town.cpp

@ -2,83 +2,143 @@
#include "../types.h"
void __fastcall town_clear_upper_buf(unsigned char *a1)
void __fastcall town_clear_upper_buf(BYTE *pBuff)
{
unsigned char *v1; // edi
signed int v2; // edx
signed int v3; // ebx
unsigned char *v4; // edi
signed int v5; // edx
signed int v6; // ebx
unsigned char *v7; // edi
/// ASSERT: assert(gpBuffer);
v1 = a1;
v2 = 30;
v3 = 1;
while (v1 >= gpBufEnd) {
v4 = &v1[v2];
memset(v4, 0, 4 * v3);
v1 = &v4[4 * v3 - 832 + v2];
if (!v2) {
v5 = 2;
v6 = 15;
do {
if (v1 < gpBufEnd)
break;
v7 = &v1[v5];
memset(v7, 0, 4 * v6);
v1 = &v7[4 * v6-- - 832 + v5];
v5 += 2;
} while (v5 != 32);
return;
}
v2 -= 2;
++v3;
#if (_MSC_VER >= 800) && (_MSC_VER <= 1200)
__asm {
mov edi, pBuff
mov edx, 30
mov ebx, 1
xor eax, eax
label1:
cmp edi, gpBufEnd
jb label4
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
sub edi, 768 + 64
or edx, edx
jz label2
sub edx, 2
inc ebx
jmp label1
label2:
mov edx, 2
mov ebx, 15
label3:
cmp edi, gpBufEnd
jb label4
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
sub edi, 768 + 64
dec ebx
add edx, 2
cmp edx, 32
jnz label3
label4:
nop
}
#else
int i, j, k;
BYTE *dst;
dst = pBuff;
for(i = 30, j = 1; i >= 0 && dst >= gpBufEnd; i -= 2, j++, dst -= 768 + 64) {
dst += i;
for(k = 0; k < 4 * j; k++)
*dst++ = 0;
dst += i;
}
for(i = 2, j = 15; i != 32 && dst >= gpBufEnd; i += 2, j--, dst -= 768 + 64) {
dst += i;
for(k = 0; k < 4 * j; k++)
*dst++ = 0;
dst += i;
}
#endif
}
// 69CF0C: using guessed type int gpBufEnd;
void __fastcall town_clear_low_buf(unsigned char *y_related)
void __fastcall town_clear_low_buf(BYTE *pBuff)
{
unsigned char *v1; // edi
signed int v2; // edx
signed int i; // ebx
unsigned char *v4; // edi
unsigned char *v5; // edi
signed int v6; // edx
signed int v7; // ebx
unsigned char *v8; // edi
unsigned char *v9; // edi
/// ASSERT: assert(gpBuffer);
#if (_MSC_VER >= 800) && (_MSC_VER <= 1200)
__asm {
mov edi, pBuff
mov edx, 30
mov ebx, 1
xor eax, eax
label1:
cmp edi, gpBufEnd
jb label2
add edi, 64
jmp label3
label2:
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
label3:
sub edi, 768 + 64
or edx, edx
jz label4
sub edx, 2
inc ebx
jmp label1
label4:
mov edx, 2
mov ebx, 15
label5:
cmp edi, gpBufEnd
jb label6
add edi, 64
jmp label7
label6:
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
label7:
sub edi, 768 + 64
dec ebx
add edx, 2
cmp edx, 32
jnz label5
}
#else
int i, j, k;
BYTE *dst;
v1 = y_related;
v2 = 30;
for (i = 1;; ++i) {
if (v1 < gpBufEnd) {
v5 = &v1[v2];
memset(v5, 0, 4 * i);
v4 = &v5[4 * i + v2];
dst = pBuff;
for(i = 30, j = 1; i >= 0; i -= 2, j++, dst -= 768 + 64) {
if(dst < gpBufEnd) {
dst += i;
for(k = 0; k < 4 * j; k++)
*dst++ = 0;
dst += i;
} else {
v4 = v1 + 64;
dst += 64;
}
v1 = v4 - 832;
if (!v2)
break;
v2 -= 2;
}
v6 = 2;
v7 = 15;
do {
if (v1 < gpBufEnd) {
v9 = &v1[v6];
memset(v9, 0, 4 * v7);
v8 = &v9[4 * v7 + v6];
for(i = 2, j = 15; i != 32; i += 2, j--, dst -= 768 + 64) {
if(dst < gpBufEnd) {
dst += i;
for(k = 0; k < 4 * j; k++)
*dst++ = 0;
dst += i;
} else {
v8 = v1 + 64;
dst += 64;
}
v1 = v8 - 832;
--v7;
v6 += 2;
} while (v6 != 32);
}
#endif
}
// 69CF0C: using guessed type int gpBufEnd;

4
Source/town.h

@ -2,8 +2,8 @@
#ifndef __TOWN_H__
#define __TOWN_H__
void __fastcall town_clear_upper_buf(unsigned char *a1);
void __fastcall town_clear_low_buf(unsigned char *y_related);
void __fastcall town_clear_upper_buf(BYTE *pBuff);
void __fastcall town_clear_low_buf(BYTE *pBuff);
void __fastcall town_draw_clipped_e_flag(BYTE *buffer, int x, int y, int sx, int sy);
void __fastcall town_draw_clipped_town(BYTE *buffer, int x, int y, int sx, int sy, int some_flag);
void __fastcall town_draw_lower(int x, int y, int sx, int sy, int a5, int some_flag);

Loading…
Cancel
Save