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 | #include <stdlib.h> |
2 | #include <stdlib.h> |
3 | 3 | ||
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 "depth.h" |
7 | #include "depth.h" |
8 | #include "displays.h" |
8 | #include "displays.h" |
9 | #include "drmem.h" |
9 | #include "drmem.h" |
10 | #include "errors.h" |
10 | #include "errors.h" |
11 | #include "finteray.h" |
11 | #include "finteray.h" |
12 | #include "flicplay.h" |
12 | #include "flicplay.h" |
13 | #include "formats.h" |
- | |
14 | #include "globvars.h" |
13 | #include "globvars.h" |
15 | #include "globvrpb.h" |
14 | #include "globvrpb.h" |
16 | #include "graphics.h" |
15 | #include "graphics.h" |
17 | #include "harness/trace.h" |
16 | #include "harness/trace.h" |
18 | #include "input.h" |
17 | #include "input.h" |
Line 1860... | Line 1859... | ||
1860 | LOG_TRACE("()"); |
1859 | LOG_TRACE("()"); |
1861 | NOT_IMPLEMENTED(); |
1860 | NOT_IMPLEMENTED(); |
1862 | } |
1861 | } |
1863 | 1862 | ||
1864 | // IDA: br_uint_32 __cdecl ProcessFaceMaterials(br_actor *pActor, tPMFMCB pCallback) |
1863 | // IDA: br_uint_32 __cdecl ProcessFaceMaterials(br_actor *pActor, tPMFMCB pCallback) |
1865 |
|
1864 | intptr_t ProcessFaceMaterials(br_actor* pActor, tPMFMCB pCallback) { |
1866 | LOG_TRACE("(%p, %d)", pActor, pCallback); |
1865 | LOG_TRACE("(%p, %d)", pActor, pCallback); |
1867 | 1866 | ||
1868 | if (pActor->identifier == NULL || pActor->identifier[0] != '&') { |
1867 | if (pActor->identifier == NULL || pActor->identifier[0] != '&') { |
1869 | if (pActor->type == BR_ACTOR_MODEL && pActor->model != NULL) { |
1868 | if (pActor->type == BR_ACTOR_MODEL && pActor->model != NULL) { |
1870 | ProcessModelFaceMaterials(pActor->model, pCallback); |
1869 | ProcessModelFaceMaterials(pActor->model, pCallback); |
Line 2270... | Line 2269... | ||
2270 | ProcessFaceMaterials(gProgram_state.track_spec.the_actor, DisposeSuffixedMaterials); |
2269 | ProcessFaceMaterials(gProgram_state.track_spec.the_actor, DisposeSuffixedMaterials); |
2271 | } |
2270 | } |
2272 | } |
2271 | } |
2273 | 2272 | ||
2274 | // IDA: br_uint_32 __cdecl SetAccessoryRenderingCB(br_actor *pActor, void *pFlag) |
2273 | // IDA: br_uint_32 __cdecl SetAccessoryRenderingCB(br_actor *pActor, void *pFlag) |
2275 |
|
2274 | intptr_t SetAccessoryRenderingCB(br_actor* pActor, void* pFlag) { |
2276 | if (pActor->identifier && *pActor->identifier == '&') { |
2275 | if (pActor->identifier && *pActor->identifier == '&') { |
2277 | pActor->render_style = *(br_uint_8*)pFlag; |
2276 | pActor->render_style = *(br_uint_8*)pFlag; |
2278 | } |
2277 | } |
2279 | return 0; |
2278 | return 0; |
2280 | } |
2279 | } |
Line 2582... | Line 2581... | ||
2582 | if (gTrack_storage_space.models[i] && gTrack_storage_space.models[i]->flags & 0x82) { |
2581 | if (gTrack_storage_space.models[i] && gTrack_storage_space.models[i]->flags & 0x82) { |
2583 | gTrack_storage_space.models[i]->flags &= 0xFF7Du; |
2582 | gTrack_storage_space.models[i]->flags &= 0xFF7Du; |
2584 | for (group = 0; group < V11MODEL(gTrack_storage_space.models[i])->ngroups; group++) { |
2583 | for (group = 0; group < V11MODEL(gTrack_storage_space.models[i])->ngroups; group++) { |
2585 | int f = V11MODEL(gTrack_storage_space.models[i])->groups[group].face_user[0]; |
2584 | int f = V11MODEL(gTrack_storage_space.models[i])->groups[group].face_user[0]; |
2586 | material = gTrack_storage_space.models[i]->faces[f].material; |
2585 | material = gTrack_storage_space.models[i]->faces[f].material; |
2587 | V11MODEL(gTrack_storage_space.models[i])->groups[group]. |
2586 | V11MODEL(gTrack_storage_space.models[i])->groups[group].face_colours_material = material; |
2588 | if (material && !material->index_shade) { |
2587 | if (material && !material->index_shade) { |
2589 | material->index_shade = BrTableFind("DRRENDER.TAB"); |
2588 | material->index_shade = BrTableFind("DRRENDER.TAB"); |
2590 | BrMaterialUpdate(material, 0x7FFFu); |
2589 | BrMaterialUpdate(material, 0x7FFFu); |
2591 | } |
2590 | } |
2592 | } |
2591 | } |
Line 2896... | Line 2895... | ||
2896 | LoadInKevStuff(NULL); |
2895 | LoadInKevStuff(NULL); |
2897 | } else { |
2896 | } else { |
2898 | LoadInKevStuff(f); |
2897 | LoadInKevStuff(f); |
2899 | } |
2898 | } |
2900 | if (gRace_file_version < 5) { |
2899 | if (gRace_file_version < 5) { |
2901 | gYon_multiplier = viewdistance_surmultiplier * 1.0; |
2900 | gYon_multiplier = viewdistance_surmultiplier * 1.0; |
2902 | } else { |
2901 | } else { |
2903 | gYon_multiplier = viewdistance_surmultiplier * GetAScalar(f); |
2902 | gYon_multiplier = viewdistance_surmultiplier * GetAScalar(f); |
2904 | } |
2903 | } |
2905 | GetAString(f, s); |
2904 | GetAString(f, s); |
2906 | if (strcmp(s, pFile_name) != 0) { |
2905 | if (strcmp(s, pFile_name) != 0) { |
2907 | FatalError(kFatalError_FileCorrupt_S, pFile_name); |
2906 | FatalError(kFatalError_FileCorrupt_S, pFile_name); |
2908 | } |
2907 | } |
2909 | fclose(f); |
2908 | fclose(f); |
2910 | } |
2909 | } |
2911 | 2910 | ||
2912 | // IDA: br_uint_32 __cdecl RemoveBounds(br_actor *pActor, void *pArg) |
2911 | // IDA: br_uint_32 __cdecl RemoveBounds(br_actor *pActor, void *pArg) |
2913 |
|
2912 | intptr_t RemoveBounds(br_actor* pActor, void* pArg) { |
2914 | LOG_TRACE("(%p, %p)", pActor, pArg); |
2913 | LOG_TRACE("(%p, %p)", pActor, pArg); |
2915 | 2914 | ||
2916 | if (pActor->type == BR_ACTOR_BOUNDS || pActor->type == BR_ACTOR_BOUNDS_CORRECT) { |
2915 | if (pActor->type == BR_ACTOR_BOUNDS || pActor->type == BR_ACTOR_BOUNDS_CORRECT) { |
2917 | BrResFree(pActor->type_data); |
2916 | BrResFree(pActor->type_data); |
2918 | pActor->type_data = NULL; |
2917 | pActor->type_data = NULL; |
Line 4322... | Line 4321... | ||
4322 | if (pActor->model != NULL) { |
4321 | if (pActor->model != NULL) { |
4323 | strcat(s2, ".DAT"); |
4322 | strcat(s2, ".DAT"); |
4324 | new_model = BrModelAllocate(s2, pActor->model->nvertices, pActor->model->nfaces); |
4323 | new_model = BrModelAllocate(s2, pActor->model->nvertices, pActor->model->nfaces); |
4325 | memcpy(new_model->vertices, pActor->model->vertices, pActor->model->nvertices * sizeof(br_vertex)); |
4324 | memcpy(new_model->vertices, pActor->model->vertices, pActor->model->nvertices * sizeof(br_vertex)); |
4326 | memcpy(new_model->faces, pActor->model->faces, pActor->model->nfaces * sizeof(br_face)); |
4325 | memcpy(new_model->faces, pActor->model->faces, pActor->model->nfaces * sizeof(br_face)); |
4327 | new_model->flags |= |
4326 | new_model->flags |= 0x80; // FIXME: unknown model flag |
4328 | BrModelAdd(new_model); |
4327 | BrModelAdd(new_model); |
4329 | BrModelUpdate(new_model, BR_MODU_ALL); |
4328 | BrModelUpdate(new_model, BR_MODU_ALL); |
4330 | pActor->model = new_model; |
4329 | pActor->model = new_model; |
4331 | gAdditional_models[gNumber_of_additional_models] = new_model; |
4330 | gAdditional_models[gNumber_of_additional_models] = new_model; |
4332 | gNumber_of_additional_models++; |
4331 | gNumber_of_additional_models++; |
Line 4425... | Line 4424... | ||
4425 | 4424 | ||
4426 | gKnown_actor = gLast_actor; |
4425 | gKnown_actor = gLast_actor; |
4427 | BrVector3Copy(&gActor_centre, &gLast_actor->t.t.translate.t); |
4426 | BrVector3Copy(&gActor_centre, &gLast_actor->t.t.translate.t); |
4428 | DuplicateIfNotAmpersand(gLast_actor); |
4427 | DuplicateIfNotAmpersand(gLast_actor); |
4429 | UniquificateActorsName(gUniverse_actor, gLast_actor); |
4428 | UniquificateActorsName(gUniverse_actor, gLast_actor); |
4430 | gLast_actor->model->flags |= |
4429 | gLast_actor->model->flags |= 0x80; // FIXME: unknown flag |
4431 | if (gLast_actor->identifier == NULL || gLast_actor->identifier[0] == '&') { |
4430 | if (gLast_actor->identifier == NULL || gLast_actor->identifier[0] == '&') { |
4432 | last_non_ampersand = gAdditional_actors; |
4431 | last_non_ampersand = gAdditional_actors; |
4433 | for (a = gAdditional_actors->children; a != NULL; a = a->next) { |
4432 | for (a = gAdditional_actors->children; a != NULL; a = a->next) { |
4434 | if (a->identifier != NULL && a->identifier[0] != '&') { |
4433 | if (a->identifier != NULL && a->identifier[0] != '&') { |
4435 | last_non_ampersand = a; |
4434 | last_non_ampersand = a; |