Merge pull request #237 from KDSKardabox/master
Decompile mon markings, rotating_gate & field_camera
This commit is contained in:
@@ -12,7 +12,6 @@
|
||||
|
||||
extern bool8 gBikeCyclingChallenge;
|
||||
extern u8 gBikeCollisions;
|
||||
extern bool8 gUnknown_02037348;
|
||||
|
||||
extern u8 sub_8093514(u8 direction);
|
||||
extern u8 sub_808B980(u8 direction);
|
||||
@@ -989,7 +988,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void)
|
||||
|
||||
void GetOnOffBike(u8 transitionFlags)
|
||||
{
|
||||
gUnknown_02037348 = FALSE;
|
||||
gUnusedBikeCameraAheadPanback = FALSE;
|
||||
|
||||
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||
{
|
||||
|
||||
@@ -1305,12 +1305,12 @@ void sub_8128060(u8 taskId)
|
||||
|
||||
void ConfigureCameraObjectForPlacingDecoration(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor)
|
||||
{
|
||||
sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.unk4].data[0];
|
||||
gUnknown_03005DD0.unk4 = gpu_pal_decompress_alloc_tag_and_upload(data, decor);
|
||||
gSprites[gUnknown_03005DD0.unk4].oam.priority = 1;
|
||||
gSprites[gUnknown_03005DD0.unk4].callback = sub_81292D0;
|
||||
gSprites[gUnknown_03005DD0.unk4].pos1.x = gUnknown_085A7250[data->decoration->shape].x;
|
||||
gSprites[gUnknown_03005DD0.unk4].pos1.y = gUnknown_085A7250[data->decoration->shape].y;
|
||||
sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.spriteId].data[0];
|
||||
gUnknown_03005DD0.spriteId = gpu_pal_decompress_alloc_tag_and_upload(data, decor);
|
||||
gSprites[gUnknown_03005DD0.spriteId].oam.priority = 1;
|
||||
gSprites[gUnknown_03005DD0.spriteId].callback = sub_81292D0;
|
||||
gSprites[gUnknown_03005DD0.spriteId].pos1.x = gUnknown_085A7250[data->decoration->shape].x;
|
||||
gSprites[gUnknown_03005DD0.spriteId].pos1.y = gUnknown_085A7250[data->decoration->shape].y;
|
||||
}
|
||||
|
||||
void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphicsDataBuffer *data)
|
||||
@@ -1332,7 +1332,7 @@ void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphic
|
||||
}
|
||||
gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1;
|
||||
DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]);
|
||||
sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.unk4;
|
||||
sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.spriteId;
|
||||
}
|
||||
|
||||
void sub_812826C(u8 taskId)
|
||||
@@ -2251,9 +2251,9 @@ bool8 sub_81299AC(u8 taskId)
|
||||
void SetUpPuttingAwayDecorationPlayerAvatar(void)
|
||||
{
|
||||
player_get_direction_lower_nybble();
|
||||
sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.unk4].data[0];
|
||||
sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.spriteId].data[0];
|
||||
sub_812A39C();
|
||||
gUnknown_03005DD0.unk4 = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0);
|
||||
gUnknown_03005DD0.spriteId = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0);
|
||||
if (gSaveBlock2Ptr->playerGender == MALE)
|
||||
{
|
||||
sDecor_CameraSpriteObjectIdx2 = AddPseudoFieldObject(0xC1, SpriteCallbackDummy, 0x88, 0x48, 0);
|
||||
@@ -2264,7 +2264,7 @@ void SetUpPuttingAwayDecorationPlayerAvatar(void)
|
||||
}
|
||||
gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1;
|
||||
DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]);
|
||||
sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.unk4;
|
||||
sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.spriteId;
|
||||
gSprites[sDecor_CameraSpriteObjectIdx1].oam.priority = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
#include "berry.h"
|
||||
#include "bike.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "fieldmap.h"
|
||||
#include "field_map_obj.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "menu.h"
|
||||
#include "overworld.h"
|
||||
#include "rotating_gate.h"
|
||||
#include "sprite.h"
|
||||
#include "text.h"
|
||||
|
||||
// Static type declarations
|
||||
|
||||
struct FieldCameraUnknownStruct
|
||||
{
|
||||
u8 unk0;
|
||||
@@ -13,16 +22,474 @@ struct FieldCameraUnknownStruct
|
||||
bool8 unk4;
|
||||
};
|
||||
|
||||
// Static RAM declarations
|
||||
// static functions
|
||||
static void RedrawMapSliceNorth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
|
||||
static void RedrawMapSliceSouth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
|
||||
static void RedrawMapSliceEast(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
|
||||
static void RedrawMapSliceWest(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
|
||||
static s32 MapPosToBgTilemapOffset(struct FieldCameraUnknownStruct *a, s32 x, s32 y);
|
||||
static void DrawWholeMapViewInternal(int x, int y, const struct MapData *mapData);
|
||||
static void DrawMetatileAt(const struct MapData *mapData, u16, int, int);
|
||||
static void DrawMetatile(s32 a, u16 *b, u16 c);
|
||||
static void CameraPanningCB_PanAhead(void);
|
||||
|
||||
IWRAM_DATA struct FieldCameraUnknownStruct gUnknown_03000E20;
|
||||
IWRAM_DATA s16 gUnknown_03000E28;
|
||||
IWRAM_DATA s16 gUnknown_03000E2A;
|
||||
IWRAM_DATA u8 gUnknown_03000E2C;
|
||||
IWRAM_DATA void (*gUnknown_03000E30)(void);
|
||||
// IWRAM bss vars
|
||||
static IWRAM_DATA struct FieldCameraUnknownStruct gUnknown_03000E20;
|
||||
static IWRAM_DATA s16 gUnknown_03000E28;
|
||||
static IWRAM_DATA s16 gUnknown_03000E2A;
|
||||
static IWRAM_DATA u8 gUnknown_03000E2C;
|
||||
static IWRAM_DATA void (*gUnknown_03000E30)(void);
|
||||
|
||||
// Static ROM declarations
|
||||
// text
|
||||
static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraUnknownStruct *a)
|
||||
{
|
||||
a->unk2 = 0;
|
||||
a->unk3 = 0;
|
||||
a->unk0 = 0;
|
||||
a->unk1 = 0;
|
||||
a->unk4 = TRUE;
|
||||
}
|
||||
|
||||
// .rodata
|
||||
static void tilemap_move_something(struct FieldCameraUnknownStruct *a, u32 b, u32 c)
|
||||
{
|
||||
a->unk2 += b;
|
||||
a->unk2 %= 32;
|
||||
a->unk3 += c;
|
||||
a->unk3 %= 32;
|
||||
}
|
||||
|
||||
static void coords8_add(struct FieldCameraUnknownStruct *a, u32 b, u32 c)
|
||||
{
|
||||
a->unk0 += b;
|
||||
a->unk1 += c;
|
||||
}
|
||||
|
||||
void move_tilemap_camera_to_upper_left_corner(void)
|
||||
{
|
||||
move_tilemap_camera_to_upper_left_corner_(&gUnknown_03000E20);
|
||||
}
|
||||
|
||||
void FieldUpdateBgTilemapScroll(void)
|
||||
{
|
||||
u32 r4, r5;
|
||||
r5 = gUnknown_03000E20.unk0 + gUnknown_03000E28;
|
||||
r4 = gUnknown_03000E2A + gUnknown_03000E20.unk1 + 8;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, r5);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, r4);
|
||||
SetGpuReg(REG_OFFSET_BG2HOFS, r5);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, r4);
|
||||
SetGpuReg(REG_OFFSET_BG3HOFS, r5);
|
||||
SetGpuReg(REG_OFFSET_BG3VOFS, r4);
|
||||
}
|
||||
|
||||
void sub_8089C08(s16 *a, s16 *b)
|
||||
{
|
||||
*a = gUnknown_03000E20.unk0 + gUnknown_03000E28;
|
||||
*b = gUnknown_03000E20.unk1 + gUnknown_03000E2A + 8;
|
||||
}
|
||||
|
||||
void DrawWholeMapView(void)
|
||||
{
|
||||
DrawWholeMapViewInternal(gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y, gMapHeader.mapData);
|
||||
gUnknown_03000E20.unk4 = TRUE;
|
||||
}
|
||||
|
||||
static void DrawWholeMapViewInternal(int x, int y, const struct MapData *mapData)
|
||||
{
|
||||
u8 i;
|
||||
u8 j;
|
||||
u32 r6;
|
||||
u8 temp;
|
||||
|
||||
for (i = 0; i < 32; i += 2)
|
||||
{
|
||||
temp = gUnknown_03000E20.unk3 + i;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
r6 = temp * 32;
|
||||
for (j = 0; j < 32; j += 2)
|
||||
{
|
||||
temp = gUnknown_03000E20.unk2 + j;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
DrawMetatileAt(mapData, r6 + temp, x + j / 2, y + i / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void RedrawMapSlicesForCameraUpdate(struct FieldCameraUnknownStruct *a, int x, int y)
|
||||
{
|
||||
const struct MapData *mapData = gMapHeader.mapData;
|
||||
|
||||
if (x > 0)
|
||||
RedrawMapSliceWest(a, mapData);
|
||||
if (x < 0)
|
||||
RedrawMapSliceEast(a, mapData);
|
||||
if (y > 0)
|
||||
RedrawMapSliceNorth(a, mapData);
|
||||
if (y < 0)
|
||||
RedrawMapSliceSouth(a, mapData);
|
||||
a->unk4 = TRUE;
|
||||
}
|
||||
|
||||
static void RedrawMapSliceNorth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
|
||||
{
|
||||
u8 i;
|
||||
u8 temp;
|
||||
u32 r7;
|
||||
|
||||
temp = a->unk3 + 28;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
r7 = temp * 32;
|
||||
for (i = 0; i < 32; i += 2)
|
||||
{
|
||||
temp = a->unk2 + i;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
DrawMetatileAt(mapData, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y + 14);
|
||||
}
|
||||
}
|
||||
|
||||
static void RedrawMapSliceSouth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
|
||||
{
|
||||
u8 i;
|
||||
u8 temp;
|
||||
u32 r7 = a->unk3 * 32;
|
||||
|
||||
for (i = 0; i < 32; i += 2)
|
||||
{
|
||||
temp = a->unk2 + i;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
DrawMetatileAt(mapData, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y);
|
||||
}
|
||||
}
|
||||
|
||||
static void RedrawMapSliceEast(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
|
||||
{
|
||||
u8 i;
|
||||
u8 temp;
|
||||
u32 r6 = a->unk2;
|
||||
|
||||
for (i = 0; i < 32; i += 2)
|
||||
{
|
||||
temp = a->unk3 + i;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
DrawMetatileAt(mapData, temp * 32 + r6, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y + i / 2);
|
||||
}
|
||||
}
|
||||
|
||||
static void RedrawMapSliceWest(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
|
||||
{
|
||||
u8 i;
|
||||
u8 temp;
|
||||
u8 r5 = a->unk2 + 28;
|
||||
|
||||
if (r5 >= 32)
|
||||
r5 -= 32;
|
||||
for (i = 0; i < 32; i += 2)
|
||||
{
|
||||
temp = a->unk3 + i;
|
||||
if (temp >= 32)
|
||||
temp -= 32;
|
||||
DrawMetatileAt(mapData, temp * 32 + r5, gSaveBlock1Ptr->pos.x + 14, gSaveBlock1Ptr->pos.y + i / 2);
|
||||
}
|
||||
}
|
||||
|
||||
void CurrentMapDrawMetatileAt(int a, int b)
|
||||
{
|
||||
int offset = MapPosToBgTilemapOffset(&gUnknown_03000E20, a, b);
|
||||
|
||||
if (offset >= 0)
|
||||
{
|
||||
DrawMetatileAt(gMapHeader.mapData, offset, a, b);
|
||||
gUnknown_03000E20.unk4 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawDoorMetatileAt(int x, int y, u16 *arr)
|
||||
{
|
||||
int offset = MapPosToBgTilemapOffset(&gUnknown_03000E20, x, y);
|
||||
|
||||
if (offset >= 0)
|
||||
{
|
||||
DrawMetatile(1, arr, offset);
|
||||
gUnknown_03000E20.unk4 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawMetatileAt(const struct MapData *mapData, u16 b, int c, int d)
|
||||
{
|
||||
u16 metatileId = MapGridGetMetatileIdAt(c, d);
|
||||
u16 *metatiles;
|
||||
|
||||
if (metatileId > 1024)
|
||||
metatileId = 0;
|
||||
if (metatileId < 512)
|
||||
metatiles = mapData->primaryTileset->metatiles;
|
||||
else
|
||||
{
|
||||
metatiles = mapData->secondaryTileset->metatiles;
|
||||
metatileId -= 512;
|
||||
}
|
||||
DrawMetatile(MapGridGetMetatileLayerTypeAt(c, d), metatiles + metatileId * 8, b);
|
||||
}
|
||||
|
||||
static void DrawMetatile(s32 a, u16 *b, u16 c)
|
||||
{
|
||||
switch (a)
|
||||
{
|
||||
case 2:
|
||||
gBGTilemapBuffers3[c] = b[0];
|
||||
gBGTilemapBuffers3[c + 1] = b[1];
|
||||
gBGTilemapBuffers3[c + 0x20] = b[2];
|
||||
gBGTilemapBuffers3[c + 0x21] = b[3];
|
||||
|
||||
gBGTilemapBuffers1[c] = 0;
|
||||
gBGTilemapBuffers1[c + 1] = 0;
|
||||
gBGTilemapBuffers1[c + 0x20] = 0;
|
||||
gBGTilemapBuffers1[c + 0x21] = 0;
|
||||
|
||||
gBGTilemapBuffers2[c] = b[4];
|
||||
gBGTilemapBuffers2[c + 1] = b[5];
|
||||
gBGTilemapBuffers2[c + 0x20] = b[6];
|
||||
gBGTilemapBuffers2[c + 0x21] = b[7];
|
||||
break;
|
||||
case 1:
|
||||
gBGTilemapBuffers3[c] = b[0];
|
||||
gBGTilemapBuffers3[c + 1] = b[1];
|
||||
gBGTilemapBuffers3[c + 0x20] = b[2];
|
||||
gBGTilemapBuffers3[c + 0x21] = b[3];
|
||||
|
||||
gBGTilemapBuffers1[c] = b[4];
|
||||
gBGTilemapBuffers1[c + 1] = b[5];
|
||||
gBGTilemapBuffers1[c + 0x20] = b[6];
|
||||
gBGTilemapBuffers1[c + 0x21] = b[7];
|
||||
|
||||
gBGTilemapBuffers2[c] = 0;
|
||||
gBGTilemapBuffers2[c + 1] = 0;
|
||||
gBGTilemapBuffers2[c + 0x20] = 0;
|
||||
gBGTilemapBuffers2[c + 0x21] = 0;
|
||||
break;
|
||||
case 0:
|
||||
gBGTilemapBuffers3[c] = 0x3014;
|
||||
gBGTilemapBuffers3[c + 1] = 0x3014;
|
||||
gBGTilemapBuffers3[c + 0x20] = 0x3014;
|
||||
gBGTilemapBuffers3[c + 0x21] = 0x3014;
|
||||
|
||||
gBGTilemapBuffers1[c] = b[0];
|
||||
gBGTilemapBuffers1[c + 1] = b[1];
|
||||
gBGTilemapBuffers1[c + 0x20] = b[2];
|
||||
gBGTilemapBuffers1[c + 0x21] = b[3];
|
||||
|
||||
gBGTilemapBuffers2[c] = b[4];
|
||||
gBGTilemapBuffers2[c + 1] = b[5];
|
||||
gBGTilemapBuffers2[c + 0x20] = b[6];
|
||||
gBGTilemapBuffers2[c + 0x21] = b[7];
|
||||
break;
|
||||
}
|
||||
schedule_bg_copy_tilemap_to_vram(1);
|
||||
schedule_bg_copy_tilemap_to_vram(2);
|
||||
schedule_bg_copy_tilemap_to_vram(3);
|
||||
}
|
||||
|
||||
static s32 MapPosToBgTilemapOffset(struct FieldCameraUnknownStruct *a, s32 x, s32 y)
|
||||
{
|
||||
x -= gSaveBlock1Ptr->pos.x;
|
||||
x *= 2;
|
||||
if (x >= 32 || x < 0)
|
||||
return -1;
|
||||
x = x + a->unk2;
|
||||
if (x >= 32)
|
||||
x -= 32;
|
||||
|
||||
y = (y - gSaveBlock1Ptr->pos.y) * 2;
|
||||
if (y >= 32 || y < 0)
|
||||
return -1;
|
||||
y = y + a->unk3;
|
||||
if (y >= 32)
|
||||
y -= 32;
|
||||
|
||||
return y * 32 + x;
|
||||
}
|
||||
|
||||
static void CameraUpdateCallback(struct CameraObject *a)
|
||||
{
|
||||
if (a->spriteId != 0)
|
||||
{
|
||||
a->unk8 = gSprites[a->spriteId].data[2];
|
||||
a->unkC = gSprites[a->spriteId].data[3];
|
||||
}
|
||||
}
|
||||
|
||||
void ResetCameraUpdateInfo(void)
|
||||
{
|
||||
gUnknown_03005DD0.unk8 = 0;
|
||||
gUnknown_03005DD0.unkC = 0;
|
||||
gUnknown_03005DD0.x = 0;
|
||||
gUnknown_03005DD0.y = 0;
|
||||
gUnknown_03005DD0.spriteId = 0;
|
||||
gUnknown_03005DD0.callback = NULL;
|
||||
}
|
||||
|
||||
u32 InitCameraUpdateCallback(u8 a)
|
||||
{
|
||||
if (gUnknown_03005DD0.spriteId != 0)
|
||||
DestroySprite(&gSprites[gUnknown_03005DD0.spriteId]);
|
||||
gUnknown_03005DD0.spriteId = AddCameraObject(a);
|
||||
gUnknown_03005DD0.callback = CameraUpdateCallback;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CameraUpdate(void)
|
||||
{
|
||||
int deltaX;
|
||||
int deltaY;
|
||||
int r0;
|
||||
int r1;
|
||||
int r7;
|
||||
int r8;
|
||||
|
||||
if (gUnknown_03005DD0.callback != NULL)
|
||||
gUnknown_03005DD0.callback(&gUnknown_03005DD0);
|
||||
r7 = gUnknown_03005DD0.unk8;
|
||||
r8 = gUnknown_03005DD0.unkC;
|
||||
deltaX = 0;
|
||||
deltaY = 0;
|
||||
r1 = gUnknown_03005DD0.x;
|
||||
r0 = gUnknown_03005DD0.y;
|
||||
|
||||
|
||||
if (r1 == 0 && r7 != 0)
|
||||
{
|
||||
if (r7 > 0)
|
||||
deltaX = 1;
|
||||
else
|
||||
deltaX = -1;
|
||||
}
|
||||
if (r0 == 0 && r8 != 0)
|
||||
{
|
||||
if (r8 > 0)
|
||||
deltaY = 1;
|
||||
else
|
||||
deltaY = -1;
|
||||
}
|
||||
if (r1 != 0 && r1 == -r7)
|
||||
{
|
||||
if (r7 > 0)
|
||||
deltaX = 1;
|
||||
else
|
||||
deltaX = -1;
|
||||
}
|
||||
if (r0 != 0 && r0 == -r8)
|
||||
{
|
||||
if (r8 > 0)
|
||||
deltaX = 1;
|
||||
else
|
||||
deltaX = -1;
|
||||
}
|
||||
|
||||
gUnknown_03005DD0.x += r7;
|
||||
gUnknown_03005DD0.x = gUnknown_03005DD0.x - 16 * (gUnknown_03005DD0.x / 16);
|
||||
gUnknown_03005DD0.y += r8;
|
||||
gUnknown_03005DD0.y = gUnknown_03005DD0.y - 16 * (gUnknown_03005DD0.y / 16);
|
||||
|
||||
if (deltaX != 0 || deltaY != 0)
|
||||
{
|
||||
CameraMove(deltaX, deltaY);
|
||||
UpdateFieldObjectsForCameraUpdate(deltaX, deltaY);
|
||||
RotatingGatePuzzleCameraUpdate(deltaX, deltaY);
|
||||
ResetBerryTreeSparkleFlags();
|
||||
tilemap_move_something(&gUnknown_03000E20, deltaX * 2, deltaY * 2);
|
||||
RedrawMapSlicesForCameraUpdate(&gUnknown_03000E20, deltaX * 2, deltaY * 2);
|
||||
}
|
||||
|
||||
coords8_add(&gUnknown_03000E20, r7, r8);
|
||||
gUnknown_03005DEC -= r7;
|
||||
gUnknown_03005DE8 -= r8;
|
||||
}
|
||||
|
||||
void camera_move_and_redraw(int a, int b) //unused
|
||||
{
|
||||
CameraMove(a, b);
|
||||
UpdateFieldObjectsForCameraUpdate(a, b);
|
||||
DrawWholeMapView();
|
||||
gUnknown_03005DEC -= a * 16;
|
||||
gUnknown_03005DE8 -= b * 16;
|
||||
}
|
||||
|
||||
void SetCameraPanningCallback(void (*a)(void))
|
||||
{
|
||||
gUnknown_03000E30 = a;
|
||||
}
|
||||
|
||||
void SetCameraPanning(s16 a, s16 b)
|
||||
{
|
||||
gUnknown_03000E28 = a;
|
||||
gUnknown_03000E2A = b + 32;
|
||||
}
|
||||
|
||||
void InstallCameraPanAheadCallback(void)
|
||||
{
|
||||
gUnknown_03000E30 = CameraPanningCB_PanAhead;
|
||||
gUnknown_03000E2C = 0;
|
||||
gUnknown_03000E28 = 0;
|
||||
gUnknown_03000E2A = 32;
|
||||
}
|
||||
|
||||
void UpdateCameraPanning(void)
|
||||
{
|
||||
if (gUnknown_03000E30 != NULL)
|
||||
gUnknown_03000E30();
|
||||
//Update sprite offset of overworld objects
|
||||
gSpriteCoordOffsetX = gUnknown_03005DEC - gUnknown_03000E28;
|
||||
gSpriteCoordOffsetY = gUnknown_03005DE8 - gUnknown_03000E2A - 8;
|
||||
}
|
||||
|
||||
static void CameraPanningCB_PanAhead(void)
|
||||
{
|
||||
u8 var;
|
||||
|
||||
if (gUnusedBikeCameraAheadPanback == FALSE)
|
||||
{
|
||||
InstallCameraPanAheadCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
// this code is never reached.
|
||||
if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
|
||||
{
|
||||
gUnknown_03000E2C ^= 1;
|
||||
if (gUnknown_03000E2C == 0)
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_03000E2C = 0;
|
||||
}
|
||||
|
||||
var = player_get_direction_upper_nybble();
|
||||
if (var == 2)
|
||||
{
|
||||
if (gUnknown_03000E2A > -8)
|
||||
gUnknown_03000E2A -= 2;
|
||||
}
|
||||
else if (var == 1)
|
||||
{
|
||||
if (gUnknown_03000E2A < 72)
|
||||
gUnknown_03000E2A += 2;
|
||||
}
|
||||
else if (gUnknown_03000E2A < 32)
|
||||
{
|
||||
gUnknown_03000E2A += 2;
|
||||
}
|
||||
else if (gUnknown_03000E2A > 32)
|
||||
{
|
||||
gUnknown_03000E2A -= 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// .text
|
||||
|
||||
611
src/mon_markings.c
Normal file
611
src/mon_markings.c
Normal file
@@ -0,0 +1,611 @@
|
||||
#include "global.h"
|
||||
#include "dma3.h"
|
||||
#include "graphics.h"
|
||||
#include "main.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "mon_markings.h"
|
||||
#include "constants/songs.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "text_window.h"
|
||||
|
||||
#define MENU_TEXT_SPRITE_X_OFFSET 32
|
||||
|
||||
// static functions
|
||||
static void sub_811FC80(s16, s16, u16, u16);
|
||||
static void TaskDummy7(struct Sprite *);
|
||||
static void sub_811FF40(struct Sprite *);
|
||||
static void sub_811FF7C(struct Sprite *);
|
||||
static struct Sprite *sub_811FFD4(u16, u16, const u16 *, u16);
|
||||
|
||||
// .rodata
|
||||
static const u16 gUnknown_0859E65C[] = INCBIN_U16("graphics/misc/mon_markings.gbapal");
|
||||
static const u8 gUnknown_0859E67C[] = INCBIN_U8("graphics/misc/mon_markings.4bpp");
|
||||
|
||||
static const struct OamData gUnknown_0859EE7C =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const struct OamData gUnknown_0859EE84 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EE8C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EE94[] =
|
||||
{
|
||||
ANIMCMD_FRAME(1, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EE9C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(2, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EEA4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(3, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EEAC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EEB4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(5, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EEBC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(6, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EEC4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EECC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(8, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EED4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(9, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_0859EEDC[] =
|
||||
{
|
||||
gUnknown_0859EE8C,
|
||||
gUnknown_0859EE94,
|
||||
gUnknown_0859EE9C,
|
||||
gUnknown_0859EEA4,
|
||||
gUnknown_0859EEAC,
|
||||
gUnknown_0859EEB4,
|
||||
gUnknown_0859EEBC,
|
||||
gUnknown_0859EEC4,
|
||||
gUnknown_0859EECC,
|
||||
gUnknown_0859EED4,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF04[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF0C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(64, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_0859EF14[] =
|
||||
{
|
||||
gUnknown_0859EF04,
|
||||
gUnknown_0859EF0C,
|
||||
};
|
||||
|
||||
static const struct OamData gUnknown_0859EF1C =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 1,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 1,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF24[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF2C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF34[] =
|
||||
{
|
||||
ANIMCMD_FRAME(8, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF3C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(12, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF44[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF4C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(20, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF54[] =
|
||||
{
|
||||
ANIMCMD_FRAME(24, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF5C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(28, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF64[] =
|
||||
{
|
||||
ANIMCMD_FRAME(32, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF6C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(36, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF74[] =
|
||||
{
|
||||
ANIMCMD_FRAME(40, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF7C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(44, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF84[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF8C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(52, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF94[] =
|
||||
{
|
||||
ANIMCMD_FRAME(56, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_0859EF9C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(60, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_0859EFA4[] =
|
||||
{
|
||||
gUnknown_0859EF24,
|
||||
gUnknown_0859EF2C,
|
||||
gUnknown_0859EF34,
|
||||
gUnknown_0859EF3C,
|
||||
gUnknown_0859EF44,
|
||||
gUnknown_0859EF4C,
|
||||
gUnknown_0859EF54,
|
||||
gUnknown_0859EF5C,
|
||||
gUnknown_0859EF64,
|
||||
gUnknown_0859EF6C,
|
||||
gUnknown_0859EF74,
|
||||
gUnknown_0859EF7C,
|
||||
gUnknown_0859EF84,
|
||||
gUnknown_0859EF8C,
|
||||
gUnknown_0859EF94,
|
||||
gUnknown_0859EF9C,
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL;
|
||||
|
||||
void sub_811F90C(struct PokemonMarkMenu *ptr)
|
||||
{
|
||||
sMenu = ptr;
|
||||
}
|
||||
|
||||
void sub_811F918(void)
|
||||
{
|
||||
const struct TilesPal *frame = GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType);
|
||||
sMenu->frameTiles = frame->tiles;
|
||||
sMenu->framePalette = frame->pal;
|
||||
sMenu->tileLoadState = 0;
|
||||
CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles));
|
||||
}
|
||||
|
||||
bool8 sub_811F960(void)
|
||||
{
|
||||
u16 i;
|
||||
u8 *dest = sMenu->menuWindowSpriteTiles + sMenu->tileLoadState * 0x100;
|
||||
|
||||
switch (sMenu->tileLoadState)
|
||||
{
|
||||
case 0:
|
||||
CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP);
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
|
||||
}
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
|
||||
sMenu->tileLoadState++;
|
||||
break;
|
||||
default:
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP);
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
|
||||
}
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
|
||||
sMenu->tileLoadState++;
|
||||
break;
|
||||
case 13:
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP);
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
|
||||
}
|
||||
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
|
||||
sMenu->tileLoadState++;
|
||||
return FALSE;
|
||||
case 14:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_811FA90(void)
|
||||
{
|
||||
sub_811F918();
|
||||
while (sub_811F960());
|
||||
}
|
||||
|
||||
void sub_811FAA4(u8 markings, s16 x, s16 y)
|
||||
{
|
||||
u16 i;
|
||||
sMenu->cursorPos = 0;
|
||||
sMenu->markings = markings;
|
||||
for (i = 0; i < 4; i++)
|
||||
sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
|
||||
sub_811FC80(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
|
||||
}
|
||||
|
||||
void sub_811FAF8(void)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
FreeSpriteTilesByTag(sMenu->baseTileTag + i);
|
||||
FreeSpritePaletteByTag(sMenu->basePaletteTag + i);
|
||||
}
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
if (!sMenu->menuWindowSprites[i])
|
||||
return;
|
||||
DestroySprite(sMenu->menuWindowSprites[i]);
|
||||
sMenu->menuWindowSprites[i] = NULL;
|
||||
}
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (!sMenu->menuMarkingSprites[i])
|
||||
return;
|
||||
DestroySprite(sMenu->menuMarkingSprites[i]);
|
||||
sMenu->menuMarkingSprites[i] = NULL;
|
||||
}
|
||||
if (sMenu->unkSprite)
|
||||
{
|
||||
DestroySprite(sMenu->unkSprite);
|
||||
sMenu->unkSprite = NULL;
|
||||
}
|
||||
if (sMenu->menuTextSprite)
|
||||
{
|
||||
DestroySprite(sMenu->menuTextSprite);
|
||||
sMenu->menuTextSprite = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool8 sub_811FBA4(void)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
if (gMain.newKeys & DPAD_UP)
|
||||
{
|
||||
s8 pos;
|
||||
PlaySE(SE_SELECT);
|
||||
pos = --sMenu->cursorPos;
|
||||
if (pos < 0)
|
||||
sMenu->cursorPos = 5;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (gMain.newKeys & DPAD_DOWN)
|
||||
{
|
||||
s8 pos;
|
||||
PlaySE(SE_SELECT);
|
||||
pos = ++sMenu->cursorPos;
|
||||
if (pos > 5)
|
||||
sMenu->cursorPos = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
|
||||
switch (sMenu->cursorPos)
|
||||
{
|
||||
case 4:
|
||||
sMenu->markings = 0;
|
||||
for (i = 0; i < 4; i++)
|
||||
sMenu->markings |= sMenu->markingsArray[i] << i;
|
||||
return FALSE;
|
||||
case 5:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
sMenu->markingsArray[sMenu->cursorPos] = !sMenu->markingsArray[sMenu->cursorPos];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (gMain.newKeys & B_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
|
||||
{
|
||||
u16 i;
|
||||
u8 spriteId;
|
||||
|
||||
struct SpriteSheet sheets[] =
|
||||
{
|
||||
{ sMenu->menuWindowSpriteTiles, 0x1000, baseTileTag },
|
||||
{ gPokenavConditionMarker_Gfx, 0x320, baseTileTag + 1 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
struct SpritePalette palettes[] =
|
||||
{
|
||||
{ sMenu->framePalette, basePaletteTag },
|
||||
{ gPokenavConditionMarker_Pal, basePaletteTag + 1},
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
struct SpriteTemplate sprTemplate =
|
||||
{
|
||||
baseTileTag,
|
||||
basePaletteTag,
|
||||
&gUnknown_0859EE7C,
|
||||
gUnknown_0859EF14,
|
||||
NULL,
|
||||
gDummySpriteAffineAnimTable,
|
||||
TaskDummy7,
|
||||
};
|
||||
|
||||
LoadSpriteSheets(sheets);
|
||||
LoadSpritePalettes(palettes);
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 1);
|
||||
if (spriteId != 64)
|
||||
{
|
||||
sMenu->menuWindowSprites[i] = &gSprites[spriteId];
|
||||
StartSpriteAnim(&gSprites[spriteId], i);
|
||||
}
|
||||
else
|
||||
{
|
||||
sMenu->menuWindowSprites[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sMenu->menuWindowSprites[1]->pos1.y = y + 96;
|
||||
|
||||
sprTemplate.tileTag++;
|
||||
sprTemplate.paletteTag++;
|
||||
sprTemplate.anims = gUnknown_0859EEDC;
|
||||
sprTemplate.callback = sub_811FF40;
|
||||
sprTemplate.oam = &gUnknown_0859EE84;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0);
|
||||
if (spriteId != 64)
|
||||
{
|
||||
sMenu->menuMarkingSprites[i] = &gSprites[spriteId];
|
||||
gSprites[spriteId].data[0] = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
sMenu->menuMarkingSprites[i] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sprTemplate.callback = SpriteCallbackDummy;
|
||||
|
||||
spriteId = CreateSprite(&sprTemplate, 0, 0, 0);
|
||||
|
||||
if (spriteId != 64)
|
||||
{
|
||||
sMenu->menuTextSprite = &gSprites[spriteId];
|
||||
sMenu->menuTextSprite->oam.shape = ST_OAM_SQUARE;
|
||||
sMenu->menuTextSprite->oam.size = 2;
|
||||
StartSpriteAnim(sMenu->menuTextSprite, 9);
|
||||
sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET;
|
||||
sMenu->menuTextSprite->pos1.y = y + 80;
|
||||
CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
sMenu->menuTextSprite = NULL;
|
||||
}
|
||||
|
||||
sprTemplate.callback = sub_811FF7C;
|
||||
spriteId = CreateSprite(&sprTemplate, x + 12, 0, 0);
|
||||
if(spriteId != 64)
|
||||
{
|
||||
sMenu->unkSprite = &gSprites[spriteId];
|
||||
sMenu->unkSprite->data[0] = y + 16;
|
||||
StartSpriteAnim(sMenu->unkSprite, 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
sMenu->unkSprite = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void TaskDummy7(struct Sprite *sprite)
|
||||
{
|
||||
}
|
||||
|
||||
static void sub_811FF40(struct Sprite *sprite)
|
||||
{
|
||||
if (sMenu->markingsArray[sprite->data[0]])
|
||||
StartSpriteAnim(sprite, 2 * sprite->data[0] + 1);
|
||||
else
|
||||
StartSpriteAnim(sprite, 2 * sprite->data[0]);
|
||||
}
|
||||
|
||||
static void sub_811FF7C(struct Sprite *sprite)
|
||||
{
|
||||
sprite->pos1.y = (16 * sMenu->cursorPos) + sprite->data[0];
|
||||
}
|
||||
|
||||
struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette)
|
||||
{
|
||||
if (!palette)
|
||||
palette = gUnknown_0859E65C;
|
||||
return sub_811FFD4(tileTag, paletteTag, palette, 16);
|
||||
}
|
||||
|
||||
struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette)
|
||||
{
|
||||
if (!palette)
|
||||
palette = gUnknown_0859E65C;
|
||||
return sub_811FFD4(tileTag, paletteTag, palette, 1);
|
||||
}
|
||||
|
||||
static struct Sprite *sub_811FFD4(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct SpriteTemplate sprTemplate;
|
||||
struct SpriteSheet sheet = { gUnknown_0859E67C, 0x80, tileTag };
|
||||
struct SpritePalette sprPalette = { palette, paletteTag };
|
||||
|
||||
sprTemplate.tileTag = tileTag;
|
||||
sprTemplate.paletteTag = paletteTag;
|
||||
sprTemplate.oam = &gUnknown_0859EF1C;
|
||||
sprTemplate.anims = gUnknown_0859EFA4;
|
||||
sprTemplate.images = NULL;
|
||||
sprTemplate.affineAnims = gDummySpriteAffineAnimTable;
|
||||
sprTemplate.callback = TaskDummy7;
|
||||
|
||||
sheet.size = size * 0x80;
|
||||
|
||||
LoadSpriteSheet(&sheet);
|
||||
LoadSpritePalette(&sprPalette);
|
||||
|
||||
spriteId = CreateSprite(&sprTemplate, 0, 0, 0);
|
||||
if (spriteId != 64)
|
||||
return &gSprites[spriteId];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void sub_8120084(u8 markings, void *dest)
|
||||
{
|
||||
RequestDma3Copy(gUnknown_0859E67C + markings * 0x80, dest, 0x80, 0x10);
|
||||
}
|
||||
@@ -89,9 +89,6 @@ extern const u16 gUnknown_82EC7C4[];
|
||||
|
||||
extern u16 gSaveFileStatus;
|
||||
extern u16 gUnknown_03005DA8;
|
||||
extern u8 *gUnknown_03005DA0;
|
||||
extern u8 *gUnknown_03005D9C;
|
||||
extern u8 *gUnknown_03005DA4;
|
||||
extern bool8 (*gUnknown_03005DB0)(void);
|
||||
extern u8 gUnknown_03005DB4;
|
||||
extern u8 gFieldLinkPlayerCount;
|
||||
@@ -1422,12 +1419,12 @@ static void overworld_bg_setup(void)
|
||||
SetBgAttribute(1, BG_CTRL_ATTR_PALETTEMODE, 1);
|
||||
SetBgAttribute(2, BG_CTRL_ATTR_PALETTEMODE, 1);
|
||||
SetBgAttribute(3, BG_CTRL_ATTR_PALETTEMODE, 1);
|
||||
gUnknown_03005DA0 = AllocZeroed(0x800);
|
||||
gUnknown_03005D9C = AllocZeroed(0x800);
|
||||
gUnknown_03005DA4 = AllocZeroed(0x800);
|
||||
SetBgTilemapBuffer(1, gUnknown_03005DA0);
|
||||
SetBgTilemapBuffer(2, gUnknown_03005D9C);
|
||||
SetBgTilemapBuffer(3, gUnknown_03005DA4);
|
||||
gBGTilemapBuffers2 = AllocZeroed(0x800);
|
||||
gBGTilemapBuffers1 = AllocZeroed(0x800);
|
||||
gBGTilemapBuffers3 = AllocZeroed(0x800);
|
||||
SetBgTilemapBuffer(1, gBGTilemapBuffers2);
|
||||
SetBgTilemapBuffer(2, gBGTilemapBuffers1);
|
||||
SetBgTilemapBuffer(3, gBGTilemapBuffers3);
|
||||
sub_81971D0();
|
||||
}
|
||||
|
||||
@@ -1435,12 +1432,12 @@ void overworld_free_bg_tilemaps(void)
|
||||
{
|
||||
sub_81BE72C();
|
||||
sub_81971F4();
|
||||
if (gUnknown_03005DA4 != NULL)
|
||||
FREE_AND_SET_NULL(gUnknown_03005DA4);
|
||||
if (gUnknown_03005D9C != NULL)
|
||||
FREE_AND_SET_NULL(gUnknown_03005D9C);
|
||||
if (gUnknown_03005DA0 != NULL)
|
||||
FREE_AND_SET_NULL(gUnknown_03005DA0);
|
||||
if (gBGTilemapBuffers3 != NULL)
|
||||
FREE_AND_SET_NULL(gBGTilemapBuffers3);
|
||||
if (gBGTilemapBuffers1 != NULL)
|
||||
FREE_AND_SET_NULL(gBGTilemapBuffers1);
|
||||
if (gBGTilemapBuffers2 != NULL)
|
||||
FREE_AND_SET_NULL(gBGTilemapBuffers2);
|
||||
}
|
||||
|
||||
static void ResetSafariZoneFlag_(void)
|
||||
|
||||
1188
src/rotating_gate.c
Normal file
1188
src/rotating_gate.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -7,26 +7,26 @@
|
||||
#include "graphics.h"
|
||||
|
||||
// const rom data
|
||||
const u32 gTextWindowFrame1_Gfx[] = INCBIN_U32("graphics/text_window/1.4bpp");
|
||||
static const u32 sTextWindowFrame2_Gfx[] = INCBIN_U32("graphics/text_window/2.4bpp");
|
||||
static const u32 sTextWindowFrame3_Gfx[] = INCBIN_U32("graphics/text_window/3.4bpp");
|
||||
static const u32 sTextWindowFrame4_Gfx[] = INCBIN_U32("graphics/text_window/4.4bpp");
|
||||
static const u32 sTextWindowFrame5_Gfx[] = INCBIN_U32("graphics/text_window/5.4bpp");
|
||||
static const u32 sTextWindowFrame6_Gfx[] = INCBIN_U32("graphics/text_window/6.4bpp");
|
||||
static const u32 sTextWindowFrame7_Gfx[] = INCBIN_U32("graphics/text_window/7.4bpp");
|
||||
static const u32 sTextWindowFrame8_Gfx[] = INCBIN_U32("graphics/text_window/8.4bpp");
|
||||
static const u32 sTextWindowFrame9_Gfx[] = INCBIN_U32("graphics/text_window/9.4bpp");
|
||||
static const u32 sTextWindowFrame10_Gfx[] = INCBIN_U32("graphics/text_window/10.4bpp");
|
||||
static const u32 sTextWindowFrame11_Gfx[] = INCBIN_U32("graphics/text_window/11.4bpp");
|
||||
static const u32 sTextWindowFrame12_Gfx[] = INCBIN_U32("graphics/text_window/12.4bpp");
|
||||
static const u32 sTextWindowFrame13_Gfx[] = INCBIN_U32("graphics/text_window/13.4bpp");
|
||||
static const u32 sTextWindowFrame14_Gfx[] = INCBIN_U32("graphics/text_window/14.4bpp");
|
||||
static const u32 sTextWindowFrame15_Gfx[] = INCBIN_U32("graphics/text_window/15.4bpp");
|
||||
static const u32 sTextWindowFrame16_Gfx[] = INCBIN_U32("graphics/text_window/16.4bpp");
|
||||
static const u32 sTextWindowFrame17_Gfx[] = INCBIN_U32("graphics/text_window/17.4bpp");
|
||||
static const u32 sTextWindowFrame18_Gfx[] = INCBIN_U32("graphics/text_window/18.4bpp");
|
||||
static const u32 sTextWindowFrame19_Gfx[] = INCBIN_U32("graphics/text_window/19.4bpp");
|
||||
static const u32 sTextWindowFrame20_Gfx[] = INCBIN_U32("graphics/text_window/20.4bpp");
|
||||
const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp");
|
||||
static const u8 sTextWindowFrame2_Gfx[] = INCBIN_U8("graphics/text_window/2.4bpp");
|
||||
static const u8 sTextWindowFrame3_Gfx[] = INCBIN_U8("graphics/text_window/3.4bpp");
|
||||
static const u8 sTextWindowFrame4_Gfx[] = INCBIN_U8("graphics/text_window/4.4bpp");
|
||||
static const u8 sTextWindowFrame5_Gfx[] = INCBIN_U8("graphics/text_window/5.4bpp");
|
||||
static const u8 sTextWindowFrame6_Gfx[] = INCBIN_U8("graphics/text_window/6.4bpp");
|
||||
static const u8 sTextWindowFrame7_Gfx[] = INCBIN_U8("graphics/text_window/7.4bpp");
|
||||
static const u8 sTextWindowFrame8_Gfx[] = INCBIN_U8("graphics/text_window/8.4bpp");
|
||||
static const u8 sTextWindowFrame9_Gfx[] = INCBIN_U8("graphics/text_window/9.4bpp");
|
||||
static const u8 sTextWindowFrame10_Gfx[] = INCBIN_U8("graphics/text_window/10.4bpp");
|
||||
static const u8 sTextWindowFrame11_Gfx[] = INCBIN_U8("graphics/text_window/11.4bpp");
|
||||
static const u8 sTextWindowFrame12_Gfx[] = INCBIN_U8("graphics/text_window/12.4bpp");
|
||||
static const u8 sTextWindowFrame13_Gfx[] = INCBIN_U8("graphics/text_window/13.4bpp");
|
||||
static const u8 sTextWindowFrame14_Gfx[] = INCBIN_U8("graphics/text_window/14.4bpp");
|
||||
static const u8 sTextWindowFrame15_Gfx[] = INCBIN_U8("graphics/text_window/15.4bpp");
|
||||
static const u8 sTextWindowFrame16_Gfx[] = INCBIN_U8("graphics/text_window/16.4bpp");
|
||||
static const u8 sTextWindowFrame17_Gfx[] = INCBIN_U8("graphics/text_window/17.4bpp");
|
||||
static const u8 sTextWindowFrame18_Gfx[] = INCBIN_U8("graphics/text_window/18.4bpp");
|
||||
static const u8 sTextWindowFrame19_Gfx[] = INCBIN_U8("graphics/text_window/19.4bpp");
|
||||
static const u8 sTextWindowFrame20_Gfx[] = INCBIN_U8("graphics/text_window/20.4bpp");
|
||||
|
||||
const u16 gTextWindowFrame1_Pal[] = INCBIN_U16("graphics/text_window/1.gbapal");
|
||||
static const u16 sTextWindowFrame2_Pal[] = INCBIN_U16("graphics/text_window/2.gbapal");
|
||||
|
||||
Reference in New Issue
Block a user