11#include "global.h"
22#include "core.h"
3+ #include "flags.h"
34#include "game/code_1_3.h" // DmaIoData
45#include "game/game.h"
56#include "game/stage.h"
@@ -17,11 +18,11 @@ typedef struct {
1718 /* 0x0E8 */ Background bgE8 ;
1819 /* 0x128 */ s16 unk128 ;
1920 /* 0x12C */ DmaIoData * ewramData12C ;
20- /* 0x130 */ s32 * ewramData130 ;
21+ /* 0x130 */ u32 * ewramData130 ;
2122 /* 0x134 */ s16 unk134 ;
2223 /* 0x136 */ s16 unk136 ;
23- /* 0x138 */ s16 unk138 ;
24- /* 0x13A */ s16 unk13A ;
24+ /* 0x138 */ u16 unk138 ;
25+ /* 0x13A */ u16 unk13A ;
2526 /* 0x13C */ s16 unk13C ;
2627 /* 0x13E */ s16 unk13E ;
2728 /* 0x140 */ s16 unk140 ;
@@ -390,54 +391,50 @@ void sub_80A22E0(Opening170 *strc170)
390391 tf -> y = s -> y ;
391392 }
392393}
393- #if 01
394- #else
394+
395+ // TODO: Fake-match!
395396void sub_80A23A4 (void )
396397{
397398 Opening170 * strc170 = TASK_DATA (gCurTask );
398399 s16 temp_r1 ;
399- s16 temp_r2 ;
400- s16 var_r1 ;
401- s32 temp_r2_2 ;
402- u16 temp_r0_2 ;
403- u16 var_r0 ;
404- u16 var_r0_2 ;
400+ s16 scanline ;
405401 u16 var_r3 ;
406- u32 temp_r0 ;
407- void * var_r4 ;
402+ #ifndef NON_MATCHING
403+ register DmaIoData * bgAffine asm("r4" );
404+ #else
405+ DmaIoData * bgAffine ;
406+ #endif
408407
409- gHBlankCopySize = 0x10 ;
410- gHBlankCopyTarget = & REG_BG2PA ;
411- var_r4 = strc170 -> ewramData12C ;
412- gBgOffsetsHBlankPrimary = var_r4 ;
413- gFlags |= 4 ;
414- strc170 -> unk138 = (u16 )((strc170 -> unk140 + strc170 -> unk138 ) & 0xFFF );
415- strc170 -> unk13A = (u16 )((strc170 -> unk142 + strc170 -> unk13A ) & 0x7FF );
416- strc170 -> unk148 = (u16 )(strc170 -> unk144 + strc170 -> unk148 );
417- strc170 -> unk14A = (u16 )(strc170 -> unk146 + strc170 -> unk14A );
418- for (var_r1 = 0 ; var_r1 < DISPLAY_HEIGHT ; var_r1 ++ )
419- {
420- temp_r0_2 = ABS (var_r1 - strc170 -> unk136 );
421- temp_r1 = (s16 )temp_r0_2 ;
422- var_r3 = (strc170 -> ewramData1308 [temp_r1 ] * temp_r1 * 2 )
423- + (strc170 -> unk13A * 0x10 );
424- if ((s32 )var_r1 < (s32 )strc170 -> unk136 ) {
425- if ((s32 )(var_r3 << 0x10 ) < 0 ) {
426- var_r0_2 = var_r3 + 0xFFFF8000 ;
427- var_r3 = var_r0_2 ;
408+ gHBlankCopySize = sizeof (* strc170 -> ewramData12C );
409+ gHBlankCopyTarget = (void * )& REG_BG2PA ;
410+ gBgOffsetsHBlankPrimary = bgAffine = strc170 -> ewramData12C ;
411+ gFlags |= FLAGS_EXECUTE_HBLANK_COPY ;
412+ strc170 -> unk138 += strc170 -> unk140 ;
413+ strc170 -> unk138 &= 0xFFF ;
414+ strc170 -> unk13A += strc170 -> unk142 ;
415+ strc170 -> unk13A &= 0x7FF ;
416+ strc170 -> unk148 += strc170 -> unk144 ;
417+ strc170 -> unk14A += strc170 -> unk146 ;
418+
419+ for (scanline = 0 ; scanline < DISPLAY_HEIGHT ; scanline ++ , bgAffine ++ ) {
420+ temp_r1 = ABS (scanline - strc170 -> unk136 );
421+ var_r3 = (strc170 -> ewramData130 [temp_r1 ] * temp_r1 * 2 ) + (strc170 -> unk13A * 0x10 );
422+ if (scanline < strc170 -> unk136 ) {
423+ if ((s16 )var_r3 < 0 ) {
424+ s32 temp_r3 = var_r3 - Q (128 );
425+ var_r3 = temp_r3 ;
428426 }
429- } else if ((s32 )(var_r3 << 0x10 ) >= 0 ) {
430- var_r0_2 = var_r3 + 0x8000 ;
431- block_9 :
432- var_r3 = var_r0_2 ;
427+ } else if ((s16 )var_r3 >= 0 ) {
428+ var_r3 += Q (128 );
433429 }
434- temp_r2_2 = (s32 )(temp_r0_2 << 0x10 ) >> 0xE ;
435- var_r4 -> unk0 = (s16 )((u32 ) * (temp_r2_2 + strc170 -> ewramData130 ) >> 2 );
436- var_r4 -> unk8 = (s16 )(((u32 )(* (temp_r2_2 + strc170 -> ewramData130 ) * strc170 -> unk134 ) >> 2 ) + (strc170 -> unk138 * 0x10 ));
437- var_r4 -> unkC = var_r3 ;
430+ bgAffine -> bg2pa = strc170 -> ewramData130 [temp_r1 ] / 4 ;
431+ bgAffine -> bg2x_l = (((strc170 -> ewramData130 [temp_r1 ] * strc170 -> unk134 ) >> 2 ) + (strc170 -> unk138 * 0x10 ));
432+ bgAffine -> bg2y_l = var_r3 ;
438433 }
439434}
440435
436+ #if 01
437+ #else
441438void Task_170_GameIntroInit (Opening170 * strc170 )
442439{
443440 ? sp0 ;
0 commit comments