mirror of
https://github.com/GTAmodding/re3.git
synced 2024-12-24 17:45:40 +00:00
Finished CRadar, a bit of CExplosion
This commit is contained in:
parent
3e78600420
commit
e57ad65d05
6 changed files with 398 additions and 228 deletions
|
@ -63,7 +63,6 @@ CMotionBlurStreaks
|
|||
CObject
|
||||
CPacManPickups
|
||||
CPedPath
|
||||
CRadar
|
||||
CRecordDataForChase
|
||||
CRoadBlocks
|
||||
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 "World.h"
|
||||
#include "Streaming.h"
|
||||
#include "SpecialFX.h"
|
||||
|
||||
float &CRadar::m_radarRange = *(float*)0x8E281C;
|
||||
CBlip (&CRadar::ms_RadarTrace)[NUMRADARBLIPS] = *(CBlip(*)[NUMRADARBLIPS]) * (uintptr*)0x6ED5E0;
|
||||
CVector2D &vec2DRadarOrigin = *(CVector2D*)0x6299B8;
|
||||
int *gRadarTxdIds = (int*)0x6299C0;
|
||||
int32 gRadarTxdIds[64];// = (int*)0x6299C0;
|
||||
|
||||
CSprite2d *CRadar::AsukaSprite = (CSprite2d*)0x8F1A40;
|
||||
CSprite2d *CRadar::BombSprite = (CSprite2d*)0x8F5FB4;
|
||||
CSprite2d *CRadar::CatSprite = (CSprite2d*)0x885B24;
|
||||
CSprite2d *CRadar::CentreSprite = (CSprite2d*)0x8F6268;
|
||||
CSprite2d *CRadar::CopcarSprite = (CSprite2d*)0x8F1A2C;
|
||||
CSprite2d *CRadar::DonSprite = (CSprite2d*)0x8F2BE0;
|
||||
CSprite2d *CRadar::EightSprite = (CSprite2d*)0x8F2BCC;
|
||||
CSprite2d *CRadar::ElSprite = (CSprite2d*)0x8F1B80;
|
||||
CSprite2d *CRadar::IceSprite = (CSprite2d*)0x9415FC;
|
||||
CSprite2d *CRadar::JoeySprite = (CSprite2d*)0x8F2C00;
|
||||
CSprite2d *CRadar::KenjiSprite = (CSprite2d*)0x8F2C68;
|
||||
CSprite2d *CRadar::LizSprite = (CSprite2d*)0x8F5830;
|
||||
CSprite2d *CRadar::LuigiSprite = (CSprite2d*)0x8F1A3C;
|
||||
CSprite2d *CRadar::NorthSprite = (CSprite2d*)0x8F6274;
|
||||
CSprite2d *CRadar::RaySprite = (CSprite2d*)0x8E2A7C;
|
||||
CSprite2d *CRadar::SalSprite = (CSprite2d*)0x8F29EC;
|
||||
CSprite2d *CRadar::SaveSprite = (CSprite2d*)0x8F5F74;
|
||||
CSprite2d *CRadar::SpraySprite = (CSprite2d*)0x94307C;
|
||||
CSprite2d *CRadar::TonySprite = (CSprite2d*)0x885B58;
|
||||
CSprite2d *CRadar::WeaponSprite = (CSprite2d*)0x941534;
|
||||
CSprite2d CRadar::AsukaSprite;// = *(CSprite2d*)0x8F1A40;
|
||||
CSprite2d CRadar::BombSprite;// = (CSprite2d*)0x8F5FB4;
|
||||
CSprite2d CRadar::CatSprite;// = (CSprite2d*)0x885B24;
|
||||
CSprite2d CRadar::CentreSprite;// = (CSprite2d*)0x8F6268;
|
||||
CSprite2d CRadar::CopcarSprite;// = (CSprite2d*)0x8F1A2C;
|
||||
CSprite2d CRadar::DonSprite;// = (CSprite2d*)0x8F2BE0;
|
||||
CSprite2d CRadar::EightSprite;// = (CSprite2d*)0x8F2BCC;
|
||||
CSprite2d CRadar::ElSprite;// = (CSprite2d*)0x8F1B80;
|
||||
CSprite2d CRadar::IceSprite;// = (CSprite2d*)0x9415FC;
|
||||
CSprite2d CRadar::JoeySprite;// = (CSprite2d*)0x8F2C00;
|
||||
CSprite2d CRadar::KenjiSprite;// = (CSprite2d*)0x8F2C68;
|
||||
CSprite2d CRadar::LizSprite;// = (CSprite2d*)0x8F5830;
|
||||
CSprite2d CRadar::LuigiSprite;// = (CSprite2d*)0x8F1A3C;
|
||||
CSprite2d CRadar::NorthSprite;// = (CSprite2d*)0x8F6274;
|
||||
CSprite2d CRadar::RaySprite;// = (CSprite2d*)0x8E2A7C;
|
||||
CSprite2d CRadar::SalSprite;// = (CSprite2d*)0x8F29EC;
|
||||
CSprite2d CRadar::SaveSprite;// = (CSprite2d*)0x8F5F74;
|
||||
CSprite2d CRadar::SpraySprite;// = (CSprite2d*)0x94307C;
|
||||
CSprite2d CRadar::TonySprite;// = (CSprite2d*)0x885B58;
|
||||
CSprite2d CRadar::WeaponSprite;// = (CSprite2d*)0x941534;
|
||||
|
||||
CSprite2d *CRadar::RadarSprites[RADAR_SPRITE_COUNT] = {
|
||||
nil,
|
||||
AsukaSprite,
|
||||
BombSprite,
|
||||
CatSprite,
|
||||
CentreSprite,
|
||||
CopcarSprite,
|
||||
DonSprite,
|
||||
EightSprite,
|
||||
ElSprite,
|
||||
IceSprite,
|
||||
JoeySprite,
|
||||
KenjiSprite,
|
||||
LizSprite,
|
||||
LuigiSprite,
|
||||
NorthSprite,
|
||||
RaySprite,
|
||||
SalSprite,
|
||||
SaveSprite,
|
||||
SpraySprite,
|
||||
TonySprite,
|
||||
WeaponSprite
|
||||
&AsukaSprite,
|
||||
&BombSprite,
|
||||
&CatSprite,
|
||||
&CentreSprite,
|
||||
&CopcarSprite,
|
||||
&DonSprite,
|
||||
&EightSprite,
|
||||
&ElSprite,
|
||||
&IceSprite,
|
||||
&JoeySprite,
|
||||
&KenjiSprite,
|
||||
&LizSprite,
|
||||
&LuigiSprite,
|
||||
&NorthSprite,
|
||||
&RaySprite,
|
||||
&SalSprite,
|
||||
&SaveSprite,
|
||||
&SpraySprite,
|
||||
&TonySprite,
|
||||
&WeaponSprite
|
||||
};
|
||||
|
||||
#define RADAR_NUM_TILES (8)
|
||||
|
@ -89,48 +90,63 @@ uint8 CRadar::CalculateBlipAlpha(float dist)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::ChangeBlipBrightness(int32, int32) { EAXJMP(0x4A57A0); }
|
||||
#else
|
||||
void CRadar::ChangeBlipBrightness(int32 i, int32 bright)
|
||||
{
|
||||
|
||||
int index = GetActualBlipArrayIndex(i);
|
||||
if (index != -1)
|
||||
ms_RadarTrace[index].m_bDim = bright != 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::ChangeBlipColour(int32, int32) { EAXJMP(0x4A5770); }
|
||||
#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
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::ChangeBlipDisplay(int32, eBlipDisplay) { EAXJMP(0x4A5810); }
|
||||
#else
|
||||
void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display)
|
||||
{
|
||||
|
||||
int index = GetActualBlipArrayIndex(i);
|
||||
if (index != -1)
|
||||
ms_RadarTrace[index].m_eBlipDisplay = display;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::ChangeBlipScale(int32, int32) { EAXJMP(0x4A57E0); }
|
||||
#else
|
||||
void CRadar::ChangeBlipScale(int32 i, int32 scale)
|
||||
{
|
||||
|
||||
int index = GetActualBlipArrayIndex(i);
|
||||
if (index != -1)
|
||||
ms_RadarTrace[index].m_wScale = scale;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::ClearBlip(int32) { EAXJMP(0x4A5720); }
|
||||
#else
|
||||
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
|
||||
|
||||
|
@ -247,12 +263,59 @@ bool CRadar::DisplayThisBlip(int32 counter)
|
|||
}
|
||||
}
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::Draw3dMarkers() { EAXJMP(0x4A4C70); }
|
||||
#else
|
||||
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
|
||||
|
||||
|
@ -284,7 +347,7 @@ void CRadar::DrawBlips()
|
|||
else
|
||||
angle = FindPlayerHeading() - (PI + TheCamera.GetForward().Heading());
|
||||
|
||||
DrawRotatingRadarSprite(CentreSprite, out.x, out.y, angle, 255);
|
||||
DrawRotatingRadarSprite(&CentreSprite, out.x, out.y, angle, 255);
|
||||
|
||||
CVector2D vec2d;
|
||||
vec2d.x = vec2DRadarOrigin.x;
|
||||
|
@ -311,9 +374,10 @@ void CRadar::DrawBlips()
|
|||
blipEntity = CPools::GetVehiclePool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||
break;
|
||||
case BLIP_CHAR:
|
||||
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||
if (blipEntity && ((CPed*)blipEntity)->InVehicle()) {
|
||||
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
||||
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||
if (blipEntity != nil) {
|
||||
if (((CPed*)blipEntity)->InVehicle())
|
||||
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
||||
}
|
||||
break;
|
||||
case BLIP_OBJECT:
|
||||
|
@ -414,9 +478,10 @@ void CRadar::DrawBlips()
|
|||
blipEntity = CPools::GetVehiclePool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||
break;
|
||||
case BLIP_CHAR:
|
||||
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||
if (blipEntity && ((CPed*)blipEntity)->InVehicle()) {
|
||||
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
||||
blipEntity = CPools::GetPedPool()->GetAt(ms_RadarTrace[blipId].m_nEntityHandle);
|
||||
if (blipEntity != nil) {
|
||||
if (((CPed*)blipEntity)->InVehicle())
|
||||
blipEntity = ((CPed*)blipEntity)->m_pMyVehicle;
|
||||
}
|
||||
break;
|
||||
case BLIP_OBJECT:
|
||||
|
@ -729,12 +794,16 @@ int32 CRadar::GetActualBlipArrayIndex(int32 i)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER int32 CRadar::GetNewUniqueBlipIndex(int32) { EAXJMP(0x4A4180); }
|
||||
#else
|
||||
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
|
||||
|
||||
|
@ -796,68 +865,14 @@ uint32 CRadar::GetRadarTraceColour(uint32 color, bool bright)
|
|||
#endif
|
||||
|
||||
const char* gRadarTexNames[] = {
|
||||
"radar00",
|
||||
"radar01",
|
||||
"radar02",
|
||||
"radar03",
|
||||
"radar04",
|
||||
"radar05",
|
||||
"radar06",
|
||||
"radar07",
|
||||
"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",
|
||||
"radar00", "radar01", "radar02", "radar03", "radar04", "radar05", "radar06", "radar07",
|
||||
"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", "radar62", "radar63",
|
||||
};
|
||||
|
||||
#if 0
|
||||
|
@ -898,43 +913,75 @@ float CRadar::LimitRadarPoint(CVector2D &point)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::LoadAllRadarBlips(int32) { EAXJMP(0x4A6F30); }
|
||||
#else
|
||||
void CRadar::LoadAllRadarBlips(int32)
|
||||
{
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
#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()
|
||||
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++)
|
||||
ms_RadarTrace[i] = ReadSaveBuf<CBlip>(buf);
|
||||
|
||||
VALIDATESAVEBUF(size);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
WRAPPER void CRadar::RemoveMapSection(int32, int32) { EAXJMP(0x00); }
|
||||
WRAPPER void CRadar::LoadTextures() { EAXJMP(0x4A4030); }
|
||||
#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)
|
||||
CStreaming::RemoveTxd(gRadarTxdIds[x + RADAR_NUM_TILES * y]);
|
||||
}
|
||||
#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
|
||||
WRAPPER void CRadar::RequestMapSection(int32, int32) { EAXJMP(0x00); }
|
||||
#else
|
||||
|
@ -945,12 +992,19 @@ void CRadar::RequestMapSection(int32 x, int32 y)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::SaveAllRadarBlips(int32) { EAXJMP(0x4A6E30); }
|
||||
#else
|
||||
void CRadar::SaveAllRadarBlips(int32)
|
||||
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
|
||||
|
||||
|
@ -1010,7 +1064,7 @@ int CRadar::SetEntityBlip(eBlipType type, int32 handle, int32 color, eBlipDispla
|
|||
ms_RadarTrace[nextBlip].m_wScale = 1;
|
||||
ms_RadarTrace[nextBlip].m_eBlipDisplay = display;
|
||||
ms_RadarTrace[nextBlip].m_IconID = RADAR_SPRITE_NONE;
|
||||
return CRadar::GetNewUniqueBlipIndex(nextBlip);
|
||||
return GetNewUniqueBlipIndex(nextBlip);
|
||||
}
|
||||
#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); }
|
||||
#else
|
||||
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
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
WRAPPER void CRadar::StreamRadarSections(const CVector &posn) { EAXJMP(0x4A6B60); }
|
||||
#else
|
||||
void CRadar::StreamRadarSections(const CVector &posn)
|
||||
{
|
||||
|
||||
{
|
||||
StreamRadarSections(floorf((2000.0f + posn.x) / 500.0f), ceilf(7.0f - (2000.0f + posn.y) / 500.0f));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1359,14 +1433,14 @@ int CRadar::LineRadarBoxCollision(CVector2D &out, const CVector2D &p1, const CVe
|
|||
#endif
|
||||
|
||||
STARTPATCHES
|
||||
// InjectHook(0x4A3EF0, CRadar::Initialise, PATCH_JUMP);
|
||||
// InjectHook(0x4A3F60, CRadar::Shutdown, PATCH_JUMP);
|
||||
// InjectHook(0x4A4030, CRadar::LoadTextures, PATCH_JUMP);
|
||||
// InjectHook(0x4A4180, CRadar::GetNewUniqueBlipIndex, PATCH_JUMP);
|
||||
InjectHook(0x4A3EF0, CRadar::Initialise, PATCH_JUMP);
|
||||
InjectHook(0x4A3F60, CRadar::Shutdown, PATCH_JUMP);
|
||||
InjectHook(0x4A4030, CRadar::LoadTextures, PATCH_JUMP);
|
||||
InjectHook(0x4A4180, CRadar::GetNewUniqueBlipIndex, PATCH_JUMP);
|
||||
InjectHook(0x4A41C0, CRadar::GetActualBlipArrayIndex, PATCH_JUMP);
|
||||
InjectHook(0x4A4200, CRadar::DrawMap, 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(0x4A4F90, CRadar::CalculateBlipAlpha, PATCH_JUMP);
|
||||
InjectHook(0x4A5040, CRadar::TransformRadarPointToScreenSpace, PATCH_JUMP);
|
||||
|
@ -1376,11 +1450,11 @@ STARTPATCHES
|
|||
InjectHook(0x4A5590, CRadar::SetCoordBlip, PATCH_JUMP);
|
||||
InjectHook(0x4A5640, CRadar::SetEntityBlip, PATCH_JUMP);
|
||||
InjectHook(0x4A56C0, CRadar::ClearBlipForEntity, PATCH_JUMP);
|
||||
// InjectHook(0x4A5720, CRadar::ClearBlip, PATCH_JUMP);
|
||||
// InjectHook(0x4A5770, CRadar::ChangeBlipColour, PATCH_JUMP);
|
||||
// InjectHook(0x4A57A0, CRadar::ChangeBlipBrightness, PATCH_JUMP);
|
||||
// InjectHook(0x4A57E0, CRadar::ChangeBlipScale, PATCH_JUMP);
|
||||
// InjectHook(0x4A5810, CRadar::ChangeBlipDisplay, PATCH_JUMP);
|
||||
InjectHook(0x4A5720, CRadar::ClearBlip, PATCH_JUMP);
|
||||
InjectHook(0x4A5770, CRadar::ChangeBlipColour, PATCH_JUMP);
|
||||
InjectHook(0x4A57A0, CRadar::ChangeBlipBrightness, PATCH_JUMP);
|
||||
InjectHook(0x4A57E0, CRadar::ChangeBlipScale, PATCH_JUMP);
|
||||
InjectHook(0x4A5810, CRadar::ChangeBlipDisplay, PATCH_JUMP);
|
||||
InjectHook(0x4A5840, CRadar::SetBlipSprite, PATCH_JUMP);
|
||||
InjectHook(0x4A5870, CRadar::ShowRadarTrace, PATCH_JUMP);
|
||||
InjectHook(0x4A59C0, CRadar::ShowRadarMarker, PATCH_JUMP);
|
||||
|
@ -1388,15 +1462,15 @@ STARTPATCHES
|
|||
InjectHook(0x4A5C60, CRadar::SetRadarMarkerState, PATCH_JUMP);
|
||||
InjectHook(0x4A5D10, CRadar::DrawRotatingRadarSprite, PATCH_JUMP);
|
||||
InjectHook(0x4A5EF0, CRadar::DrawRadarSprite, PATCH_JUMP);
|
||||
// InjectHook(0x4A60E0, CRadar::RemoveRadarSections, PATCH_JUMP);
|
||||
// InjectHook(0x4A6100, CRadar::StreamRadarSections, PATCH_JUMP);
|
||||
InjectHook(0x4A60E0, CRadar::RemoveRadarSections, PATCH_JUMP);
|
||||
InjectHook(0x4A6100, (void (*)(int32, int32))&CRadar::StreamRadarSections, PATCH_JUMP);
|
||||
InjectHook(0x4A64A0, CRadar::ClipRadarPoly, PATCH_JUMP);
|
||||
InjectHook(0x4A67E0, CRadar::DrawRadarSection, 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(0x4A6E30, CRadar::SaveAllRadarBlips, PATCH_JUMP);
|
||||
// InjectHook(0x4A6F30, CRadar::LoadAllRadarBlips, PATCH_JUMP);
|
||||
InjectHook(0x4A6E30, CRadar::SaveAllRadarBlips, PATCH_JUMP);
|
||||
InjectHook(0x4A6F30, CRadar::LoadAllRadarBlips, PATCH_JUMP);
|
||||
|
||||
InjectHook(0x4A61C0, CRadar::GetTextureCorners, PATCH_JUMP);
|
||||
InjectHook(0x4A6160, CRadar::IsPointInsideRadar, PATCH_JUMP);
|
||||
|
|
|
@ -59,7 +59,7 @@ struct CBlip
|
|||
int32 m_nEntityHandle;
|
||||
CVector2D m_vec2DPos;
|
||||
CVector m_vecPos;
|
||||
int16 m_BlipIndex;
|
||||
uint16 m_BlipIndex;
|
||||
bool m_bDim;
|
||||
bool m_bInUse;
|
||||
float m_Radius;
|
||||
|
@ -80,26 +80,26 @@ class CRadar
|
|||
public:
|
||||
static float &m_radarRange;
|
||||
static CBlip (&ms_RadarTrace)[NUMRADARBLIPS];
|
||||
static CSprite2d *AsukaSprite;
|
||||
static CSprite2d *BombSprite;
|
||||
static CSprite2d *CatSprite;
|
||||
static CSprite2d *CentreSprite;
|
||||
static CSprite2d *CopcarSprite;
|
||||
static CSprite2d *DonSprite;
|
||||
static CSprite2d *EightSprite;
|
||||
static CSprite2d *ElSprite;
|
||||
static CSprite2d *IceSprite;
|
||||
static CSprite2d *JoeySprite;
|
||||
static CSprite2d *KenjiSprite;
|
||||
static CSprite2d *LizSprite;
|
||||
static CSprite2d *LuigiSprite;
|
||||
static CSprite2d *NorthSprite;
|
||||
static CSprite2d *RaySprite;
|
||||
static CSprite2d *SalSprite;
|
||||
static CSprite2d *SaveSprite;
|
||||
static CSprite2d *SpraySprite;
|
||||
static CSprite2d *TonySprite;
|
||||
static CSprite2d *WeaponSprite;
|
||||
static CSprite2d AsukaSprite;
|
||||
static CSprite2d BombSprite;
|
||||
static CSprite2d CatSprite;
|
||||
static CSprite2d CentreSprite;
|
||||
static CSprite2d CopcarSprite;
|
||||
static CSprite2d DonSprite;
|
||||
static CSprite2d EightSprite;
|
||||
static CSprite2d ElSprite;
|
||||
static CSprite2d IceSprite;
|
||||
static CSprite2d JoeySprite;
|
||||
static CSprite2d KenjiSprite;
|
||||
static CSprite2d LizSprite;
|
||||
static CSprite2d LuigiSprite;
|
||||
static CSprite2d NorthSprite;
|
||||
static CSprite2d RaySprite;
|
||||
static CSprite2d SalSprite;
|
||||
static CSprite2d SaveSprite;
|
||||
static CSprite2d SpraySprite;
|
||||
static CSprite2d TonySprite;
|
||||
static CSprite2d WeaponSprite;
|
||||
static CSprite2d *RadarSprites[21];
|
||||
|
||||
public:
|
||||
|
@ -125,12 +125,11 @@ public:
|
|||
static uint32 GetRadarTraceColour(uint32 color, bool bright);
|
||||
static void Initialise();
|
||||
static float LimitRadarPoint(CVector2D &point);
|
||||
static void LoadAllRadarBlips(int32);
|
||||
static void LoadAllRadarBlips(uint8 *buf, uint32 size);
|
||||
static void LoadTextures();
|
||||
static void RemoveRadarSections();
|
||||
static void RemoveMapSection(int32 x, int32 y);
|
||||
static void RequestMapSection(int32 x, int32 y);
|
||||
static void SaveAllRadarBlips(int32);
|
||||
static void SaveAllRadarBlips(uint8*, uint32*);
|
||||
static void SetBlipSprite(int32 i, int32 icon);
|
||||
static int32 SetCoordBlip(eBlipType type, CVector pos, 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
|
||||
{
|
||||
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:
|
||||
static void Initialise();
|
||||
static void Shutdown();
|
||||
static void AddExplosion(CEntity *explodingEntity, CEntity *culprit, eExplosionType type,
|
||||
const CVector &pos, uint32);
|
||||
|
||||
|
@ -30,3 +46,5 @@ public:
|
|||
static void RemoveAllExplosionsInArea(CVector, float);
|
||||
static bool TestForExplosionInArea(eExplosionType, float, float, float, float, float, float);
|
||||
};
|
||||
|
||||
extern CExplosion (&gaExplosion)[48];
|
Loading…
Reference in a new issue