mirror of
https://github.com/Ragora/T2-CPP.git
synced 2026-02-14 20:23:38 +00:00
Initial commit.
This commit is contained in:
parent
9538049d44
commit
44e5f33ee7
99 changed files with 2363 additions and 0 deletions
90
Mod Sources/TSExtension/BaseMod/DXAPI.cpp
Normal file
90
Mod Sources/TSExtension/BaseMod/DXAPI.cpp
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/**
|
||||
* @file DXAPI.cpp
|
||||
* @brief The DXAPI is an API that allows you to manipulate various game objects
|
||||
* in Tribes 2 from raw C++ code. It dynamically resolves the addresses of member
|
||||
* variables as you can't really trust the compiler to produce binary compatible classes,
|
||||
* especially with all the inheritance involved in the original Tribes 2 codebase.
|
||||
*
|
||||
* This code wouldn't be possible without Linker's original gift on the-construct.net forums,
|
||||
* whose files are appropriately labelled in this codebase. These files have been edited where
|
||||
* appropriate in order to make that code play better with the DXAPI.
|
||||
*
|
||||
* @copyright (c) 2014 Robert MacGregor
|
||||
*/
|
||||
|
||||
#include "DXAPI.h"
|
||||
#include "LinkerAPI.h"
|
||||
|
||||
namespace DX
|
||||
{
|
||||
Player GetPlayerPointer(UnresolvedObject obj)
|
||||
{
|
||||
// Probably some way to do all this via assembly but screw me if I know
|
||||
unsigned int base_tribes_pointer = (unsigned int)obj;
|
||||
|
||||
Player result =
|
||||
{
|
||||
0x00, // Object Name
|
||||
*(unsigned int*)(base_tribes_pointer + 32), // Object ID
|
||||
*(float*)(base_tribes_pointer + 168), // Position X
|
||||
*(float*)(base_tribes_pointer + 184), // Position Y
|
||||
*(float*)(base_tribes_pointer + 200), // Position Z
|
||||
*(bool*)(base_tribes_pointer + 735), // Jetting State
|
||||
*(bool*)(base_tribes_pointer + 734) // Jumping State
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
StaticShape GetStaticShapePointer(UnresolvedObject obj)
|
||||
{
|
||||
unsigned int base_tribes_pointer = (unsigned int)obj;
|
||||
|
||||
StaticShape result =
|
||||
{
|
||||
0x00, // Object Name
|
||||
*(float*)(base_tribes_pointer + 200), // Position X
|
||||
*(float*)(base_tribes_pointer + 200), // Position Y
|
||||
*(float*)(base_tribes_pointer + 200) // Position Z
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
SimGroup GetSimGroupPointer(UnresolvedObject obj)
|
||||
{
|
||||
unsigned int base_tribes_pointer = (unsigned int)obj;
|
||||
|
||||
SimGroup result =
|
||||
{
|
||||
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
FlyingVehicle GetFlyingVehiclePointer(UnresolvedObject obj)
|
||||
{
|
||||
unsigned int base_tribes_pointer = (unsigned int)obj;
|
||||
|
||||
FlyingVehicle result =
|
||||
{
|
||||
*(float*)(base_tribes_pointer + 2200), // Strafing Status
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
void Projectile_explode(Projectile *obj, const Point3F &position, const Point3F &normal, const unsigned int collideType)
|
||||
{
|
||||
typedef void (__cdecl *explodeFunc)(const Point3F &position, const Point3F &normal, const unsigned int collideType);
|
||||
static explodeFunc function_call = (explodeFunc)0x62DC30;
|
||||
|
||||
__asm {
|
||||
push collideType;
|
||||
push normal;
|
||||
push position;
|
||||
mov ecx,obj;
|
||||
lea eax, function_call;
|
||||
mov eax, [eax];
|
||||
call eax;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue