mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-15 21:29:00 +00:00
More Pickup stuff
This commit is contained in:
parent
ef47dad566
commit
63666391d4
3 changed files with 236 additions and 141 deletions
|
@ -60,19 +60,57 @@ uint16 AmmoForWeapon_OnStreet[WEAPONTYPE_TOTALWEAPONS] = {
|
||||||
};
|
};
|
||||||
uint16 CostOfWeapon[20] = { 0, 10, 250, 800, 1500, 3000, 5000, 10000, 25000, 25000, 2000, 2000, 0, 50000, 0, 3000, 0, 0, 0, 0 };
|
uint16 CostOfWeapon[20] = { 0, 10, 250, 800, 1500, 3000, 5000, 10000, 25000, 25000, 2000, 2000, 0, 50000, 0, 3000, 0, 0, 0, 0 };
|
||||||
|
|
||||||
// TODO(Miami): Those are all placeholders!!
|
struct
|
||||||
uint8 aWeaponReds[] = { 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
{
|
||||||
255, 0, 128, 255, 255, 0, 255, 0, 128, 128, 255,
|
uint8 r,g,b;
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
float unk;
|
||||||
255, 128, 0, 255, 0 };
|
} aPickupColors[] = {
|
||||||
uint8 aWeaponGreens[] = { 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
{ 128, 128, 128, 1.0f },
|
||||||
0, 255, 128, 255, 0, 255, 128, 255, 0, 255, 255,
|
{ 128, 128, 128, 1.0f },
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
{ 97, 194, 247, 1.0f },
|
||||||
0, 255, 0, 255, 0 };
|
{ 97, 194, 247, 1.0f },
|
||||||
uint8 aWeaponBlues[] = { 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
{ 97, 194, 247, 1.0f },
|
||||||
0, 0, 255, 0, 255, 255, 0, 128, 255, 0, 255,
|
{ 97, 194, 247, 1.0f },
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
{ 97, 194, 247, 1.0f },
|
||||||
0, 128, 255, 0, 0 };
|
{ 97, 194, 247, 1.0f },
|
||||||
|
{ 97, 194, 247, 1.0f },
|
||||||
|
{ 97, 194, 247, 1.0f },
|
||||||
|
{ 97, 194, 247, 1.0f },
|
||||||
|
{ 97, 194, 247, 1.0f },
|
||||||
|
{ 27, 89, 130, 1.0f },
|
||||||
|
{ 27, 89, 130, 1.0f },
|
||||||
|
{ 27, 89, 130, 1.0f },
|
||||||
|
{ 27, 89, 130, 1.0f },
|
||||||
|
{ 27, 89, 130, 1.0f },
|
||||||
|
{ 149, 194, 24, 1.0f },
|
||||||
|
{ 149, 194, 24, 1.0f },
|
||||||
|
{ 45, 155, 90, 1.0f },
|
||||||
|
{ 45, 155, 90, 1.0f },
|
||||||
|
{ 45, 155, 90, 1.0f },
|
||||||
|
{ 255, 227, 79, 1.0f },
|
||||||
|
{ 255, 227, 79, 1.0f },
|
||||||
|
{ 255, 227, 79, 1.0f },
|
||||||
|
{ 255, 227, 79, 1.0f },
|
||||||
|
{ 254, 137, 0, 1.0f },
|
||||||
|
{ 254, 137, 0, 1.0f },
|
||||||
|
{ 249, 131, 215, 1.0f },
|
||||||
|
{ 249, 131, 215, 1.0f },
|
||||||
|
{ 164, 40, 178, 1.0f },
|
||||||
|
{ 164, 40, 178, 1.0f },
|
||||||
|
{ 164, 40, 178, 1.0f },
|
||||||
|
{ 164, 40, 178, 1.0f },
|
||||||
|
{ 69, 69, 69, 1.0f },
|
||||||
|
{ 69, 69, 69, 1.0f },
|
||||||
|
{ 69, 69, 69, 1.0f },
|
||||||
|
{ 255, 100, 100, 1.0f },
|
||||||
|
{ 128, 255, 128, 1.0f },
|
||||||
|
{ 100, 100, 255, 1.0f },
|
||||||
|
{ 255, 255, 100, 1.0f },
|
||||||
|
{ 255, 100, 100, 1.0f },
|
||||||
|
{ 100, 255, 100, 1.0f },
|
||||||
|
{ 255, 255, 255, 1.0f }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ModifyStringLabelForControlSetting(char *str)
|
ModifyStringLabelForControlSetting(char *str)
|
||||||
|
@ -394,7 +432,7 @@ CPickup::Update(CPlayerPed *player, CVehicle *vehicle, int playerId)
|
||||||
return true;
|
return true;
|
||||||
case PICKUP_ASSET_REVENUE:
|
case PICKUP_ASSET_REVENUE:
|
||||||
CWorld::Players[CWorld::PlayerInFocus].m_nMoney += m_fRevenue;
|
CWorld::Players[CWorld::PlayerInFocus].m_nMoney += m_fRevenue;
|
||||||
m_fRevenue = 0;
|
m_fRevenue = 0.0f;
|
||||||
DMAudio.PlayFrontEndSound(SOUND_PICKUP_MONEY, 0);
|
DMAudio.PlayFrontEndSound(SOUND_PICKUP_MONEY, 0);
|
||||||
return false;
|
return false;
|
||||||
// TODO(Miami): Control flow
|
// TODO(Miami): Control flow
|
||||||
|
@ -866,9 +904,24 @@ CPickups::Update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
|
CPickup*
|
||||||
|
CPickups::FindPickUpForThisObject(CEntity *object)
|
||||||
|
{
|
||||||
|
for (uint32 i = 0; i < NUMPICKUPS; i++) {
|
||||||
|
if (aPickUps[i].m_eType != PICKUP_NONE && (aPickUps[i].m_pObject == object || aPickUps[i].m_pExtraObject == object)) {
|
||||||
|
return &aPickUps[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &aPickUps[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPickups::DoPickUpEffects(CEntity *entity)
|
CPickups::DoPickUpEffects(CEntity *entity)
|
||||||
{
|
{
|
||||||
|
CPickup *pickup = FindPickUpForThisObject(entity);
|
||||||
|
|
||||||
if (entity->GetModelIndex() == MI_PICKUP_KILLFRENZY)
|
if (entity->GetModelIndex() == MI_PICKUP_KILLFRENZY)
|
||||||
entity->bDoNotRender = CTheScripts::IsPlayerOnAMission() || CDarkel::FrenzyOnGoing() || !CGame::nastyGame;
|
entity->bDoNotRender = CTheScripts::IsPlayerOnAMission() || CDarkel::FrenzyOnGoing() || !CGame::nastyGame;
|
||||||
|
|
||||||
|
@ -886,7 +939,7 @@ CPickups::DoPickUpEffects(CEntity *entity)
|
||||||
doInnerGlow = true;
|
doInnerGlow = true;
|
||||||
doOuterGlow = false;
|
doOuterGlow = false;
|
||||||
} else if (entity->GetModelIndex() == MI_PICKUP_BODYARMOUR) {
|
} else if (entity->GetModelIndex() == MI_PICKUP_BODYARMOUR) {
|
||||||
colorId = WEAPONTYPE_TOTALWEAPONS + 1;
|
colorId = WEAPONTYPE_ARMOUR;
|
||||||
} else if (entity->GetModelIndex() == MI_PICKUP_BRIBE) {
|
} else if (entity->GetModelIndex() == MI_PICKUP_BRIBE) {
|
||||||
doInnerGlow = true;
|
doInnerGlow = true;
|
||||||
doOuterGlow = false;
|
doOuterGlow = false;
|
||||||
|
@ -895,33 +948,92 @@ CPickups::DoPickUpEffects(CEntity *entity)
|
||||||
doInnerGlow = true;
|
doInnerGlow = true;
|
||||||
doOuterGlow = false;
|
doOuterGlow = false;
|
||||||
} else if (entity->GetModelIndex() == MI_PICKUP_HEALTH || entity->GetModelIndex() == MI_PICKUP_BONUS) {
|
} else if (entity->GetModelIndex() == MI_PICKUP_HEALTH || entity->GetModelIndex() == MI_PICKUP_BONUS) {
|
||||||
colorId = WEAPONTYPE_TOTALWEAPONS;
|
colorId = WEAPONTYPE_HEALTH;
|
||||||
doInnerGlow = true;
|
doInnerGlow = true;
|
||||||
doOuterGlow = false;
|
doOuterGlow = false;
|
||||||
|
} else if (entity->GetModelIndex() == MI_PICKUP_PROPERTY) {
|
||||||
|
doInnerGlow = true;
|
||||||
|
doOuterGlow = false;
|
||||||
|
} else if (entity->GetModelIndex() == MI_PICKUP_PROPERTY_FORSALE) {
|
||||||
|
doInnerGlow = true;
|
||||||
|
doOuterGlow = false;
|
||||||
|
} else if (entity->GetModelIndex() == MI_PICKUP_REVENUE) {
|
||||||
|
doInnerGlow = true;
|
||||||
|
doOuterGlow = false;
|
||||||
|
} else if (entity->GetModelIndex() == MI_PICKUP_SAVEGAME) {
|
||||||
|
doInnerGlow = true;
|
||||||
|
doOuterGlow = false;
|
||||||
|
} else if (entity->GetModelIndex() == MI_PICKUP_CLOTHES) {
|
||||||
|
colorId = WEAPONTYPE_TOTALWEAPONS;
|
||||||
|
doOuterGlow = false;
|
||||||
|
doInnerGlow = true;
|
||||||
} else
|
} else
|
||||||
colorId = WeaponForModel(entity->GetModelIndex());
|
colorId = WeaponForModel(entity->GetModelIndex());
|
||||||
|
|
||||||
const CVector& pos = entity->GetPosition();
|
const CVector& pos = pickup->m_vecPos;
|
||||||
if (doOuterGlow) {
|
if (doOuterGlow) {
|
||||||
float colorModifier = ((CGeneral::GetRandomNumber() & 0x1F) * 0.015f + 1.0f) * modifiedSin * 0.15f;
|
bool corona1 = false;
|
||||||
CShadows::StoreStaticShadow((uintptr)entity, SHADOWTYPE_ADDITIVE, gpShadowExplosionTex, &pos, 2.0f, 0.0f, 0.0f, -2.0f, 0,
|
bool corona2 = false;
|
||||||
aWeaponReds[colorId] * colorModifier, aWeaponGreens[colorId] * colorModifier, aWeaponBlues[colorId] * colorModifier, 4.0f,
|
int timerVal = (CTimer::GetTimeInMilliseconds() >> 9) & 7;
|
||||||
1.0f, 40.0f, false, 0.0f);
|
|
||||||
|
|
||||||
float radius = (CGeneral::GetRandomNumber() & 0xF) * 0.1f + 3.0f;
|
if (timerVal < 3)
|
||||||
CPointLights::AddLight(CPointLights::LIGHT_POINT, pos, CVector(0.0f, 0.0f, 0.0f), radius, aWeaponReds[colorId] * modifiedSin / 256.0f, aWeaponGreens[colorId] * modifiedSin / 256.0f, aWeaponBlues[colorId] * modifiedSin / 256.0f, CPointLights::FOG_NONE, true);
|
corona1 = false;
|
||||||
float size = (CGeneral::GetRandomNumber() & 0xF) * 0.0005f + 0.6f;
|
else if (timerVal == 3)
|
||||||
CCoronas::RegisterCorona((uintptr)entity,
|
corona1 = (CGeneral::GetRandomNumber() & 3) != 0;
|
||||||
aWeaponReds[colorId] * modifiedSin / 2.0f, aWeaponGreens[colorId] * modifiedSin / 2.0f, aWeaponBlues[colorId] * modifiedSin / 2.0f,
|
else
|
||||||
255,
|
corona1 = true;
|
||||||
pos,
|
|
||||||
size, 65.0f, CCoronas::TYPE_RING, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF, 0.0f);
|
timerVal = (timerVal - 1) & 7;
|
||||||
|
if (timerVal < 3)
|
||||||
|
corona2 = false;
|
||||||
|
else if (timerVal == 3)
|
||||||
|
corona2 = (CGeneral::GetRandomNumber() & 3) != 0;
|
||||||
|
else
|
||||||
|
corona2 = true;
|
||||||
|
|
||||||
|
if (((CObject*)entity)->obj_flag_02) {
|
||||||
|
corona2 = false;
|
||||||
|
corona1 = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (corona1) {
|
||||||
|
CCoronas::RegisterCorona((uintptr)entity,
|
||||||
|
aPickupColors[colorId].r * 0.45f, aPickupColors[colorId].g * 0.45f, aPickupColors[colorId].b * 0.45f,
|
||||||
|
255, pos, 0.76f, 65.0f,
|
||||||
|
CCoronas::TYPE_RING, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF,
|
||||||
|
0.0f, false, -0.4f);
|
||||||
|
CShadows::StoreStaticShadow((uintptr)entity,
|
||||||
|
SHADOWTYPE_ADDITIVE, gpShadowExplosionTex, &pos, 2.0f, 0.0f, 0.0f, -2.0f, 0,
|
||||||
|
aPickupColors[colorId].r * 0.3f, aPickupColors[colorId].g * 0.3f, aPickupColors[colorId].b * 0.3f,
|
||||||
|
4.0f, 1.0f, 40.0f, false, 0.0f);
|
||||||
|
float radius = (CGeneral::GetRandomNumber() & 0xF) * 0.1f + 3.0f;
|
||||||
|
CPointLights::AddLight(CPointLights::LIGHT_POINT, pos, CVector(0.0f, 0.0f, 0.0f), radius, aPickupColors[colorId].r / 256.0f, aPickupColors[colorId].g / 256.0f, aPickupColors[colorId].b / 256.0f, CPointLights::FOG_NONE, true);
|
||||||
|
} else
|
||||||
|
CCoronas::RegisterCorona((uintptr)entity, 0, 0, 0, 255, pos, 0.57f, 65.0f, CCoronas::TYPE_RING, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF, 0.0f);
|
||||||
|
|
||||||
|
if (corona2) {
|
||||||
|
CCoronas::RegisterCorona(
|
||||||
|
(uintptr)entity + 1,
|
||||||
|
aPickupColors[colorId].r * 0.55f, aPickupColors[colorId].g * 0.55f, aPickupColors[colorId].b * 0.55f,
|
||||||
|
255,
|
||||||
|
pos,
|
||||||
|
0.6f,
|
||||||
|
65.0f,
|
||||||
|
CCoronas::TYPE_RING, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF,
|
||||||
|
0.0f, false, -0.4f);
|
||||||
|
if (!corona1)
|
||||||
|
CShadows::StoreStaticShadow((uintptr)entity, SHADOWTYPE_ADDITIVE, gpShadowExplosionTex, &pos, 2.0f, 0.0f, 0.0f, -2.0f, 0,
|
||||||
|
aPickupColors[colorId].r * 0.25f, aPickupColors[colorId].g * 0.25f, aPickupColors[colorId].b * 0.25f,
|
||||||
|
4.0f, 1.0f, 40.0f, false, 0.0f);
|
||||||
|
} else
|
||||||
|
CCoronas::RegisterCorona((uintptr)entity + 1, 0, 0, 0, 255, pos, 0.45f, 65.0f, CCoronas::TYPE_RING, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_OFF, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
CObject *object = (CObject*)entity;
|
CObject *object = (CObject*)entity;
|
||||||
if (object->bPickupObjWithMessage || object->bOutOfStock || object->m_nBonusValue) {
|
if (object->bPickupObjWithMessage || object->bOutOfStock || object->m_nBonusValue || object->m_nCostValue) {
|
||||||
float dist = (TheCamera.GetPosition() - pos).Magnitude();
|
|
||||||
const float MAXDIST = 12.0f;
|
float dist = Distance2D(pos, TheCamera.GetPosition());
|
||||||
|
const float MAXDIST = 14.0f;
|
||||||
|
|
||||||
if (dist < MAXDIST && NumMessages < NUMPICKUPMESSAGES) {
|
if (dist < MAXDIST && NumMessages < NUMPICKUPMESSAGES) {
|
||||||
RwV3d vecOut;
|
RwV3d vecOut;
|
||||||
|
@ -932,38 +1044,79 @@ CPickups::DoPickUpEffects(CEntity *entity)
|
||||||
aMessages[NumMessages].m_dist.x = fDistX;
|
aMessages[NumMessages].m_dist.x = fDistX;
|
||||||
aMessages[NumMessages].m_dist.y = fDistY;
|
aMessages[NumMessages].m_dist.y = fDistY;
|
||||||
aMessages[NumMessages].m_weaponType = WeaponForModel(entity->GetModelIndex());
|
aMessages[NumMessages].m_weaponType = WeaponForModel(entity->GetModelIndex());
|
||||||
aMessages[NumMessages].m_color.red = aWeaponReds[colorId];
|
aMessages[NumMessages].m_color.red = aPickupColors[colorId].r;
|
||||||
aMessages[NumMessages].m_color.green = aWeaponGreens[colorId];
|
aMessages[NumMessages].m_color.green = aPickupColors[colorId].g;
|
||||||
aMessages[NumMessages].m_color.blue = aWeaponBlues[colorId];
|
aMessages[NumMessages].m_color.blue = aPickupColors[colorId].b;
|
||||||
aMessages[NumMessages].m_color.alpha = (1.0f - dist / MAXDIST) * 128.0f;
|
aMessages[NumMessages].m_color.alpha = (1.0f - dist / MAXDIST) * 128.0f;
|
||||||
aMessages[NumMessages].m_bOutOfStock = object->bOutOfStock;
|
aMessages[NumMessages].m_bOutOfStock = object->bOutOfStock;
|
||||||
aMessages[NumMessages].m_quantity = object->m_nBonusValue;
|
aMessages[NumMessages].m_quantity = object->m_nBonusValue;
|
||||||
|
aMessages[NumMessages].money = object->m_nCostValue;
|
||||||
NumMessages++;
|
NumMessages++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 model = entity->GetModelIndex();
|
uint32 model = entity->GetModelIndex();
|
||||||
CColModel* colModel = entity->GetColModel();
|
CColModel *colModel = entity->GetColModel();
|
||||||
CVector colLength = colModel->boundingBox.max - colModel->boundingBox.min;
|
CVector colLength = colModel->boundingBox.max - colModel->boundingBox.min;
|
||||||
|
float maxDimension = Max(colLength.x, Max(colLength.y, colLength.z));
|
||||||
|
|
||||||
float scale = (Max(1.f, 1.2f / Max(colLength.x, Max(colLength.y, colLength.z))) - 1.0f) * 0.6f + 1.0f;
|
float scale = (Max(1.f, 1.2f / maxDimension) - 1.0f) * 0.6f + 1.0f;
|
||||||
if (model == MI_MINIGUN || model == MI_MINIGUN2)
|
if (model == MI_MINIGUN || model == MI_MINIGUN2)
|
||||||
scale = 1.2f;
|
scale = 1.2f;
|
||||||
|
|
||||||
entity->GetMatrix().SetRotateZOnlyScaled((float)(CTimer::GetTimeInMilliseconds() & 0x7FF) * DEGTORAD(360.0f / 0x800), scale);
|
entity->GetMatrix().SetRotateZOnlyScaled((float)(CTimer::GetTimeInMilliseconds() & 0x7FF) * DEGTORAD(360.0f / 0x800), scale);
|
||||||
|
|
||||||
|
if (entity->GetModelIndex() == MI_MINIGUN2) {
|
||||||
|
CMatrix matrix1;
|
||||||
|
CMatrix matrix2; // unused
|
||||||
|
entity->SetPosition(pickup->m_vecPos);
|
||||||
|
matrix1.SetRotateX(0.0f);
|
||||||
|
matrix1.Rotate(DEGTORAD(4.477f), DEGTORAD(-29.731), DEGTORAD(-1.064));
|
||||||
|
matrix1.Translate(CVector(0.829, -0.001, 0.226));
|
||||||
|
entity->GetMatrix() *= matrix1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doOuterGlow) {
|
||||||
|
CVector scale(0.0f, 0.0f, 0.0f);
|
||||||
|
if (colLength.x == maxDimension)
|
||||||
|
scale.x = colLength.x;
|
||||||
|
else if (colLength.y == maxDimension)
|
||||||
|
scale.y = colLength.y;
|
||||||
|
else
|
||||||
|
scale.z = colLength.z;
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
CVector pos = entity->GetMatrix() * (scale * ((float)i / 3.0f));
|
||||||
|
CCoronas::RegisterCorona(
|
||||||
|
(uintptr)entity + 8 + i,
|
||||||
|
aPickupColors[colorId].r * 0.15f,
|
||||||
|
aPickupColors[colorId].g * 0.15f,
|
||||||
|
aPickupColors[colorId].b * 0.15f,
|
||||||
|
255,
|
||||||
|
pos,
|
||||||
|
1.0f,
|
||||||
|
65.0f,
|
||||||
|
CCoronas::TYPE_STAR, CCoronas::FLARE_NONE,
|
||||||
|
CCoronas::REFLECTION_OFF,
|
||||||
|
CCoronas::LOSCHECK_OFF,
|
||||||
|
CCoronas::STREAK_OFF,
|
||||||
|
0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (doInnerGlow)
|
if (doInnerGlow)
|
||||||
CCoronas::RegisterCorona((uintptr)entity + 1, 126, 69, 121, 255, entity->GetPosition(), 1.2f, 50.0f,
|
CCoronas::RegisterCorona((uintptr)entity + 8, 126, 69, 121, 255, entity->GetPosition(), 1.2f, 50.0f,
|
||||||
CCoronas::TYPE_STAR, CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.f, false);
|
CCoronas::TYPE_STAR, CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPickups::DoMineEffects(CEntity *entity)
|
CPickups::DoMineEffects(CEntity *entity)
|
||||||
{
|
{
|
||||||
const CVector &pos = entity->GetPosition();
|
const CVector &pos = entity->GetPosition();
|
||||||
float dist = (TheCamera.GetPosition() - pos).Magnitude();
|
float dist = Distance(pos, TheCamera.GetPosition());
|
||||||
const float MAXDIST = 20.0f;
|
const float MAXDIST = 20.0f;
|
||||||
|
|
||||||
if (dist < MAXDIST) {
|
if (dist < MAXDIST) {
|
||||||
|
@ -978,11 +1131,12 @@ CPickups::DoMineEffects(CEntity *entity)
|
||||||
entity->GetMatrix().SetRotateZOnly((float)(CTimer::GetTimeInMilliseconds() & 0x3FF) * DEGTORAD(360.0f / 0x400));
|
entity->GetMatrix().SetRotateZOnly((float)(CTimer::GetTimeInMilliseconds() & 0x3FF) * DEGTORAD(360.0f / 0x400));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPickups::DoMoneyEffects(CEntity *entity)
|
CPickups::DoMoneyEffects(CEntity *entity)
|
||||||
{
|
{
|
||||||
const CVector &pos = entity->GetPosition();
|
const CVector &pos = entity->GetPosition();
|
||||||
float dist = (TheCamera.GetPosition() - pos).Magnitude();
|
float dist = Distance(pos, TheCamera.GetPosition());
|
||||||
const float MAXDIST = 20.0f;
|
const float MAXDIST = 20.0f;
|
||||||
|
|
||||||
if (dist < MAXDIST) {
|
if (dist < MAXDIST) {
|
||||||
|
@ -997,11 +1151,12 @@ CPickups::DoMoneyEffects(CEntity *entity)
|
||||||
entity->GetMatrix().SetRotateZOnly((float)(CTimer::GetTimeInMilliseconds() & 0x7FF) * DEGTORAD(360.0f / 0x800));
|
entity->GetMatrix().SetRotateZOnly((float)(CTimer::GetTimeInMilliseconds() & 0x7FF) * DEGTORAD(360.0f / 0x800));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPickups::DoCollectableEffects(CEntity *entity)
|
CPickups::DoCollectableEffects(CEntity *entity)
|
||||||
{
|
{
|
||||||
const CVector &pos = entity->GetPosition();
|
const CVector &pos = entity->GetPosition();
|
||||||
float dist = (TheCamera.GetPosition() - pos).Magnitude();
|
float dist = Distance(pos, TheCamera.GetPosition());
|
||||||
const float MAXDIST = 14.0f;
|
const float MAXDIST = 14.0f;
|
||||||
|
|
||||||
if (dist < MAXDIST) {
|
if (dist < MAXDIST) {
|
||||||
|
@ -1016,18 +1171,22 @@ CPickups::DoCollectableEffects(CEntity *entity)
|
||||||
entity->GetMatrix().SetRotateZOnly((float)(CTimer::GetTimeInMilliseconds() & 0xFFF) * DEGTORAD(360.0f / 0x1000));
|
entity->GetMatrix().SetRotateZOnly((float)(CTimer::GetTimeInMilliseconds() & 0xFFF) * DEGTORAD(360.0f / 0x1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPickups::RenderPickUpText()
|
CPickups::RenderPickUpText()
|
||||||
{
|
{
|
||||||
wchar *strToPrint;
|
wchar *strToPrint;
|
||||||
for (int32 i = 0; i < NumMessages; i++) {
|
for (int32 i = 0; i < NumMessages; i++) {
|
||||||
if (aMessages[i].m_quantity <= 39) {
|
|
||||||
|
if (aMessages[i].money != 0) {
|
||||||
|
sprintf(gString, "$%d", aMessages[i].money);
|
||||||
|
AsciiToUnicode(gString, gUString);
|
||||||
|
strToPrint = gUString;
|
||||||
|
} else {
|
||||||
switch (aMessages[i].m_quantity) // could use some enum maybe
|
switch (aMessages[i].m_quantity) // could use some enum maybe
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (aMessages[i].m_weaponType == WEAPONTYPE_TOTALWEAPONS) { // unreachable code?
|
if (aMessages[i].m_weaponType == WEAPONTYPE_HEALTH || aMessages[i].m_weaponType == WEAPONTYPE_ARMOUR) {
|
||||||
// what is this??
|
|
||||||
sprintf(gString, "%d/%d", CWorld::Players[CWorld::PlayerInFocus].m_nCollectedPackages, 2903);
|
|
||||||
strToPrint = nil;
|
strToPrint = nil;
|
||||||
} else {
|
} else {
|
||||||
if (aMessages[i].m_bOutOfStock)
|
if (aMessages[i].m_bOutOfStock)
|
||||||
|
@ -1040,121 +1199,43 @@ CPickups::RenderPickUpText()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
strToPrint = TheText.Get("SECURI");
|
strToPrint = TheText.Get("OUTFT1");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
strToPrint = TheText.Get("MOONBM");
|
strToPrint = TheText.Get("OUTFT2");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
strToPrint = TheText.Get("COACH");
|
strToPrint = TheText.Get("OUTFT3");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
strToPrint = TheText.Get("FLATBED");
|
strToPrint = TheText.Get("OUTFT4");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
strToPrint = TheText.Get("LINERUN");
|
strToPrint = TheText.Get("OUTFT5");
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
strToPrint = TheText.Get("TRASHM");
|
strToPrint = TheText.Get("OUTFT6");
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
strToPrint = TheText.Get("PATRIOT");
|
strToPrint = TheText.Get("OUTFT7");
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
strToPrint = TheText.Get("WHOOPEE");
|
strToPrint = TheText.Get("OUTFT8");
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
strToPrint = TheText.Get("BLISTA");
|
strToPrint = TheText.Get("OUTFT9");
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
strToPrint = TheText.Get("MULE");
|
strToPrint = TheText.Get("OUTFT10");
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
strToPrint = TheText.Get("YANKEE");
|
strToPrint = TheText.Get("OUTFT11");
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
strToPrint = TheText.Get("BOBCAT");
|
strToPrint = TheText.Get("OUTFT12");
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
strToPrint = TheText.Get("DODO");
|
strToPrint = TheText.Get("OUTFT13");
|
||||||
break;
|
|
||||||
case 14:
|
|
||||||
strToPrint = TheText.Get("BUS");
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
strToPrint = TheText.Get("RUMPO");
|
|
||||||
break;
|
|
||||||
case 16:
|
|
||||||
strToPrint = TheText.Get("PONY");
|
|
||||||
break;
|
|
||||||
case 17:
|
|
||||||
strToPrint = TheText.Get("SENTINL");
|
|
||||||
break;
|
|
||||||
case 18:
|
|
||||||
strToPrint = TheText.Get("CHEETAH");
|
|
||||||
break;
|
|
||||||
case 19:
|
|
||||||
strToPrint = TheText.Get("BANSHEE");
|
|
||||||
break;
|
|
||||||
case 20:
|
|
||||||
strToPrint = TheText.Get("IDAHO");
|
|
||||||
break;
|
|
||||||
case 21:
|
|
||||||
strToPrint = TheText.Get("INFERNS");
|
|
||||||
break;
|
|
||||||
case 22:
|
|
||||||
strToPrint = TheText.Get("TAXI");
|
|
||||||
break;
|
|
||||||
case 23:
|
|
||||||
strToPrint = TheText.Get("KURUMA");
|
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
strToPrint = TheText.Get("STRETCH");
|
|
||||||
break;
|
|
||||||
case 25:
|
|
||||||
strToPrint = TheText.Get("PEREN");
|
|
||||||
break;
|
|
||||||
case 26:
|
|
||||||
strToPrint = TheText.Get("STINGER");
|
|
||||||
break;
|
|
||||||
case 27:
|
|
||||||
strToPrint = TheText.Get("MANANA");
|
|
||||||
break;
|
|
||||||
case 28:
|
|
||||||
strToPrint = TheText.Get("LANDSTK");
|
|
||||||
break;
|
|
||||||
case 29:
|
|
||||||
strToPrint = TheText.Get("STALION");
|
|
||||||
break;
|
|
||||||
case 30:
|
|
||||||
strToPrint = TheText.Get("BFINJC");
|
|
||||||
break;
|
|
||||||
case 31:
|
|
||||||
strToPrint = TheText.Get("CABBIE");
|
|
||||||
break;
|
|
||||||
case 32:
|
|
||||||
strToPrint = TheText.Get("ESPERAN");
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
strToPrint = TheText.Get("FIRETRK");
|
|
||||||
break;
|
|
||||||
case 34:
|
|
||||||
strToPrint = TheText.Get("AMBULAN");
|
|
||||||
break;
|
|
||||||
case 35:
|
|
||||||
strToPrint = TheText.Get("ENFORCR");
|
|
||||||
break;
|
|
||||||
case 36:
|
|
||||||
strToPrint = TheText.Get("FBICAR");
|
|
||||||
break;
|
|
||||||
case 37:
|
|
||||||
strToPrint = TheText.Get("RHINO");
|
|
||||||
break;
|
|
||||||
case 38:
|
|
||||||
strToPrint = TheText.Get("BARRCKS");
|
|
||||||
break;
|
|
||||||
case 39:
|
|
||||||
strToPrint = TheText.Get("POLICAR");
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -1165,12 +1246,16 @@ CPickups::RenderPickUpText()
|
||||||
CFont::SetPropOn();
|
CFont::SetPropOn();
|
||||||
CFont::SetBackgroundOff();
|
CFont::SetBackgroundOff();
|
||||||
|
|
||||||
const float MAX_SCALE = 1.0f;
|
#ifdef FIX_BUGS
|
||||||
|
const float MAX_SCALE = SCREEN_WIDTH / DEFAULT_SCREEN_WIDTH;
|
||||||
|
#else
|
||||||
|
const float MAX_SCALE = RsGlobal.width / DEFAULT_SCREEN_WIDTH;
|
||||||
|
#endif
|
||||||
|
|
||||||
float fScaleY = aMessages[i].m_dist.y / 100.0f;
|
float fScaleY = aMessages[i].m_dist.y / 30.0f;
|
||||||
if (fScaleY > MAX_SCALE) fScaleY = MAX_SCALE;
|
if (fScaleY > MAX_SCALE) fScaleY = MAX_SCALE;
|
||||||
|
|
||||||
float fScaleX = aMessages[i].m_dist.x / 100.0f;
|
float fScaleX = aMessages[i].m_dist.x / 30.0f;
|
||||||
if (fScaleX > MAX_SCALE) fScaleX = MAX_SCALE;
|
if (fScaleX > MAX_SCALE) fScaleX = MAX_SCALE;
|
||||||
|
|
||||||
CFont::SetScale(fScaleX, fScaleY);
|
CFont::SetScale(fScaleX, fScaleY);
|
||||||
|
|
|
@ -66,8 +66,9 @@ struct tPickupMessage
|
||||||
eWeaponType m_weaponType;
|
eWeaponType m_weaponType;
|
||||||
CVector2D m_dist;
|
CVector2D m_dist;
|
||||||
CRGBA m_color;
|
CRGBA m_color;
|
||||||
uint8 m_bOutOfStock : 1;
|
uint8 m_bOutOfStock;
|
||||||
uint8 m_quantity;
|
uint8 m_quantity;
|
||||||
|
uint16 money;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPickups
|
class CPickups
|
||||||
|
@ -114,6 +115,7 @@ public:
|
||||||
static uint32 StaticCamStartTime;
|
static uint32 StaticCamStartTime;
|
||||||
|
|
||||||
static void RemoveAllPickupsOfACertainWeaponGroupWithNoAmmo(eWeaponType);
|
static void RemoveAllPickupsOfACertainWeaponGroupWithNoAmmo(eWeaponType);
|
||||||
|
static CPickup *FindPickUpForThisObject(CEntity*);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern uint16 AmmoForWeapon[20];
|
extern uint16 AmmoForWeapon[20];
|
||||||
|
|
|
@ -115,6 +115,14 @@ Distance(const CVector &v1, const CVector &v2)
|
||||||
return (v2 - v1).Magnitude();
|
return (v2 - v1).Magnitude();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline float
|
||||||
|
Distance2D(const CVector &v1, const CVector &v2)
|
||||||
|
{
|
||||||
|
float x = v2.x - v1.x;
|
||||||
|
float y = v2.y - v1.y;
|
||||||
|
return Sqrt(x*x + y*y);
|
||||||
|
}
|
||||||
|
|
||||||
class CMatrix;
|
class CMatrix;
|
||||||
|
|
||||||
CVector Multiply3x3(const CMatrix &mat, const CVector &vec);
|
CVector Multiply3x3(const CMatrix &mat, const CVector &vec);
|
||||||
|
|
Loading…
Reference in a new issue