diff options
Diffstat (limited to 'src/field_camera.c')
-rw-r--r-- | src/field_camera.c | 234 |
1 files changed, 111 insertions, 123 deletions
diff --git a/src/field_camera.c b/src/field_camera.c index c55d8e2a3..1aed1549b 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -1,14 +1,12 @@ #include "global.h" #include "field_camera.h" -#include "asm.h" #include "berry.h" #include "field_player_avatar.h" -#include "asm_fieldmap.h" +#include "fieldmap.h" +#include "rotating_gate.h" #include "sprite.h" #include "text.h" -extern u16 gBGTilemapBuffers[4][0x400]; - extern u8 gUnknown_0202E854; @@ -27,16 +25,6 @@ extern s16 gUnknown_0300059A; extern u8 gUnknown_0300059C; extern void (*gUnknown_030005A0)(void); -struct CameraSomething -{ - void (*callback)(struct CameraSomething *); - u32 unk4; - s32 unk8; - s32 unkC; - s32 unk10; - s32 unk14; -}; - extern struct CameraSomething gUnknown_03004880; extern u16 gUnknown_03004898; extern u16 gUnknown_0300489C; @@ -91,8 +79,8 @@ void sub_8057A58(void) *gBGVOffsetRegs[2] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; *gBGHOffsetRegs[3] = gUnknown_03000590.unk0 + gUnknown_03000598; *gBGVOffsetRegs[3] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; - - if(gUnknown_03000590.unk4) + + if (gUnknown_03000590.unk4) { DmaCopy16(3, gBGTilemapBuffers[1], (void *)(VRAM + 0xE800), 0x800); DmaCopy16(3, gBGTilemapBuffers[2], (void *)(VRAM + 0xE000), 0x800); @@ -119,17 +107,17 @@ static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData) u8 j; u32 r6; u8 temp; - - for(i = 0; i < 32; i += 2) + + for (i = 0; i < 32; i += 2) { temp = gUnknown_03000590.unk3 + i; - if(temp >= 32) + if (temp >= 32) temp -= 32; r6 = temp * 32; - for(j = 0; j < 32; j += 2) + for (j = 0; j < 32; j += 2) { temp = gUnknown_03000590.unk2 + j; - if(temp >= 32) + if (temp >= 32) temp -= 32; DrawMetatileAt(mapData, r6 + temp, x + j / 2, y + i / 2); } @@ -139,14 +127,14 @@ static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData) static void RedrawMapSlicesForCameraUpdate(struct UnknownStruct *a, int x, int y) { struct MapData *mapData = gMapHeader.mapData; - - if(x > 0) + + if (x > 0) RedrawMapSliceWest(a, mapData); - if(x < 0) + if (x < 0) RedrawMapSliceEast(a, mapData); - if(y > 0) + if (y > 0) RedrawMapSliceNorth(a, mapData); - if(y < 0) + if (y < 0) RedrawMapSliceSouth(a, mapData); a->unk4 = TRUE; } @@ -156,15 +144,15 @@ static void RedrawMapSliceNorth(struct UnknownStruct *a, struct MapData *mapData u8 i; u8 temp; u32 r7; - + temp = a->unk3 + 28; - if(temp >= 32) + if (temp >= 32) temp -= 32; r7 = temp * 32; - for(i = 0; i < 32; i += 2) + for (i = 0; i < 32; i += 2) { temp = a->unk2 + i; - if(temp >= 32) + if (temp >= 32) temp -= 32; DrawMetatileAt(mapData, r7 + temp, gSaveBlock1.pos.x + i / 2, gSaveBlock1.pos.y + 14); } @@ -175,11 +163,11 @@ static void RedrawMapSliceSouth(struct UnknownStruct *a, struct MapData *mapData u8 i; u8 temp; u32 r7 = a->unk3 * 32; - - for(i = 0; i < 32; i += 2) + + for (i = 0; i < 32; i += 2) { temp = a->unk2 + i; - if(temp >= 32) + if (temp >= 32) temp -= 32; DrawMetatileAt(mapData, r7 + temp, gSaveBlock1.pos.x + i / 2, gSaveBlock1.pos.y); } @@ -190,11 +178,11 @@ static void RedrawMapSliceEast(struct UnknownStruct *a, struct MapData *mapData) u8 i; u8 temp; u32 r6 = a->unk2; - - for(i = 0; i < 32; i += 2) + + for (i = 0; i < 32; i += 2) { temp = a->unk3 + i; - if(temp >= 32) + if (temp >= 32) temp -= 32; DrawMetatileAt(mapData, temp * 32 + r6, gSaveBlock1.pos.x, gSaveBlock1.pos.y + i / 2); } @@ -205,13 +193,13 @@ static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData) u8 i; u8 temp; u8 r5 = a->unk2 + 28; - - if(r5 >= 32) + + if (r5 >= 32) r5 -= 32; - for(i = 0; i < 32; i += 2) + for (i = 0; i < 32; i += 2) { temp = a->unk3 + i; - if(temp >= 32) + if (temp >= 32) temp -= 32; DrawMetatileAt(mapData, temp * 32 + r5, gSaveBlock1.pos.x + 14, gSaveBlock1.pos.y + i / 2); } @@ -220,8 +208,8 @@ static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData) void CurrentMapDrawMetatileAt(int a, int b) { int offset = MapPosToBgTilemapOffset(&gUnknown_03000590, a, b); - - if(offset >= 0) + + if (offset >= 0) { DrawMetatileAt(gMapHeader.mapData, offset, a, b); gUnknown_03000590.unk4 = TRUE; @@ -231,8 +219,8 @@ void CurrentMapDrawMetatileAt(int a, int b) void DrawDoorMetatileAt(int x, int y, u16 *arr) { int offset = MapPosToBgTilemapOffset(&gUnknown_03000590, x, y); - - if(offset >= 0) + + if (offset >= 0) { DrawMetatile(1, arr, offset); gUnknown_03000590.unk4 = TRUE; @@ -243,10 +231,10 @@ static void DrawMetatileAt(struct MapData *mapData, u16 b, int c, int d) { u16 metatileId = MapGridGetMetatileIdAt(c, d); u16 *metatiles; - - if(metatileId > 1024) + + if (metatileId > 1024) metatileId = 0; - if(metatileId < 512) + if (metatileId < 512) metatiles = mapData->primaryTileset->metatiles; else { @@ -258,56 +246,56 @@ static void DrawMetatileAt(struct MapData *mapData, u16 b, int c, int d) static void DrawMetatile(s32 a, u16 *b, u16 c) { - switch(a) + switch (a) { - case 2: - gBGTilemapBuffers[3][c] = b[0]; - gBGTilemapBuffers[3][c + 1] = b[1]; - gBGTilemapBuffers[3][c + 0x20] = b[2]; - gBGTilemapBuffers[3][c + 0x21] = b[3]; - - gBGTilemapBuffers[2][c] = 0; - gBGTilemapBuffers[2][c + 1] = 0; - gBGTilemapBuffers[2][c + 0x20] = 0; - gBGTilemapBuffers[2][c + 0x21] = 0; - - gBGTilemapBuffers[1][c] = b[4]; - gBGTilemapBuffers[1][c + 1] = b[5]; - gBGTilemapBuffers[1][c + 0x20] = b[6]; - gBGTilemapBuffers[1][c + 0x21] = b[7]; - break; - case 1: - gBGTilemapBuffers[3][c] = b[0]; - gBGTilemapBuffers[3][c + 1] = b[1]; - gBGTilemapBuffers[3][c + 0x20] = b[2]; - gBGTilemapBuffers[3][c + 0x21] = b[3]; - - gBGTilemapBuffers[2][c] = b[4]; - gBGTilemapBuffers[2][c + 1] = b[5]; - gBGTilemapBuffers[2][c + 0x20] = b[6]; - gBGTilemapBuffers[2][c + 0x21] = b[7]; - - gBGTilemapBuffers[1][c] = 0; - gBGTilemapBuffers[1][c + 1] = 0; - gBGTilemapBuffers[1][c + 0x20] = 0; - gBGTilemapBuffers[1][c + 0x21] = 0; - break; - case 0: - gBGTilemapBuffers[3][c] = 0x3014; - gBGTilemapBuffers[3][c + 1] = 0x3014; - gBGTilemapBuffers[3][c + 0x20] = 0x3014; - gBGTilemapBuffers[3][c + 0x21] = 0x3014; - - gBGTilemapBuffers[2][c] = b[0]; - gBGTilemapBuffers[2][c + 1] = b[1]; - gBGTilemapBuffers[2][c + 0x20] = b[2]; - gBGTilemapBuffers[2][c + 0x21] = b[3]; - - gBGTilemapBuffers[1][c] = b[4]; - gBGTilemapBuffers[1][c + 1] = b[5]; - gBGTilemapBuffers[1][c + 0x20] = b[6]; - gBGTilemapBuffers[1][c + 0x21] = b[7]; - break; + case 2: + gBGTilemapBuffers[3][c] = b[0]; + gBGTilemapBuffers[3][c + 1] = b[1]; + gBGTilemapBuffers[3][c + 0x20] = b[2]; + gBGTilemapBuffers[3][c + 0x21] = b[3]; + + gBGTilemapBuffers[2][c] = 0; + gBGTilemapBuffers[2][c + 1] = 0; + gBGTilemapBuffers[2][c + 0x20] = 0; + gBGTilemapBuffers[2][c + 0x21] = 0; + + gBGTilemapBuffers[1][c] = b[4]; + gBGTilemapBuffers[1][c + 1] = b[5]; + gBGTilemapBuffers[1][c + 0x20] = b[6]; + gBGTilemapBuffers[1][c + 0x21] = b[7]; + break; + case 1: + gBGTilemapBuffers[3][c] = b[0]; + gBGTilemapBuffers[3][c + 1] = b[1]; + gBGTilemapBuffers[3][c + 0x20] = b[2]; + gBGTilemapBuffers[3][c + 0x21] = b[3]; + + gBGTilemapBuffers[2][c] = b[4]; + gBGTilemapBuffers[2][c + 1] = b[5]; + gBGTilemapBuffers[2][c + 0x20] = b[6]; + gBGTilemapBuffers[2][c + 0x21] = b[7]; + + gBGTilemapBuffers[1][c] = 0; + gBGTilemapBuffers[1][c + 1] = 0; + gBGTilemapBuffers[1][c + 0x20] = 0; + gBGTilemapBuffers[1][c + 0x21] = 0; + break; + case 0: + gBGTilemapBuffers[3][c] = 0x3014; + gBGTilemapBuffers[3][c + 1] = 0x3014; + gBGTilemapBuffers[3][c + 0x20] = 0x3014; + gBGTilemapBuffers[3][c + 0x21] = 0x3014; + + gBGTilemapBuffers[2][c] = b[0]; + gBGTilemapBuffers[2][c + 1] = b[1]; + gBGTilemapBuffers[2][c + 0x20] = b[2]; + gBGTilemapBuffers[2][c + 0x21] = b[3]; + + gBGTilemapBuffers[1][c] = b[4]; + gBGTilemapBuffers[1][c + 1] = b[5]; + gBGTilemapBuffers[1][c + 0x20] = b[6]; + gBGTilemapBuffers[1][c + 0x21] = b[7]; + break; } } @@ -315,25 +303,25 @@ static s32 MapPosToBgTilemapOffset(struct UnknownStruct *a, s32 x, s32 y) { x -= gSaveBlock1.pos.x; x *= 2; - if(x >= 32 || x < 0) + if (x >= 32 || x < 0) return -1; x = x + a->unk2; - if(x >= 32) + if (x >= 32) x -= 32; - + y = (y - gSaveBlock1.pos.y) * 2; - if(y >= 32 || y < 0) + if (y >= 32 || y < 0) return -1; y = y + a->unk3; - if(y >= 32) + if (y >= 32) y -= 32; - + return y * 32 + x; } static void CameraUpdateCallback(struct CameraSomething *a) { - if(a->unk4 != 0) + if (a->unk4 != 0) { a->unk8 = gSprites[a->unk4].data2; a->unkC = gSprites[a->unk4].data3; @@ -352,7 +340,7 @@ void ResetCameraUpdateInfo(void) u32 InitCameraUpdateCallback(u8 a) { - if(gUnknown_03004880.unk4 != 0) + if (gUnknown_03004880.unk4 != 0) DestroySprite(&gSprites[gUnknown_03004880.unk4]); gUnknown_03004880.unk4 = AddCameraObject(a); gUnknown_03004880.callback = CameraUpdateCallback; @@ -367,8 +355,8 @@ void CameraUpdate(void) int r1; int r7; int r8; - - if(gUnknown_03004880.callback != NULL) + + if (gUnknown_03004880.callback != NULL) gUnknown_03004880.callback(&gUnknown_03004880); r7 = gUnknown_03004880.unk8; r8 = gUnknown_03004880.unkC; @@ -376,43 +364,43 @@ void CameraUpdate(void) deltaY = 0; r1 = gUnknown_03004880.unk10; r0 = gUnknown_03004880.unk14; - - - if(r1 == 0 && r7 != 0) + + + if (r1 == 0 && r7 != 0) { - if(r7 > 0) + if (r7 > 0) deltaX = 1; else deltaX = -1; } - if(r0 == 0 && r8 != 0) + if (r0 == 0 && r8 != 0) { - if(r8 > 0) + if (r8 > 0) deltaY = 1; else deltaY = -1; } - if(r1 != 0 && r1 == -r7) + if (r1 != 0 && r1 == -r7) { - if(r7 > 0) + if (r7 > 0) deltaX = 1; else deltaX = -1; } - if(r0 != 0 && r0 == -r8) + if (r0 != 0 && r0 == -r8) { - if(r8 > 0) + if (r8 > 0) deltaX = 1; else deltaX = -1; } - + gUnknown_03004880.unk10 += r7; - gUnknown_03004880.unk10 = gUnknown_03004880.unk10 - 16 * (gUnknown_03004880.unk10 / 16); + gUnknown_03004880.unk10 = gUnknown_03004880.unk10 - 16 * (gUnknown_03004880.unk10 / 16); gUnknown_03004880.unk14 += r8; gUnknown_03004880.unk14 = gUnknown_03004880.unk14 - 16 * (gUnknown_03004880.unk14 / 16); - - if(deltaX != 0 || deltaY != 0) + + if (deltaX != 0 || deltaY != 0) { CameraMove(deltaX, deltaY); UpdateFieldObjectsForCameraUpdate(deltaX, deltaY); @@ -421,7 +409,7 @@ void CameraUpdate(void) tilemap_move_something(&gUnknown_03000590, deltaX * 2, deltaY * 2); RedrawMapSlicesForCameraUpdate(&gUnknown_03000590, deltaX * 2, deltaY * 2); } - + coords8_add(&gUnknown_03000590, r7, r8); gUnknown_0300489C -= r7; gUnknown_03004898 -= r8; @@ -467,7 +455,7 @@ void UpdateCameraPanning(void) static void CameraPanningCB_PanAhead(void) { u8 var; - + if (gUnknown_0202E854 == 0) { InstallCameraPanAheadCallback(); @@ -484,7 +472,7 @@ static void CameraPanningCB_PanAhead(void) { gUnknown_0300059C = 0; } - + var = player_get_direction_upper_nybble(); if (var == 2) { |