Merge pull request #346 from Sergeanur/Radar2
Finished CRadar, a bit of CExplosion
This commit is contained in:
commit
31d16d395e
@ -63,7 +63,6 @@ CMotionBlurStreaks
|
|||||||
CObject
|
CObject
|
||||||
CPacManPickups
|
CPacManPickups
|
||||||
CPedPath
|
CPedPath
|
||||||
CRadar
|
|
||||||
CRecordDataForChase
|
CRecordDataForChase
|
||||||
CRoadBlocks
|
CRoadBlocks
|
||||||
CRubbish
|
CRubbish
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
#include "common.h"
|
|
||||||
#include "patcher.h"
|
|
||||||
#include "Explosion.h"
|
|
||||||
|
|
||||||
WRAPPER void CExplosion::AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32) { EAXJMP(0x5591C0); }
|
|
||||||
WRAPPER void CExplosion::RemoveAllExplosionsInArea(CVector, float) { EAXJMP(0x55AD40); }
|
|
||||||
WRAPPER bool CExplosion::TestForExplosionInArea(eExplosionType, float, float, float, float, float, float) { EAXJMP(0x55AC80); }
|
|
||||||
|
|
||||||
WRAPPER
|
|
||||||
int8 CExplosion::GetExplosionActiveCounter(uint8 id)
|
|
||||||
{
|
|
||||||
EAXJMP(0x559140);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRAPPER
|
|
||||||
CVector *CExplosion::GetExplosionPosition(uint8 id)
|
|
||||||
{
|
|
||||||
EAXJMP(0x5591A0);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRAPPER
|
|
||||||
uint8 CExplosion::GetExplosionType(uint8 id)
|
|
||||||
{
|
|
||||||
EAXJMP(0x559180);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRAPPER
|
|
||||||
void CExplosion::ResetExplosionActiveCounter(uint8 id)
|
|
||||||
{
|
|
||||||
EAXJMP(0x559160);
|
|
||||||
}
|
|
@ -14,55 +14,56 @@
|
|||||||
#include "TxdStore.h"
|
#include "TxdStore.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "Streaming.h"
|
#include "Streaming.h"
|
||||||
|
#include "SpecialFX.h"
|
||||||
|
|
||||||
float &CRadar::m_radarRange = *(float*)0x8E281C;
|
float &CRadar::m_radarRange = *(float*)0x8E281C;
|
||||||
CBlip (&CRadar::ms_RadarTrace)[NUMRADARBLIPS] = *(CBlip(*)[NUMRADARBLIPS]) * (uintptr*)0x6ED5E0;
|
CBlip (&CRadar::ms_RadarTrace)[NUMRADARBLIPS] = *(CBlip(*)[NUMRADARBLIPS]) * (uintptr*)0x6ED5E0;
|
||||||
CVector2D &vec2DRadarOrigin = *(CVector2D*)0x6299B8;
|
CVector2D &vec2DRadarOrigin = *(CVector2D*)0x6299B8;
|
||||||
int *gRadarTxdIds = (int*)0x6299C0;
|
int32 gRadarTxdIds[64];// = (int*)0x6299C0;
|
||||||
|
|
||||||
CSprite2d *CRadar::AsukaSprite = (CSprite2d*)0x8F1A40;
|
CSprite2d CRadar::AsukaSprite;// = *(CSprite2d*)0x8F1A40;
|
||||||
CSprite2d *CRadar::BombSprite = (CSprite2d*)0x8F5FB4;
|
CSprite2d CRadar::BombSprite;// = (CSprite2d*)0x8F5FB4;
|
||||||
CSprite2d *CRadar::CatSprite = (CSprite2d*)0x885B24;
|
CSprite2d CRadar::CatSprite;// = (CSprite2d*)0x885B24;
|
||||||
CSprite2d *CRadar::CentreSprite = (CSprite2d*)0x8F6268;
|
CSprite2d CRadar::CentreSprite;// = (CSprite2d*)0x8F6268;
|
||||||
CSprite2d *CRadar::CopcarSprite = (CSprite2d*)0x8F1A2C;
|
CSprite2d CRadar::CopcarSprite;// = (CSprite2d*)0x8F1A2C;
|
||||||
CSprite2d *CRadar::DonSprite = (CSprite2d*)0x8F2BE0;
|
CSprite2d CRadar::DonSprite;// = (CSprite2d*)0x8F2BE0;
|
||||||
CSprite2d *CRadar::EightSprite = (CSprite2d*)0x8F2BCC;
|
CSprite2d CRadar::EightSprite;// = (CSprite2d*)0x8F2BCC;
|
||||||
CSprite2d *CRadar::ElSprite = (CSprite2d*)0x8F1B80;
|
CSprite2d CRadar::ElSprite;// = (CSprite2d*)0x8F1B80;
|
||||||
CSprite2d *CRadar::IceSprite = (CSprite2d*)0x9415FC;
|
CSprite2d CRadar::IceSprite;// = (CSprite2d*)0x9415FC;
|
||||||
CSprite2d *CRadar::JoeySprite = (CSprite2d*)0x8F2C00;
|
CSprite2d CRadar::JoeySprite;// = (CSprite2d*)0x8F2C00;
|
||||||
CSprite2d *CRadar::KenjiSprite = (CSprite2d*)0x8F2C68;
|
CSprite2d CRadar::KenjiSprite;// = (CSprite2d*)0x8F2C68;
|
||||||
CSprite2d *CRadar::LizSprite = (CSprite2d*)0x8F5830;
|
CSprite2d CRadar::LizSprite;// = (CSprite2d*)0x8F5830;
|
||||||
CSprite2d *CRadar::LuigiSprite = (CSprite2d*)0x8F1A3C;
|
CSprite2d CRadar::LuigiSprite;// = (CSprite2d*)0x8F1A3C;
|
||||||
CSprite2d *CRadar::NorthSprite = (CSprite2d*)0x8F6274;
|
CSprite2d CRadar::NorthSprite;// = (CSprite2d*)0x8F6274;
|
||||||
CSprite2d *CRadar::RaySprite = (CSprite2d*)0x8E2A7C;
|
CSprite2d CRadar::RaySprite;// = (CSprite2d*)0x8E2A7C;
|
||||||
CSprite2d *CRadar::SalSprite = (CSprite2d*)0x8F29EC;
|
CSprite2d CRadar::SalSprite;// = (CSprite2d*)0x8F29EC;
|
||||||
CSprite2d *CRadar::SaveSprite = (CSprite2d*)0x8F5F74;
|
CSprite2d CRadar::SaveSprite;// = (CSprite2d*)0x8F5F74;
|
||||||
CSprite2d *CRadar::SpraySprite = (CSprite2d*)0x94307C;
|
CSprite2d CRadar::SpraySprite;// = (CSprite2d*)0x94307C;
|
||||||
CSprite2d *CRadar::TonySprite = (CSprite2d*)0x885B58;
|
CSprite2d CRadar::TonySprite;// = (CSprite2d*)0x885B58;
|
||||||
CSprite2d *CRadar::WeaponSprite = (CSprite2d*)0x941534;
|
CSprite2d CRadar::WeaponSprite;// = (CSprite2d*)0x941534;
|
||||||
|
|
||||||
CSprite2d *CRadar::RadarSprites[RADAR_SPRITE_COUNT] = {
|
CSprite2d *CRadar::RadarSprites[RADAR_SPRITE_COUNT] = {
|
||||||
nil,
|
nil,
|
||||||
AsukaSprite,
|
&AsukaSprite,
|
||||||
BombSprite,
|
&BombSprite,
|
||||||
CatSprite,
|
&CatSprite,
|
||||||
CentreSprite,
|
&CentreSprite,
|
||||||
CopcarSprite,
|
&CopcarSprite,
|
||||||
DonSprite,
|
&DonSprite,
|
||||||
EightSprite,
|
&EightSprite,
|
||||||
ElSprite,
|
&ElSprite,
|
||||||
IceSprite,
|
&IceSprite,
|
||||||
JoeySprite,
|
&JoeySprite,
|
||||||
KenjiSprite,
|
&KenjiSprite,
|
||||||
LizSprite,
|
&LizSprite,
|
||||||
LuigiSprite,
|
&LuigiSprite,
|
||||||
NorthSprite,
|
&NorthSprite,
|
||||||
RaySprite,
|
&RaySprite,
|
||||||
SalSprite,
|
&SalSprite,
|
||||||
SaveSprite,
|
&SaveSprite,
|
||||||
SpraySprite,
|
&SpraySprite,
|
||||||
TonySprite,
|
&TonySprite,
|
||||||
WeaponSprite
|
&WeaponSprite
|
||||||
};
|
};
|
||||||
|
|
||||||
#define RADAR_NUM_TILES (8)
|
#define RADAR_NUM_TILES (8)
|
||||||
@ -89,48 +90,63 @@ uint8 CRadar::CalculateBlipAlpha(float dist)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::ChangeBlipBrightness(int32, int32) { EAXJMP(0x4A57A0); }
|
WRAPPER void CRadar::ChangeBlipBrightness(int32, int32) { EAXJMP(0x4A57A0); }
|
||||||
#else
|
#else
|
||||||
void CRadar::ChangeBlipBrightness(int32 i, int32 bright)
|
void CRadar::ChangeBlipBrightness(int32 i, int32 bright)
|
||||||
{
|
{
|
||||||
|
int index = GetActualBlipArrayIndex(i);
|
||||||
|
if (index != -1)
|
||||||
|
ms_RadarTrace[index].m_bDim = bright != 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::ChangeBlipColour(int32, int32) { EAXJMP(0x4A5770); }
|
WRAPPER void CRadar::ChangeBlipColour(int32, int32) { EAXJMP(0x4A5770); }
|
||||||
#else
|
#else
|
||||||
void CRadar::ChangeBlipColour(int32 i, int32)
|
void CRadar::ChangeBlipColour(int32 i, int32 color)
|
||||||
{
|
{
|
||||||
|
int index = GetActualBlipArrayIndex(i);
|
||||||
|
if (index != -1)
|
||||||
|
ms_RadarTrace[index].m_nColor = color;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::ChangeBlipDisplay(int32, eBlipDisplay) { EAXJMP(0x4A5810); }
|
WRAPPER void CRadar::ChangeBlipDisplay(int32, eBlipDisplay) { EAXJMP(0x4A5810); }
|
||||||
#else
|
#else
|
||||||
void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display)
|
void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display)
|
||||||
{
|
{
|
||||||
|
int index = GetActualBlipArrayIndex(i);
|
||||||
|
if (index != -1)
|
||||||
|
ms_RadarTrace[index].m_eBlipDisplay = display;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::ChangeBlipScale(int32, int32) { EAXJMP(0x4A57E0); }
|
WRAPPER void CRadar::ChangeBlipScale(int32, int32) { EAXJMP(0x4A57E0); }
|
||||||
#else
|
#else
|
||||||
void CRadar::ChangeBlipScale(int32 i, int32 scale)
|
void CRadar::ChangeBlipScale(int32 i, int32 scale)
|
||||||
{
|
{
|
||||||
|
int index = GetActualBlipArrayIndex(i);
|
||||||
|
if (index != -1)
|
||||||
|
ms_RadarTrace[index].m_wScale = scale;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::ClearBlip(int32) { EAXJMP(0x4A5720); }
|
WRAPPER void CRadar::ClearBlip(int32) { EAXJMP(0x4A5720); }
|
||||||
#else
|
#else
|
||||||
void CRadar::ClearBlip(int32 i)
|
void CRadar::ClearBlip(int32 i)
|
||||||
{
|
{
|
||||||
|
int index = GetActualBlipArrayIndex(i);
|
||||||
|
if (index != -1) {
|
||||||
|
SetRadarMarkerState(index, false);
|
||||||
|
ms_RadarTrace[index].m_bInUse = false;
|
||||||
|
ms_RadarTrace[index].m_eBlipType = BLIP_NONE;
|
||||||
|
ms_RadarTrace[index].m_eBlipDisplay = BLIP_DISPLAY_NEITHER;
|
||||||
|
ms_RadarTrace[index].m_IconID = RADAR_SPRITE_NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -247,12 +263,59 @@ bool CRadar::DisplayThisBlip(int32 counter)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::Draw3dMarkers() { EAXJMP(0x4A4C70); }
|
WRAPPER void CRadar::Draw3dMarkers() { EAXJMP(0x4A4C70); }
|
||||||
#else
|
#else
|
||||||
void CRadar::Draw3dMarkers()
|
void CRadar::Draw3dMarkers()
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < NUMRADARBLIPS; i++) {
|
||||||
|
if (ms_RadarTrace[i].m_bInUse) {
|
||||||
|
switch (ms_RadarTrace[i].m_eBlipType) {
|
||||||
|
case BLIP_CAR:
|
||||||
|
{
|
||||||
|
CEntity *entity = CPools::GetVehiclePool()->GetAt(ms_RadarTrace[i].m_nEntityHandle);
|
||||||
|
if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) {
|
||||||
|
CVector pos = entity->GetPosition();
|
||||||
|
pos.z += 1.2f * CModelInfo::GetModelInfo(entity->GetModelIndex())->GetColModel()->boundingBox.max.z + 2.5f;
|
||||||
|
C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), 1, pos, 2.5f, 0, 128, 255, 255, 1024, 0.2f, 5);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case BLIP_CHAR:
|
||||||
|
{
|
||||||
|
CEntity *entity = CPools::GetPedPool()->GetAt(ms_RadarTrace[i].m_nEntityHandle);
|
||||||
|
if (entity != nil) {
|
||||||
|
if (((CPed*)entity)->InVehicle())
|
||||||
|
entity = ((CPed * )entity)->m_pMyVehicle;
|
||||||
|
}
|
||||||
|
if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) {
|
||||||
|
CVector pos = entity->GetPosition();
|
||||||
|
pos.z += 3.0f;
|
||||||
|
C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), 1, pos, 1.5f, 0, 128, 255, 255, 1024, 0.2f, 5);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case BLIP_OBJECT:
|
||||||
|
{
|
||||||
|
CEntity *entity = CPools::GetObjectPool()->GetAt(ms_RadarTrace[i].m_nEntityHandle);
|
||||||
|
if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) {
|
||||||
|
CVector pos = entity->GetPosition();
|
||||||
|
pos.z += CModelInfo::GetModelInfo(entity->GetModelIndex())->GetColModel()->boundingBox.max.z + 1.0f + 1.0f;
|
||||||
|
C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), 1, pos, 1.0f, 0, 128, 255, 255, 1024, 0.2f, 5);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case BLIP_COORD:
|
||||||
|
break;
|
||||||
|
case BLIP_CONTACT_POINT:
|
||||||
|
if (!CTheScripts::IsPlayerOnAMission()) {
|
||||||
|
if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY)
|
||||||
|
C3dMarkers::PlaceMarkerSet(i | (ms_RadarTrace[i].m_BlipIndex << 16), 4, ms_RadarTrace[i].m_vecPos, 2.0f, 0, 128, 255, 128, 2048, 0.2f, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -284,7 +347,7 @@ void CRadar::DrawBlips()
|
|||||||
else
|
else
|
||||||
angle = FindPlayerHeading() - (PI + TheCamera.GetForward().Heading());
|
angle = FindPlayerHeading() - (PI + TheCamera.GetForward().Heading());
|
||||||
|
|
||||||
DrawRotatingRadarSprite(CentreSprite, out.x, out.y, angle, 255);
|
DrawRotatingRadarSprite(&CentreSprite, out.x, out.y, angle, 255);
|
||||||
|
|
||||||
CVector2D vec2d;
|
CVector2D vec2d;
|
||||||
vec2d.x = vec2DRadarOrigin.x;
|
vec2d.x = vec2DRadarOrigin.x;
|
||||||
@ -312,8 +375,9 @@ void CRadar::DrawBlips()
|
|||||||
break;
|
break;
|
||||||
case BLIP_CHAR:
|
case BLIP_CHAR:
|
||||||
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||||
if (blipEntity && ((CPed*)blipEntity)->InVehicle()) {
|
if (blipEntity != nil) {
|
||||||
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
if (((CPed*)blipEntity)->InVehicle())
|
||||||
|
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BLIP_OBJECT:
|
case BLIP_OBJECT:
|
||||||
@ -415,8 +479,9 @@ void CRadar::DrawBlips()
|
|||||||
break;
|
break;
|
||||||
case BLIP_CHAR:
|
case BLIP_CHAR:
|
||||||
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||||
if (blipEntity && ((CPed*)blipEntity)->InVehicle()) {
|
if (blipEntity != nil) {
|
||||||
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
if (((CPed*)blipEntity)->InVehicle())
|
||||||
|
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BLIP_OBJECT:
|
case BLIP_OBJECT:
|
||||||
@ -729,12 +794,16 @@ int32 CRadar::GetActualBlipArrayIndex(int32 i)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER int32 CRadar::GetNewUniqueBlipIndex(int32) { EAXJMP(0x4A4180); }
|
WRAPPER int32 CRadar::GetNewUniqueBlipIndex(int32) { EAXJMP(0x4A4180); }
|
||||||
#else
|
#else
|
||||||
int32 CRadar::GetNewUniqueBlipIndex(int32 i)
|
int32 CRadar::GetNewUniqueBlipIndex(int32 i)
|
||||||
{
|
{
|
||||||
return int32();
|
if (ms_RadarTrace[i].m_BlipIndex >= UINT16_MAX - 1)
|
||||||
|
ms_RadarTrace[i].m_BlipIndex = 1;
|
||||||
|
else
|
||||||
|
ms_RadarTrace[i].m_BlipIndex++;
|
||||||
|
return i | (ms_RadarTrace[i].m_BlipIndex << 16);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -796,68 +865,14 @@ uint32 CRadar::GetRadarTraceColour(uint32 color, bool bright)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char* gRadarTexNames[] = {
|
const char* gRadarTexNames[] = {
|
||||||
"radar00",
|
"radar00", "radar01", "radar02", "radar03", "radar04", "radar05", "radar06", "radar07",
|
||||||
"radar01",
|
"radar08", "radar09", "radar10", "radar11", "radar12", "radar13", "radar14", "radar15",
|
||||||
"radar02",
|
"radar16", "radar17", "radar18", "radar19", "radar20", "radar21", "radar22", "radar23",
|
||||||
"radar03",
|
"radar24", "radar25", "radar26", "radar27", "radar28", "radar29", "radar30", "radar31",
|
||||||
"radar04",
|
"radar32", "radar33", "radar34", "radar35", "radar36", "radar37", "radar38", "radar39",
|
||||||
"radar05",
|
"radar40", "radar41", "radar42", "radar43", "radar44", "radar45", "radar46", "radar47",
|
||||||
"radar06",
|
"radar48", "radar49", "radar50", "radar51", "radar52", "radar53", "radar54", "radar55",
|
||||||
"radar07",
|
"radar56", "radar57", "radar58", "radar59", "radar60", "radar61", "radar62", "radar63",
|
||||||
"radar08",
|
|
||||||
"radar09",
|
|
||||||
"radar10",
|
|
||||||
"radar11",
|
|
||||||
"radar12",
|
|
||||||
"radar13",
|
|
||||||
"radar14",
|
|
||||||
"radar15",
|
|
||||||
"radar16",
|
|
||||||
"radar17",
|
|
||||||
"radar18",
|
|
||||||
"radar19",
|
|
||||||
"radar20",
|
|
||||||
"radar21",
|
|
||||||
"radar22",
|
|
||||||
"radar23",
|
|
||||||
"radar24",
|
|
||||||
"radar25",
|
|
||||||
"radar26",
|
|
||||||
"radar27",
|
|
||||||
"radar28",
|
|
||||||
"radar29",
|
|
||||||
"radar30",
|
|
||||||
"radar31",
|
|
||||||
"radar32",
|
|
||||||
"radar33",
|
|
||||||
"radar34",
|
|
||||||
"radar35",
|
|
||||||
"radar36",
|
|
||||||
"radar37",
|
|
||||||
"radar38",
|
|
||||||
"radar39",
|
|
||||||
"radar40",
|
|
||||||
"radar41",
|
|
||||||
"radar42",
|
|
||||||
"radar43",
|
|
||||||
"radar44",
|
|
||||||
"radar45",
|
|
||||||
"radar46",
|
|
||||||
"radar47",
|
|
||||||
"radar48",
|
|
||||||
"radar49",
|
|
||||||
"radar50",
|
|
||||||
"radar51",
|
|
||||||
"radar52",
|
|
||||||
"radar53",
|
|
||||||
"radar54",
|
|
||||||
"radar55",
|
|
||||||
"radar56",
|
|
||||||
"radar57",
|
|
||||||
"radar58",
|
|
||||||
"radar59",
|
|
||||||
"radar60",
|
|
||||||
"radar61",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -898,43 +913,75 @@ float CRadar::LimitRadarPoint(CVector2D &point)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::LoadAllRadarBlips(int32) { EAXJMP(0x4A6F30); }
|
WRAPPER void CRadar::LoadAllRadarBlips(int32) { EAXJMP(0x4A6F30); }
|
||||||
#else
|
#else
|
||||||
void CRadar::LoadAllRadarBlips(int32)
|
void CRadar::LoadAllRadarBlips(uint8 *buf, uint32 size)
|
||||||
{
|
{
|
||||||
|
Initialise();
|
||||||
|
INITSAVEBUF
|
||||||
|
CheckSaveHeader(buf, 'R', 'D', 'R', '\0', size - SAVE_HEADER_SIZE);
|
||||||
|
|
||||||
}
|
for (int i = 0; i < NUMRADARBLIPS; i++)
|
||||||
#endif
|
ms_RadarTrace[i] = ReadSaveBuf<CBlip>(buf);
|
||||||
|
|
||||||
#if 1
|
|
||||||
WRAPPER void CRadar::LoadTextures() { EAXJMP(0x4A4030); }
|
|
||||||
#else
|
|
||||||
void CRadar::LoadTextures()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
WRAPPER void CRadar::RemoveRadarSections() { EAXJMP(0x4A60E0); }
|
|
||||||
#else
|
|
||||||
void CRadar::RemoveRadarSections()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
VALIDATESAVEBUF(size);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
WRAPPER void CRadar::RemoveMapSection(int32, int32) { EAXJMP(0x00); }
|
WRAPPER void CRadar::LoadTextures() { EAXJMP(0x4A4030); }
|
||||||
#else
|
#else
|
||||||
void CRadar::RemoveMapSection(int32 x, int32 y)
|
void
|
||||||
|
CRadar::LoadTextures()
|
||||||
|
{
|
||||||
|
CTxdStore::PushCurrentTxd();
|
||||||
|
CTxdStore::SetCurrentTxd(CTxdStore::FindTxdSlot("hud"));
|
||||||
|
AsukaSprite.SetTexture("radar_asuka");
|
||||||
|
BombSprite.SetTexture("radar_bomb");
|
||||||
|
CatSprite.SetTexture("radar_cat");
|
||||||
|
CentreSprite.SetTexture("radar_centre");
|
||||||
|
CopcarSprite.SetTexture("radar_copcar");
|
||||||
|
DonSprite.SetTexture("radar_don");
|
||||||
|
EightSprite.SetTexture("radar_eight");
|
||||||
|
ElSprite.SetTexture("radar_el");
|
||||||
|
IceSprite.SetTexture("radar_ice");
|
||||||
|
JoeySprite.SetTexture("radar_joey");
|
||||||
|
KenjiSprite.SetTexture("radar_kenji");
|
||||||
|
LizSprite.SetTexture("radar_liz");
|
||||||
|
LuigiSprite.SetTexture("radar_luigi");
|
||||||
|
NorthSprite.SetTexture("radar_north");
|
||||||
|
RaySprite.SetTexture("radar_ray");
|
||||||
|
SalSprite.SetTexture("radar_sal");
|
||||||
|
SaveSprite.SetTexture("radar_save");
|
||||||
|
SpraySprite.SetTexture("radar_spray");
|
||||||
|
TonySprite.SetTexture("radar_tony");
|
||||||
|
WeaponSprite.SetTexture("radar_weapon");
|
||||||
|
CTxdStore::PopCurrentTxd();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
WRAPPER void RemoveMapSection(int32, int32) { EAXJMP(0x00); }
|
||||||
|
#else
|
||||||
|
void RemoveMapSection(int32 x, int32 y)
|
||||||
{
|
{
|
||||||
if (x >= 0 && x <= 7 && y >= 0 && y <= 7)
|
if (x >= 0 && x <= 7 && y >= 0 && y <= 7)
|
||||||
CStreaming::RemoveTxd(gRadarTxdIds[x + RADAR_NUM_TILES * y]);
|
CStreaming::RemoveTxd(gRadarTxdIds[x + RADAR_NUM_TILES * y]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
WRAPPER void CRadar::RemoveRadarSections() { EAXJMP(0x4A60E0); }
|
||||||
|
#else
|
||||||
|
void CRadar::RemoveRadarSections()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
for (int j = 0; j < 8; j++)
|
||||||
|
RemoveMapSection(i, j);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
WRAPPER void CRadar::RequestMapSection(int32, int32) { EAXJMP(0x00); }
|
WRAPPER void CRadar::RequestMapSection(int32, int32) { EAXJMP(0x00); }
|
||||||
#else
|
#else
|
||||||
@ -945,12 +992,19 @@ void CRadar::RequestMapSection(int32 x, int32 y)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::SaveAllRadarBlips(uint8 *buf, uint32 *size) { EAXJMP(0x4A6E30); }
|
WRAPPER void CRadar::SaveAllRadarBlips(uint8 *buf, uint32 *size) { EAXJMP(0x4A6E30); }
|
||||||
#else
|
#else
|
||||||
void CRadar::SaveAllRadarBlips(uint8 *buf, uint32 *size)
|
void CRadar::SaveAllRadarBlips(uint8 *buf, uint32 *size)
|
||||||
{
|
{
|
||||||
|
*size = SAVE_HEADER_SIZE + sizeof(ms_RadarTrace);
|
||||||
|
INITSAVEBUF
|
||||||
|
WriteSaveHeader(buf, 'R', 'D', 'R', '\0', *size - SAVE_HEADER_SIZE);
|
||||||
|
|
||||||
|
for (int i = 0; i < NUMRADARBLIPS; i++)
|
||||||
|
WriteSaveBuf(buf, ms_RadarTrace[i]);
|
||||||
|
|
||||||
|
VALIDATESAVEBUF(*size);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1010,7 +1064,7 @@ int CRadar::SetEntityBlip(eBlipType type, int32 handle, int32 color, eBlipDispla
|
|||||||
ms_RadarTrace[nextBlip].m_wScale = 1;
|
ms_RadarTrace[nextBlip].m_wScale = 1;
|
||||||
ms_RadarTrace[nextBlip].m_eBlipDisplay = display;
|
ms_RadarTrace[nextBlip].m_eBlipDisplay = display;
|
||||||
ms_RadarTrace[nextBlip].m_IconID = RADAR_SPRITE_NONE;
|
ms_RadarTrace[nextBlip].m_IconID = RADAR_SPRITE_NONE;
|
||||||
return CRadar::GetNewUniqueBlipIndex(nextBlip);
|
return GetNewUniqueBlipIndex(nextBlip);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1102,21 +1156,41 @@ void CRadar::ShowRadarTraceWithHeight(float x, float y, uint32 size, uint8 red,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::Shutdown() { EAXJMP(0x4A3F60); }
|
WRAPPER void CRadar::Shutdown() { EAXJMP(0x4A3F60); }
|
||||||
#else
|
#else
|
||||||
void CRadar::Shutdown()
|
void CRadar::Shutdown()
|
||||||
{
|
{
|
||||||
|
AsukaSprite.Delete();
|
||||||
|
BombSprite.Delete();
|
||||||
|
CatSprite.Delete();
|
||||||
|
CentreSprite.Delete();
|
||||||
|
CopcarSprite.Delete();
|
||||||
|
DonSprite.Delete();
|
||||||
|
EightSprite.Delete();
|
||||||
|
ElSprite.Delete();
|
||||||
|
IceSprite.Delete();
|
||||||
|
JoeySprite.Delete();
|
||||||
|
KenjiSprite.Delete();
|
||||||
|
LizSprite.Delete();
|
||||||
|
LuigiSprite.Delete();
|
||||||
|
NorthSprite.Delete();
|
||||||
|
RaySprite.Delete();
|
||||||
|
SalSprite.Delete();
|
||||||
|
SaveSprite.Delete();
|
||||||
|
SpraySprite.Delete();
|
||||||
|
TonySprite.Delete();
|
||||||
|
WeaponSprite.Delete();
|
||||||
|
RemoveRadarSections();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
WRAPPER void CRadar::StreamRadarSections(const CVector &posn) { EAXJMP(0x4A6B60); }
|
WRAPPER void CRadar::StreamRadarSections(const CVector &posn) { EAXJMP(0x4A6B60); }
|
||||||
#else
|
#else
|
||||||
void CRadar::StreamRadarSections(const CVector &posn)
|
void CRadar::StreamRadarSections(const CVector &posn)
|
||||||
{
|
{
|
||||||
|
StreamRadarSections(floorf((2000.0f + posn.x) / 500.0f), ceilf(7.0f - (2000.0f + posn.y) / 500.0f));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1359,14 +1433,14 @@ int CRadar::LineRadarBoxCollision(CVector2D &out, const CVector2D &p1, const CVe
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
STARTPATCHES
|
STARTPATCHES
|
||||||
// InjectHook(0x4A3EF0, CRadar::Initialise, PATCH_JUMP);
|
InjectHook(0x4A3EF0, CRadar::Initialise, PATCH_JUMP);
|
||||||
// InjectHook(0x4A3F60, CRadar::Shutdown, PATCH_JUMP);
|
InjectHook(0x4A3F60, CRadar::Shutdown, PATCH_JUMP);
|
||||||
// InjectHook(0x4A4030, CRadar::LoadTextures, PATCH_JUMP);
|
InjectHook(0x4A4030, CRadar::LoadTextures, PATCH_JUMP);
|
||||||
// InjectHook(0x4A4180, CRadar::GetNewUniqueBlipIndex, PATCH_JUMP);
|
InjectHook(0x4A4180, CRadar::GetNewUniqueBlipIndex, PATCH_JUMP);
|
||||||
InjectHook(0x4A41C0, CRadar::GetActualBlipArrayIndex, PATCH_JUMP);
|
InjectHook(0x4A41C0, CRadar::GetActualBlipArrayIndex, PATCH_JUMP);
|
||||||
InjectHook(0x4A4200, CRadar::DrawMap, PATCH_JUMP);
|
InjectHook(0x4A4200, CRadar::DrawMap, PATCH_JUMP);
|
||||||
InjectHook(0x4A42F0, CRadar::DrawBlips, PATCH_JUMP);
|
InjectHook(0x4A42F0, CRadar::DrawBlips, PATCH_JUMP);
|
||||||
// InjectHook(0x4A4C70, CRadar::Draw3dMarkers, PATCH_JUMP);
|
InjectHook(0x4A4C70, CRadar::Draw3dMarkers, PATCH_JUMP);
|
||||||
InjectHook(0x4A4F30, CRadar::LimitRadarPoint, PATCH_JUMP);
|
InjectHook(0x4A4F30, CRadar::LimitRadarPoint, PATCH_JUMP);
|
||||||
InjectHook(0x4A4F90, CRadar::CalculateBlipAlpha, PATCH_JUMP);
|
InjectHook(0x4A4F90, CRadar::CalculateBlipAlpha, PATCH_JUMP);
|
||||||
InjectHook(0x4A5040, CRadar::TransformRadarPointToScreenSpace, PATCH_JUMP);
|
InjectHook(0x4A5040, CRadar::TransformRadarPointToScreenSpace, PATCH_JUMP);
|
||||||
@ -1376,11 +1450,11 @@ STARTPATCHES
|
|||||||
InjectHook(0x4A5590, CRadar::SetCoordBlip, PATCH_JUMP);
|
InjectHook(0x4A5590, CRadar::SetCoordBlip, PATCH_JUMP);
|
||||||
InjectHook(0x4A5640, CRadar::SetEntityBlip, PATCH_JUMP);
|
InjectHook(0x4A5640, CRadar::SetEntityBlip, PATCH_JUMP);
|
||||||
InjectHook(0x4A56C0, CRadar::ClearBlipForEntity, PATCH_JUMP);
|
InjectHook(0x4A56C0, CRadar::ClearBlipForEntity, PATCH_JUMP);
|
||||||
// InjectHook(0x4A5720, CRadar::ClearBlip, PATCH_JUMP);
|
InjectHook(0x4A5720, CRadar::ClearBlip, PATCH_JUMP);
|
||||||
// InjectHook(0x4A5770, CRadar::ChangeBlipColour, PATCH_JUMP);
|
InjectHook(0x4A5770, CRadar::ChangeBlipColour, PATCH_JUMP);
|
||||||
// InjectHook(0x4A57A0, CRadar::ChangeBlipBrightness, PATCH_JUMP);
|
InjectHook(0x4A57A0, CRadar::ChangeBlipBrightness, PATCH_JUMP);
|
||||||
// InjectHook(0x4A57E0, CRadar::ChangeBlipScale, PATCH_JUMP);
|
InjectHook(0x4A57E0, CRadar::ChangeBlipScale, PATCH_JUMP);
|
||||||
// InjectHook(0x4A5810, CRadar::ChangeBlipDisplay, PATCH_JUMP);
|
InjectHook(0x4A5810, CRadar::ChangeBlipDisplay, PATCH_JUMP);
|
||||||
InjectHook(0x4A5840, CRadar::SetBlipSprite, PATCH_JUMP);
|
InjectHook(0x4A5840, CRadar::SetBlipSprite, PATCH_JUMP);
|
||||||
InjectHook(0x4A5870, CRadar::ShowRadarTrace, PATCH_JUMP);
|
InjectHook(0x4A5870, CRadar::ShowRadarTrace, PATCH_JUMP);
|
||||||
InjectHook(0x4A59C0, CRadar::ShowRadarMarker, PATCH_JUMP);
|
InjectHook(0x4A59C0, CRadar::ShowRadarMarker, PATCH_JUMP);
|
||||||
@ -1388,15 +1462,15 @@ STARTPATCHES
|
|||||||
InjectHook(0x4A5C60, CRadar::SetRadarMarkerState, PATCH_JUMP);
|
InjectHook(0x4A5C60, CRadar::SetRadarMarkerState, PATCH_JUMP);
|
||||||
InjectHook(0x4A5D10, CRadar::DrawRotatingRadarSprite, PATCH_JUMP);
|
InjectHook(0x4A5D10, CRadar::DrawRotatingRadarSprite, PATCH_JUMP);
|
||||||
InjectHook(0x4A5EF0, CRadar::DrawRadarSprite, PATCH_JUMP);
|
InjectHook(0x4A5EF0, CRadar::DrawRadarSprite, PATCH_JUMP);
|
||||||
// InjectHook(0x4A60E0, CRadar::RemoveRadarSections, PATCH_JUMP);
|
InjectHook(0x4A60E0, CRadar::RemoveRadarSections, PATCH_JUMP);
|
||||||
// InjectHook(0x4A6100, CRadar::StreamRadarSections, PATCH_JUMP);
|
InjectHook(0x4A6100, (void (*)(int32, int32))&CRadar::StreamRadarSections, PATCH_JUMP);
|
||||||
InjectHook(0x4A64A0, CRadar::ClipRadarPoly, PATCH_JUMP);
|
InjectHook(0x4A64A0, CRadar::ClipRadarPoly, PATCH_JUMP);
|
||||||
InjectHook(0x4A67E0, CRadar::DrawRadarSection, PATCH_JUMP);
|
InjectHook(0x4A67E0, CRadar::DrawRadarSection, PATCH_JUMP);
|
||||||
InjectHook(0x4A69C0, CRadar::DrawRadarMask, PATCH_JUMP);
|
InjectHook(0x4A69C0, CRadar::DrawRadarMask, PATCH_JUMP);
|
||||||
// InjectHook(0x4A6B60, CRadar::StreamRadarSections, PATCH_JUMP);
|
InjectHook(0x4A6B60, (void (*)(const CVector&))&CRadar::StreamRadarSections, PATCH_JUMP);
|
||||||
InjectHook(0x4A6C20, CRadar::DrawRadarMap, PATCH_JUMP);
|
InjectHook(0x4A6C20, CRadar::DrawRadarMap, PATCH_JUMP);
|
||||||
// InjectHook(0x4A6E30, CRadar::SaveAllRadarBlips, PATCH_JUMP);
|
InjectHook(0x4A6E30, CRadar::SaveAllRadarBlips, PATCH_JUMP);
|
||||||
// InjectHook(0x4A6F30, CRadar::LoadAllRadarBlips, PATCH_JUMP);
|
InjectHook(0x4A6F30, CRadar::LoadAllRadarBlips, PATCH_JUMP);
|
||||||
|
|
||||||
InjectHook(0x4A61C0, CRadar::GetTextureCorners, PATCH_JUMP);
|
InjectHook(0x4A61C0, CRadar::GetTextureCorners, PATCH_JUMP);
|
||||||
InjectHook(0x4A6160, CRadar::IsPointInsideRadar, PATCH_JUMP);
|
InjectHook(0x4A6160, CRadar::IsPointInsideRadar, PATCH_JUMP);
|
||||||
|
@ -59,7 +59,7 @@ struct CBlip
|
|||||||
int32 m_nEntityHandle;
|
int32 m_nEntityHandle;
|
||||||
CVector2D m_vec2DPos;
|
CVector2D m_vec2DPos;
|
||||||
CVector m_vecPos;
|
CVector m_vecPos;
|
||||||
int16 m_BlipIndex;
|
uint16 m_BlipIndex;
|
||||||
bool m_bDim;
|
bool m_bDim;
|
||||||
bool m_bInUse;
|
bool m_bInUse;
|
||||||
float m_Radius;
|
float m_Radius;
|
||||||
@ -80,26 +80,26 @@ class CRadar
|
|||||||
public:
|
public:
|
||||||
static float &m_radarRange;
|
static float &m_radarRange;
|
||||||
static CBlip (&ms_RadarTrace)[NUMRADARBLIPS];
|
static CBlip (&ms_RadarTrace)[NUMRADARBLIPS];
|
||||||
static CSprite2d *AsukaSprite;
|
static CSprite2d AsukaSprite;
|
||||||
static CSprite2d *BombSprite;
|
static CSprite2d BombSprite;
|
||||||
static CSprite2d *CatSprite;
|
static CSprite2d CatSprite;
|
||||||
static CSprite2d *CentreSprite;
|
static CSprite2d CentreSprite;
|
||||||
static CSprite2d *CopcarSprite;
|
static CSprite2d CopcarSprite;
|
||||||
static CSprite2d *DonSprite;
|
static CSprite2d DonSprite;
|
||||||
static CSprite2d *EightSprite;
|
static CSprite2d EightSprite;
|
||||||
static CSprite2d *ElSprite;
|
static CSprite2d ElSprite;
|
||||||
static CSprite2d *IceSprite;
|
static CSprite2d IceSprite;
|
||||||
static CSprite2d *JoeySprite;
|
static CSprite2d JoeySprite;
|
||||||
static CSprite2d *KenjiSprite;
|
static CSprite2d KenjiSprite;
|
||||||
static CSprite2d *LizSprite;
|
static CSprite2d LizSprite;
|
||||||
static CSprite2d *LuigiSprite;
|
static CSprite2d LuigiSprite;
|
||||||
static CSprite2d *NorthSprite;
|
static CSprite2d NorthSprite;
|
||||||
static CSprite2d *RaySprite;
|
static CSprite2d RaySprite;
|
||||||
static CSprite2d *SalSprite;
|
static CSprite2d SalSprite;
|
||||||
static CSprite2d *SaveSprite;
|
static CSprite2d SaveSprite;
|
||||||
static CSprite2d *SpraySprite;
|
static CSprite2d SpraySprite;
|
||||||
static CSprite2d *TonySprite;
|
static CSprite2d TonySprite;
|
||||||
static CSprite2d *WeaponSprite;
|
static CSprite2d WeaponSprite;
|
||||||
static CSprite2d *RadarSprites[21];
|
static CSprite2d *RadarSprites[21];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -125,12 +125,11 @@ public:
|
|||||||
static uint32 GetRadarTraceColour(uint32 color, bool bright);
|
static uint32 GetRadarTraceColour(uint32 color, bool bright);
|
||||||
static void Initialise();
|
static void Initialise();
|
||||||
static float LimitRadarPoint(CVector2D &point);
|
static float LimitRadarPoint(CVector2D &point);
|
||||||
static void LoadAllRadarBlips(int32);
|
static void LoadAllRadarBlips(uint8 *buf, uint32 size);
|
||||||
static void LoadTextures();
|
static void LoadTextures();
|
||||||
static void RemoveRadarSections();
|
static void RemoveRadarSections();
|
||||||
static void RemoveMapSection(int32 x, int32 y);
|
|
||||||
static void RequestMapSection(int32 x, int32 y);
|
static void RequestMapSection(int32 x, int32 y);
|
||||||
static void SaveAllRadarBlips(uint8 *buf, uint32 *size);
|
static void SaveAllRadarBlips(uint8*, uint32*);
|
||||||
static void SetBlipSprite(int32 i, int32 icon);
|
static void SetBlipSprite(int32 i, int32 icon);
|
||||||
static int32 SetCoordBlip(eBlipType type, CVector pos, int32, eBlipDisplay);
|
static int32 SetCoordBlip(eBlipType type, CVector pos, int32, eBlipDisplay);
|
||||||
static int32 SetEntityBlip(eBlipType type, int32, int32, eBlipDisplay);
|
static int32 SetEntityBlip(eBlipType type, int32, int32, eBlipDisplay);
|
||||||
|
111
src/weapons/Explosion.cpp
Normal file
111
src/weapons/Explosion.cpp
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#include "common.h"
|
||||||
|
#include "patcher.h"
|
||||||
|
#include "DMAudio.h"
|
||||||
|
#include "Explosion.h"
|
||||||
|
|
||||||
|
CExplosion(&gaExplosion)[48] = *(CExplosion(*)[48])*(uintptr*)0x64E208;
|
||||||
|
|
||||||
|
WRAPPER void CExplosion::AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type, const CVector &pos, uint32) { EAXJMP(0x5591C0); }
|
||||||
|
//WRAPPER void CExplosion::RemoveAllExplosionsInArea(CVector, float) { EAXJMP(0x55AD40); }
|
||||||
|
//WRAPPER bool CExplosion::TestForExplosionInArea(eExplosionType, float, float, float, float, float, float) { EAXJMP(0x55AC80); }
|
||||||
|
|
||||||
|
int AudioHandle = AEHANDLE_NONE;
|
||||||
|
|
||||||
|
void
|
||||||
|
CExplosion::Initialise()
|
||||||
|
{
|
||||||
|
debug("Initialising CExplosion...\n");
|
||||||
|
for (int i = 0; i < ARRAY_SIZE(gaExplosion); i++) {
|
||||||
|
gaExplosion[i].m_ExplosionType = EXPLOSION_GRENADE;
|
||||||
|
gaExplosion[i].m_vecPosition.x = 0.0f;
|
||||||
|
gaExplosion[i].m_vecPosition.y = 0.0f;
|
||||||
|
gaExplosion[i].m_vecPosition.z = 0.0f;
|
||||||
|
gaExplosion[i].m_fRadius = 1.0f;
|
||||||
|
gaExplosion[i].m_fPropagationRate = 0.0f;
|
||||||
|
gaExplosion[i].field_38 = 0;
|
||||||
|
gaExplosion[i].m_pCreatorEntity = nil;
|
||||||
|
gaExplosion[i].m_pVictimEntity = nil;
|
||||||
|
gaExplosion[i].m_fStopTime = 0.0f;
|
||||||
|
gaExplosion[i].m_bActive = false;
|
||||||
|
gaExplosion[i].m_nStartTime = 0;
|
||||||
|
gaExplosion[i].field_34 = 0;
|
||||||
|
}
|
||||||
|
AudioHandle = DMAudio.CreateEntity(AUDIOTYPE_EXPLOSION, (void*)1);
|
||||||
|
if (AudioHandle >= 0)
|
||||||
|
DMAudio.SetEntityStatus(AudioHandle, 1);
|
||||||
|
debug("CExplosion ready\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CExplosion::Shutdown()
|
||||||
|
{
|
||||||
|
debug("Shutting down CExplosion...\n");
|
||||||
|
if (AudioHandle >= 0) {
|
||||||
|
DMAudio.DestroyEntity(AudioHandle);
|
||||||
|
AudioHandle = AEHANDLE_NONE;
|
||||||
|
}
|
||||||
|
debug("CExplosion shut down\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CExplosion::RemoveAllExplosionsInArea(CVector pos, float radius)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ARRAY_SIZE(gaExplosion); i++) {
|
||||||
|
if (gaExplosion[i].m_bActive) {
|
||||||
|
if ((pos - gaExplosion[i].m_vecPosition).MagnitudeSqr() < SQR(radius))
|
||||||
|
gaExplosion[i].m_bActive = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int8
|
||||||
|
CExplosion::GetExplosionActiveCounter(uint8 id)
|
||||||
|
{
|
||||||
|
return gaExplosion[id].m_bActiveCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
CVector *
|
||||||
|
CExplosion::GetExplosionPosition(uint8 id)
|
||||||
|
{
|
||||||
|
return &gaExplosion[id].m_vecPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8
|
||||||
|
CExplosion::GetExplosionType(uint8 id)
|
||||||
|
{
|
||||||
|
return gaExplosion[id].m_ExplosionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CExplosion::ResetExplosionActiveCounter(uint8 id)
|
||||||
|
{
|
||||||
|
gaExplosion[id].m_bActiveCounter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CExplosion::TestForExplosionInArea(eExplosionType a1, float x1, float x2, float y1, float y2, float z1, float z2)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ARRAY_SIZE(gaExplosion); i++) {
|
||||||
|
if (gaExplosion[i].m_bActive) {
|
||||||
|
if (a1 == gaExplosion[i].m_ExplosionType) {
|
||||||
|
if (gaExplosion[i].m_vecPosition.x >= x1 && gaExplosion[i].m_vecPosition.x <= x2) {
|
||||||
|
if (gaExplosion[i].m_vecPosition.y >= y1 && gaExplosion[i].m_vecPosition.y <= y2) {
|
||||||
|
if (gaExplosion[i].m_vecPosition.z >= z1 && gaExplosion[i].m_vecPosition.z <= z2)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
STARTPATCHES
|
||||||
|
InjectHook(0x559030, &CExplosion::Initialise, PATCH_JUMP);
|
||||||
|
InjectHook(0x559100, &CExplosion::Shutdown, PATCH_JUMP);
|
||||||
|
InjectHook(0x55AD40, &CExplosion::RemoveAllExplosionsInArea, PATCH_JUMP);
|
||||||
|
InjectHook(0x559140, &CExplosion::GetExplosionActiveCounter, PATCH_JUMP);
|
||||||
|
InjectHook(0x5591A0, &CExplosion::GetExplosionPosition, PATCH_JUMP);
|
||||||
|
InjectHook(0x559180, &CExplosion::GetExplosionType, PATCH_JUMP);
|
||||||
|
InjectHook(0x559160, &CExplosion::ResetExplosionActiveCounter, PATCH_JUMP);
|
||||||
|
InjectHook(0x55AC80, &CExplosion::TestForExplosionInArea, PATCH_JUMP);
|
||||||
|
ENDPATCHES
|
@ -19,7 +19,23 @@ enum eExplosionType
|
|||||||
|
|
||||||
class CExplosion
|
class CExplosion
|
||||||
{
|
{
|
||||||
|
eExplosionType m_ExplosionType;
|
||||||
|
CVector m_vecPosition;
|
||||||
|
float m_fRadius;
|
||||||
|
float m_fPropagationRate;
|
||||||
|
CEntity *m_pCreatorEntity;
|
||||||
|
CEntity *m_pVictimEntity;
|
||||||
|
float m_fStopTime;
|
||||||
|
bool m_bActive;
|
||||||
|
int8 m_bActiveCounter;
|
||||||
|
int32 m_nStartTime;
|
||||||
|
uint32 m_nParticlesExpireTime;
|
||||||
|
float m_fPower;
|
||||||
|
int32 field_34;
|
||||||
|
int32 field_38;
|
||||||
public:
|
public:
|
||||||
|
static void Initialise();
|
||||||
|
static void Shutdown();
|
||||||
static void AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type,
|
static void AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type,
|
||||||
const CVector &pos, uint32);
|
const CVector &pos, uint32);
|
||||||
|
|
||||||
@ -30,3 +46,5 @@ public:
|
|||||||
static void RemoveAllExplosionsInArea(CVector, float);
|
static void RemoveAllExplosionsInArea(CVector, float);
|
||||||
static bool TestForExplosionInArea(eExplosionType, float, float, float, float, float, float);
|
static bool TestForExplosionInArea(eExplosionType, float, float, float, float, float, float);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern CExplosion (&gaExplosion)[48];
|
Loading…
Reference in New Issue
Block a user