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 2... | Line 2... | ||
2 | 2 | ||
3 | #include "car.h" |
3 | #include "car.h" |
4 | #include "brender.h" |
4 | #include "brender/brender.h" |
5 | #include "brucetrk.h" |
5 | #include "brucetrk.h" |
6 | #include "car.h" |
6 | #include "car.h" |
7 | #include "constants.h" |
7 | #include "constants.h" |
8 | #include "controls.h" |
8 | #include "controls.h" |
9 | #include "crush.h" |
9 | #include "crush.h" |
Line 27... | Line 27... | ||
27 | #include "raycast.h" |
27 | #include "raycast.h" |
28 | #include "replay.h" |
28 | #include "replay.h" |
29 | #include "skidmark.h" |
29 | #include "skidmark.h" |
30 | #include "sound.h" |
30 | #include "sound.h" |
31 | #include "spark.h" |
31 | #include "spark.h" |
32 | #include "structur.h" |
- | |
33 | #include "trig.h" |
32 | #include "trig.h" |
34 | #include "utility.h" |
33 | #include "utility.h" |
35 | #include "world.h" |
34 | #include "world.h" |
36 | #include <math.h> |
35 | #include <math.h> |
37 | #include <stdlib.h> |
36 | #include <stdlib.h> |
Line 885... | Line 884... | ||
885 | if (fabsf(c->curvature) > c->maxcurve / 2.0f && c->gear < 2 && c->gear && c->traction_control) { |
884 | if (fabsf(c->curvature) > c->maxcurve / 2.0f && c->gear < 2 && c->gear && c->traction_control) { |
886 | ts = 0.7f; |
885 | ts = 0.7f; |
887 | } else if (c->joystick.acc < 0) { |
886 | } else if (c->joystick.acc < 0) { |
888 | ts = (br_scalar) 1.2; // Pierre-Marie Baty -- added type cast |
887 | ts = (br_scalar) 1.2; // Pierre-Marie Baty -- added type cast |
889 | } else { |
888 | } else { |
890 | ts = c->joystick.acc / 54613. |
889 | ts = c->joystick.acc / 54613.0; |
- | 890 | LOG_PANIC("ooo"); |
|
891 | } |
891 | } |
892 | 892 | ||
893 | torque = c->engine_power_multiplier * ts * gEngine_powerup_factor[c->power_up_levels[1]]; |
893 | torque = c->engine_power_multiplier * ts * gEngine_powerup_factor[c->power_up_levels[1]]; |
894 | if (c->damage_units[0].damage_level > 10) { |
894 | if (c->damage_units[0].damage_level > 10) { |
895 | torque = (1.0f - (double)(c->damage_units[0].damage_level - 10) / 100.0f) * torque; |
895 | torque = (1.0f - (double)(c->damage_units[0].damage_level - 10) / 100.0f) * torque; |
Line 1079... | Line 1079... | ||
1079 | } |
1079 | } |
1080 | } |
1080 | } |
1081 | 1081 | ||
1082 | // IDA: void __usercall GetNetPos(tCar_spec *pCar@<EAX>) |
1082 | // IDA: void __usercall GetNetPos(tCar_spec *pCar@<EAX>) |
1083 | void GetNetPos(tCar_spec* pCar) { |
1083 | void GetNetPos(tCar_spec* pCar) { |
1084 |
|
1084 | //int j; // Pierre-Marie Baty -- unused variable |
1085 |
|
1085 | //float amount; // Pierre-Marie Baty -- unused variable |
1086 | br_scalar total_deflection |
1086 | //br_scalar total_deflection; // Pierre-Marie Baty -- unused variable |
1087 | LOG_TRACE("(%p)", pCar); |
1087 | LOG_TRACE("(%p)", pCar); |
1088 | - | ||
1089 | if (gNet_mode == eNet_mode_host && pCar->last_car_car_collision > pCar->message.cc_coll_time) { |
- | |
1090 | pCar->message.type = 0; |
- | |
1091 | pCar->dt = -1.0f; |
- | |
1092 | return; |
- | |
1093 | } |
- | |
1094 | if (fabsf(pCar->message.omega.v[0]) > 10000.0 |
- | |
1095 | || fabsf(pCar->message.omega.v[1]) > 10000.0 |
- | |
1096 | || fabsf(pCar->message.omega.v[2]) > 10000.0 |
- | |
1097 | || fabsf(pCar->message.omega.v[0]) > 10000.0 |
- | |
1098 | || fabsf(pCar->message.omega.v[1]) > 10000.0 |
- | |
1099 | || fabsf(pCar->message.omega.v[2]) > 10000.0) { |
- | |
1100 | BrVector3SetFloat(&pCar->message.omega, 0.0, 0.0, 0.0); |
- | |
1101 | BrVector3SetFloat(&pCar->message.v, 0.0, 0.0, 0.0); |
- | |
1102 | } |
- | |
1103 | GetExpandedMatrix(&pCar->car_master_actor->t.t.mat, &pCar->message.mat); |
- | |
1104 | if (gNet_mode == eNet_mode_client) { |
- | |
1105 | BrMatrix34Copy(&pCar->oldmat, &pCar->car_master_actor->t.t.mat); |
- | |
1106 | } |
- | |
1107 | BrVector3Copy(&pCar->v, &pCar->message.v); |
- | |
1108 | BrVector3Copy(&pCar->omega, &pCar->message.omega); |
- | |
1109 | - | ||
1110 | if (pCar->driver > eDriver_non_car) { |
- | |
1111 | pCar->curvature = pCar->message.curvature * pCar->maxcurve / 32767.0f; |
- | |
1112 | - | ||
1113 | for (j = 0; j < COUNT_OF(pCar->oldd); j++) { |
- | |
1114 | pCar->oldd[j] = (pCar->message.d[j] * pCar->susp_height[j >> 1]) / 255.0f; |
- | |
1115 | } |
- | |
1116 | if (pCar->driver == eDriver_oppo || pCar->repair_time >= pCar->message.repair_time) { |
- | |
1117 | for (j = 0; j < COUNT_OF(pCar->damage_units); j++) { |
- | |
1118 | pCar->damage_units[j].damage_level = pCar->message.damage[j]; |
- | |
1119 | } |
- | |
1120 | SortOutSmoke(pCar); |
- | |
1121 | } else { |
- | |
1122 | if (pCar->message.repair_time - pCar->repair_time < 100000) { |
- | |
1123 | amount = RepairCar2(pCar, pCar->message.repair_time - pCar->repair_time, &total_deflection); |
- | |
1124 |
|
1088 | NOT_IMPLEMENTED(); |
1125 | TotallyRepairACar(pCar); |
- | |
1126 | pCar->repair_time = pCar->message.repair_time; |
- | |
1127 | } |
- | |
1128 | for (j = 0; j < COUNT_OF(pCar->damage_units); j++) { |
- | |
1129 | pCar->damage_units[j].damage_level = pCar->message.damage[j]; |
- | |
1130 | } |
- | |
1131 | SetSmokeLastDamageLevel(pCar); |
- | |
1132 | StopCarSmoking(pCar); |
- | |
1133 | } |
- | |
1134 | if (pCar->driver == eDriver_net_human) { |
- | |
1135 | pCar->revs = pCar->message.revs; |
- | |
1136 | } |
- | |
1137 | if (pCar->driver >= eDriver_net_human) { |
- | |
1138 | pCar->bounds[1].min.v[2] = pCar->message.front; |
- | |
1139 | pCar->bounds[1].max.v[2] = pCar->message.back; |
- | |
1140 | } |
- | |
1141 | if (pCar->driver != eDriver_local_human) { |
- | |
1142 | for (j = 0; j < COUNT_OF(pCar->wheel_dam_offset); j++) { |
- | |
1143 | pCar->wheel_dam_offset[j] = pCar->message.wheel_dam_offset[j]; |
- | |
1144 | } |
- | |
1145 | } |
- | |
1146 | GetFacesInBox((tCollision_info*)pCar); |
- | |
1147 | } |
- | |
1148 | - | ||
1149 | pCar->message.type = 0; |
- | |
1150 | pCar->last_car_car_collision = pCar->message.cc_coll_time; |
- | |
1151 | } |
1089 | } |
1152 | 1090 | ||
1153 | // IDA: void __usercall ApplyPhysicsToCars(tU32 last_frame_time@<EAX>, tU32 pTime_difference@<EDX>) |
1091 | // IDA: void __usercall ApplyPhysicsToCars(tU32 last_frame_time@<EAX>, tU32 pTime_difference@<EDX>) |
1154 | void ApplyPhysicsToCars(tU32 last_frame_time, tU32 pTime_difference) { |
1092 | void ApplyPhysicsToCars(tU32 last_frame_time, tU32 pTime_difference) { |
1155 | //br_vector3 minus_k; // Pierre-Marie Baty -- unused variable |
1093 | //br_vector3 minus_k; // Pierre-Marie Baty -- unused variable |
Line 1196... | Line 1134... | ||
1196 | BrVector3Copy(&gCar_to_view->old_v, &gCar_to_view->v); |
1134 | BrVector3Copy(&gCar_to_view->old_v, &gCar_to_view->v); |
1197 | } |
1135 | } |
1198 | for (i = 0; i < gNum_active_cars; i++) { |
1136 | for (i = 0; i < gNum_active_cars; i++) { |
1199 | car = gActive_car_list[i]; |
1137 | car = gActive_car_list[i]; |
1200 | car->dt = -1.f; |
1138 | car->dt = -1.f; |
1201 | if (car->message.type == |
1139 | if (car->message.type == 15 && car->message.time >= gLast_mechanics_time && gLast_mechanics_time + harness_game_config.physics_step_time >= car->message.time) { |
1202 | // time between car message and next mechanics |
- | |
1203 | car->dt = (gLast_mechanics_time + harness_game_config.physics_step_time - car->message.time) / 1000. |
1140 | car->dt = (double)(gLast_mechanics_time + harness_game_config.physics_step_time - car->message.time) / 1000.0; |
1204 | // if the time between car message and next mechanics is about equal to timestep |
- | |
1205 | if ( |
1141 | if (gDt - 0.0001f <= car->dt) { |
1206 | GetNetPos(car); |
1142 | GetNetPos(car); |
1207 | } else if (gNet_mode == eNet_mode_host) { |
1143 | } else if (gNet_mode == eNet_mode_host) { |
1208 | car->dt = -1.f; |
1144 | car->dt = -1.f; |
1209 | } else { |
1145 | } else { |
1210 | for (dam_index = 0; dam_index < COUNT_OF(car->damage_units); dam_index++) { |
1146 | for (dam_index = 0; dam_index < COUNT_OF(car->damage_units); dam_index++) { |
Line 1232... | Line 1168... | ||
1232 | } |
1168 | } |
1233 | for (i = 0; i < gNum_active_non_cars; i++) { |
1169 | for (i = 0; i < gNum_active_non_cars; i++) { |
1234 | non_car = gActive_non_car_list[i]; |
1170 | non_car = gActive_non_car_list[i]; |
1235 | if (!non_car->collision_info.doing_nothing_flag) { |
1171 | if (!non_car->collision_info.doing_nothing_flag) { |
1236 | non_car->collision_info.dt = -1.f; |
1172 | non_car->collision_info.dt = -1.f; |
1237 | if (non_car->collision_info.message.type == |
1173 | if (non_car->collision_info.message.type == 16 && non_car->collision_info.message.time >= gLast_mechanics_time && gLast_mechanics_time + harness_game_config.physics_step_time >= non_car->collision_info.message.time) { |
1238 | non_car->collision_info.dt = (gLast_mechanics_time + harness_game_config.physics_step_time - non_car->collision_info.message.time) / 1000.0f; |
1174 | non_car->collision_info.dt = (gLast_mechanics_time + harness_game_config.physics_step_time - non_car->collision_info.message.time) / 1000.0f; |
1239 | GetNetPos((tCar_spec*)non_car); |
1175 | GetNetPos((tCar_spec*)non_car); |
1240 | } |
1176 | } |
1241 | if (non_car->collision_info.box_face_ref != gFace_num__car |
1177 | if (non_car->collision_info.box_face_ref != gFace_num__car |
1242 | && (non_car->collision_info.box_face_ref != gFace_num__car - 1 |
1178 | && (non_car->collision_info.box_face_ref != gFace_num__car - 1 |
Line 1484... | Line 1420... | ||
1484 | // IDA: void __cdecl ToggleControls() |
1420 | // IDA: void __cdecl ToggleControls() |
1485 | void ToggleControls(void) { |
1421 | void ToggleControls(void) { |
1486 | LOG_TRACE("()"); |
1422 | LOG_TRACE("()"); |
1487 | 1423 | ||
1488 | gControl__car++; |
1424 | gControl__car++; |
1489 | if (ControlCar[gControl__car] == |
1425 | if (ControlCar[gControl__car] == 0) { |
1490 | gControl__car = 0; |
1426 | gControl__car = 0; |
1491 | } |
1427 | } |
1492 | switch (gControl__car) { |
1428 | switch (gControl__car) { |
1493 | case 0: |
1429 | case 0: |
1494 | NewTextHeadupSlot(4, 0, 500, -1, "Original Controls"); |
1430 | NewTextHeadupSlot(4, 0, 500, -1, "Original Controls"); |
Line 1509... | Line 1445... | ||
1509 | } |
1445 | } |
1510 | 1446 | ||
1511 | // IDA: void __usercall ControlCar2(tCar_spec *c@<EAX>, br_scalar dt) |
1447 | // IDA: void __usercall ControlCar2(tCar_spec *c@<EAX>, br_scalar dt) |
1512 | void ControlCar2(tCar_spec* c, br_scalar dt) { |
1448 | void ControlCar2(tCar_spec* c, br_scalar dt) { |
1513 | LOG_TRACE("(%p, %f)", c, dt); |
1449 | LOG_TRACE("(%p, %f)", c, dt); |
1514 | - | ||
1515 |
|
1450 | NOT_IMPLEMENTED(); |
1516 | if (c->keys.acc) { |
- | |
1517 | c->acc_force = 7.f * c->M; |
- | |
1518 | } |
- | |
1519 | if (c->keys.dec) { |
- | |
1520 | c->acc_force = -7.f * c->M; |
- | |
1521 | } |
- | |
1522 | if (c->keys.left) { |
- | |
1523 | if (c->turn_speed < 0.f) { |
- | |
1524 | c->turn_speed = 0.f; |
- | |
1525 | } |
- | |
1526 | if (c->curvature >= 0.f) { |
- | |
1527 | c->turn_speed += dt / 0.04f * (0.05f / (5.f + BrVector3Length(&c->v)) / 2.f); |
- | |
1528 | } else { |
- | |
1529 | c->turn_speed += 0.01f * dt / 0.04f / 2.f; |
- | |
1530 | } |
- | |
1531 | } |
- | |
1532 | if (c->keys.right) { |
- | |
1533 | if (c->turn_speed > 0.f) { |
- | |
1534 | c->turn_speed = 0.f; |
- | |
1535 | } |
- | |
1536 | if (c->curvature <= 0.f) { |
- | |
1537 | c->turn_speed -= dt / 0.04f * (0.05f / (5.f + BrVector3Length(&c->v)) / 2.f); |
- | |
1538 | } else { |
- | |
1539 | c->turn_speed -= 0.01f * dt / 0.04f / 2.f; |
- | |
1540 | } |
- | |
1541 | } |
- | |
1542 | if (!c->keys.left && !c->keys.right) { |
- | |
1543 | c->turn_speed = 0.f; |
- | |
1544 | } |
- | |
1545 | c->curvature += c->turn_speed; |
- | |
1546 | if (c->curvature > c->maxcurve) { |
- | |
1547 | c->curvature = c->maxcurve; |
- | |
1548 | } |
- | |
1549 | if (c->curvature < -c->maxcurve) { |
- | |
1550 | c->curvature = -c->maxcurve; |
- | |
1551 | } |
- | |
1552 | } |
1451 | } |
1553 | 1452 | ||
1554 | // IDA: void __usercall ControlCar3(tCar_spec *c@<EAX>, br_scalar dt) |
1453 | // IDA: void __usercall ControlCar3(tCar_spec *c@<EAX>, br_scalar dt) |
1555 | void ControlCar3(tCar_spec* c, br_scalar dt) { |
1454 | void ControlCar3(tCar_spec* c, br_scalar dt) { |
1556 | LOG_TRACE("(%p, %f)", c, dt); |
1455 | LOG_TRACE("(%p, %f)", c, dt); |
1557 | - | ||
1558 |
|
1456 | NOT_IMPLEMENTED(); |
1559 | if (c->turn_speed < 0.f) { |
- | |
1560 | c->turn_speed = 0.f; |
- | |
1561 | } |
- | |
1562 | if (c->curvature >= 0.f && c->omega.v[1] >= 0.f) { |
- | |
1563 | c->turn_speed += dt / 0.04f * (0.05f / (5.f + BrVector3Length(&c->v)) / 2.f) * 0.75f; |
- | |
1564 | } else { |
- | |
1565 | c->turn_speed += 0.01f * dt / 0.04f / 2.f * 3.f; |
- | |
1566 | } |
- | |
1567 | } |
- | |
1568 | - | ||
1569 | if (c->keys.right) { |
- | |
1570 | if (c->turn_speed > 0.f) { |
- | |
1571 | c->turn_speed = 0.f; |
- | |
1572 | } |
- | |
1573 | if (c->curvature <= 0.f && c->omega.v[1] <= 0.f) { |
- | |
1574 | c->turn_speed -= dt / 0.04f * (0.05f / (5.f + BrVector3Length(&c->v)) / 2.f) * 0.75f; |
- | |
1575 | } else { |
- | |
1576 | c->turn_speed -= 0.01f * dt / 0.04f / 2.f * 3.f; |
- | |
1577 | } |
- | |
1578 | } |
- | |
1579 | if (!c->keys.left && !c->keys.right) { |
- | |
1580 | c->turn_speed = 0.f; |
- | |
1581 | } |
- | |
1582 | c->curvature += c->turn_speed; |
- | |
1583 | if (c->curvature > c->maxcurve) { |
- | |
1584 | c->curvature = c->maxcurve; |
- | |
1585 | } |
- | |
1586 | if (c->curvature < -c->maxcurve) { |
- | |
1587 | c->curvature = -c->maxcurve; |
- | |
1588 | } |
- | |
1589 | } |
1457 | } |
1590 | 1458 | ||
1591 | // IDA: void __usercall ControlCar4(tCar_spec *c@<EAX>, br_scalar dt) |
1459 | // IDA: void __usercall ControlCar4(tCar_spec *c@<EAX>, br_scalar dt) |
1592 | void ControlCar4(tCar_spec* c, br_scalar dt) { |
1460 | void ControlCar4(tCar_spec* c, br_scalar dt) { |
1593 | //br_scalar ts; // Pierre-Marie Baty -- unused variable |
1461 | //br_scalar ts; // Pierre-Marie Baty -- unused variable |
Line 1643... | Line 1511... | ||
1643 | } |
1511 | } |
1644 | 1512 | ||
1645 | // IDA: void __usercall ControlCar5(tCar_spec *c@<EAX>, br_scalar dt) |
1513 | // IDA: void __usercall ControlCar5(tCar_spec *c@<EAX>, br_scalar dt) |
1646 | void ControlCar5(tCar_spec* c, br_scalar dt) { |
1514 | void ControlCar5(tCar_spec* c, br_scalar dt) { |
1647 | LOG_TRACE("(%p, %f)", c, dt); |
1515 | LOG_TRACE("(%p, %f)", c, dt); |
1648 | - | ||
1649 | c->acc_force = 0.f; |
- | |
1650 | if (c->keys.acc) { |
- | |
1651 | c->acc_force = 7.f * c->M; |
- | |
1652 | } |
- | |
1653 | if (c->keys.dec) { |
- | |
1654 | c->acc_force = -7.f * c->M; |
- | |
1655 | } |
- | |
1656 | if (c->keys.left) { |
- | |
1657 | if (c->turn_speed < 0.f) { |
- | |
1658 | c->turn_speed = 0.f; |
- | |
1659 | } |
- | |
1660 | if (c->curvature >= 0) { |
- | |
1661 | c->turn_speed += dt / 0.04f * (0.05f / (5.f + BrVector3Length(&c->v)) / 2.f) * 0.5f; |
- | |
1662 | } else { |
- | |
1663 | c->turn_speed += 0.01f * dt / 0.04f / 2.f * .5f; |
- | |
1664 | } |
- | |
1665 | } |
- | |
1666 | if (c->keys.right) { |
- | |
1667 | if (c->turn_speed > 0.f) { |
- | |
1668 | c->turn_speed = 0.f; |
- | |
1669 | } |
- | |
1670 | if (c->curvature <= 0) { |
- | |
1671 | c->turn_speed -= dt / 0.04f * (0.05f / (5.f + BrVector3Length(&c->v)) / 2.f) * 0.5f; |
- | |
1672 | } else { |
- | |
1673 | c->turn_speed -= 0.01f * dt / 0.04f / 2.f * .5f; |
- | |
1674 | } |
- | |
1675 | } |
- | |
1676 | if (!c->keys.left && !c->keys.right) { |
- | |
1677 | c->turn_speed = 0.f; |
- | |
1678 | if (c->curvature < 0.f && !c->keys.holdw) { |
- | |
1679 | c->curvature += dt / 0.04f * 0.05f / (5.f + BrVector3Length(&c->v)) / 2.f * 4.f; |
- | |
1680 | if (c->curvature > 0.f) { |
- | |
1681 | c->curvature = 0.f; |
- | |
1682 | } |
- | |
1683 | } else if (c->curvature > 0.f && !c->keys.holdw) { |
- | |
1684 | c->curvature -= dt / 0.04f * 0.05f / (5.f + BrVector3Length(&c->v)) / 2.f * 4.f; |
- | |
1685 | if (c->curvature < 0.f) { |
- | |
1686 | c->curvature = 0.f; |
- | |
1687 | } |
- | |
1688 | } |
- | |
1689 | } |
- | |
1690 | c->curvature += c->turn_speed; |
- | |
1691 | if (c->curvature > c->maxcurve) { |
- | |
1692 | c->curvature = c->maxcurve; |
- | |
1693 | } |
- | |
1694 | if (c->curvature < -c->maxcurve) { |
- | |
1695 | c->curvature = -c->maxcurve; |
- | |
1696 | } |
- | |
1697 |
|
1516 | NOT_IMPLEMENTED(); |
1698 | } |
1517 | } |
1699 | 1518 | ||
1700 | // IDA: void __usercall ControlCar1(tCar_spec *c@<EAX>, br_scalar dt) |
1519 | // IDA: void __usercall ControlCar1(tCar_spec *c@<EAX>, br_scalar dt) |
1701 | void ControlCar1(tCar_spec* c, br_scalar dt) { |
1520 | void ControlCar1(tCar_spec* c, br_scalar dt) { |
1702 | LOG_TRACE("(%p, %f)", c, dt); |
1521 | LOG_TRACE("(%p, %f)", c, dt); |
1703 | - | ||
1704 |
|
1522 | NOT_IMPLEMENTED(); |
1705 | if (c->keys.acc) { |
- | |
1706 | c->acc_force = 7.f * c->M; |
- | |
1707 | } |
- | |
1708 | if (c->keys.dec) { |
- | |
1709 | c->acc_force = -7.f * c->M; |
- | |
1710 | } |
- | |
1711 | if (c->keys.left) { |
- | |
1712 | if (c->curvature >= 0.f) { |
- | |
1713 | c->curvature += dt / 0.04f * 0.05f / (5.f + BrVector3Length(&c->v)); |
- | |
1714 | } else { |
- | |
1715 | c->curvature += 0.01f * dt / 0.04f; |
- | |
1716 | } |
- | |
1717 | } |
- | |
1718 | if (c->keys.right) { |
- | |
1719 | if (c->curvature <= 0.f) { |
- | |
1720 | c->curvature -= dt / 0.04f * 0.05f / (5.f + BrVector3Length(&c->v)); |
- | |
1721 | } else { |
- | |
1722 | c->curvature -= 0.01f * dt / 0.04f; |
- | |
1723 | } |
- | |
1724 | } |
- | |
1725 | if (c->curvature > c->maxcurve) { |
- | |
1726 | c->curvature = c->maxcurve; |
- | |
1727 | } |
- | |
1728 | if (c->curvature < -c->maxcurve) { |
- | |
1729 | c->curvature = -c->maxcurve; |
- | |
1730 | } |
- | |
1731 | } |
1523 | } |
1732 | 1524 | ||
1733 | // IDA: void __usercall setrotate(br_vector3 *wdt@<EAX>, br_matrix34 *m@<EDX>) |
1525 | // IDA: void __usercall setrotate(br_vector3 *wdt@<EAX>, br_matrix34 *m@<EDX>) |
1734 | void setrotate(br_vector3* wdt, br_matrix34* m) { |
1526 | void setrotate(br_vector3* wdt, br_matrix34* m) { |
1735 | br_euler e |
1527 | //br_euler e; // Pierre-Marie Baty -- unused variable |
1736 | LOG_TRACE("(%p, %p)", wdt, m); |
1528 | LOG_TRACE("(%p, %p)", wdt, m); |
1737 | - | ||
1738 | e.a = BR_ANGLE_RAD(wdt->v[0]); |
- | |
1739 | e.b = BR_ANGLE_RAD(wdt->v[1]); |
- | |
1740 | e.c = BR_ANGLE_RAD(wdt->v[2]); |
- | |
1741 | e.order = 0; |
- | |
1742 |
|
1529 | NOT_IMPLEMENTED(); |
1743 | } |
1530 | } |
1744 | 1531 | ||
1745 | // IDA: void __usercall RotateCar2(tCollision_info *c@<EAX>, br_scalar dt) |
1532 | // IDA: void __usercall RotateCar2(tCollision_info *c@<EAX>, br_scalar dt) |
1746 | void RotateCar2(tCollision_info* c, br_scalar dt) { |
1533 | void RotateCar2(tCollision_info* c, br_scalar dt) { |
1747 | br_vector3 wdt |
1534 | //br_vector3 wdt; // Pierre-Marie Baty -- unused variable |
1748 | br_vector3 wdt2 |
1535 | //br_vector3 wdt2; // Pierre-Marie Baty -- unused variable |
1749 | br_vector3 L |
1536 | //br_vector3 L; // Pierre-Marie Baty -- unused variable |
1750 | br_vector3 L2 |
1537 | //br_vector3 L2; // Pierre-Marie Baty -- unused variable |
1751 | br_matrix34 m |
1538 | //br_matrix34 m; // Pierre-Marie Baty -- unused variable |
1752 | LOG_TRACE("(%p, %f)", c, dt); |
1539 | LOG_TRACE("(%p, %f)", c, dt); |
1753 | - | ||
1754 | BrVector3Scale(&wdt, &c->omega, dt); |
- | |
1755 | BrVector3Negate(&wdt2, &wdt); |
- | |
1756 | BrVector3Mul(&L, &c->I, &c->omega); |
- | |
1757 | setrotate(&wdt2, &m); |
- | |
1758 | BrMatrix34ApplyV(&L2, &L, &m); |
- | |
1759 |
|
1540 | NOT_IMPLEMENTED(); |
1760 | BrMatrix34PreTranslate(&m, -c->cmpos.v[0], -c->cmpos.v[1], -c->cmpos.v[2]); |
- | |
1761 | BrMatrix34PostTranslate(&m, c->cmpos.v[0], c->cmpos.v[1], c->cmpos.v[2]); |
- | |
1762 | BrMatrix34Pre(&c->car_master_actor->t.t.mat, &m); |
- | |
1763 | BrVector3Copy(&c->oldomega, &c->omega); |
- | |
1764 | Vector3Div(&c->omega, &L2, &c->I); |
- | |
1765 | } |
1541 | } |
1766 | 1542 | ||
1767 | // IDA: void __usercall RotateCarSecondOrder(tCollision_info *c@<EAX>, br_scalar dt) |
1543 | // IDA: void __usercall RotateCarSecondOrder(tCollision_info *c@<EAX>, br_scalar dt) |
1768 | void RotateCarSecondOrder(tCollision_info* c, br_scalar dt) { |
1544 | void RotateCarSecondOrder(tCollision_info* c, br_scalar dt) { |
1769 | br_vector3 L; |
1545 | br_vector3 L; |
Line 4550... | Line 4326... | ||
4550 | MungeCarGraphics(gFrame_period); |
4326 | MungeCarGraphics(gFrame_period); |
4551 | } |
4327 | } |
4552 | 4328 | ||
4553 | // IDA: tCar_spec* __cdecl GetRaceLeader() |
4329 | // IDA: tCar_spec* __cdecl GetRaceLeader() |
4554 | tCar_spec* GetRaceLeader(void) { |
4330 | tCar_spec* GetRaceLeader(void) { |
4555 |
|
4331 | //int i; // Pierre-Marie Baty -- unused variable |
4556 |
|
4332 | //int score; // Pierre-Marie Baty -- unused variable |
4557 | tCar_spec |
4333 | //tCar_spec* car; // Pierre-Marie Baty -- unused variable |
4558 | LOG_TRACE("()"); |
4334 | LOG_TRACE("()"); |
4559 | - | ||
4560 | if ((gCurrent_net_game->type == eNet_game_type_foxy || gCurrent_net_game->type == eNet_game_type_tag) && gIt_or_fox >= 0 && gIt_or_fox < gNumber_of_net_players) { |
- | |
4561 | car = gNet_players[gIt_or_fox].car; |
- | |
4562 | } else { |
- | |
4563 | car = gNet_players[0].car; |
- | |
4564 | score = gNet_players[0].last_score_index; |
- | |
4565 | for (i = 1; i < gNumber_of_net_players; i++) { |
- | |
4566 | if (score > gNet_players[i].last_score_index) { |
- | |
4567 | score = gNet_players[i].last_score_index; |
- | |
4568 | car = gNet_players[i].car; |
- | |
4569 | } |
- | |
4570 | } |
- | |
4571 | } |
- | |
4572 |
|
4335 | NOT_IMPLEMENTED(); |
4573 | } |
4336 | } |
4574 | 4337 | ||
4575 | // IDA: void __cdecl AmIGettingBoredWatchingCameraSpin() |
4338 | // IDA: void __cdecl AmIGettingBoredWatchingCameraSpin() |
4576 | void AmIGettingBoredWatchingCameraSpin(void) { |
4339 | void AmIGettingBoredWatchingCameraSpin(void) { |
4577 |
|
4340 | //static tU32 time_of_death; // Pierre-Marie Baty -- unused variable |
4578 |
|
4341 | //static tU32 headup_timer; // Pierre-Marie Baty -- unused variable |
4579 | tCar_spec |
4342 | //tCar_spec* car; // Pierre-Marie Baty -- unused variable |
4580 |
|
4343 | //char s[256]; // Pierre-Marie Baty -- unused variable |
4581 | LOG_TRACE("()"); |
4344 | LOG_TRACE("()"); |
4582 | 4345 | ||
4583 | if (gNet_mode == eNet_mode_none |
- | |
4584 | || (gCurrent_net_game->type != eNet_game_type_sudden_death |
- | |
4585 | && gCurrent_net_game->type != eNet_game_type_tag |
- | |
4586 | && gCurrent_net_game->type != eNet_game_type_fight_to_death)) { |
- | |
4587 | gOpponent_viewing_mode = 0; |
- | |
4588 | } else if (!gRace_finished) { |
- | |
4589 | time_of_death = 0; |
- | |
4590 | gOpponent_viewing_mode = 0; |
- | |
4591 | } else if (time_of_death == 0) { |
- | |
4592 | time_of_death = GetRaceTime(); |
- | |
4593 | } else { |
- | |
4594 | if (GetRaceTime() >= time_of_death + 10000) { |
- | |
4595 | if (gOpponent_viewing_mode == 0) { |
- | |
4596 | gOpponent_viewing_mode = 1; |
- | |
4597 | gNet_player_to_view_index = -2; |
- | |
4598 | ViewNetPlayer(); |
- | |
4599 | } |
- | |
4600 | if (gNet_player_to_view_index >= gNumber_of_net_players) { |
- | |
4601 | gNet_player_to_view_index = -2; |
- | |
4602 | ViewNetPlayer(); |
- | |
4603 | } |
- | |
4604 | if (gNet_player_to_view_index < 0 && gCar_to_view != GetRaceLeader()) { |
- | |
4605 | gNet_player_to_view_index = -2; |
- | |
4606 | ViewNetPlayer(); |
- | |
4607 | } |
- | |
4608 | if ((GetRaceTime() > headup_timer + 1000 || headup_timer > GetRaceTime()) && gRace_over_reason == eRace_not_over_yet) { |
- | |
4609 | strcpy(s, GetMiscString(kMiscString_WATCHING)); |
- | |
4610 | strcat(s, " "); |
- | |
4611 | if (gNet_player_to_view_index >= 0) { |
- | |
4612 | strcat(s, gNet_players[gNet_player_to_view_index].player_name); |
- | |
4613 | } else if (gCurrent_net_game->type == eNet_game_type_tag) { |
- | |
4614 | strcat(s, GetMiscString(kMiscString_QUOTE_IT_QUOTE)); |
- | |
4615 | } else { |
- | |
4616 | strcat(s, GetMiscString(kMiscString_RACE_LEADER)); |
- | |
4617 |
|
4346 | STUB_ONCE(); |
4618 | headup_timer = GetRaceTime(); |
- | |
4619 | NewTextHeadupSlot(6, 0, 500, -4, s); |
- | |
4620 | } |
- | |
4621 | } |
- | |
4622 | } |
- | |
4623 | } |
4347 | } |
4624 | 4348 | ||
4625 | // IDA: void __cdecl ViewNetPlayer() |
4349 | // IDA: void __cdecl ViewNetPlayer() |
4626 | void ViewNetPlayer(void) { |
4350 | void ViewNetPlayer(void) { |
4627 | LOG_TRACE("()"); |
4351 | LOG_TRACE("()"); |
Line 4820... | Line 4544... | ||
4820 | 4544 | ||
4821 | if (gAction_replay_mode && gAction_replay_camera_mode != eAction_replay_standard && gPed_actor != NULL && !gProgram_state.cockpit_on) { |
4545 | if (gAction_replay_mode && gAction_replay_camera_mode != eAction_replay_standard && gPed_actor != NULL && !gProgram_state.cockpit_on) { |
4822 | IncidentCam(c, pTime); |
4546 | IncidentCam(c, pTime); |
4823 | } |
4547 | } |
4824 | } |
4548 | } |
- | 4549 | ||
4825 | // IDA: int __usercall PossibleRemoveNonCarFromWorld@<EAX>(br_actor *pActor@<EAX>) |
4550 | // IDA: int __usercall PossibleRemoveNonCarFromWorld@<EAX>(br_actor *pActor@<EAX>) |
4826 | int PossibleRemoveNonCarFromWorld(br_actor* pActor) { |
4551 | int PossibleRemoveNonCarFromWorld(br_actor* pActor) { |
4827 | tU8 cx; |
4552 | tU8 cx; |
4828 | tU8 cz; |
4553 | tU8 cz; |
4829 | tTrack_spec* track_spec; |
4554 | tTrack_spec* track_spec; |
Line 5681... | Line 5406... | ||
5681 | return i; |
5406 | return i; |
5682 | } |
5407 | } |
5683 | 5408 | ||
5684 | // IDA: int __usercall BoundsTest@<EAX>(br_bounds *bnds@<EAX>, br_vector3 *p@<EDX>) |
5409 | // IDA: int __usercall BoundsTest@<EAX>(br_bounds *bnds@<EAX>, br_vector3 *p@<EDX>) |
5685 | int BoundsTest(br_bounds* bnds, br_vector3* p) { |
5410 | int BoundsTest(br_bounds* bnds, br_vector3* p) { |
5686 |
|
5411 | //int j; // Pierre-Marie Baty -- unused variable |
5687 | LOG_TRACE("(%p, %p)", bnds, p); |
5412 | LOG_TRACE("(%p, %p)", bnds, p); |
5688 | - | ||
5689 | for (j = 0; j < 3; j++) { |
- | |
5690 | if (p->v[j] > bnds->max.v[j] || p->v[j] < bnds->min.v[j]) { |
- | |
5691 |
|
5413 | NOT_IMPLEMENTED(); |
5692 | } |
- | |
5693 | } |
- | |
5694 | return 1; |
- | |
5695 | } |
5414 | } |
5696 | 5415 | ||
5697 | // IDA: int __usercall CollideCameraWithOtherCars@<EAX>(br_vector3 *car_pos@<EAX>, br_vector3 *cam_pos@<EDX>) |
5416 | // IDA: int __usercall CollideCameraWithOtherCars@<EAX>(br_vector3 *car_pos@<EAX>, br_vector3 *cam_pos@<EDX>) |
5698 | int CollideCameraWithOtherCars(br_vector3* car_pos, br_vector3* cam_pos) { |
5417 | int CollideCameraWithOtherCars(br_vector3* car_pos, br_vector3* cam_pos) { |
5699 |
|
5418 | //int i; // Pierre-Marie Baty -- unused variable |
5700 |
|
5419 | //int plane; // Pierre-Marie Baty -- unused variable |
5701 | br_scalar ts |
5420 | //br_scalar ts; // Pierre-Marie Baty -- unused variable |
5702 | tCar_spec |
5421 | //tCar_spec* c; // Pierre-Marie Baty -- unused variable |
5703 | br_vector3 tv |
5422 | //br_vector3 tv; // Pierre-Marie Baty -- unused variable |
5704 | br_vector3 pos_car_space |
5423 | //br_vector3 pos_car_space; // Pierre-Marie Baty -- unused variable |
5705 | br_vector3 dir |
5424 | //br_vector3 dir; // Pierre-Marie Baty -- unused variable |
5706 | br_vector3 p |
5425 | //br_vector3 p; // Pierre-Marie Baty -- unused variable |
5707 | br_vector3 n |
5426 | //br_vector3 n; // Pierre-Marie Baty -- unused variable |
5708 | br_bounds bnds |
5427 | //br_bounds bnds; // Pierre-Marie Baty -- unused variable |
5709 | LOG_TRACE("(%p, %p)", car_pos, cam_pos); |
5428 | LOG_TRACE("(%p, %p)", car_pos, cam_pos); |
5710 | 5429 | ||
5711 | for (i = 0; i < gNum_cars_and_non_cars; i++) { |
- | |
5712 | if (BoundsTest(&gActive_car_list[i]->bounds_world_space, cam_pos)) { |
- | |
5713 | c = gActive_car_list[i]; |
- | |
5714 | BrVector3Sub(&tv, cam_pos, &c->car_master_actor->t.t.translate.t); |
- | |
5715 | BrMatrix34TApplyV(&p, &tv, &c->car_master_actor->t.t.mat); |
- | |
5716 | if (BoundsTest(&c->bounds[0], &p)) { |
- | |
5717 | BrVector3Sub(&tv, cam_pos, car_pos); |
- | |
5718 | BrMatrix34TApplyV(&dir, &tv, &c->car_master_actor->t.t.mat); |
- | |
5719 | BrVector3Add(&pos_car_space, &p, &dir); |
- | |
5720 | BrVector3SetFloat(&tv, 0.03f, 0.03f, 0.03f); |
- | |
5721 | BrVector3Sub(&bnds.min, &c->bounds[0].min, &tv); |
- | |
5722 | BrVector3Add(&bnds.max, &c->bounds[0].max, &tv); |
- | |
5723 | plane = LineBoxColl(&pos_car_space, &p, &bnds, &tv); |
- | |
5724 | BrMatrix34ApplyP(cam_pos, &tv, &c->car_master_actor->t.t.mat); |
- | |
5725 | return 1; |
- | |
5726 |
|
5430 | STUB_ONCE(); |
5727 | } |
- | |
5728 | } |
- | |
5729 | return 0; |
5431 | return 0; |
5730 | } |
5432 | } |
5731 | 5433 | ||
5732 | // IDA: void __cdecl InitialiseExternalCamera() |
5434 | // IDA: void __cdecl InitialiseExternalCamera() |
5733 | void InitialiseExternalCamera(void) { |
5435 | void InitialiseExternalCamera(void) { |