Skip to content

Commit 15e38af

Browse files
committed
sa1: match src/game/shared/stage/water_effects.c
1 parent e9494fa commit 15e38af

3 files changed

Lines changed: 45 additions & 304 deletions

File tree

sa1/asm/non_matching/game/shared/stage/water_effects__Task_StageWaterTask.inc

Lines changed: 0 additions & 277 deletions
This file was deleted.

sa1/src/game/shared/stage/water_effects.c

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,15 @@ static inline void MaskPaletteWithUnderwaterColor_inline(u32 *dst, u32 *src, u32
9999
}
100100
}
101101

102+
#if (GAME == GAME_SA1)
102103
void sub_804C40C(void)
103104
{
104105
Water *water = &gWater;
105106

106107
MaskPaletteWithUnderwaterColor_inline((u32 *)&sPaletteBuffer[0], (u32 *)&gObjPalette[0], water->mask, 16 * 16);
107108
MaskPaletteWithUnderwaterColor_inline((u32 *)&sPaletteBuffer[16 * 16], (u32 *)&gBgPalette[0], water->mask, 16 * 16);
108109
}
110+
#endif
109111

110112
#if (GAME == GAME_SA2)
111113
void InitWaterPalettes(void)
@@ -209,21 +211,12 @@ void CreateStageWaterTask(s32 waterLevel, u32 p1, u32 mask)
209211
}
210212
}
211213

212-
// (91.10%) https://decomp.me/scratch/zSeoc
213-
NONMATCH("asm/non_matching/game/shared/stage/water_effects__Task_StageWaterTask.inc", void Task_StageWaterTask(void))
214+
void Task_StageWaterTask(void)
214215
{
215216
Water *water = &gWater;
216217
struct Camera *cam = &gCamera;
217218
bool32 active;
218219
Sprite *s;
219-
u8 unk1;
220-
#ifndef NON_MATCHING
221-
register u8 unk2_0 asm("r0");
222-
register u8 unk2_2 asm("r2");
223-
#else
224-
u8 unk2_0;
225-
u8 unk2_2;
226-
#endif
227220

228221
#if (HAS_RUN_ON_WATER)
229222
if ((gCurrentLevel == LEVEL_INDEX(ZONE_1, ACT_1)) && (I(gPlayer.qWorldX) > 6665) && (I(gPlayer.qWorldX) <= 10650)) {
@@ -258,8 +251,7 @@ NONMATCH("asm/non_matching/game/shared/stage/water_effects__Task_StageWaterTask.
258251
gVBlankCallbacks[gNumVBlankCallbacks++] = SA2_LABEL(sub_8011A4C);
259252
gFlags |= FLAGS_EXECUTE_VBLANK_CALLBACKS;
260253

261-
unk1 = water->SA2_LABEL(unk1) - 1;
262-
if (unk1 < DISPLAY_HEIGHT - 1) {
254+
if (water->SA2_LABEL(unk1) > 0 && water->SA2_LABEL(unk1) < DISPLAY_HEIGHT) {
263255
s = &water->s;
264256
s->x = -((cam->x + ((gStageTime + 1) >> 2)) & 15);
265257
s->y = water->SA2_LABEL(unk2) + 1;
@@ -278,35 +270,31 @@ NONMATCH("asm/non_matching/game/shared/stage/water_effects__Task_StageWaterTask.
278270
}
279271
}
280272

281-
unk2_0 = (water->SA2_LABEL(unk2));
282-
if ((unk2_2 = unk2_0 - 1) < DISPLAY_HEIGHT - 1) {
273+
if (water->SA2_LABEL(unk2) > 0 && water->SA2_LABEL(unk2) < DISPLAY_HEIGHT) {
283274
gIntrTable[INTR_INDEX_VCOUNT] = SA2_LABEL(VCountIntr_8011ACC);
284-
gVCountSetting = unk2_0 - 1;
275+
gVCountSetting = water->SA2_LABEL(unk2) - 1;
285276
gFlags |= FLAGS_40;
286277
} else {
287278
gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT];
288279
gFlags &= ~FLAGS_40;
289280
}
290281

291282
#if (GAME == GAME_SA1)
292-
if (unk2_0 >= DISPLAY_HEIGHT) {
283+
if (water->SA2_LABEL(unk2) >= DISPLAY_HEIGHT) {
293284
gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY;
294285
} else {
295-
s32 r3 = gStageTime * 4;
296-
u32 r5;
297-
s32 adder;
298-
void *ptr;
299-
r3 += (gBgScrollRegs[3][1] + water->SA2_LABEL(unk2) % 32u) << 6;
300-
r3 %= 1024u;
286+
#ifndef NON_MATCHING
287+
UNUSED u32 _;
288+
#endif
289+
u32 r5, i;
290+
s32 r3 = CLAMP_SIN_PERIOD(((gStageTime * 4) + (((gBgScrollRegs[3][1] + water->SA2_LABEL(unk2)) % 32u) << 6)));
301291

302292
SA2_LABEL(sub_8007738)
303293
(3, 0, 32, r3, 2, 64, (((gStageTime * 2 + (((gBgScrollRegs[3][1] + water->SA2_LABEL(unk2)) % 32u) << 5))) + 0x100) & ONE_CYCLE, 10,
304294
32, gBgScrollRegs[3][0], gBgScrollRegs[3][1]);
305295

306-
for (r5 = 32, ptr = gBgOffsetsHBlankPrimary + (adder = (gHBlankCopySize << 5)); r5 < DISPLAY_HEIGHT;) {
307-
DmaCopy32(3, gBgOffsetsHBlankPrimary, ptr, (gHBlankCopySize << 5));
308-
ptr += adder;
309-
r5 += 0x20;
296+
for (r5 = 32, i = 1; r5 < DISPLAY_HEIGHT; i++, r5 += 32) {
297+
DmaCopy32(3, gBgOffsetsHBlankPrimary, gBgOffsetsHBlankPrimary + ((gHBlankCopySize << 5) * i), (gHBlankCopySize << 5));
310298
}
311299

312300
if (water->SA2_LABEL(unk2)) {
@@ -315,7 +303,6 @@ NONMATCH("asm/non_matching/game/shared/stage/water_effects__Task_StageWaterTask.
315303
}
316304
#endif
317305
}
318-
END_NONMATCH
319306

320307
#if (HAS_RUN_ON_WATER)
321308
void CreateRunOnWaterEffect(void)

0 commit comments

Comments
 (0)