Some of the calculated values were wrong and/or assigned to the wrong pixel of the 4x4 block. Found during testing with Rebel Assault Sega-CD release.
Unified · Split
| @@ -493,14 +493,12 @@ static void codec33_gen_tiles(SANMVideoContext *ctx, int8_t param1) · 492 unmodified lines | ||
| 493 | 493 | for (k = 0; k < 8; k++) { |
| 494 | 494 | j = i + param1; |
| 495 | 495 | l = k + param1; |
| 496 | − p = (j + k) / 2; | |
| 497 | − j = (j + p) / 2; | |
| 498 | − m = l / 2; | |
| 499 | − n = (i + param1); | |
| 500 | − o = (k + param1); | |
| 501 | − | |
| 502 | − *dst++ = p; *dst++ = p; *dst++ = j; *dst++ = n; | |
| 503 | − *dst++ = p; *dst++ = p; *dst++ = j; *dst++ = i; | |
| 496 | + p = (j + l) >> 1; | |
| 497 | + n = (j + p) >> 1; | |
| 498 | + m = (p + l) >> 1; | |
| 499 | + | |
| 500 | + *dst++ = p; *dst++ = p; *dst++ = n; *dst++ = j; | |
| 501 | + *dst++ = p; *dst++ = p; *dst++ = n; *dst++ = j; | |
| 504 | 502 | *dst++ = m; *dst++ = m; *dst++ = p; *dst++ = j; |
| 505 | 503 | *dst++ = l; *dst++ = l; *dst++ = m; *dst++ = p; |
| 506 | 504 | } |
| @@ -510,8 +508,8 @@ static void codec33_gen_tiles(SANMVideoContext *ctx, int8_t param1) · 3 unmodified lines | ||
| 510 | 508 | for (k = 0; k < 8; k++) { |
| 511 | 509 | j = i + param1; |
| 512 | 510 | l = k + param1; |
| 513 | − n = ((j + l) / 2); | |
| 514 | − m = ((l + n) / 2); | |
| 511 | + n = (j + l) >> 1; | |
| 512 | + m = (l + n) >> 1; | |
| 515 | 513 | |
| 516 | 514 | *dst++ = j; *dst++ = j; *dst++ = j; *dst++ = j; |
| 517 | 515 | *dst++ = n; *dst++ = n; *dst++ = n; *dst++ = n; |
| @@ -524,13 +522,12 @@ static void codec33_gen_tiles(SANMVideoContext *ctx, int8_t param1) · 6 unmodified lines | ||
| 524 | 522 | for (k = 0; k < 8; k++) { |
| 525 | 523 | j = i + param1; |
| 526 | 524 | l = k + param1; |
| 527 | − m = (j + l) / 2; | |
| 528 | − n = (j + m) / 2; | |
| 529 | − o = m / 2; | |
| 530 | − p = j & 0xff; | |
| 525 | + m = (j + l) >> 1; | |
| 526 | + n = (j + m) >> 1; | |
| 527 | + o = (l + m) >> 1; | |
| 531 | 528 | |
| 532 | − *dst++ = p; *dst++ = p; *dst++ = n; *dst++ = m; | |
| 533 | − *dst++ = p; *dst++ = p; *dst++ = n; *dst++ = m; | |
| 529 | + *dst++ = j; *dst++ = j; *dst++ = n; *dst++ = m; | |
| 530 | + *dst++ = j; *dst++ = j; *dst++ = n; *dst++ = m; | |
| 534 | 531 | *dst++ = n; *dst++ = n; *dst++ = m; *dst++ = o; |
| 535 | 532 | *dst++ = m; *dst++ = m; *dst++ = o; *dst++ = l; |
| 536 | 533 | } |
| @@ -540,8 +537,8 @@ static void codec33_gen_tiles(SANMVideoContext *ctx, int8_t param1) · 3 unmodified lines | ||
| 540 | 537 | for (k = 0; k < 8; k++) { |
| 541 | 538 | j = i + param1; |
| 542 | 539 | l = k + param1; |
| 543 | − m = (j + l) / 2; | |
| 544 | − n = m / 2; | |
| 540 | + m = (j + l) >> 1; | |
| 541 | + n = (l + m) >> 1; | |
| 545 | 542 | |
| 546 | 543 | *dst++ = j; *dst++ = m; *dst++ = n; *dst++ = l; |
| 547 | 544 | *dst++ = j; *dst++ = m; *dst++ = n; *dst++ = l; |