summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-10-30 08:39:39 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-10-30 08:39:39 -0400
commit474df271368917b79071ab101c36857fcab72c4b (patch)
treebb54f723fd8f8ba289fceab3f9ebf76f9a07724c /src
parent35a6d2046a65cfa9532d5c303c1b1b33c39e1687 (diff)
through CalcZoomScrollParams
Diffstat (limited to 'src')
-rw-r--r--src/field_region_map.c6
-rw-r--r--src/region_map.c387
2 files changed, 239 insertions, 154 deletions
diff --git a/src/field_region_map.c b/src/field_region_map.c
index 2f73179d9..d70d44d58 100644
--- a/src/field_region_map.c
+++ b/src/field_region_map.c
@@ -120,9 +120,9 @@ void sub_8170290(void)
switch (gUnknown_0203BCD0->state)
{
case 0:
- sub_8122CDC(&gUnknown_0203BCD0->regionMap, 0);
+ InitRegionMap(&gUnknown_0203BCD0->regionMap, 0);
sub_8124288(0, 0);
- sub_81240D4(1, 1);
+ CreateRegionMapCursor(1, 1);
gUnknown_0203BCD0->state ++;
break;
case 1:
@@ -166,7 +166,7 @@ void sub_8170290(void)
case 6:
if (!gPaletteFade.active)
{
- sub_812305C();
+ FreeRegionMapIconResources();
SetMainCallback2(gUnknown_0203BCD0->callback);
if (gUnknown_0203BCD0 != NULL)
{
diff --git a/src/region_map.c b/src/region_map.c
index 9da4d7586..c4d15a8ac 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -2,10 +2,10 @@
// Includes
#include "global.h"
#include "main.h"
-#include "region_map.h"
#include "menu.h"
#include "palette.h"
-#include "bg.h"
+#include "trig.h"
+#include "region_map.h"
// Static type declarations
@@ -15,25 +15,26 @@ struct UnkStruct_0203A148 {
// Static RAM declarations
-EWRAM_DATA struct RegionMap *gUnknown_0203A144 = NULL;
+EWRAM_DATA struct RegionMap *gRegionMap = NULL;
EWRAM_DATA struct UnkStruct_0203A148 *gUnknown_0203A148 = NULL;
// Static ROM declarations
-u8 sub_81230C4(void);
-u8 sub_8123254(void);
-void sub_81236C4(s32 a0, s32 a1, s32 a2, s32 a3, u16 a4, u16 a5, u16 a6);
+static u8 ProcessRegionMapInput_Full(void);
+static u8 MoveRegionMapCursor_Full(void);
+static u8 ProcessRegionMapInput_Zoomed(void);
+static u8 MoveRegionMapCursor_Zoomed(void);
+void CalcZoomScrollParams(s16 scrollX, s16 scrollY, s16 c, s16 d, u16 e, u16 f, u8 rotation);
void sub_81237B4(void);
void sub_81238AC(void);
u8 get_flagnr_blue_points(u16 mapSecId);
u16 sub_8123EB4(u16 mapSecId);
void sub_8123FB0(void);
-u8 _swiopen(void);
-u8 sub_8123334(void);
u16 sub_812386C(u16 x, u16 y);
void sub_812378C(s16 x, s16 y);
void sub_8124238(void);
void sub_81243B0(void);
+void sub_81243DC(void);
// .rodata
@@ -45,50 +46,50 @@ extern const u8 gUnknown_0859F650[];
// .text
-void sub_8122CDC(struct RegionMap *regionMap, u8 argument)
+void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed)
{
- sub_8122CF8(regionMap, NULL, argument);
+ sub_8122CF8(regionMap, NULL, zoomed);
while (sub_8122DB0());
}
-void sub_8122CF8(struct RegionMap *regionMap, struct UnkStruct_8122CF8 *arg1, u8 arg2)
+void sub_8122CF8(struct RegionMap *regionMap, struct BgTemplate *template, bool8 zoomed)
{
- gUnknown_0203A144 = regionMap;
- gUnknown_0203A144->initStep = 0;
- gUnknown_0203A144->zoomed = arg2;
- gUnknown_0203A144->inputCallback = arg2 == TRUE ? sub_8123254 : sub_81230C4;
- if (arg1 != NULL)
+ gRegionMap = regionMap;
+ gRegionMap->initStep = 0;
+ gRegionMap->zoomed = zoomed;
+ gRegionMap->inputCallback = zoomed == TRUE ? ProcessRegionMapInput_Zoomed : ProcessRegionMapInput_Full;
+ if (template != NULL)
{
- gUnknown_0203A144->bgNum = arg1->unk_0_0;
- gUnknown_0203A144->unk_081 = arg1->unk_0_2;
- gUnknown_0203A144->unk_082 = arg1->unk_0_4;
- gUnknown_0203A144->unk_083 = TRUE;
+ gRegionMap->bgNum = template->bg;
+ gRegionMap->charBaseIdx = template->charBaseIndex;
+ gRegionMap->mapBaseIdx = template->mapBaseIndex;
+ gRegionMap->bgManaged = TRUE;
}
else
{
- gUnknown_0203A144->bgNum = 2;
- gUnknown_0203A144->unk_081 = 2;
- gUnknown_0203A144->unk_082 = 28;
- gUnknown_0203A144->unk_083 = FALSE;
+ gRegionMap->bgNum = 2;
+ gRegionMap->charBaseIdx = 2;
+ gRegionMap->mapBaseIdx = 28;
+ gRegionMap->bgManaged = FALSE;
}
}
void sub_8122D88(struct RegionMap *regionMap)
{
- gUnknown_0203A144 = regionMap;
+ gRegionMap = regionMap;
sub_81238AC();
- gUnknown_0203A144->unk_074 = gUnknown_0203A144->cursorPosX;
- gUnknown_0203A144->unk_076 = gUnknown_0203A144->cursorPosY;
+ gRegionMap->unk_074 = gRegionMap->cursorPosX;
+ gRegionMap->unk_076 = gRegionMap->cursorPosY;
}
bool8 sub_8122DB0(void)
{
- switch (gUnknown_0203A144->initStep)
+ switch (gRegionMap->initStep)
{
case 0:
- if (gUnknown_0203A144->unk_083)
+ if (gRegionMap->bgManaged)
{
- decompress_and_copy_tile_data_to_vram(gUnknown_0203A144->bgNum, gUnknown_0859F77C, 0, 0, 0);
+ decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, gUnknown_0859F77C, 0, 0, 0);
}
else
{
@@ -96,11 +97,11 @@ bool8 sub_8122DB0(void)
}
break;
case 1:
- if (gUnknown_0203A144->unk_083)
+ if (gRegionMap->bgManaged)
{
if (!free_temp_tile_data_buffers_if_possible())
{
- decompress_and_copy_tile_data_to_vram(gUnknown_0203A144->bgNum, gUnknown_085A04E0, 0, 0, 1);
+ decompress_and_copy_tile_data_to_vram(gRegionMap->bgNum, gUnknown_085A04E0, 0, 0, 1);
}
}
else
@@ -115,54 +116,54 @@ bool8 sub_8122DB0(void)
}
break;
case 3:
- LZ77UnCompWram(gUnknown_0859F60C, gUnknown_0203A144->cursorSmallImage);
+ LZ77UnCompWram(gUnknown_0859F60C, gRegionMap->cursorSmallImage);
break;
case 4:
- LZ77UnCompWram(gUnknown_0859F650, gUnknown_0203A144->cursorLargeImage);
+ LZ77UnCompWram(gUnknown_0859F650, gRegionMap->cursorLargeImage);
break;
case 5:
sub_81238AC();
- gUnknown_0203A144->unk_074 = gUnknown_0203A144->cursorPosX;
- gUnknown_0203A144->unk_076 = gUnknown_0203A144->cursorPosY;
- gUnknown_0203A144->mapSecId = sub_8123EB4(gUnknown_0203A144->mapSecId);
- gUnknown_0203A144->unk_002 = get_flagnr_blue_points(gUnknown_0203A144->mapSecId);
- GetMapName(gUnknown_0203A144->mapSecName, gUnknown_0203A144->mapSecId, 16);
+ gRegionMap->unk_074 = gRegionMap->cursorPosX;
+ gRegionMap->unk_076 = gRegionMap->cursorPosY;
+ gRegionMap->mapSecId = sub_8123EB4(gRegionMap->mapSecId);
+ gRegionMap->unk_002 = get_flagnr_blue_points(gRegionMap->mapSecId);
+ GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
break;
case 6:
- if (gUnknown_0203A144->zoomed == FALSE)
+ if (gRegionMap->zoomed == FALSE)
{
- sub_81236C4(0, 0, 0, 0, 0x100, 0x100, 0);
+ CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0);
}
else
{
- gUnknown_0203A144->scrollX = gUnknown_0203A144->cursorPosX * 8 - 0x34;
- gUnknown_0203A144->scrollY = gUnknown_0203A144->cursorPosY * 8 - 0x44;
- gUnknown_0203A144->unk_064 = gUnknown_0203A144->cursorPosX;
- gUnknown_0203A144->unk_066 = gUnknown_0203A144->cursorPosY;
- sub_81236C4(gUnknown_0203A144->scrollX, gUnknown_0203A144->scrollY, 0x38, 0x48, 0x80, 0x80, 0);
+ gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 0x34;
+ gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 0x44;
+ gRegionMap->unk_064 = gRegionMap->cursorPosX;
+ gRegionMap->unk_066 = gRegionMap->cursorPosY;
+ CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0);
}
break;
case 7:
sub_8123FB0();
sub_81237B4();
- gUnknown_0203A144->cursorSprite = NULL;
- gUnknown_0203A144->playerIconSprite = NULL;
- gUnknown_0203A144->cursorMovementFrameCounter = 0;
- gUnknown_0203A144->blinkPlayerIcon = FALSE;
- if (gUnknown_0203A144->unk_083)
+ gRegionMap->cursorSprite = NULL;
+ gRegionMap->playerIconSprite = NULL;
+ gRegionMap->cursorMovementFrameCounter = 0;
+ gRegionMap->blinkPlayerIcon = FALSE;
+ if (gRegionMap->bgManaged)
{
- SetBgAttribute(gUnknown_0203A144->bgNum, BG_CTRL_ATTR_MAPBASEINDEX, 2);
- SetBgAttribute(gUnknown_0203A144->bgNum, BG_CTRL_ATTR_VISIBLE, gUnknown_0203A144->unk_081);
- SetBgAttribute(gUnknown_0203A144->bgNum, BG_CTRL_ATTR_CHARBASEINDEX, gUnknown_0203A144->unk_082);
- SetBgAttribute(gUnknown_0203A144->bgNum, BG_CTRL_ATTR_PRIORITY, 1);
- SetBgAttribute(gUnknown_0203A144->bgNum, BG_CTRL_ATTR_SCREENSIZE, 1);
+ SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_MAPBASEINDEX, 2);
+ SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_VISIBLE, gRegionMap->charBaseIdx);
+ SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_CHARBASEINDEX, gRegionMap->mapBaseIdx);
+ SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_PRIORITY, 1);
+ SetBgAttribute(gRegionMap->bgNum, BG_CTRL_ATTR_SCREENSIZE, 1);
}
- gUnknown_0203A144->initStep ++;
+ gRegionMap->initStep ++;
return FALSE;
default:
return FALSE;
}
- gUnknown_0203A144->initStep ++;
+ gRegionMap->initStep ++;
return TRUE;
}
@@ -172,52 +173,52 @@ void sub_8123030(u16 a0, u32 a1)
CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60);
}
-void sub_812305C(void)
+void FreeRegionMapIconResources(void)
{
- if (gUnknown_0203A144->cursorSprite != NULL)
+ if (gRegionMap->cursorSprite != NULL)
{
- DestroySprite(gUnknown_0203A144->cursorSprite);
- FreeSpriteTilesByTag(gUnknown_0203A144->cursorTileTag);
- FreeSpritePaletteByTag(gUnknown_0203A144->cursorPaletteTag);
+ DestroySprite(gRegionMap->cursorSprite);
+ FreeSpriteTilesByTag(gRegionMap->cursorTileTag);
+ FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag);
}
- if (gUnknown_0203A144->playerIconSprite != NULL)
+ if (gRegionMap->playerIconSprite != NULL)
{
- DestroySprite(gUnknown_0203A144->playerIconSprite);
- FreeSpriteTilesByTag(gUnknown_0203A144->playerIconTileTag);
- FreeSpritePaletteByTag(gUnknown_0203A144->playerIconPaletteTag);
+ DestroySprite(gRegionMap->playerIconSprite);
+ FreeSpriteTilesByTag(gRegionMap->playerIconTileTag);
+ FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag);
}
}
u8 sub_81230AC(void)
{
- return gUnknown_0203A144->inputCallback();
+ return gRegionMap->inputCallback();
}
-u8 sub_81230C4(void)
+static u8 ProcessRegionMapInput_Full(void)
{
u8 input;
input = INPUT_EVENT_NONE;
- gUnknown_0203A144->cursorDeltaX = 0;
- gUnknown_0203A144->cursorDeltaY = 0;
- if (gMain.heldKeys & DPAD_UP && gUnknown_0203A144->cursorPosY > 2)
+ gRegionMap->cursorDeltaX = 0;
+ gRegionMap->cursorDeltaY = 0;
+ if (gMain.heldKeys & DPAD_UP && gRegionMap->cursorPosY > 2)
{
- gUnknown_0203A144->cursorDeltaY = -1;
+ gRegionMap->cursorDeltaY = -1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_DOWN && gUnknown_0203A144->cursorPosY < 16)
+ if (gMain.heldKeys & DPAD_DOWN && gRegionMap->cursorPosY < 16)
{
- gUnknown_0203A144->cursorDeltaY = +1;
+ gRegionMap->cursorDeltaY = +1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_LEFT && gUnknown_0203A144->cursorPosX > 1)
+ if (gMain.heldKeys & DPAD_LEFT && gRegionMap->cursorPosX > 1)
{
- gUnknown_0203A144->cursorDeltaX = -1;
+ gRegionMap->cursorDeltaX = -1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_RIGHT && gUnknown_0203A144->cursorPosX < 28)
+ if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->cursorPosX < 28)
{
- gUnknown_0203A144->cursorDeltaX = +1;
+ gRegionMap->cursorDeltaX = +1;
input = INPUT_EVENT_MOVE_START;
}
if (gMain.newKeys & A_BUTTON)
@@ -230,73 +231,73 @@ u8 sub_81230C4(void)
}
if (input == INPUT_EVENT_MOVE_START)
{
- gUnknown_0203A144->cursorMovementFrameCounter = 4;
- gUnknown_0203A144->inputCallback = _swiopen;
+ gRegionMap->cursorMovementFrameCounter = 4;
+ gRegionMap->inputCallback = MoveRegionMapCursor_Full;
}
return input;
}
-u8 _swiopen(void)
+static u8 MoveRegionMapCursor_Full(void)
{
u16 mapSecId;
- if (gUnknown_0203A144->cursorMovementFrameCounter != 0)
+ if (gRegionMap->cursorMovementFrameCounter != 0)
{
return INPUT_EVENT_MOVE_CONT;
}
- if (gUnknown_0203A144->cursorDeltaX > 0)
+ if (gRegionMap->cursorDeltaX > 0)
{
- gUnknown_0203A144->cursorPosX ++;
+ gRegionMap->cursorPosX ++;
}
- if (gUnknown_0203A144->cursorDeltaX < 0)
+ if (gRegionMap->cursorDeltaX < 0)
{
- gUnknown_0203A144->cursorPosX --;
+ gRegionMap->cursorPosX --;
}
- if (gUnknown_0203A144->cursorDeltaY > 0)
+ if (gRegionMap->cursorDeltaY > 0)
{
- gUnknown_0203A144->cursorPosY ++;
+ gRegionMap->cursorPosY ++;
}
- if (gUnknown_0203A144->cursorDeltaY < 0)
+ if (gRegionMap->cursorDeltaY < 0)
{
- gUnknown_0203A144->cursorPosY --;
+ gRegionMap->cursorPosY --;
}
- mapSecId = sub_812386C(gUnknown_0203A144->cursorPosX, gUnknown_0203A144->cursorPosY);
- gUnknown_0203A144->unk_002 = get_flagnr_blue_points(mapSecId);
- if (mapSecId != gUnknown_0203A144->mapSecId)
+ mapSecId = sub_812386C(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
+ gRegionMap->unk_002 = get_flagnr_blue_points(mapSecId);
+ if (mapSecId != gRegionMap->mapSecId)
{
- gUnknown_0203A144->mapSecId = mapSecId;
- GetMapName(gUnknown_0203A144->mapSecName, gUnknown_0203A144->mapSecId, 16);
+ gRegionMap->mapSecId = mapSecId;
+ GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
}
sub_8123FB0();
- gUnknown_0203A144->inputCallback = sub_81230C4;
+ gRegionMap->inputCallback = ProcessRegionMapInput_Full;
return INPUT_EVENT_MOVE_END;
}
-u8 sub_8123254(void)
+static u8 ProcessRegionMapInput_Zoomed(void)
{
u8 input;
input = INPUT_EVENT_NONE;
- gUnknown_0203A144->zoomedCursorDeltaX = 0;
- gUnknown_0203A144->zoomedCursorDeltaY = 0;
- if (gMain.heldKeys & DPAD_UP && gUnknown_0203A144->scrollY > -0x34)
+ gRegionMap->zoomedCursorDeltaX = 0;
+ gRegionMap->zoomedCursorDeltaY = 0;
+ if (gMain.heldKeys & DPAD_UP && gRegionMap->scrollY > -0x34)
{
- gUnknown_0203A144->zoomedCursorDeltaY = -1;
+ gRegionMap->zoomedCursorDeltaY = -1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_DOWN && gUnknown_0203A144->scrollY < 0x3c)
+ if (gMain.heldKeys & DPAD_DOWN && gRegionMap->scrollY < 0x3c)
{
- gUnknown_0203A144->zoomedCursorDeltaY = +1;
+ gRegionMap->zoomedCursorDeltaY = +1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_LEFT && gUnknown_0203A144->scrollX > -0x2c)
+ if (gMain.heldKeys & DPAD_LEFT && gRegionMap->scrollX > -0x2c)
{
- gUnknown_0203A144->zoomedCursorDeltaX = -1;
+ gRegionMap->zoomedCursorDeltaX = -1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_RIGHT && gUnknown_0203A144->scrollX < 0xac)
+ if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->scrollX < 0xac)
{
- gUnknown_0203A144->zoomedCursorDeltaX = +1;
+ gRegionMap->zoomedCursorDeltaX = +1;
input = INPUT_EVENT_MOVE_START;
}
if (gMain.newKeys & A_BUTTON)
@@ -309,41 +310,41 @@ u8 sub_8123254(void)
}
if (input == INPUT_EVENT_MOVE_START)
{
- gUnknown_0203A144->inputCallback = sub_8123334;
- gUnknown_0203A144->zoomedCursorMovementFrameCounter = 0;
+ gRegionMap->inputCallback = MoveRegionMapCursor_Zoomed;
+ gRegionMap->zoomedCursorMovementFrameCounter = 0;
}
return input;
}
-u8 sub_8123334(void)
+static u8 MoveRegionMapCursor_Zoomed(void)
{
u16 x;
u16 y;
u16 mapSecId;
- gUnknown_0203A144->scrollY += gUnknown_0203A144->zoomedCursorDeltaY;
- gUnknown_0203A144->scrollX += gUnknown_0203A144->zoomedCursorDeltaX;
- sub_812378C(gUnknown_0203A144->scrollX, gUnknown_0203A144->scrollY);
- gUnknown_0203A144->zoomedCursorMovementFrameCounter ++;
- if (gUnknown_0203A144->zoomedCursorMovementFrameCounter == 8)
+ gRegionMap->scrollY += gRegionMap->zoomedCursorDeltaY;
+ gRegionMap->scrollX += gRegionMap->zoomedCursorDeltaX;
+ sub_812378C(gRegionMap->scrollX, gRegionMap->scrollY);
+ gRegionMap->zoomedCursorMovementFrameCounter ++;
+ if (gRegionMap->zoomedCursorMovementFrameCounter == 8)
{
- x = (gUnknown_0203A144->scrollX + 0x2c) / 8 + 1;
- y = (gUnknown_0203A144->scrollY + 0x34) / 8 + 2;
- if (x != gUnknown_0203A144->unk_064 || y != gUnknown_0203A144->unk_066)
+ x = (gRegionMap->scrollX + 0x2c) / 8 + 1;
+ y = (gRegionMap->scrollY + 0x34) / 8 + 2;
+ if (x != gRegionMap->unk_064 || y != gRegionMap->unk_066)
{
- gUnknown_0203A144->unk_064 = x;
- gUnknown_0203A144->unk_066 = y;
+ gRegionMap->unk_064 = x;
+ gRegionMap->unk_066 = y;
mapSecId = sub_812386C(x, y);
- gUnknown_0203A144->unk_002 = get_flagnr_blue_points(mapSecId);
- if (mapSecId != gUnknown_0203A144->mapSecId)
+ gRegionMap->unk_002 = get_flagnr_blue_points(mapSecId);
+ if (mapSecId != gRegionMap->mapSecId)
{
- gUnknown_0203A144->mapSecId = mapSecId;
- GetMapName(gUnknown_0203A144->mapSecName, gUnknown_0203A144->mapSecId, 16);
+ gRegionMap->mapSecId = mapSecId;
+ GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
}
sub_8123FB0();
}
- gUnknown_0203A144->zoomedCursorMovementFrameCounter = 0;
- gUnknown_0203A144->inputCallback = sub_8123254;
+ gRegionMap->zoomedCursorMovementFrameCounter = 0;
+ gRegionMap->inputCallback = ProcessRegionMapInput_Zoomed;
return INPUT_EVENT_MOVE_END;
}
return INPUT_EVENT_MOVE_CONT;
@@ -351,35 +352,119 @@ u8 sub_8123334(void)
void sub_8123418(void)
{
- if (gUnknown_0203A144->zoomed == FALSE)
+ if (gRegionMap->zoomed == FALSE)
{
- gUnknown_0203A144->scrollY = 0;
- gUnknown_0203A144->scrollX = 0;
- gUnknown_0203A144->unk_040 = 0;
- gUnknown_0203A144->unk_03c = 0;
- gUnknown_0203A144->unk_060 = gUnknown_0203A144->cursorPosX * 8 - 0x34;
- gUnknown_0203A144->unk_062 = gUnknown_0203A144->cursorPosY * 8 - 0x44;
- gUnknown_0203A144->unk_044 = (gUnknown_0203A144->unk_060 << 8) / 16;
- gUnknown_0203A144->unk_048 = (gUnknown_0203A144->unk_062 << 8) / 16;
- gUnknown_0203A144->unk_064 = gUnknown_0203A144->cursorPosX;
- gUnknown_0203A144->unk_066 = gUnknown_0203A144->cursorPosY;
- gUnknown_0203A144->unk_04c = 0x10000;
- gUnknown_0203A144->unk_050 = -0x800;
+ gRegionMap->scrollY = 0;
+ gRegionMap->scrollX = 0;
+ gRegionMap->unk_040 = 0;
+ gRegionMap->unk_03c = 0;
+ gRegionMap->unk_060 = gRegionMap->cursorPosX * 8 - 0x34;
+ gRegionMap->unk_062 = gRegionMap->cursorPosY * 8 - 0x44;
+ gRegionMap->unk_044 = (gRegionMap->unk_060 << 8) / 16;
+ gRegionMap->unk_048 = (gRegionMap->unk_062 << 8) / 16;
+ gRegionMap->unk_064 = gRegionMap->cursorPosX;
+ gRegionMap->unk_066 = gRegionMap->cursorPosY;
+ gRegionMap->unk_04c = 0x10000;
+ gRegionMap->unk_050 = -0x800;
}
else
{
- gUnknown_0203A144->unk_03c = gUnknown_0203A144->scrollX * 256;
- gUnknown_0203A144->unk_040 = gUnknown_0203A144->scrollY * 256;
- gUnknown_0203A144->unk_060 = 0;
- gUnknown_0203A144->unk_062 = 0;
- gUnknown_0203A144->unk_044 = -(gUnknown_0203A144->unk_03c / 16);
- gUnknown_0203A144->unk_048 = -(gUnknown_0203A144->unk_040 / 16);
- gUnknown_0203A144->cursorPosX = gUnknown_0203A144->unk_064;
- gUnknown_0203A144->cursorPosY = gUnknown_0203A144->unk_066;
- gUnknown_0203A144->unk_04c = 0x8000;
- gUnknown_0203A144->unk_050 = 0x800;
+ gRegionMap->unk_03c = gRegionMap->scrollX * 256;
+ gRegionMap->unk_040 = gRegionMap->scrollY * 256;
+ gRegionMap->unk_060 = 0;
+ gRegionMap->unk_062 = 0;
+ gRegionMap->unk_044 = -(gRegionMap->unk_03c / 16);
+ gRegionMap->unk_048 = -(gRegionMap->unk_040 / 16);
+ gRegionMap->cursorPosX = gRegionMap->unk_064;
+ gRegionMap->cursorPosY = gRegionMap->unk_066;
+ gRegionMap->unk_04c = 0x8000;
+ gRegionMap->unk_050 = 0x800;
}
- gUnknown_0203A144->unk_06e = 0;
+ gRegionMap->unk_06e = 0;
sub_8124238();
sub_81243B0();
}
+
+u8 sub_8123514(void)
+{
+ u8 r4;
+
+ if (gRegionMap->unk_06e >= 16)
+ return 0;
+ gRegionMap->unk_06e ++;
+ if (gRegionMap->unk_06e == 16)
+ {
+ gRegionMap->unk_044 = 0;
+ gRegionMap->unk_048 = 0;
+ gRegionMap->scrollX = gRegionMap->unk_060;
+ gRegionMap->scrollY = gRegionMap->unk_062;
+ gRegionMap->unk_04c = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8);
+ gRegionMap->zoomed = !gRegionMap->zoomed;
+ gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? ProcessRegionMapInput_Full : ProcessRegionMapInput_Zoomed;
+ CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag);
+ sub_81243DC();
+ r4 = 0;
+ }
+ else
+ {
+ gRegionMap->unk_03c += gRegionMap->unk_044;
+ gRegionMap->unk_040 += gRegionMap->unk_048;
+ gRegionMap->scrollX = gRegionMap->unk_03c >> 8;
+ gRegionMap->scrollY = gRegionMap->unk_040 >> 8;
+ gRegionMap->unk_04c += gRegionMap->unk_050;
+ if ((gRegionMap->unk_044 < 0 && gRegionMap->scrollX < gRegionMap->unk_060)
+ || (gRegionMap->unk_044 > 0 && gRegionMap->scrollX > gRegionMap->unk_060))
+ {
+ gRegionMap->scrollX = gRegionMap->unk_060;
+ gRegionMap->unk_044 = 0;
+ }
+ if ((gRegionMap->unk_048 < 0 && gRegionMap->scrollY < gRegionMap->unk_062)
+ || (gRegionMap->unk_048 > 0 && gRegionMap->scrollY > gRegionMap->unk_062))
+ {
+ gRegionMap->scrollY = gRegionMap->unk_062;
+ gRegionMap->unk_048 = 0;
+ }
+ if (gRegionMap->zoomed == FALSE)
+ {
+ if (gRegionMap->unk_04c < (128 << 8))
+ {
+ gRegionMap->unk_04c = (128 << 8);
+ gRegionMap->unk_050 = 0;
+ }
+ }
+ else
+ {
+ if (gRegionMap->unk_04c > (256 << 8))
+ {
+ gRegionMap->unk_04c = (256 << 8);
+ gRegionMap->unk_050 = 0;
+ }
+ }
+ r4 = 1;
+ }
+ CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk_04c >> 8, gRegionMap->unk_04c >> 8, 0);
+ return r4;
+}
+
+void CalcZoomScrollParams(s16 scrollX, s16 scrollY, s16 c, s16 d, u16 e, u16 f, u8 rotation)
+{
+ s32 var1;
+ s32 var2;
+ s32 var3;
+ s32 var4;
+
+ gRegionMap->bg2pa = e * gSineTable[rotation + 64] >> 8;
+ gRegionMap->bg2pb = e * -gSineTable[rotation] >> 8;
+ gRegionMap->bg2pc = f * gSineTable[rotation] >> 8;
+ gRegionMap->bg2pd = f * gSineTable[rotation + 64] >> 8;
+
+ var1 = (scrollX << 8) + (c << 8);
+ var2 = d * gRegionMap->bg2pc + gRegionMap->bg2pa * c;
+ gRegionMap->bg2x = var1 - var2;
+
+ var3 = (scrollY << 8) + (d << 8);
+ var4 = gRegionMap->bg2pd * d + gRegionMap->bg2pb * c;
+ gRegionMap->bg2y = var3 - var4;
+
+ gRegionMap->needUpdateVideoRegs = TRUE;
+}