Skip to content

Commit

Permalink
Fix unreliable pointer on 1942; fix UT3 top[1] reversal issue when lo…
Browse files Browse the repository at this point in the history
…oking down
  • Loading branch information
Tuck Therebelos committed Jan 10, 2010
1 parent fba3df2 commit 77713c8
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 63 deletions.
41 changes: 10 additions & 31 deletions plugins/bf1942/bf1942.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ HANDLE h;

BYTE *faceptr;
BYTE *topptr;
BYTE *stateptr;
//BYTE *stateptr;
//BYTE *contextptr;

static DWORD getProcess(const wchar_t *exename) {
Expand Down Expand Up @@ -111,34 +111,22 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa
avatar_pos[i]=avatar_front[i]=avatar_top[i]=0.0f;

//char ccontext[128];
char state;
//char state;
//char spawn;
bool ok;

/*
state value is:
0 when not in a server
32 when in a server
*/
ok = peekProc(stateptr, &state, 1); // Magical state value
if (! ok)
return false;

if (state == 0)
return false; // Unlink plugin

//ok = peekProc((BYTE *) 0x0097634D, &spawn, 1);
//ok = peekProc(stateptr, &state, 1); // Magical state value
//if (! ok)
// return false;

//if (spawn == 0)
// return true; //Center PA
//if (state == 0)
// return false;

//peekProc(contextptr, ccontext, 128);

ok = peekProc((BYTE *) 0x00976274, avatar_pos, 12) &&
peekProc(faceptr, avatar_front, 12) &&
peekProc(topptr, avatar_top, 12);
peekProc(faceptr, avatar_front, 12) &&
peekProc(topptr, avatar_top, 12);

if (! ok)
return false;
Expand All @@ -149,7 +137,7 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa
*/
//ccontext[127] = 0;
//context = std::string(ccontext);

for (int i=0;i<3;i++) {
camera_pos[i] = avatar_pos[i];
camera_front[i] = avatar_front[i];
Expand All @@ -166,25 +154,16 @@ static int trylock() {
DWORD pid=getProcess(L"BF1942.exe");
if (!pid)
return false;
BYTE *mod=getModuleAddr(pid, L"binkw32.dll");
if (!mod)
return false;

h=OpenProcess(PROCESS_VM_READ, false, pid);
if (!h)
return false;

BYTE *ptr1 = peekProcPtr((BYTE *) 0x009A9468);
BYTE *ptr2 = peekProcPtr(ptr1 + 0x98);

faceptr = ptr2 + 0x5C;
topptr = ptr2 + 0x4C;
stateptr = mod + 0x52FB1;

//BYTE *ctxtp1 = peekProcPtr((BYTE *) 0x);
//BYTE *ctxtp2 = peekProcPtr(ctxtp1 + 0x);

//contextptr = ctxtp2 + 0x;

float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3];
std::string context;
Expand Down
63 changes: 31 additions & 32 deletions plugins/ut3/ut3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,7 @@ BYTE *pos0ptr;
BYTE *pos1ptr;
BYTE *pos2ptr;
BYTE *faceptr;
BYTE *top0ptr;
BYTE *top1ptr;
BYTE *top2ptr;
BYTE *topptr;
//BYTE *stateptr;

static DWORD getProcess(const wchar_t *exename) {
Expand Down Expand Up @@ -122,17 +120,15 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa
bool ok;

float face_corrector[3];
float top0_corrector;
float top1_corrector;
float top2_corrector;
float top_corrector[3];

for (int i=0;i<3;i++)
avatar_pos[i]=avatar_front[i]=avatar_top[i]=0.0f;

ok = peekProc((BYTE *) 0x01DEAFD9, &state, 1);
if (! ok)
return false;

if (state == 1)
return true;

Expand All @@ -148,30 +144,39 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa
//Convert to left-handed coordinate system

ok = peekProc(pos2ptr, avatar_pos, 4) && //X
peekProc(pos1ptr, avatar_pos+1, 4) && //Y
peekProc(pos0ptr, avatar_pos+2, 4) && //Z
peekProc(faceptr, &face_corrector, 12) &&
peekProc(top0ptr, &top0_corrector, 4) &&
peekProc(top1ptr, &top1_corrector, 4) &&
peekProc(top2ptr, &top2_corrector, 4);
//peekProc((BYTE *) 0x0122E0B8, ccontext, 128);
peekProc(pos1ptr, avatar_pos+1, 4) && //Y
peekProc(pos0ptr, avatar_pos+2, 4) && //Z
peekProc(faceptr, &face_corrector, 12) &&
peekProc(topptr, &top_corrector, 12);

//peekProc((BYTE *) 0x0122E0B8, ccontext, 128);

if (! ok)
return false;

if (face_corrector[1] <= -0.98) {
top_corrector[1] = -top_corrector[1];
}
if (face_corrector[1] >= 0.98) {
top_corrector[1] = -top_corrector[1];
}

//Find north by playing on a Warfare game type - center view on the up arrow on the mini map
avatar_front[0] = face_corrector[2];
avatar_front[0] = face_corrector[2];
avatar_front[1] = face_corrector[1];
avatar_front[2] = face_corrector[0];

avatar_top[0] = top2_corrector;
avatar_top[1] = top1_corrector;
avatar_top[2] = top0_corrector;

avatar_top[0] = top_corrector[2];
avatar_top[1] = top_corrector[1];
avatar_top[2] = top_corrector[0];

//avatar_top[0] = top_corrector[2];
//avatar_top[1] = top_corrector[1];

//ccontext[127] = 0;
//context = std::string(ccontext);

//if (context.find(':')==string::npos)
//if (context.find(':')==string::npos)
// context.append(":UT3PORT");

for (int i=0;i<3;i++) {
Expand All @@ -185,8 +190,8 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa

static int trylock() {
h = NULL;
pos0ptr = pos1ptr = pos2ptr = faceptr = top0ptr = top1ptr = top2ptr = NULL;

pos0ptr = pos1ptr = pos2ptr = faceptr = NULL;
DWORD pid=getProcess(L"UT3.exe");
if (!pid)
return false;
Expand All @@ -205,15 +210,9 @@ static int trylock() {
pos1ptr = baseptr + 0x4;
pos2ptr = baseptr + 0x8;
faceptr = baseptr + 0x18;
top0ptr = baseptr + 0x24;
top2ptr = baseptr + 0x2C;

BYTE *ptraddress2 = peekProcPtr((BYTE *) 0x01DD1FF4);
BYTE *ptr1 = peekProcPtr(ptraddress2 + 0x230);

top1ptr = ptr1 + 0xA8;

//stateptr = mod + 0xC4;
topptr = baseptr + 0x24;

//stateptr = mod + 0xC4;

float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3];
std::string context;
Expand Down

0 comments on commit 77713c8

Please sign in to comment.