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 |
|
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 |
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 |
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]. |
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]. |
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 |
|
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]. |
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
2635 | //int group; // Pierre-Marie Baty -- unused variable |
2653 |
|
2636 | //int j; // Pierre-Marie Baty -- unused variable |
2654 |
|
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 |
|
2644 | //int j; // Pierre-Marie Baty -- unused variable |
2662 |
|
2645 | //int i; // Pierre-Marie Baty -- unused variable |
2663 |
|
2646 | //int group; // Pierre-Marie Baty -- unused variable |
2664 | tU32 t |
2647 | //tU32 t; // Pierre-Marie Baty -- unused variable |
2665 |
|
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 |
|
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 ( |
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 = |
2697 | actor->model->user = DoTrueColModelThing; |
2747 | actor->model->custom = |
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 = |
2701 | bonny->model->user = DoTrueColModelThing; |
2751 | bonny->model->custom = |
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 |
|
2711 | //int i; // Pierre-Marie Baty -- unused variable |
2761 |
|
2712 | //int group; // Pierre-Marie Baty -- unused variable |
2762 | br_actor |
2713 | //br_actor* actor; // Pierre-Marie Baty -- unused variable |
2763 | br_actor |
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 | } |