First batch of fixes (CallAndMessage)

This commit is contained in:
Filip Gawin 2021-01-31 20:44:39 +01:00
parent 5de4e88d7a
commit 7a3b80a9b7
15 changed files with 139 additions and 49 deletions

View File

@ -814,6 +814,9 @@ void
CPickups::RenderPickUpText()
{
wchar *strToPrint;
#ifdef FIX_BUGS
strToPrint = nil;
#endif
for (int32 i = 0; i < NumMessages; i++) {
if (aMessages[i].m_quantity <= 39) {
switch (aMessages[i].m_quantity) // could use some enum maybe
@ -1285,7 +1288,11 @@ CPacManPickups::GeneratePMPickUpsForRace(int32 race)
int i = 0;
if (race == 0) pPos = aRacePoints1; // there's only one available
assert(pPos != nil);
if(!pPos) {
debug("This shouldn't happen");
return;
}
while (!pPos->IsZero()) {
while (aPMPickUps[i].m_eType != PACMAN_NONE)

View File

@ -3439,8 +3439,13 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
}
else {
CVehicle* car;
if (!CModelInfo::IsBikeModel(ScriptParams[0]))
car = new CAutomobile(ScriptParams[0], MISSION_VEHICLE);
if(!CModelInfo::IsBikeModel(ScriptParams[0])) car = new CAutomobile(ScriptParams[0], MISSION_VEHICLE);
#ifdef FIX_BUGS
else {
debug("This shouldn't happen");
return 0;
}
#endif
CVector pos = *(CVector*)&ScriptParams[1];
if (pos.z <= MAP_Z_LOW_LIMIT)
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);

View File

@ -1817,8 +1817,13 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
if (model == -1)
return 0;
CVehicle* car;
if (!CModelInfo::IsBikeModel(model))
car = new CAutomobile(model, RANDOM_VEHICLE);
if(!CModelInfo::IsBikeModel(model)) car = new CAutomobile(model, RANDOM_VEHICLE);
#ifdef FIX_BUGS
else {
debug("This shouldn't happen");
return 0;
}
#endif
CVector pos = *(CVector*)&ScriptParams[0];
pos.z += car->GetDistanceFromCentreOfMassToBaseOfModel();
car->SetPosition(pos);

View File

@ -971,8 +971,10 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
pClosestEntity = apEntities[i];
}
}
if (pClosestEntity->IsDummy())
pClosestEntity = nil;
#ifdef FIX_BUGS
if(pClosestEntity)
#endif
if(pClosestEntity->IsDummy()) pClosestEntity = nil;
}
if (pClosestEntity) {
script_assert(pClosestEntity->IsObject());

View File

@ -1699,10 +1699,12 @@ CCamera::CamControl(void)
Cams[ActiveCam].CamTargetEntity = pTargetEntity;
// Ped visibility
if((Cams[ActiveCam].Mode == CCam::MODE_1STPERSON ||
Cams[ActiveCam].Mode == CCam::MODE_SNIPER ||
Cams[ActiveCam].Mode == CCam::MODE_M16_1STPERSON ||
Cams[ActiveCam].Mode == CCam::MODE_ROCKETLAUNCHER) && pTargetEntity->IsPed() ||
if(((Cams[ActiveCam].Mode == CCam::MODE_1STPERSON || Cams[ActiveCam].Mode == CCam::MODE_SNIPER || Cams[ActiveCam].Mode == CCam::MODE_M16_1STPERSON ||
Cams[ActiveCam].Mode == CCam::MODE_ROCKETLAUNCHER) &&
#ifdef FIX_BUGS
pTargetEntity &&
#endif
pTargetEntity->IsPed()) ||
Cams[ActiveCam].Mode == CCam::MODE_FLYBY)
FindPlayerPed()->bIsVisible = false;
else
@ -1754,14 +1756,15 @@ CCamera::UpdateTargetEntity(void)
PLAYER->m_pMyVehicle &&
PLAYER->m_pMyVehicle->CanPedOpenLocks(PLAYER))
cantOpen = false;
if(PLAYER->GetPedState() == PED_ENTER_CAR && !cantOpen){
if(!enteringCar && CarZoomIndicator != CAM_ZOOM_1STPRS){
pTargetEntity = PLAYER->m_pMyVehicle;
if(PLAYER->m_pMyVehicle == nil)
pTargetEntity = PLAYER;
#ifdef FIX_BUGS
if(PLAYER)
#endif
if(PLAYER->GetPedState() == PED_ENTER_CAR && !cantOpen) {
if(!enteringCar && CarZoomIndicator != CAM_ZOOM_1STPRS) {
pTargetEntity = PLAYER->m_pMyVehicle;
if(PLAYER->m_pMyVehicle == nil) pTargetEntity = PLAYER;
}
}
}
if((PLAYER->GetPedState() == PED_CARJACK || PLAYER->GetPedState() == PED_OPEN_DOOR) && !cantOpen){
if(!enteringCar && CarZoomIndicator != CAM_ZOOM_1STPRS)

View File

@ -1090,6 +1090,9 @@ CFileLoader::LoadObject(const char *line)
char model[24], txd[24];
float dist[3];
uint32 flags;
#ifdef FIX_BUGS
flags = 0;
#endif
int damaged;
CSimpleModelInfo *mi;
@ -1186,6 +1189,9 @@ CFileLoader::LoadTimeObject(const char *line)
char model[24], txd[24];
float dist[3];
uint32 flags;
#ifdef FIX_BUGS
flags = 0;
#endif
int timeOn, timeOff;
int damaged;
CTimeModelInfo *mi, *other;
@ -1790,6 +1796,9 @@ CFileLoader::ReloadObject(const char *line)
char model[24], txd[24];
float dist[3];
uint32 flags;
#ifdef FIX_BUGS
flags = 0;
#endif
CSimpleModelInfo *mi;
if(sscanf(line, "%d %s %s %d", &id, model, txd, &numObjs) != 4)

View File

@ -144,8 +144,11 @@ INITSAVEBUF
pVehicle = new(slot) CBoat(model, RANDOM_VEHICLE);
else if (type == VEHICLE_TYPE_CAR)
pVehicle = new(slot) CAutomobile(model, RANDOM_VEHICLE);
else
else {
assert(0);
debug("This shouldn't happen");
return;
}
--CCarCtrl::NumRandomCars;
pVehicle->Load(buf);
CWorld::Add(pVehicle);
@ -518,8 +521,11 @@ INITSAVEBUF
if (pedtype == PEDTYPE_PLAYER1)
pPed = new(ref) CPlayerPed();
else
else {
assert(0);
debug("This shouldn't happen");
return;
}
pPed->Load(buf);
if (pedtype == PEDTYPE_PLAYER1) {

View File

@ -404,6 +404,9 @@ void CRadar::Draw3dMarkers()
case BLIP_CHAR:
{
CEntity *entity = CPools::GetPedPool()->GetAt(ms_RadarTrace[i].m_nEntityHandle);
#ifdef FIX_BUGS
if(!entity) break;
#endif
if (entity != nil) {
if (((CPed*)entity)->InVehicle())
entity = ((CPed * )entity)->m_pMyVehicle;

View File

@ -504,6 +504,9 @@ CEntity::Add(void)
case ENTITY_TYPE_DUMMY:
list = &s->m_lists[ENTITYLIST_DUMMIES_OVERLAP];
break;
#ifdef FIX_BUGS
default: debug("This shouldn't happen"); return;
#endif
}
list->InsertItem(this);
}
@ -564,6 +567,9 @@ CEntity::Remove(void)
case ENTITY_TYPE_DUMMY:
list = &s->m_lists[ENTITYLIST_DUMMIES_OVERLAP];
break;
#ifdef FIX_BUGS
default: debug("This shouldn't happen"); return;
#endif
}
list->RemoveItem(this);
}

View File

@ -126,6 +126,8 @@ CPhysical::Add(void)
break;
default:
assert(0);
debug("This shouldn't happen");
return;
}
CPtrNode *node = list->InsertItem(this);
assert(node);
@ -191,17 +193,20 @@ CPhysical::RemoveAndAdd(void)
list = &s->m_lists[ENTITYLIST_OBJECTS_OVERLAP];
break;
}
if(next){
// If we still have old nodes, use them
next->list->RemoveNode(next->listnode);
list->InsertNode(next->listnode);
next->list = list;
next->sector = s;
next = next->next;
}else{
CPtrNode *node = list->InsertItem(this);
m_entryInfoList.InsertItem(list, node, s);
}
#ifdef FIX_BUGS
if(list)
#endif
if(next) {
// If we still have old nodes, use them
next->list->RemoveNode(next->listnode);
list->InsertNode(next->listnode);
next->list = list;
next->sector = s;
next = next->next;
} else {
CPtrNode *node = list->InsertItem(this);
m_entryInfoList.InsertItem(list, node, s);
}
}
// Remove old nodes we no longer need

View File

@ -4348,13 +4348,15 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg)
}
#endif
if (quickJackedAssoc) {
dragAssoc->SetDeleteCallback(PedSetQuickDraggedOutCarPositionCB, ped);
} else {
dragAssoc->SetDeleteCallback(PedSetDraggedOutCarPositionCB, ped);
if (ped->CanSetPedState())
CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_GETUP1, 1000.0f);
}
#ifdef FIX_BUGS
if(dragAssoc)
#endif
if(quickJackedAssoc) {
dragAssoc->SetDeleteCallback(PedSetQuickDraggedOutCarPositionCB, ped);
} else {
dragAssoc->SetDeleteCallback(PedSetDraggedOutCarPositionCB, ped);
if(ped->CanSetPedState()) CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_GETUP1, 1000.0f);
}
ped->ReplaceWeaponWhenExitingVehicle();

View File

@ -2244,6 +2244,9 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
enterDoor = DOOR_REAR_LEFT;
break;
default:
#ifdef FIX_BUGS
enterDoor = DOOR_BONNET;
#endif
break;
}
@ -2356,7 +2359,7 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
case CAR_DOOR_RR: door = DOOR_REAR_RIGHT; pedInSeat = veh->pPassengers[2]; break;
case CAR_DOOR_LF: door = DOOR_FRONT_LEFT; pedInSeat = veh->pDriver; break;
case CAR_DOOR_LR: door = DOOR_REAR_LEFT; pedInSeat = veh->pPassengers[1]; break;
default: assert(0);
default: assert(0); debug("This shouldn't happen"); return;
}
if (ped->m_fHealth == 0.0f || CPad::GetPad(0)->ArePlayerControlsDisabled() && pedInSeat && pedInSeat->IsPlayer()) {
@ -2554,6 +2557,9 @@ CPed::PedAnimPullPedOutCB(CAnimBlendAssociation* animAssoc, void* arg)
case PEDTYPE_PLAYER4:
padNo = 3;
break;
default:
padNo = 0;
break;
}
CPad *pad = CPad::GetPad(padNo);
@ -2657,6 +2663,9 @@ CPed::PedAnimGetInCB(CAnimBlendAssociation *animAssoc, void *arg)
enterDoor = DOOR_REAR_LEFT;
break;
default:
#ifdef FIX_BUGS
enterDoor = DOOR_BONNET;
#endif
break;
}
if (!veh->IsDoorMissing(enterDoor)) {
@ -2752,12 +2761,15 @@ CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *animAssoc, void *arg)
veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_CAR_CLOSEDOOR_LHS, 1.0f);
eDoors door;
switch (ped->m_vehDoor) {
case CAR_DOOR_RF: door = DOOR_FRONT_RIGHT; break;
case CAR_DOOR_RR: door = DOOR_REAR_RIGHT; break;
case CAR_DOOR_LF: door = DOOR_FRONT_LEFT; break;
case CAR_DOOR_LR: door = DOOR_REAR_LEFT; break;
default: assert(0);
switch(ped->m_vehDoor) {
case CAR_DOOR_RF: door = DOOR_FRONT_RIGHT; break;
case CAR_DOOR_RR: door = DOOR_REAR_RIGHT; break;
case CAR_DOOR_LF: door = DOOR_FRONT_LEFT; break;
case CAR_DOOR_LR: door = DOOR_REAR_LEFT; break;
default:
assert(0);
debug("This shouldn't happen");
return;
}
if (veh->Damage.GetDoorStatus(door) == DOOR_STATUS_SWINGING)
@ -2926,6 +2938,9 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg)
door = DOOR_REAR_LEFT;
break;
default:
#ifdef FIX_BUGS
door = DOOR_BONNET;
#endif
break;
}
bool closeDoor = !veh->IsDoorMissing(door);
@ -2947,6 +2962,12 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg)
case PEDTYPE_PLAYER4:
padNo = 3;
break;
default:
#ifdef FIX_BUGS
padNo = 0;
debug("This shouldn't happen");
#endif
break;
}
CPad* pad = CPad::GetPad(padNo);
bool engineIsIntact = veh->IsCar() && ((CAutomobile*)veh)->Damage.GetEngineStatus() >= 225;
@ -3285,6 +3306,9 @@ CPed::SetCarJack(CVehicle* car)
{
uint8 doorFlag;
eDoors door;
#ifdef FIX_BUGS
door = DOOR_BONNET;
#endif
CPed *pedInSeat = nil;
if (car->IsBoat())
@ -3440,8 +3464,10 @@ CPed::BeingDraggedFromCar(void)
if (!dontRunAnim)
m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, enterAnim);
m_pVehicleAnim->SetFinishCallback(PedSetDraggedOutCarCB, this);
#ifdef FIX_BUGS
if(m_pVehicleAnim)
#endif
m_pVehicleAnim->SetFinishCallback(PedSetDraggedOutCarCB, this);
lineUpType = LINE_UP_TO_CAR_START;
} else if (m_pVehicleAnim->currentTime <= 1.4f) {
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);

View File

@ -745,6 +745,9 @@ CWaterLevel::RenderWater()
if ( fHugeSectorDistToCamSqr >= SQR(500.0f) /*fHugeSectorNearDist*/ )
{
float fZ;
#ifdef FIX_BUGS
fZ = 0.f;
#endif
if ( aWaterBlockList[2*x+0][2*y+0] >= 0 )
fZ = ms_aWaterZs[ aWaterBlockList[2*x+0][2*y+0] ];

View File

@ -251,6 +251,9 @@ GenericLoad()
uint8 *buf;
int32 file;
uint32 size;
#ifdef FIX_BUGS
size = 0;
#endif
#ifdef MISSION_REPLAY
int8 qs;
#endif

View File

@ -100,7 +100,12 @@ void CCarGenerator::DoInternalProcessing()
// So game crashes if it's bike :D
if (((CVehicleModelInfo*)CModelInfo::GetModelInfo(m_nModelIndex))->m_vehicleType != VEHICLE_TYPE_BIKE)
pCar = new CAutomobile(m_nModelIndex, PARKED_VEHICLE);
#ifdef FIX_BUGS
else {
debug("This shouldn't happen");
return;
}
#endif
pCar->SetIsStatic(false);
pCar->bEngineOn = false;
pos.z += pCar->GetDistanceFromCentreOfMassToBaseOfModel();