finished save_location
This commit is contained in:
@@ -1,222 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start IsCurMapInLocationList
|
||||
IsCurMapInLocationList: @ 810B6F4
|
||||
push {r4,lr}
|
||||
adds r2, r0, 0
|
||||
ldr r0, _0810B724 @ =gSaveBlock1Ptr
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x4
|
||||
ldrsb r1, [r0, r1]
|
||||
lsls r1, 8
|
||||
ldrb r0, [r0, 0x5]
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
adds r0, r1
|
||||
lsls r0, 16
|
||||
lsrs r3, r0, 16
|
||||
ldrh r0, [r2]
|
||||
ldr r1, _0810B728 @ =0x0000ffff
|
||||
cmp r0, r1
|
||||
beq _0810B734
|
||||
adds r4, r1, 0
|
||||
adds r1, r2, 0
|
||||
_0810B71A:
|
||||
ldrh r0, [r1]
|
||||
cmp r0, r3
|
||||
bne _0810B72C
|
||||
movs r0, 0x1
|
||||
b _0810B736
|
||||
.align 2, 0
|
||||
_0810B724: .4byte gSaveBlock1Ptr
|
||||
_0810B728: .4byte 0x0000ffff
|
||||
_0810B72C:
|
||||
adds r1, 0x2
|
||||
ldrh r0, [r1]
|
||||
cmp r0, r4
|
||||
bne _0810B71A
|
||||
_0810B734:
|
||||
movs r0, 0
|
||||
_0810B736:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end IsCurMapInLocationList
|
||||
|
||||
thumb_func_start IsCurMapPokeCenter
|
||||
IsCurMapPokeCenter: @ 810B73C
|
||||
push {lr}
|
||||
ldr r0, _0810B748 @ =gUnknown_845303C
|
||||
bl IsCurMapInLocationList
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0810B748: .4byte gUnknown_845303C
|
||||
thumb_func_end IsCurMapPokeCenter
|
||||
|
||||
thumb_func_start IsCurMapReloadLocation
|
||||
IsCurMapReloadLocation: @ 810B74C
|
||||
push {lr}
|
||||
ldr r0, _0810B758 @ =gUnknown_8453092
|
||||
bl IsCurMapInLocationList
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0810B758: .4byte gUnknown_8453092
|
||||
thumb_func_end IsCurMapReloadLocation
|
||||
|
||||
thumb_func_start sub_810B75C
|
||||
sub_810B75C: @ 810B75C
|
||||
push {lr}
|
||||
ldr r0, _0810B768 @ =gUnknown_8453094
|
||||
bl IsCurMapInLocationList
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0810B768: .4byte gUnknown_8453094
|
||||
thumb_func_end sub_810B75C
|
||||
|
||||
thumb_func_start TrySetPokeCenterWarpStatus
|
||||
TrySetPokeCenterWarpStatus: @ 810B76C
|
||||
push {lr}
|
||||
bl IsCurMapPokeCenter
|
||||
cmp r0, 0
|
||||
bne _0810B788
|
||||
ldr r0, _0810B784 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0xFD
|
||||
ands r0, r1
|
||||
b _0810B792
|
||||
.align 2, 0
|
||||
_0810B784: .4byte gSaveBlock2Ptr
|
||||
_0810B788:
|
||||
ldr r0, _0810B798 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0x2
|
||||
orrs r0, r1
|
||||
_0810B792:
|
||||
strb r0, [r2, 0x9]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810B798: .4byte gSaveBlock2Ptr
|
||||
thumb_func_end TrySetPokeCenterWarpStatus
|
||||
|
||||
thumb_func_start TrySetReloadWarpStatus
|
||||
TrySetReloadWarpStatus: @ 810B79C
|
||||
push {lr}
|
||||
bl IsCurMapReloadLocation
|
||||
cmp r0, 0
|
||||
bne _0810B7B8
|
||||
ldr r0, _0810B7B4 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0xFB
|
||||
ands r0, r1
|
||||
b _0810B7C2
|
||||
.align 2, 0
|
||||
_0810B7B4: .4byte gSaveBlock2Ptr
|
||||
_0810B7B8:
|
||||
ldr r0, _0810B7C8 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0x4
|
||||
orrs r0, r1
|
||||
_0810B7C2:
|
||||
strb r0, [r2, 0x9]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810B7C8: .4byte gSaveBlock2Ptr
|
||||
thumb_func_end TrySetReloadWarpStatus
|
||||
|
||||
thumb_func_start sub_810B7CC
|
||||
sub_810B7CC: @ 810B7CC
|
||||
push {lr}
|
||||
bl sub_810B75C
|
||||
cmp r0, 0
|
||||
bne _0810B7E8
|
||||
ldr r0, _0810B7E4 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0xF7
|
||||
ands r0, r1
|
||||
b _0810B7F2
|
||||
.align 2, 0
|
||||
_0810B7E4: .4byte gSaveBlock2Ptr
|
||||
_0810B7E8:
|
||||
ldr r0, _0810B7F8 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0x8
|
||||
orrs r0, r1
|
||||
_0810B7F2:
|
||||
strb r0, [r2, 0x9]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810B7F8: .4byte gSaveBlock2Ptr
|
||||
thumb_func_end sub_810B7CC
|
||||
|
||||
thumb_func_start TrySetMapSaveWarpStatus
|
||||
TrySetMapSaveWarpStatus: @ 810B7FC
|
||||
push {lr}
|
||||
bl TrySetPokeCenterWarpStatus
|
||||
bl TrySetReloadWarpStatus
|
||||
bl sub_810B7CC
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end TrySetMapSaveWarpStatus
|
||||
|
||||
thumb_func_start sub_810B810
|
||||
sub_810B810: @ 810B810
|
||||
ldr r0, _0810B828 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r0]
|
||||
adds r2, 0xA8
|
||||
ldr r0, [r2]
|
||||
movs r1, 0x1
|
||||
orrs r0, r1
|
||||
movs r1, 0x10
|
||||
orrs r0, r1
|
||||
movs r1, 0x20
|
||||
orrs r0, r1
|
||||
str r0, [r2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0810B828: .4byte gSaveBlock2Ptr
|
||||
thumb_func_end sub_810B810
|
||||
|
||||
thumb_func_start sub_810B82C
|
||||
sub_810B82C: @ 810B82C
|
||||
ldr r3, _0810B854 @ =gSaveBlock2Ptr
|
||||
ldr r2, [r3]
|
||||
ldrb r1, [r2, 0x9]
|
||||
movs r0, 0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r2, 0x9]
|
||||
ldr r2, [r3]
|
||||
adds r2, 0xA8
|
||||
ldr r0, [r2]
|
||||
movs r1, 0x2
|
||||
orrs r0, r1
|
||||
movs r1, 0x4
|
||||
orrs r0, r1
|
||||
movs r1, 0x8
|
||||
orrs r0, r1
|
||||
movs r1, 0x80
|
||||
lsls r1, 8
|
||||
orrs r0, r1
|
||||
str r0, [r2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0810B854: .4byte gSaveBlock2Ptr
|
||||
thumb_func_end sub_810B82C
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
@@ -969,17 +969,7 @@ gUnknown_8452F6C:: @ 8452F6C
|
||||
gUnknown_8452F7C:: @ 8452F7C
|
||||
.incbin "baserom.gba", 0x452F7C, 0xC0
|
||||
|
||||
gUnknown_845303C:: @ 845303C
|
||||
.incbin "baserom.gba", 0x45303C, 0x56
|
||||
|
||||
gUnknown_8453092:: @ 8453092
|
||||
.incbin "baserom.gba", 0x453092, 0x2
|
||||
|
||||
gUnknown_8453094:: @ 8453094
|
||||
.incbin "baserom.gba", 0x453094, 0x4
|
||||
|
||||
.section .rodata.8453F6C
|
||||
|
||||
// mailbox_pc.o
|
||||
gUnknown_8453FE8:: @ 8453FE8
|
||||
.incbin "baserom.gba", 0x453FE8, 0x18
|
||||
|
||||
+1
-1
@@ -209,7 +209,7 @@ struct SaveBlock2
|
||||
{
|
||||
/*0x000*/ u8 playerName[PLAYER_NAME_LENGTH];
|
||||
/*0x008*/ u8 playerGender; // MALE, FEMALE
|
||||
/*0x009*/ u8 specialSaveWarp;
|
||||
/*0x009*/ u8 specialSaveWarpFlags;
|
||||
/*0x00A*/ u8 playerTrainerId[4];
|
||||
/*0x00E*/ u16 playTimeHours;
|
||||
/*0x010*/ u8 playTimeMinutes;
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
#ifndef GUARD_SAVE_LOCATION_H
|
||||
#define GUARD_SAVE_LOCATION_H
|
||||
|
||||
#include "global.h"
|
||||
// specialSaveWarp flags
|
||||
#define CONTINUE_GAME_WARP (1 << 0)
|
||||
#define POKECENTER_SAVEWARP (1 << 1)
|
||||
#define LOBBY_SAVEWARP (1 << 2)
|
||||
#define UNK_SPECIAL_SAVE_WARP_FLAG_3 (1 << 3)
|
||||
|
||||
bool32 sub_81AFCEC(void);
|
||||
void TrySetMapSaveWarpStatus(void);
|
||||
void sub_81AFDA0(void);
|
||||
void sub_81AFDD0(void);
|
||||
bool32 IsCurMapPokeCenter(void);
|
||||
void sub_810B810(void);
|
||||
void sub_810B82C(void);
|
||||
|
||||
#endif // GUARD_SAVE_LOCATION_H
|
||||
#endif // GUARD_SAVE_LOCATION_H
|
||||
+2
-1
@@ -227,7 +227,7 @@ SECTIONS {
|
||||
asm/pokedex_screen.o(.text);
|
||||
asm/list_menu.o(.text);
|
||||
asm/item_menu.o(.text);
|
||||
asm/save_location.o(.text);
|
||||
src/save_location.o(.text);
|
||||
src/bag.o(.text);
|
||||
src/trainer_pokemon_sprites.o(.text);
|
||||
src/vs_seeker.o(.text);
|
||||
@@ -421,6 +421,7 @@ SECTIONS {
|
||||
data/data_83FECCC.o(.rodata.841EE44);
|
||||
src/new_menu_helpers.o(.rodata);
|
||||
data/data_83FECCC.o(.rodata.841F4B4);
|
||||
src/save_location.o(.rodata);
|
||||
src/bag.o(.rodata);
|
||||
src/trainer_pokemon_sprites.o(.rodata);
|
||||
src/vs_seeker.o(.rodata);
|
||||
|
||||
+5
-5
@@ -132,28 +132,28 @@ void MoveSaveBlocks_ResetHeap(void)
|
||||
|
||||
u32 sav2_x1_query_bit1(void)
|
||||
{
|
||||
return gSaveBlock2Ptr->specialSaveWarp & 1;
|
||||
return gSaveBlock2Ptr->specialSaveWarpFlags & 1;
|
||||
}
|
||||
|
||||
void sav2_x9_clear_bit1(void)
|
||||
{
|
||||
gSaveBlock2Ptr->specialSaveWarp &= ~1;
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags &= ~1;
|
||||
}
|
||||
|
||||
void sub_804C1AC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->specialSaveWarp |= 1;
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags |= 1;
|
||||
}
|
||||
|
||||
void sub_804C1C0(void)
|
||||
{
|
||||
sub_8055778(0);
|
||||
gSaveBlock2Ptr->specialSaveWarp |= 1;
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags |= 1;
|
||||
}
|
||||
|
||||
void sav2_gender2_inplace_and_xFE(void)
|
||||
{
|
||||
gSaveBlock2Ptr->specialSaveWarp &= ~1;
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags &= ~1;
|
||||
}
|
||||
|
||||
void SavePlayerParty(void)
|
||||
|
||||
@@ -10,9 +10,8 @@
|
||||
|
||||
void sub_8079B7C(void)
|
||||
{
|
||||
u16 imeBackup;
|
||||
|
||||
imeBackup = REG_IME;
|
||||
u16 imeBackup = REG_IME;
|
||||
|
||||
REG_IME = 0;
|
||||
RegisterRamReset(0x00000001);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
#include "global.h"
|
||||
#include "save_location.h"
|
||||
#include "constants/maps.h"
|
||||
|
||||
static bool32 IsCurMapInLocationList(const u16 *list)
|
||||
{
|
||||
s32 i;
|
||||
u16 locSum = (gSaveBlock1Ptr->location.mapGroup << 8) + (gSaveBlock1Ptr->location.mapNum);
|
||||
|
||||
for (i = 0; list[i] != 0xFFFF; i++)
|
||||
{
|
||||
if (list[i] == locSum)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const u16 sSaveLocationPokeCenterList[] =
|
||||
{
|
||||
MAP_VIRIDIAN_CITY_POKEMON_CENTER_1F, MAP_VIRIDIAN_CITY_POKEMON_CENTER_2F,
|
||||
MAP_PEWTER_CITY_POKEMON_CENTER_1F, MAP_PEWTER_CITY_POKEMON_CENTER_2F,
|
||||
MAP_CERULEAN_CITY_POKEMON_CENTER_1F, MAP_CERULEAN_CITY_POKEMON_CENTER_2F,
|
||||
MAP_LAVENDER_TOWN_POKEMON_CENTER_1F, MAP_LAVENDER_TOWN_POKEMON_CENTER_2F,
|
||||
MAP_VERMILION_CITY_POKEMON_CENTER_1F, MAP_VERMILION_CITY_POKEMON_CENTER_2F,
|
||||
MAP_CELADON_CITY_POKEMON_CENTER_1F, MAP_CELADON_CITY_POKEMON_CENTER_2F,
|
||||
MAP_FUCHSIA_CITY_POKEMON_CENTER_1F, MAP_FUCHSIA_CITY_POKEMON_CENTER_2F,
|
||||
MAP_CINNABAR_ISLAND_POKEMON_CENTER_1F, MAP_CINNABAR_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_INDIGO_PLATEAU_POKEMON_CENTER_1F, MAP_INDIGO_PLATEAU_POKEMON_CENTER_2F,
|
||||
MAP_SAFFRON_CITY_POKEMON_CENTER_1F, MAP_SAFFRON_CITY_POKEMON_CENTER_2F,
|
||||
MAP_ROUTE4_POKEMON_CENTER_1F, MAP_ROUTE4_POKEMON_CENTER_2F,
|
||||
MAP_ROUTE10_POKEMON_CENTER_1F, MAP_ROUTE10_POKEMON_CENTER_2F,
|
||||
MAP_ONE_ISLAND_POKEMON_CENTER_1F, MAP_ONE_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_TWO_ISLAND_POKEMON_CENTER_1F, MAP_TWO_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_THREE_ISLAND_POKEMON_CENTER_1F, MAP_THREE_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_FOUR_ISLAND_POKEMON_CENTER_1F, MAP_FOUR_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_FIVE_ISLAND_POKEMON_CENTER_1F, MAP_FIVE_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_SEVEN_ISLAND_POKEMON_CENTER_1F, MAP_SEVEN_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_SIX_ISLAND_POKEMON_CENTER_1F, MAP_SIX_ISLAND_POKEMON_CENTER_2F,
|
||||
MAP_UNKNOWN_MAP_00_00, MAP_UNKNOWN_MAP_00_01,
|
||||
MAP_UNKNOWN_MAP_00_03, MAP_UNKNOWN_MAP_00_04,
|
||||
0xFFFF,
|
||||
};
|
||||
|
||||
bool32 IsCurMapPokeCenter(void)
|
||||
{
|
||||
return IsCurMapInLocationList(sSaveLocationPokeCenterList);
|
||||
}
|
||||
|
||||
static const u16 sSaveLocationReloadLocList[] = { 0xFFFF };
|
||||
|
||||
static bool32 IsCurMapReloadLocation(void)
|
||||
{
|
||||
return IsCurMapInLocationList(sSaveLocationReloadLocList);
|
||||
}
|
||||
|
||||
static const u16 sUnknown_8453094[] = { 0xFFFF };
|
||||
|
||||
static bool32 sub_810B75C(void)
|
||||
{
|
||||
return IsCurMapInLocationList(sUnknown_8453094);
|
||||
}
|
||||
|
||||
static void TrySetPokeCenterWarpStatus(void)
|
||||
{
|
||||
if (IsCurMapPokeCenter() == FALSE)
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags &= ~(POKECENTER_SAVEWARP);
|
||||
else
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags |= POKECENTER_SAVEWARP;
|
||||
}
|
||||
|
||||
static void TrySetReloadWarpStatus(void)
|
||||
{
|
||||
if (!IsCurMapReloadLocation())
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags &= ~(LOBBY_SAVEWARP);
|
||||
else
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags |= LOBBY_SAVEWARP;
|
||||
}
|
||||
|
||||
static void sub_810B7CC(void)
|
||||
{
|
||||
if (!sub_810B75C())
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags &= ~(UNK_SPECIAL_SAVE_WARP_FLAG_3);
|
||||
else
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags |= UNK_SPECIAL_SAVE_WARP_FLAG_3;
|
||||
}
|
||||
|
||||
void TrySetMapSaveWarpStatus(void)
|
||||
{
|
||||
TrySetPokeCenterWarpStatus();
|
||||
TrySetReloadWarpStatus();
|
||||
sub_810B7CC();
|
||||
}
|
||||
|
||||
void sub_810B810(void)
|
||||
{
|
||||
gSaveBlock2Ptr->field_A8 |= 0x1;
|
||||
gSaveBlock2Ptr->field_A8 |= 0x10;
|
||||
gSaveBlock2Ptr->field_A8 |= 0x20;
|
||||
}
|
||||
|
||||
void sub_810B82C(void)
|
||||
{
|
||||
gSaveBlock2Ptr->specialSaveWarpFlags |= 0x80;
|
||||
gSaveBlock2Ptr->field_A8 |= 0x2;
|
||||
gSaveBlock2Ptr->field_A8 |= 0x4;
|
||||
gSaveBlock2Ptr->field_A8 |= 0x8;
|
||||
gSaveBlock2Ptr->field_A8 |= 0x8000;
|
||||
}
|
||||
Reference in New Issue
Block a user