mirror of https://github.com/zeldaret/tmc.git
Document some screen shake data
This commit is contained in:
parent
bbac5ace3f
commit
99c0d42297
|
@ -37,7 +37,7 @@ GetNextScriptCommandWordAfterCommandMetadata: @ 0x08016998
|
|||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
gUnk_080169A4::
|
||||
gScreenShakeOffsets::
|
||||
.byte 0x01, 0xFF, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x01, 0x00
|
||||
.byte 0xFF, 0x01, 0x00, 0x00, 0x02, 0xFF, 0x01, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x02
|
||||
.byte 0x00, 0x00, 0x01, 0x01, 0x02, 0xFF, 0x02, 0xFE, 0xFE, 0x02, 0xFF, 0x03, 0xFD, 0xFF, 0xFE, 0x01
|
||||
|
|
|
@ -28,7 +28,7 @@ extern void sub_0809D738(Entity*);
|
|||
extern s32 Mod(s32, s32);
|
||||
extern void sub_08003FDE(Entity*, u32, u32, u32);
|
||||
extern u32 sub_080B1B84(u32, u32);
|
||||
extern void sub_08080BC4(void);
|
||||
extern void UpdateScreenShake(void);
|
||||
void sub_080790E4(Entity* this);
|
||||
void sub_08079064(Entity*);
|
||||
|
||||
|
@ -3509,8 +3509,8 @@ void LoadRoomGfx(void) {
|
|||
MemClear(&gMapDataTopSpecial, 0x8000);
|
||||
LoadMapData((gArea.pCurrentRoomInfo)->map);
|
||||
if (gMapBottom.mapData[0] != 0xffff) {
|
||||
sub_0807C8B0(gMapBottom.mapData, roomControls->width >> 4, roomControls->height >> 4);
|
||||
sub_0807C8B0(gMapTop.mapData, roomControls->width >> 4, roomControls->height >> 4);
|
||||
sub_0807C8B0(gMapBottom.mapData, roomControls->width / 16, roomControls->height / 16);
|
||||
sub_0807C8B0(gMapTop.mapData, roomControls->width / 16, roomControls->height / 16);
|
||||
clearBottomMap = FALSE;
|
||||
} else {
|
||||
MemClear(gMapBottom.mapData, sizeof(gMapBottom.mapData));
|
||||
|
@ -3834,7 +3834,7 @@ void InitializeCamera() {
|
|||
}
|
||||
}
|
||||
roomControls->scroll_flags &= 0xfb;
|
||||
sub_08080BC4();
|
||||
UpdateScreenShake();
|
||||
}
|
||||
|
||||
void sub_0807C810(void) {
|
||||
|
|
106
src/scroll.c
106
src/scroll.c
|
@ -16,7 +16,7 @@
|
|||
#include "screen.h"
|
||||
#include "structures.h"
|
||||
|
||||
extern void sub_08080BC4(void);
|
||||
extern void UpdateScreenShake(void);
|
||||
extern void sub_0807C8B0(u16*, u32, u32);
|
||||
extern void RenderTilemapToScreenblock(u8*, LayerStruct*);
|
||||
extern void sub_0807C810();
|
||||
|
@ -64,7 +64,7 @@ void sub_08080910(s32);
|
|||
|
||||
extern u8 gMapDataTopSpecial[];
|
||||
|
||||
extern const s8 gUnk_080169A4[];
|
||||
extern const s8 gScreenShakeOffsets[];
|
||||
|
||||
void UpdateScroll(void) {
|
||||
static void (*const gUnk_0811E768[])(RoomControls*) = {
|
||||
|
@ -83,27 +83,29 @@ void sub_0807FC64(RoomControls* controls) {
|
|||
UpdateIsDiggingCave();
|
||||
}
|
||||
|
||||
// Scroll until target is at the center of the screen.
|
||||
void sub_0807FC7C(RoomControls* controls) {
|
||||
s32 uVar2;
|
||||
s32 uVar3;
|
||||
s32 diff;
|
||||
s32 iVar4;
|
||||
s32 uVar5;
|
||||
s32 temp;
|
||||
s32 targetValue;
|
||||
|
||||
if (controls->camera_target != NULL) {
|
||||
// Scroll in x direction.
|
||||
iVar4 = controls->scroll_x;
|
||||
temp = controls->camera_target->x.HALF.HI - 0x78;
|
||||
uVar3 = controls->scroll_x - temp;
|
||||
if (uVar3 != 0) {
|
||||
targetValue = controls->camera_target->x.HALF.HI - 0x78;
|
||||
diff = controls->scroll_x - targetValue;
|
||||
if (diff != 0) {
|
||||
uVar5 = controls->scroll_x & 7;
|
||||
if (uVar3 >= 1) {
|
||||
if (diff >= 1) {
|
||||
if (controls->origin_x < controls->scroll_x) {
|
||||
if (controls->scrollSpeed <= uVar3) {
|
||||
uVar3 = controls->scrollSpeed;
|
||||
if (controls->scrollSpeed <= diff) {
|
||||
diff = controls->scrollSpeed;
|
||||
controls->scroll_flags |= 4;
|
||||
}
|
||||
controls->scroll_x = controls->scroll_x - uVar3;
|
||||
if (uVar5 - uVar3 < 1) {
|
||||
controls->scroll_x = controls->scroll_x - diff;
|
||||
if (uVar5 - diff < 1) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
if (controls->origin_x >= controls->scroll_x) {
|
||||
|
@ -113,12 +115,12 @@ void sub_0807FC7C(RoomControls* controls) {
|
|||
} else {
|
||||
uVar2 = controls->origin_x + controls->width - 0xf0;
|
||||
if (controls->scroll_x < uVar2) {
|
||||
if (-controls->scrollSpeed >= uVar3) {
|
||||
uVar3 = -controls->scrollSpeed;
|
||||
if (-controls->scrollSpeed >= diff) {
|
||||
diff = -controls->scrollSpeed;
|
||||
controls->scroll_flags |= 4;
|
||||
}
|
||||
controls->scroll_x -= uVar3;
|
||||
if (uVar5 - uVar3 > 7) {
|
||||
controls->scroll_x -= diff;
|
||||
if (uVar5 - diff > 7) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
if (controls->scroll_x >= uVar2) {
|
||||
|
@ -128,19 +130,20 @@ void sub_0807FC7C(RoomControls* controls) {
|
|||
}
|
||||
}
|
||||
|
||||
// Scroll in y direction.
|
||||
iVar4 = controls->scroll_y;
|
||||
temp = controls->camera_target->y.HALF.HI - 0x50;
|
||||
uVar3 = controls->scroll_y - (temp);
|
||||
if (uVar3 != 0) {
|
||||
targetValue = controls->camera_target->y.HALF.HI - 0x50;
|
||||
diff = controls->scroll_y - (targetValue);
|
||||
if (diff != 0) {
|
||||
uVar5 = controls->scroll_y & 7;
|
||||
if (uVar3 >= 1) {
|
||||
if (diff >= 1) {
|
||||
if (controls->origin_y < controls->scroll_y) {
|
||||
if (controls->scrollSpeed <= uVar3) {
|
||||
uVar3 = controls->scrollSpeed;
|
||||
if (controls->scrollSpeed <= diff) {
|
||||
diff = controls->scrollSpeed;
|
||||
controls->scroll_flags |= 4;
|
||||
}
|
||||
controls->scroll_y = controls->scroll_y - uVar3;
|
||||
if (uVar5 - uVar3 < 1) {
|
||||
controls->scroll_y = controls->scroll_y - diff;
|
||||
if (uVar5 - diff < 1) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
if (controls->origin_y >= controls->scroll_y) {
|
||||
|
@ -150,12 +153,12 @@ void sub_0807FC7C(RoomControls* controls) {
|
|||
} else {
|
||||
uVar2 = controls->origin_y + controls->height - DISPLAY_HEIGHT;
|
||||
if (controls->scroll_y < uVar2) {
|
||||
if (-controls->scrollSpeed >= uVar3) {
|
||||
uVar3 = -controls->scrollSpeed;
|
||||
if (-controls->scrollSpeed >= diff) {
|
||||
diff = -controls->scrollSpeed;
|
||||
controls->scroll_flags |= 4;
|
||||
}
|
||||
controls->scroll_y -= uVar3;
|
||||
if (uVar5 - uVar3 > 7) {
|
||||
controls->scroll_y -= diff;
|
||||
if (uVar5 - diff > 7) {
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
if (controls->scroll_y >= uVar2) {
|
||||
|
@ -165,7 +168,7 @@ void sub_0807FC7C(RoomControls* controls) {
|
|||
}
|
||||
}
|
||||
}
|
||||
sub_08080BC4();
|
||||
UpdateScreenShake();
|
||||
}
|
||||
|
||||
void sub_0807FDB0(RoomControls* controls) {
|
||||
|
@ -239,7 +242,7 @@ void sub_0807FDF8(RoomControls* controls) {
|
|||
}
|
||||
|
||||
controls->shake_duration = 0;
|
||||
sub_08080BC4();
|
||||
UpdateScreenShake();
|
||||
}
|
||||
|
||||
void sub_0807FEC8(RoomControls* controls) {
|
||||
|
@ -775,7 +778,7 @@ void sub_080809D4(void) {
|
|||
roomControls->scroll_y = var1 - 80;
|
||||
}
|
||||
|
||||
sub_08080BC4();
|
||||
UpdateScreenShake();
|
||||
gUpdateVisibleTiles = 1;
|
||||
}
|
||||
|
||||
|
@ -833,44 +836,41 @@ void FillUnkData3ForLayer(LayerStruct* layer) {
|
|||
}
|
||||
}
|
||||
|
||||
void sub_08080BC4(void) {
|
||||
const s8* ptr;
|
||||
s32 tmpX;
|
||||
s32 tmpY;
|
||||
|
||||
tmpX = (gRoomControls.scroll_x - gRoomControls.origin_x) & 0xf;
|
||||
tmpY = ((gRoomControls.scroll_y - gRoomControls.origin_y) & 0xf) + 8;
|
||||
void UpdateScreenShake(void) {
|
||||
const s8* screenShakeOffset;
|
||||
s32 roomOffsetX = (gRoomControls.scroll_x - gRoomControls.origin_x) & 0xf;
|
||||
s32 roomOffsetY = ((gRoomControls.scroll_y - gRoomControls.origin_y) & 0xf) + 8;
|
||||
if (gRoomControls.shake_duration != 0) {
|
||||
gRoomControls.shake_duration--;
|
||||
ptr = &gUnk_080169A4[gRoomControls.shake_magnitude * 0x10 + (gRoomControls.shake_duration & 0xe)];
|
||||
screenShakeOffset = &gScreenShakeOffsets[gRoomControls.shake_magnitude * 0x10 + (gRoomControls.shake_duration & 0xe)];
|
||||
if (gMapBottom.bgSettings != NULL) {
|
||||
gMapBottom.bgSettings->xOffset = ptr[0] + tmpX;
|
||||
gMapBottom.bgSettings->yOffset = ptr[1] + tmpY;
|
||||
gMapBottom.bgSettings->xOffset = screenShakeOffset[0] + roomOffsetX;
|
||||
gMapBottom.bgSettings->yOffset = screenShakeOffset[1] + roomOffsetY;
|
||||
}
|
||||
if (gMapTop.bgSettings != NULL) {
|
||||
gMapTop.bgSettings->xOffset = ptr[0] + tmpX;
|
||||
gMapTop.bgSettings->yOffset = ptr[1] + tmpY;
|
||||
gMapTop.bgSettings->xOffset = screenShakeOffset[0] + roomOffsetX;
|
||||
gMapTop.bgSettings->yOffset = screenShakeOffset[1] + roomOffsetY;
|
||||
}
|
||||
gRoomControls.aff_x = ptr[0];
|
||||
gRoomControls.aff_y = ptr[1];
|
||||
gRoomControls.aff_x = screenShakeOffset[0];
|
||||
gRoomControls.aff_y = screenShakeOffset[1];
|
||||
} else {
|
||||
if (gMapBottom.bgSettings != NULL) {
|
||||
gMapBottom.bgSettings->xOffset = tmpX;
|
||||
gMapBottom.bgSettings->yOffset = tmpY;
|
||||
gMapBottom.bgSettings->xOffset = roomOffsetX;
|
||||
gMapBottom.bgSettings->yOffset = roomOffsetY;
|
||||
}
|
||||
if (gMapTop.bgSettings != NULL) {
|
||||
gMapTop.bgSettings->xOffset = tmpX;
|
||||
gMapTop.bgSettings->yOffset = tmpY;
|
||||
gMapTop.bgSettings->xOffset = roomOffsetX;
|
||||
gMapTop.bgSettings->yOffset = roomOffsetY;
|
||||
}
|
||||
gRoomControls.aff_x = 0;
|
||||
gRoomControls.aff_y = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08080C80(MapDataDefinition* param_1) {
|
||||
LoadMapData(param_1);
|
||||
sub_0807C8B0(gMapBottom.mapData, gRoomControls.width >> 4, gRoomControls.height >> 4);
|
||||
sub_0807C8B0(gMapTop.mapData, gRoomControls.width >> 4, gRoomControls.height >> 4);
|
||||
void sub_08080C80(MapDataDefinition* dataDefinition) {
|
||||
LoadMapData(dataDefinition);
|
||||
sub_0807C8B0(gMapBottom.mapData, gRoomControls.width / 16, gRoomControls.height / 16);
|
||||
sub_0807C8B0(gMapTop.mapData, gRoomControls.width / 16, gRoomControls.height / 16);
|
||||
}
|
||||
|
||||
void sub_08080CB4(Entity* this) {
|
||||
|
|
Loading…
Reference in New Issue