DrawColumns effectively matching

This commit is contained in:
Dethrace Labs 2025-09-10 14:24:00 +12:00 committed by Dethrace Engineering Department
parent ee9c802cd1
commit 778e83b38f
2 changed files with 29 additions and 25 deletions

View File

@ -193,6 +193,8 @@ if(MSVC_42_FOR_RECCMP)
target_link_options(dethrace PRIVATE /INCREMENTAL:NO /subsystem:windows /ENTRY:mainCRTStartup)
set_source_files_properties(common/utility.c PROPERTIES COMPILE_FLAGS "/FAs")
# set_source_files_properties(common/brucetrk.c PROPERTIES COMPILE_FLAGS "/Oi-")
reccmp_add_target(dethrace ID CARM95)
reccmp_configure()
else()

View File

@ -261,7 +261,7 @@ void ExtractColumns(tTrack_spec* pTrack_spec) {
br_bounds bounds;
unsplit = 0;
switch (sscanf(pTrack_spec->the_actor->identifier, "%u%u%f%d", &x, &z, &extra_room, &ad)) {
switch (sscanf(pTrack_spec->the_actor->identifier, "%u%u%f%d", &x, &z, &e, &ad)) {
case 3:
BrFailure(
"Attempt to extract columns from invalid track\n"
@ -277,24 +277,25 @@ void ExtractColumns(tTrack_spec* pTrack_spec) {
unsplit = 1;
x = 1;
z = 1;
extra_room = 0.0;
e = 0.0;
pTrack_spec->ampersand_digits = 0;
break;
}
pTrack_spec->ncolumns_x = x;
pTrack_spec->ncolumns_z = z;
extra_room = e;
BrActorToBounds(&bounds, pTrack_spec->the_actor);
pTrack_spec->column_size_x = (bounds.max.v[0] - bounds.min.v[0] + extra_room * 2.0) / (double)pTrack_spec->ncolumns_x;
pTrack_spec->column_size_z = (bounds.max.v[2] - bounds.min.v[2] + extra_room * 2.0) / (double)pTrack_spec->ncolumns_z;
pTrack_spec->column_size_x = (float)(bounds.max.v[0] - bounds.min.v[0] + extra_room * 2.0f) / pTrack_spec->ncolumns_x;
pTrack_spec->column_size_z = (float)(bounds.max.v[2] - bounds.min.v[2] + extra_room * 2.0f) / pTrack_spec->ncolumns_z;
pTrack_spec->origin_x = bounds.min.v[0] - extra_room;
pTrack_spec->origin_z = bounds.min.v[2] - extra_room;
AllocateActorMatrix(pTrack_spec, &pTrack_spec->columns);
AllocateActorMatrix(pTrack_spec, &pTrack_spec->lollipops);
AllocateActorMatrix(pTrack_spec, &pTrack_spec->blends);
if (pTrack_spec->ampersand_digits <= 0) {
pTrack_spec->non_car_list = NULL;
} else {
if (pTrack_spec->ampersand_digits > 0) {
pTrack_spec->non_car_list = BrMemAllocate(sizeof(br_actor*) * pTrack_spec->ampersand_digits, kMem_non_car_list);
} else {
pTrack_spec->non_car_list = NULL;
}
if (unsplit) {
**pTrack_spec->columns = pTrack_spec->the_actor;
@ -342,18 +343,18 @@ void DrawColumns(int pDraw_blends, tTrack_spec* pTrack_spec, int pMin_x, int pMa
br_actor* blended_polys;
maa.m = pCamera_to_world;
if (fabs(pCamera_to_world->m[2][2]) >= fabs(pCamera_to_world->m[2][0])) {
for (column_z = pMin_z; column_z <= pMax_z; ++column_z) {
for (column_x = pMin_x; column_x <= pMax_x; ++column_x) {
if (pCamera_to_world->m[2][0] <= 0.0) {
column_x2 = pMin_x + pMax_x - column_x;
} else {
if (fabs(pCamera_to_world->m[2][2]) < fabs(pCamera_to_world->m[2][0])) {
for (column_x = pMin_x; column_x <= pMax_x; ++column_x) {
for (column_z = pMin_z; column_z <= pMax_z; ++column_z) {
if (pCamera_to_world->m[2][0] > 0.0f) {
column_x2 = column_x;
}
if (pCamera_to_world->m[2][2] <= 0.0) {
column_z2 = pMax_z + pMin_z - column_z;
} else {
column_x2 = pMin_x + pMax_x - column_x;
}
if (pCamera_to_world->m[2][2] > 0.0f) {
column_z2 = column_z;
} else {
column_z2 = pMin_z + pMax_z - column_z;
}
if (pDraw_blends) {
blended_polys = pTrack_spec->blends[column_z2][column_x2];
@ -374,18 +375,19 @@ void DrawColumns(int pDraw_blends, tTrack_spec* pTrack_spec, int pMin_x, int pMa
}
}
}
} else {
for (column_x = pMin_x; column_x <= pMax_x; ++column_x) {
for (column_z = pMin_z; column_z <= pMax_z; ++column_z) {
if (pCamera_to_world->m[2][0] <= 0.0) {
column_x2 = pMin_x + pMax_x - column_x;
} else {
for (column_z = pMin_z; column_z <= pMax_z; ++column_z) {
for (column_x = pMin_x; column_x <= pMax_x; ++column_x) {
if (pCamera_to_world->m[2][0] > 0.0f) {
column_x2 = column_x;
}
if (pCamera_to_world->m[2][2] <= 0.0) {
column_z2 = pMax_z + pMin_z - column_z;
} else {
column_x2 = pMin_x + pMax_x - column_x;
}
if (pCamera_to_world->m[2][2] > 0.0f) {
column_z2 = column_z;
} else {
column_z2 = (pMin_z + pMax_z) - column_z;
}
if (pDraw_blends) {
blended_polys = pTrack_spec->blends[column_z2][column_x2];