diff --git a/src/DETHRACE/common/displays.c b/src/DETHRACE/common/displays.c index 4a5d7446..bbdabbbb 100644 --- a/src/DETHRACE/common/displays.c +++ b/src/DETHRACE/common/displays.c @@ -1160,15 +1160,26 @@ void DoInstruments(tU32 pThe_time) { } else { gear = gCar_to_view->gear; } +#if defined(DETHRACE_FIX_BUGS) +/* + * The OG derives gear mask height of 28 by `gears_image->height / 8`, but + * this is only valid for HGEARS.PIX, which contains 8 gear images. Hardcoding + * this number fixes gear rendering for cars using HGEARS4.PIX, which consists + * of 11 gear images. + */ +#define GEAR_HEIGHT 28 +#else +#define GEAR_HEIGHT ((int)gProgram_state.current_car.gears_image->height / 8) +#endif DRPixelmapRectangleMaskedCopy( gBack_screen, the_wobble_x + gProgram_state.current_car.gear_x[gProgram_state.cockpit_on], the_wobble_y + gProgram_state.current_car.gear_y[gProgram_state.cockpit_on], gProgram_state.current_car.gears_image, 0, - (gear + 1) * ((int)gProgram_state.current_car.gears_image->height >> 3), + (gear + 1) * GEAR_HEIGHT, gProgram_state.current_car.gears_image->width, - (int)gProgram_state.current_car.gears_image->height >> 3); + GEAR_HEIGHT); } speedo_image = gProgram_state.current_car.speedo_image[gProgram_state.cockpit_on]; if (gProgram_state.current_car.speedo_radius_2[gProgram_state.cockpit_on] >= 0) {