Subversion Repositories Games.Carmageddon

Rev

Rev 18 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 18 Rev 20
Line 1... Line 1...
1
#include "crush.h"
1
#include "crush.h"
2
#include "brender.h"
2
#include "brender/brender.h"
3
#include "car.h"
3
#include "car.h"
4
#include "displays.h"
4
#include "displays.h"
5
#include "globvars.h"
5
#include "globvars.h"
6
#include "globvrkm.h"
6
#include "globvrkm.h"
7
#include "globvrpb.h"
7
#include "globvrpb.h"
Line 483... Line 483...
483
                    }
483
                    }
484
                }
484
                }
485
                memcpy(the_car_actor->actor->model->vertices,
485
                memcpy(the_car_actor->actor->model->vertices,
486
                    the_car_actor->undamaged_vertices,
486
                    the_car_actor->undamaged_vertices,
487
                    the_car_actor->actor->model->nvertices * sizeof(br_vertex));
487
                    the_car_actor->actor->model->nvertices * sizeof(br_vertex));
-
 
488
                // FIXME: BrModelUpdate(..., BR_MODU_VERTEX_COLOURS | BR_MODU_VERTEX_POSITIONS) fails on TELL_ME_IF_WE_PASS_THIS_WAY
488
                BrModelUpdate(the_car_actor->actor->model, BR_MODU_VERTEX_COLOURS | BR_MODU_VERTEX_POSITIONS);
489
                // BrModelUpdate(the_car_actor->actor->model, BR_MODU_VERTEX_COLOURS | BR_MODU_VERTEX_POSITIONS);
-
 
490
                BrModelUpdate(the_car_actor->actor->model, BR_MODU_ALL);
489
                if (pipe_vertex_count != 0 && IsActionReplayAvailable()) {
491
                if (pipe_vertex_count != 0 && IsActionReplayAvailable()) {
490
                    PipeSingleModelGeometry(pCar->car_ID, j, pipe_vertex_count, pipe_array);
492
                    PipeSingleModelGeometry(pCar->car_ID, j, pipe_vertex_count, pipe_array);
491
                }
493
                }
492
            }
494
            }
493
        }
495
        }
Line 659... Line 661...
659
    }
661
    }
660
}
662
}
661
 
663
 
662
// IDA: void __usercall DoPratcamHit(br_vector3 *pHit_vector@<EAX>)
664
// IDA: void __usercall DoPratcamHit(br_vector3 *pHit_vector@<EAX>)
663
void DoPratcamHit(br_vector3* pHit_vector) {
665
void DoPratcamHit(br_vector3* pHit_vector) {
664
    int strength_modifier;
666
    //int strength_modifier; // Pierre-Marie Baty -- unused variable
665
    br_scalar strength;
667
    //br_scalar strength; // Pierre-Marie Baty -- unused variable
666
    LOG_TRACE("(%p)", pHit_vector);
668
    LOG_TRACE("(%p)", pHit_vector);
667
 
669
 
668
    strength = BrVector3LengthSquared(pHit_vector);
-
 
669
    if (strength > 0.2f) {
-
 
670
        strength_modifier = 8;
-
 
671
    } else if (strength > 0.015f) {
-
 
672
        strength_modifier = 4;
-
 
673
    } else if (strength >= 0.001f) {
-
 
674
        strength_modifier = 0;
-
 
675
    } else {
-
 
676
        return;
670
    STUB_ONCE();
677
    }
-
 
678
    if (fabsf(pHit_vector->v[2]) >= fabsf(pHit_vector->v[0])) {
-
 
679
        if (pHit_vector->v[2] >= 0.f) {
-
 
680
            PratcamEvent(14 + strength_modifier);
-
 
681
        } else {
-
 
682
            PratcamEvent(13 + strength_modifier);
-
 
683
        }
-
 
684
    } else {
-
 
685
        if (pHit_vector->v[0] >= 0.f) {
-
 
686
            PratcamEvent(15 + strength_modifier);
-
 
687
        } else {
-
 
688
            PratcamEvent(16 + strength_modifier);
-
 
689
        }
-
 
690
    }
-
 
691
}
671
}
692
 
672
 
693
// IDA: void __usercall DamageSystems(tCar_spec *pCar@<EAX>, br_vector3 *pImpact_point@<EDX>, br_vector3 *pEnergy_vector@<EBX>, int pWas_hitting_a_car@<ECX>)
673
// IDA: void __usercall DamageSystems(tCar_spec *pCar@<EAX>, br_vector3 *pImpact_point@<EDX>, br_vector3 *pEnergy_vector@<EBX>, int pWas_hitting_a_car@<ECX>)
694
void DamageSystems(tCar_spec* pCar, br_vector3* pImpact_point, br_vector3* pEnergy_vector, int pWas_hitting_a_car) {
674
void DamageSystems(tCar_spec* pCar, br_vector3* pImpact_point, br_vector3* pEnergy_vector, int pWas_hitting_a_car) {
695
    int i;
675
    int i;
Line 1173... Line 1153...
1173
                    }
1153
                    }
1174
                    NetGuaranteedSendMessageToEverybody(gCurrent_net_game, message, NULL);
1154
                    NetGuaranteedSendMessageToEverybody(gCurrent_net_game, message, NULL);
1175
                    NetEarnCredits(NetPlayerFromCar(culprit), credits);
1155
                    NetEarnCredits(NetPlayerFromCar(culprit), credits);
1176
                } else {
1156
                } else {
1177
                    PratcamEvent(32);
1157
                    PratcamEvent(32);
1178
                    DoFancyHeadup(kFancyHeadupYouWastedEm);
1158
                    DoFancyHeadup(11);
1179
                    credits_squared = sqr(0.7f / victim->car_model_actors[victim->principal_car_actor].crush_data.softness_factor) * gWasted_creds[gProgram_state.skill_level] + 50.0f;
1159
                    credits_squared = sqr(0.7f / victim->car_model_actors[victim->principal_car_actor].crush_data.softness_factor) * gWasted_creds[gProgram_state.skill_level] + 50.0f;
1180
                    credits = 100 * (int)(credits_squared / 100.0);
1160
                    credits = 100 * (int)(credits_squared / 100.0);
1181
                    AwardTime(gWasted_time[gProgram_state.skill_level]);
1161
                    AwardTime(gWasted_time[gProgram_state.skill_level]);
1182
                    EarnCredits(credits);
1162
                    EarnCredits(credits);
1183
                    if (victim->can_be_stolen && !gOpponents[victim->index].dead
1163
                    if (victim->can_be_stolen && !gOpponents[victim->index].dead
Line 1238... Line 1218...
1238
                        if (gNet_mode == eNet_mode_none) {
1218
                        if (gNet_mode == eNet_mode_none) {
1239
                            time = 5 * (int)((total_units_of_damage * gCar_time_value[gProgram_state.skill_level] + 2.5f) / 5.0f);
1219
                            time = 5 * (int)((total_units_of_damage * gCar_time_value[gProgram_state.skill_level] + 2.5f) / 5.0f);
1240
                            AwardTime(MIN(time, 90));
1220
                            AwardTime(MIN(time, 90));
1241
                            if (pCar2) {
1221
                            if (pCar2) {
1242
                                if (head_on) {
1222
                                if (head_on) {
1243
                                    DoFancyHeadup(kFancyHeadupHeadOnBonus);
1223
                                    DoFancyHeadup(10);
1244
                                } else if (bonus_level <= 2) {
1224
                                } else if (bonus_level <= 2) {
1245
                                    if (bonus_level > 1) {
1225
                                    if (bonus_level > 1) {
1246
                                        DoFancyHeadup(kFancyHeadupExtraStyleBonus);
1226
                                        DoFancyHeadup(2);
1247
                                    }
1227
                                    }
1248
                                } else {
1228
                                } else {
1249
                                    DoFancyHeadup(kFancyHeadupBonusForArtisticImpression);
1229
                                    DoFancyHeadup(3);
1250
                                }
1230
                                }
1251
                            }
1231
                            }
1252
                        }
1232
                        }
1253
                    }
1233
                    }
1254
                    for (i = 0; i < COUNT_OF(victim->damage_units); i++) {
1234
                    for (i = 0; i < COUNT_OF(victim->damage_units); i++) {