Skip to content

Commit 288b930

Browse files
committed
Match sub_80A23A4
1 parent 679fa78 commit 288b930

4 files changed

Lines changed: 38 additions & 234 deletions

File tree

‎asm/game__opening.s‎

Lines changed: 0 additions & 191 deletions
Original file line numberDiff line numberDiff line change
@@ -7,197 +7,6 @@
77

88
.if 0
99
.else
10-
thumb_func_start sub_80A23A4
11-
sub_80A23A4: @ 0x080A23A4
12-
push {r4, r5, r6, r7, lr}
13-
mov r7, sb
14-
mov r6, r8
15-
push {r6, r7}
16-
ldr r0, _080A244C @ =gCurTask
17-
ldr r0, [r0]
18-
ldrh r2, [r0, #6]
19-
movs r0, #0xc0
20-
lsls r0, r0, #0x12
21-
adds r0, r0, r2
22-
mov r8, r0
23-
ldr r1, _080A2450 @ =gHBlankCopySize
24-
movs r0, #0x10
25-
strb r0, [r1]
26-
ldr r1, _080A2454 @ =gHBlankCopyTarget
27-
ldr r0, _080A2458 @ =0x04000020
28-
str r0, [r1]
29-
ldr r1, _080A245C @ =gBgOffsetsHBlankPrimary
30-
ldr r3, _080A2460 @ =0x0300012C
31-
adds r0, r2, r3
32-
ldr r4, [r0]
33-
str r4, [r1]
34-
ldr r3, _080A2464 @ =gFlags
35-
ldr r0, [r3]
36-
movs r1, #4
37-
orrs r0, r1
38-
str r0, [r3]
39-
ldr r5, _080A2468 @ =0x03000138
40-
adds r3, r2, r5
41-
ldr r1, _080A246C @ =0x03000140
42-
adds r0, r2, r1
43-
ldrh r0, [r0]
44-
ldrh r5, [r3]
45-
adds r0, r0, r5
46-
ldr r1, _080A2470 @ =0x00000FFF
47-
ands r0, r1
48-
strh r0, [r3]
49-
ldr r0, _080A2474 @ =0x0300013A
50-
adds r3, r2, r0
51-
ldr r1, _080A2478 @ =0x03000142
52-
adds r0, r2, r1
53-
ldrh r0, [r0]
54-
ldrh r5, [r3]
55-
adds r0, r0, r5
56-
ldr r1, _080A247C @ =0x000007FF
57-
ands r0, r1
58-
strh r0, [r3]
59-
ldr r0, _080A2480 @ =0x03000148
60-
adds r1, r2, r0
61-
ldr r3, _080A2484 @ =0x03000144
62-
adds r0, r2, r3
63-
ldrh r0, [r0]
64-
ldrh r5, [r1]
65-
adds r0, r0, r5
66-
strh r0, [r1]
67-
ldr r0, _080A2488 @ =0x0300014A
68-
adds r1, r2, r0
69-
adds r3, #2
70-
adds r0, r2, r3
71-
ldrh r0, [r0]
72-
ldrh r5, [r1]
73-
adds r0, r0, r5
74-
strh r0, [r1]
75-
movs r1, #0
76-
ldr r0, _080A248C @ =0x03000136
77-
adds r6, r2, r0
78-
subs r3, #0x16
79-
adds r3, r3, r2
80-
mov ip, r3
81-
ldr r5, _080A2474 @ =0x0300013A
82-
adds r5, r5, r2
83-
mov sb, r5
84-
_080A2434:
85-
lsls r1, r1, #0x10
86-
asrs r2, r1, #0x10
87-
movs r3, #0
88-
ldrsh r0, [r6, r3]
89-
subs r0, r2, r0
90-
adds r7, r1, #0
91-
cmp r0, #0
92-
blt _080A2490
93-
ldrh r0, [r6]
94-
subs r0, r2, r0
95-
b _080A2494
96-
.align 2, 0
97-
_080A244C: .4byte gCurTask
98-
_080A2450: .4byte gHBlankCopySize
99-
_080A2454: .4byte gHBlankCopyTarget
100-
_080A2458: .4byte 0x04000020
101-
_080A245C: .4byte gBgOffsetsHBlankPrimary
102-
_080A2460: .4byte 0x0300012C
103-
_080A2464: .4byte gFlags
104-
_080A2468: .4byte 0x03000138
105-
_080A246C: .4byte 0x03000140
106-
_080A2470: .4byte 0x00000FFF
107-
_080A2474: .4byte 0x0300013A
108-
_080A2478: .4byte 0x03000142
109-
_080A247C: .4byte 0x000007FF
110-
_080A2480: .4byte 0x03000148
111-
_080A2484: .4byte 0x03000144
112-
_080A2488: .4byte 0x0300014A
113-
_080A248C: .4byte 0x03000136
114-
_080A2490:
115-
ldrh r0, [r6]
116-
subs r0, r0, r2
117-
_080A2494:
118-
lsls r0, r0, #0x10
119-
lsrs r0, r0, #0x10
120-
adds r5, r0, #0
121-
lsls r1, r5, #0x10
122-
asrs r1, r1, #0x10
123-
mov r0, ip
124-
ldr r2, [r0]
125-
lsls r0, r1, #2
126-
adds r0, r0, r2
127-
ldr r0, [r0]
128-
muls r1, r0, r1
129-
lsls r1, r1, #1
130-
mov r2, sb
131-
ldrh r0, [r2]
132-
lsls r0, r0, #4
133-
adds r1, r1, r0
134-
lsls r1, r1, #0x10
135-
lsrs r3, r1, #0x10
136-
asrs r1, r7, #0x10
137-
movs r2, #0
138-
ldrsh r0, [r6, r2]
139-
cmp r1, r0
140-
bge _080A24D4
141-
lsls r0, r3, #0x10
142-
cmp r0, #0
143-
bge _080A24E4
144-
ldr r1, _080A24D0 @ =0xFFFF8000
145-
adds r0, r3, r1
146-
b _080A24E0
147-
.align 2, 0
148-
_080A24D0: .4byte 0xFFFF8000
149-
_080A24D4:
150-
lsls r0, r3, #0x10
151-
cmp r0, #0
152-
blt _080A24E4
153-
movs r2, #0x80
154-
lsls r2, r2, #8
155-
adds r0, r3, r2
156-
_080A24E0:
157-
lsls r0, r0, #0x10
158-
lsrs r3, r0, #0x10
159-
_080A24E4:
160-
lsls r2, r5, #0x10
161-
mov r5, ip
162-
ldr r0, [r5]
163-
asrs r2, r2, #0xe
164-
adds r0, r2, r0
165-
ldr r0, [r0]
166-
lsrs r0, r0, #2
167-
strh r0, [r4]
168-
ldr r0, [r5]
169-
adds r2, r2, r0
170-
movs r0, #0x9a
171-
lsls r0, r0, #1
172-
add r0, r8
173-
movs r5, #0
174-
ldrsh r1, [r0, r5]
175-
ldr r0, [r2]
176-
muls r1, r0, r1
177-
lsrs r1, r1, #2
178-
movs r0, #0x9c
179-
lsls r0, r0, #1
180-
add r0, r8
181-
ldrh r0, [r0]
182-
lsls r0, r0, #4
183-
adds r1, r1, r0
184-
strh r1, [r4, #8]
185-
strh r3, [r4, #0xc]
186-
movs r1, #0x80
187-
lsls r1, r1, #9
188-
adds r0, r7, r1
189-
adds r4, #0x10
190-
lsrs r1, r0, #0x10
191-
asrs r0, r0, #0x10
192-
cmp r0, #0x9f
193-
ble _080A2434
194-
pop {r3, r4}
195-
mov r8, r3
196-
mov sb, r4
197-
pop {r4, r5, r6, r7}
198-
pop {r0}
199-
bx r0
200-
20110
thumb_func_start Task_170_GameIntroInit
20211
Task_170_GameIntroInit: @ 0x080A2534
20312
push {r4, r5, r6, lr}

‎include/constants/animations.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
#define CHAR_ANIM_ATK_DOWN_B 107
2222

23-
#define CHAR_ANIM_POLE_DANCE 133
23+
#define CHAR_ANIM_POLE_DANCE 133
2424
#define CHAR_ANIM_PERSPECTIVE_RUN 161 // Char running front-facing, sidewards-facing AND back-facing
2525

2626
#define ANIM_CHEESE_BOSS_DEFEAT 825
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#ifndef GUARD_GAME_SA3_CUTSCENE_OPENING_H
22
#define GUARD_GAME_SA3_CUTSCENE_OPENING_H
33

4-
54
void CreateGameIntroState(s16 state);
65

7-
86
#endif // GUARD_GAME_SA3_CUTSCENE_OPENING_H

‎src/game/sa3/cutscenes/opening.c‎

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
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!
395396
void 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
441438
void Task_170_GameIntroInit(Opening170 *strc170)
442439
{
443440
? sp0;

0 commit comments

Comments
 (0)