Subversion Repositories Games.Carmageddon

Rev

Rev 18 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 18 Rev 20
Line 1... Line 1...
1
#include "spark.h"
1
#include "spark.h"
2
#include "brender.h"
2
#include "brender/brender.h"
3
#include "car.h"
3
#include "car.h"
4
#include "crush.h"
-
 
5
#include "depth.h"
4
#include "depth.h"
6
#include "displays.h"
-
 
7
#include "errors.h"
5
#include "errors.h"
8
#include "formats.h"
-
 
9
#include "globvars.h"
6
#include "globvars.h"
10
#include "globvrkm.h"
7
#include "globvrkm.h"
11
#include "graphics.h"
8
#include "graphics.h"
12
#include "harness/hooks.h"
9
#include "harness/hooks.h"
13
#include "harness/trace.h"
10
#include "harness/trace.h"
Line 16... Line 13...
16
#include "piping.h"
13
#include "piping.h"
17
#include "replay.h"
14
#include "replay.h"
18
#include "trig.h"
15
#include "trig.h"
19
#include "utility.h"
16
#include "utility.h"
20
#include "world.h"
17
#include "world.h"
21
#include <math.h>
-
 
-
 
18
 
22
#include <stdlib.h>
19
#include <stdlib.h>
23
 
20
 
24
int gNext_spark;
21
int gNext_spark;
25
int gSpark_flags;
22
int gSpark_flags;
26
int gNext_shrapnel;
23
int gNext_shrapnel;
Line 1207... Line 1204...
1207
}
1204
}
1208
 
1205
 
1209
// IDA: void __cdecl DustRotate()
1206
// IDA: void __cdecl DustRotate()
1210
void DustRotate(void) {
1207
void DustRotate(void) {
1211
    LOG_TRACE("()");
1208
    LOG_TRACE("()");
1212
 
-
 
1213
    gDust_rotate += 1;
1209
    NOT_IMPLEMENTED();
1214
    if (gDust_rotate >= gNum_dust_tables) {
-
 
1215
        gDust_rotate = 0;
-
 
1216
    }
-
 
1217
    NewTextHeadupSlot(4, 0, 1000, -4, "Dust colour rotated");
-
 
1218
}
1210
}
1219
 
1211
 
1220
// IDA: void __usercall RenderSmoke(br_pixelmap *pRender_screen@<EAX>, br_pixelmap *pDepth_buffer@<EDX>, br_actor *pCamera@<EBX>, br_matrix34 *pCamera_to_world@<ECX>, tU32 pTime)
1212
// IDA: void __usercall RenderSmoke(br_pixelmap *pRender_screen@<EAX>, br_pixelmap *pDepth_buffer@<EDX>, br_actor *pCamera@<EBX>, br_matrix34 *pCamera_to_world@<ECX>, tU32 pTime)
1221
void RenderSmoke(br_pixelmap* pRender_screen, br_pixelmap* pDepth_buffer, br_actor* pCamera, br_matrix34* pCamera_to_world, tU32 pTime) {
1213
void RenderSmoke(br_pixelmap* pRender_screen, br_pixelmap* pDepth_buffer, br_actor* pCamera, br_matrix34* pCamera_to_world, tU32 pTime) {
1222
    int i;
1214
    int i;
Line 1624... Line 1616...
1624
        gSmoke_column[i].upright = 0;
1616
        gSmoke_column[i].upright = 0;
1625
    }
1617
    }
1626
    actor = c->car_model_actors[c->principal_car_actor].actor;
1618
    actor = c->car_model_actors[c->principal_car_actor].actor;
1627
    bonny = c->car_model_actors[c->car_actor_count - 1].actor;
1619
    bonny = c->car_model_actors[c->car_actor_count - 1].actor;
1628
 
1620
 
1629
    BrVector3Add(pRet_car_pos, &V11MODEL(actor->model)->groups[0].position[gSmoke_column[i].vertex_index], &actor->t.t.translate.t);
1621
    BrVector3Add(pRet_car_pos, &V11MODEL(actor->model)->groups->vertices[gSmoke_column[i].vertex_index].p, &actor->t.t.translate.t);
1630
    if (gProgram_state.cockpit_on && c->driver == eDriver_local_human) {
1622
    if (gProgram_state.cockpit_on && c->driver == eDriver_local_human) {
1631
        if (c->driver_z_offset + 0.2f <= pRet_car_pos->v[2]) {
1623
        if (c->driver_z_offset + 0.2f <= pRet_car_pos->v[2]) {
1632
            pRet_car_pos->v[1] -= -0.07f;
1624
            pRet_car_pos->v[1] -= -0.07f;
1633
        } else {
1625
        } else {
1634
            BrMatrix34ApplyP(pRet_car_pos, &V11MODEL(actor->model)->groups[0].position[gSmoke_column[i].vertex_index], &bonny->t.t.mat);
1626
            BrMatrix34ApplyP(pRet_car_pos, &V11MODEL(actor->model)->groups->vertices[gSmoke_column[i].vertex_index].p, &bonny->t.t.mat);
1635
        }
1627
        }
1636
    }
1628
    }
1637
    if (!gSmoke_column[i].upright) {
1629
    if (!gSmoke_column[i].upright) {
1638
        pRet_car_pos->v[1] = c->bounds[1].min.v[1] / WORLD_SCALE;
1630
        pRet_car_pos->v[1] = c->bounds[1].min.v[1] / WORLD_SCALE;
1639
    }
1631
    }
Line 2066... Line 2058...
2066
    model = actor->model;
2058
    model = actor->model;
2067
    bonny = pCar->car_model_actors[pCar->car_actor_count - 1].actor;
2059
    bonny = pCar->car_model_actors[pCar->car_actor_count - 1].actor;
2068
    n = 0;
2060
    n = 0;
2069
    real_vertex_number = 0;
2061
    real_vertex_number = 0;
2070
    if ((model->flags & BR_MODF_KEEP_ORIGINAL) != 0 || (model->flags & BR_MODF_UPDATEABLE) != 0) {
2062
    if ((model->flags & BR_MODF_KEEP_ORIGINAL) != 0 || (model->flags & BR_MODF_UPDATEABLE) != 0) {
2071
        point = V11MODEL(model)->groups[group].position[fire_point];
2063
        point = V11MODEL(model)->groups[group].vertices[fire_point].p;
2072
        StartPipingSession(ePipe_chunk_smudge);
2064
        StartPipingSession(ePipe_chunk_smudge);
2073
        for (group = 0; group < V11MODEL(model)->ngroups; group++) {
2065
        for (group = 0; group < V11MODEL(model)->ngroups; group++) {
2074
            for (j = 0; j < V11MODEL(model)->groups[group].nvertices; j++) {
2066
            for (j = 0; j < V11MODEL(model)->groups[group].nvertices; j++) {
2075
                BrVector3Sub(&tv, &V11MODEL(model)->groups[group].position[j], &point);
2067
                BrVector3Sub(&tv, &V11MODEL(model)->groups[group].vertices[j].p, &point);
2076
                ts = (.0144f - BrVector3LengthSquared(&tv) / SRandomBetween(.5f, 1.f)) / .0144f * 127.f;
2068
                ts = (.0144f - BrVector3LengthSquared(&tv) / SRandomBetween(.5f, 1.f)) / .0144f * 127.f;
2077
                if (ts > 0.f) {
2069
                if (ts > 0.f) {
2078
                    ts += BR_ALPHA(V11MODEL(model)->groups[group].vertex_colours[j]);
2070
                    ts += BR_ALPHA(V11MODEL(model)->groups[group].vertex_colours[j]);
2079
                    if (ts > 255.f) {
2071
                    if (ts > 255.f) {
2080
                        ts = 255.f;
2072
                        ts = 255.f;
Line 2098... Line 2090...
2098
                break;
2090
                break;
2099
            }
2091
            }
2100
        }
2092
        }
2101
        if (n > 0) {
2093
        if (n > 0) {
2102
            AddSmudgeToPipingSession(pCar->car_ID, pCar->principal_car_actor, n, data);
2094
            AddSmudgeToPipingSession(pCar->car_ID, pCar->principal_car_actor, n, data);
2103
            // FIXME?
-
 
2104
            // Added by dethrace to update gpu-buffered vertices
2095
            // Added by dethrace to update gpu-buffered vertices
2105
            // model->flags |= BR_MODF_DETHRACE_FORCE_BUFFER_UPDATE;
2096
            model->flags |= BR_MODF_DETHRACE_FORCE_BUFFER_UPDATE;
2106
        }
2097
        }
2107
 
2098
 
2108
        n = 0;
2099
        n = 0;
2109
        real_vertex_number = 0;
2100
        real_vertex_number = 0;
2110
        if (actor != bonny) {
2101
        if (actor != bonny) {
Line 2113... Line 2104...
2113
            BrVector3Accumulate(&tv, &bonny->t.t.translate.t);
2104
            BrVector3Accumulate(&tv, &bonny->t.t.translate.t);
2114
            BrMatrix34TApplyV(&bonny_pos, &tv, &bonny->t.t.mat);
2105
            BrMatrix34TApplyV(&bonny_pos, &tv, &bonny->t.t.mat);
2115
            for (group = 0; group < V11MODEL(b_model)->ngroups; group++) {
2106
            for (group = 0; group < V11MODEL(b_model)->ngroups; group++) {
2116
                j = 0;
2107
                j = 0;
2117
                for (j = 0; j < V11MODEL(b_model)->groups[group].nvertices; j++) {
2108
                for (j = 0; j < V11MODEL(b_model)->groups[group].nvertices; j++) {
2118
                    BrVector3Sub(&tv, &V11MODEL(b_model)->groups[group].position[j], &bonny_pos);
2109
                    BrVector3Sub(&tv, &V11MODEL(b_model)->groups[group].vertices[j].p, &bonny_pos);
2119
                    ts = (.0144f - BrVector3LengthSquared(&tv) / SRandomBetween(.5f, 1.f)) / .0144f * 127.f;
2110
                    ts = (.0144f - BrVector3LengthSquared(&tv) / SRandomBetween(.5f, 1.f)) / .0144f * 127.f;
2120
                    if (ts > 0.f) {
2111
                    if (ts > 0.f) {
2121
                        ts += BR_ALPHA(V11MODEL(b_model)->groups[group].vertex_colours[j]);
2112
                        ts += BR_ALPHA(V11MODEL(b_model)->groups[group].vertex_colours[j]);
2122
                        if (ts > 255.f) {
2113
                        if (ts > 255.f) {
2123
                            ts = 255.f;
2114
                            ts = 255.f;
Line 2141... Line 2132...
2141
                    break;
2132
                    break;
2142
                }
2133
                }
2143
            }
2134
            }
2144
            if (n > 0) {
2135
            if (n > 0) {
2145
                AddSmudgeToPipingSession(pCar->car_ID, pCar->car_actor_count - 1, n, data);
2136
                AddSmudgeToPipingSession(pCar->car_ID, pCar->car_actor_count - 1, n, data);
2146
                // FIXME?
-
 
-
 
2137
 
2147
                // Added by dethrace to update gpu-buffered vertices
2138
                // Added by dethrace to update gpu-buffered vertices
2148
                // b_model->flags |= BR_MODF_DETHRACE_FORCE_BUFFER_UPDATE;
2139
                b_model->flags |= BR_MODF_DETHRACE_FORCE_BUFFER_UPDATE;
2149
            }
2140
            }
2150
        }
2141
        }
2151
        EndPipingSession();
2142
        EndPipingSession();
2152
    }
2143
    }
2153
}
2144
}
2154
 
2145
 
2155
// IDA: void __cdecl ResetSmokeColumns()
2146
// IDA: void __cdecl ResetSmokeColumns()
2156
void ResetSmokeColumns(void) {
2147
void ResetSmokeColumns(void) {
2157
    int i;
2148
    //int i; // Pierre-Marie Baty -- unused variable
2158
    LOG_TRACE("()");
2149
    LOG_TRACE("()");
2159
 
-
 
2160
    for (i = 0; i < MAX_SMOKE_COLUMNS; i++) {
-
 
2161
        if (gColumn_flags & (1 << i)) {
-
 
2162
            BrActorRemove(gSmoke_column[i].flame_actor);
-
 
2163
        }
-
 
2164
    }
-
 
2165
    gColumn_flags = 0;
2150
    NOT_IMPLEMENTED();
2166
}
2151
}
2167
 
2152
 
2168
// IDA: void __usercall SetSmokeOn(int pSmoke_on@<EAX>)
2153
// IDA: void __usercall SetSmokeOn(int pSmoke_on@<EAX>)
2169
void SetSmokeOn(int pSmoke_on) {
2154
void SetSmokeOn(int pSmoke_on) {
2170
    LOG_TRACE("(%d)", pSmoke_on);
2155
    LOG_TRACE("(%d)", pSmoke_on);
Line 2173... Line 2158...
2173
}
2158
}
2174
 
2159
 
2175
// IDA: void __usercall ReallySetSmokeOn(int pSmoke_on@<EAX>)
2160
// IDA: void __usercall ReallySetSmokeOn(int pSmoke_on@<EAX>)
2176
void ReallySetSmokeOn(int pSmoke_on) {
2161
void ReallySetSmokeOn(int pSmoke_on) {
2177
    LOG_TRACE("(%d)", pSmoke_on);
2162
    LOG_TRACE("(%d)", pSmoke_on);
2178
 
-
 
2179
    ResetSmoke();
-
 
2180
    ResetSmokeColumns();
2163
    NOT_IMPLEMENTED();
2181
}
2164
}
2182
 
2165
 
2183
// IDA: void __usercall SetSmoke(int pSmoke_on@<EAX>)
2166
// IDA: void __usercall SetSmoke(int pSmoke_on@<EAX>)
2184
void SetSmoke(int pSmoke_on) {
2167
void SetSmoke(int pSmoke_on) {
2185
    LOG_TRACE("(%d)", pSmoke_on);
2168
    LOG_TRACE("(%d)", pSmoke_on);
Line 2647... Line 2630...
2647
    }
2630
    }
2648
}
2631
}
2649
 
2632
 
2650
// IDA: void __cdecl DoTrueColModelThing(br_actor *actor, br_model *pModel, br_material *material, void *render_data, br_uint_8 style, int on_screen)
2633
// IDA: void __cdecl DoTrueColModelThing(br_actor *actor, br_model *pModel, br_material *material, void *render_data, br_uint_8 style, int on_screen)
2651
void DoTrueColModelThing(br_actor* actor, br_model* pModel, br_material* material, void* render_data, br_uint_8 style, int on_screen) {
2634
void DoTrueColModelThing(br_actor* actor, br_model* pModel, br_material* material, void* render_data, br_uint_8 style, int on_screen) {
2652
    int group;
2635
    //int group; // Pierre-Marie Baty -- unused variable
2653
    int j;
2636
    //int j; // Pierre-Marie Baty -- unused variable
2654
    int val;
2637
    //int val; // Pierre-Marie Baty -- unused variable
2655
    LOG_TRACE("(%p, %p, %p, %p, %d, %d)", actor, pModel, material, render_data, style, on_screen);
2638
    LOG_TRACE("(%p, %p, %p, %p, %d, %d)", actor, pModel, material, render_data, style, on_screen);
2656
    NOT_IMPLEMENTED();
2639
    NOT_IMPLEMENTED();
2657
}
2640
}
2658
 
2641
 
2659
// IDA: void __cdecl DoModelThing(br_actor *actor, br_model *pModel, br_material *material, void *render_data, br_uint_8 style, int on_screen)
2642
// IDA: void __cdecl DoModelThing(br_actor *actor, br_model *pModel, br_material *material, void *render_data, br_uint_8 style, int on_screen)
2660
void DoModelThing(br_actor* actor, br_model* pModel, br_material* material, void* render_data, br_uint_8 style, int on_screen) {
2643
void DoModelThing(br_actor* actor, br_model* pModel, br_material* material, void* render_data, br_uint_8 style, int on_screen) {
2661
    int j;
2644
    //int j; // Pierre-Marie Baty -- unused variable
2662
    int i;
2645
    //int i; // Pierre-Marie Baty -- unused variable
2663
    int group;
2646
    //int group; // Pierre-Marie Baty -- unused variable
2664
    tU32 t;
2647
    //tU32 t; // Pierre-Marie Baty -- unused variable
2665
    int val;
2648
    //int val; // Pierre-Marie Baty -- unused variable
2666
    LOG_TRACE("(%p, %p, %p, %p, %d, %d)", actor, pModel, material, render_data, style, on_screen);
2649
    LOG_TRACE("(%p, %p, %p, %p, %d, %d)", actor, pModel, material, render_data, style, on_screen);
2667
 
-
 
2668
    GetRaceTime();
2650
    NOT_IMPLEMENTED();
2669
    for (group = 0; group < V11MODEL(pModel)->ngroups; group++) {
-
 
2670
        for (j = 0; j < V11MODEL(pModel)->groups[group].nvertices; j++) {
-
 
2671
            if (!(((V11MODEL(pModel)->groups[group].vertex_colours[j]) >> 24) & 1)) {
-
 
2672
                if (((V11MODEL(pModel)->groups[group].vertex_colours[j]) >> 24) < 0xc9) {
-
 
2673
                    val = ((V11MODEL(pModel)->groups[group].vertex_colours[j]) >> 24) + 2 * IRandomBetween(5, 10);
-
 
2674
                    V11MODEL(pModel)->groups[group].vertex_colours[j] = BR_COLOUR_RGBA(0, 0, 0, val);
-
 
2675
                    if (pModel->flags & BR_MODF_UPDATEABLE) {
-
 
2676
                        pModel->vertices[V11MODEL(pModel)->groups[group].vertex_user[j]].index = val;
-
 
2677
                    }
-
 
2678
                } else {
-
 
2679
                    V11MODEL(pModel)->groups[group].vertex_colours[j] = BR_COLOUR_RGBA(0, 0, 0, 0xc9);
-
 
2680
                    if (pModel->flags & BR_MODF_UPDATEABLE) {
-
 
2681
                        pModel->vertices[V11MODEL(pModel)->groups[group].vertex_user[j]].index = 0xc9;
-
 
2682
                    }
-
 
2683
                }
-
 
2684
            } else if ((V11MODEL(pModel)->groups[group].vertex_colours[j] >> 24) < 20) {
-
 
2685
                V11MODEL(pModel)->groups[group].vertex_colours[j] = 0;
-
 
2686
                if (pModel->flags & BR_MODF_UPDATEABLE) {
-
 
2687
                    pModel->vertices[V11MODEL(pModel)->groups[group].vertex_user[j]].index = 0;
-
 
2688
                }
-
 
2689
            } else {
-
 
2690
                val = ((V11MODEL(pModel)->groups[group].vertex_colours[j] >> 24) - 2 * IRandomBetween(5, 10)) << 24;
-
 
2691
                V11MODEL(pModel)->groups[group].vertex_colours[j] = BR_COLOUR_RGBA(0, 0, 0, val);
-
 
2692
                if (pModel->flags & BR_MODF_UPDATEABLE) {
-
 
2693
                    pModel->vertices[V11MODEL(pModel)->groups[group].vertex_user[j]].index = val;
-
 
2694
                }
-
 
2695
            }
-
 
2696
        }
-
 
2697
    }
-
 
2698
    if ((pModel->flags & BR_MODF_UPDATEABLE) && pModel->user != NULL) {
-
 
2699
        BrModelUpdate(pModel, BR_MODU_VERTEX_POSITIONS);
-
 
2700
    }
-
 
2701
    pModel->user = NULL;
-
 
2702
    BrZbModelRender(actor, pModel, material, style, BrOnScreenCheck(&pModel->bounds), 0);
-
 
2703
}
2651
}
2704
 
2652
 
2705
// IDA: void __usercall SetModelShade(br_actor *pActor@<EAX>, br_pixelmap *pShade@<EDX>)
2653
// IDA: void __usercall SetModelShade(br_actor *pActor@<EAX>, br_pixelmap *pShade@<EDX>)
2706
void SetModelShade(br_actor* pActor, br_pixelmap* pShade) {
2654
void SetModelShade(br_actor* pActor, br_pixelmap* pShade) {
2707
    int i;
2655
    int i;
Line 2729... Line 2677...
2729
    br_actor* bonny;
2677
    br_actor* bonny;
2730
    br_pixelmap* shade[6];
2678
    br_pixelmap* shade[6];
2731
    static int shade_num = 0;
2679
    static int shade_num = 0;
2732
    //int i; // Pierre-Marie Baty -- unused variable
2680
    //int i; // Pierre-Marie Baty -- unused variable
2733
    LOG_TRACE("(%p)", pCar);
2681
    LOG_TRACE("(%p)", pCar);
-
 
2682
 
-
 
2683
    STUB();
-
 
2684
    return;
2734
 
2685
 
2735
    shade[0] = gIt_shade_table;
2686
    shade[0] = gIt_shade_table;
2736
    shade[1] = gFog_shade_table;
2687
    shade[1] = gFog_shade_table;
2737
    shade[2] = gShade_list[0];
2688
    shade[2] = gShade_list[0];
2738
    shade[3] = gShade_list[1];
2689
    shade[3] = gShade_list[1];
2739
    shade[4] = gShade_list[2];
2690
    shade[4] = gShade_list[2];
2740
    shade[5] = NULL;
2691
    shade[5] = NULL;
2741
 
2692
 
2742
    actor = pCar->car_model_actors[pCar->principal_car_actor].actor;
2693
    actor = pCar->car_model_actors[pCar->principal_car_actor].actor;
2743
    bonny = pCar->car_model_actors[pCar->car_actor_count - 1].actor;
2694
    bonny = pCar->car_model_actors[pCar->car_actor_count - 1].actor;
2744
    if (!(actor->model->flags & BR_MODF_CUSTOM) || actor->model->custom != DoModelThing) {
2695
    if (((actor->model->flags & BR_MODF_CUSTOM) == 0) || actor->model->custom != DoTrueColModelThing) {
2745
        SetModelShade(actor, shade[shade_num]);
2696
        SetModelShade(actor, shade[shade_num]);
2746
        actor->model->user = DoModelThing;
2697
        actor->model->user = DoTrueColModelThing;
2747
        actor->model->custom = DoModelThing;
2698
        actor->model->custom = DoTrueColModelThing;
2748
        actor->model->flags |= BR_MODF_CUSTOM;
2699
        actor->model->flags |= BR_MODF_CUSTOM;
2749
        if (bonny != actor) {
2700
        if (bonny != actor) {
2750
            bonny->model->user = DoModelThing;
2701
            bonny->model->user = DoTrueColModelThing;
2751
            bonny->model->custom = DoModelThing;
2702
            bonny->model->custom = DoTrueColModelThing;
2752
            bonny->model->flags |= BR_MODF_CUSTOM;
2703
            bonny->model->flags |= BR_MODF_CUSTOM;
2753
            SetModelShade(bonny, shade[shade_num]);
2704
            SetModelShade(bonny, shade[shade_num]);
2754
        }
2705
        }
2755
    }
2706
    }
2756
}
2707
}
2757
 
2708
 
2758
// IDA: void __usercall StopCarBeingIt(tCar_spec *pCar@<EAX>)
2709
// IDA: void __usercall StopCarBeingIt(tCar_spec *pCar@<EAX>)
2759
void StopCarBeingIt(tCar_spec* pCar) {
2710
void StopCarBeingIt(tCar_spec* pCar) {
2760
    int i;
2711
    //int i; // Pierre-Marie Baty -- unused variable
2761
    int group;
2712
    //int group; // Pierre-Marie Baty -- unused variable
2762
    br_actor* actor;
2713
    //br_actor* actor; // Pierre-Marie Baty -- unused variable
2763
    br_actor* bonny;
2714
    //br_actor* bonny; // Pierre-Marie Baty -- unused variable
2764
    LOG_TRACE("(%p)", pCar);
2715
    LOG_TRACE("(%p)", pCar);
2765
 
-
 
2766
    actor = pCar->car_model_actors[pCar->principal_car_actor].actor;
-
 
2767
    bonny = pCar->car_model_actors[pCar->car_actor_count - 1].actor;
-
 
2768
    if (actor->model->custom == DoModelThing) {
-
 
2769
        actor->model->flags &= ~BR_MODF_CUSTOM;
-
 
2770
        SetModelShade(actor, gShade_list[0]);
-
 
2771
        for (group = 0; group < V11MODEL(actor->model)->ngroups; group++) {
-
 
2772
            for (i = 0; i < V11MODEL(actor->model)->groups[group].nvertices; i++) {
-
 
2773
                V11MODEL(actor->model)->groups[group].vertex_colours[i] = 0;
-
 
2774
                if (actor->model->flags & BR_MODF_UPDATEABLE) {
-
 
2775
                    actor->model->vertices[V11MODEL(actor->model)->groups[group].vertex_user[i]].index = 0;
-
 
2776
                }
-
 
2777
            }
-
 
2778
        }
2716
    STUB();
2779
        SetModelForUpdate(actor->model, pCar, 0);
-
 
2780
        if (bonny != actor) {
-
 
2781
            bonny->model->flags &= ~BR_MODF_CUSTOM;
-
 
2782
            SetModelShade(bonny, gShade_list[0]);
-
 
2783
            for (group = 0; group < V11MODEL(bonny->model)->ngroups; group++) {
-
 
2784
                for (i = 0; i < V11MODEL(bonny->model)->groups[group].nvertices; i++) {
-
 
2785
                    V11MODEL(bonny->model)->groups[group].vertex_colours[i] = 0;
-
 
2786
                    if (bonny->model->flags & BR_MODF_UPDATEABLE) {
-
 
2787
                        bonny->model->vertices[V11MODEL(bonny->model)->groups[group].vertex_user[i]].index = 0;
-
 
2788
                    }
-
 
2789
                }
-
 
2790
            }
-
 
2791
            SetModelForUpdate(bonny->model, pCar, 0);
-
 
2792
        }
-
 
2793
    }
-
 
2794
}
2717
}