Encryption2

This commit is contained in:
Eduardo Quezada 2025-12-24 17:54:55 -03:00
parent d520d491dd
commit 7f477efbcc
9 changed files with 51 additions and 49 deletions

View File

@ -4732,7 +4732,7 @@
.extern Pokemon_New
.extern Pokemon_UnlockEncryption
.extern Pokemon_LockEncryption
.extern AcquireBoxMonLock
.extern BoxPokemon_UnlockEncryption
.extern BoxPokemon_LockEncryption
.extern Pokemon_InitWithParams
.extern Pokemon_InitWithNature

View File

@ -5455,7 +5455,7 @@ ov14_021DA168: ; 0x021DA168
mov r1, #0
add r5, r0, #0
str r1, [sp, #4]
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
str r0, [sp]
add r0, r5, #0
mov r1, #0xac
@ -9189,7 +9189,7 @@ ov14_021DBEAC: ; 0x021DBEAC
add r0, r5, #0
add r6, r2, #0
add r4, #0x4c
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
str r0, [sp]
str r5, [r7, #0x4c]
add r0, r5, #0
@ -18859,7 +18859,7 @@ ov14_021E0940: ; 0x021E0940
str r2, [sp, #8]
str r3, [sp, #0xc]
ldr r4, [sp, #0x64]
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x10]
@ -18987,7 +18987,7 @@ ov14_021E0A60: ; 0x021E0A60
str r2, [sp, #8]
add r7, r3, #0
ldr r4, [sp, #0x70]
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
str r0, [sp, #0x14]
add r0, r6, #0
mov r1, #0x4c
@ -21819,7 +21819,7 @@ _021E204A:
bl PCStorage_GetMonByIndexPair
add r4, r4, #1
add r5, r0, #0
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x1c]

View File

@ -318,7 +318,7 @@ _02254A7A:
str r0, [sp, #8]
bl DaycareMon_GetBoxMon
add r4, r0, #0
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
str r0, [sp, #0xc]
add r0, r4, #0
bl sub_0206B688

View File

@ -10832,7 +10832,7 @@ ov80_02232C88: ; 0x02232C88
add r7, r2, #0
add r6, r3, #0
ldr r4, [sp, #0x40]
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
add r0, r5, #0
mov r1, #0xab
mov r2, #0
@ -11266,7 +11266,7 @@ ov80_02233018: ; 0x02233018
push {r3, r4, r5, r6, r7, lr}
add r7, r0, #0
mov r4, #0
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
ldr r5, _02233050 ; =0x02237220
str r0, [sp]
add r6, r4, #0

View File

@ -999,7 +999,7 @@ _0223860E:
ldr r4, [r0, #4]
_02238610:
add r0, r4, #0
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
str r0, [sp, #0x20]
add r0, sp, #0x34
add r1, r4, #0

View File

@ -21879,7 +21879,7 @@ MigrateBoxMon: ; 0x02237F6C
add r0, r4, #0
bl BoxPokemon_Init
add r0, r4, #0
bl AcquireBoxMonLock
bl BoxPokemon_UnlockEncryption
mov r1, #0
str r0, [sp]
add r0, r6, #0

View File

@ -126,52 +126,54 @@ Pokemon *Pokemon_New(HeapID heapID) {
}
BOOL Pokemon_UnlockEncryption(Pokemon *mon) {
BOOL ret = FALSE;
BOOL wasDecrypted = FALSE;
if (!mon->box.partyDecrypted) {
ret = TRUE;
wasDecrypted = TRUE;
GF_ASSERT(!mon->box.boxDecrypted);
mon->box.partyDecrypted = TRUE;
mon->box.boxDecrypted = TRUE;
DECRYPT_PARTY(mon);
DECRYPT_BOX(&mon->box);
}
return ret;
return wasDecrypted;
}
BOOL Pokemon_LockEncryption(Pokemon *mon, BOOL decrypt_result) {
BOOL ret = FALSE;
if (mon->box.partyDecrypted == TRUE && decrypt_result == TRUE) {
ret = TRUE;
BOOL Pokemon_LockEncryption(Pokemon *mon, BOOL encrypt) {
BOOL wasEncrypted = FALSE;
if (mon->box.partyDecrypted == TRUE && encrypt == TRUE) {
wasEncrypted = TRUE;
mon->box.partyDecrypted = FALSE;
mon->box.boxDecrypted = FALSE;
ENCRYPT_PARTY(mon);
mon->box.checksum = CHECKSUM(&mon->box);
ENCRYPT_BOX(&mon->box);
}
return ret;
return wasEncrypted;
}
BOOL AcquireBoxMonLock(BoxPokemon *mon) {
BOOL ret = FALSE;
BOOL BoxPokemon_UnlockEncryption(BoxPokemon *boxMon) {
BOOL wasDecrypted = FALSE;
if (!mon->boxDecrypted) {
ret = TRUE;
mon->boxDecrypted = TRUE;
DECRYPT_BOX(mon);
if (!boxMon->boxDecrypted) {
wasDecrypted = TRUE;
boxMon->boxDecrypted = TRUE;
DECRYPT_BOX(boxMon);
}
return ret;
return wasDecrypted;
}
BOOL BoxPokemon_LockEncryption(BoxPokemon *mon, BOOL decrypt_result) {
BOOL ret = FALSE;
if (mon->boxDecrypted == TRUE && decrypt_result == TRUE) {
ret = TRUE;
mon->boxDecrypted = FALSE;
mon->checksum = CHECKSUM(mon);
ENCRYPT_BOX(mon);
BOOL BoxPokemon_LockEncryption(BoxPokemon *boxMon, BOOL encrypt) {
BOOL wasEncrypted = FALSE;
if (boxMon->boxDecrypted == TRUE && encrypt == TRUE) {
wasEncrypted = TRUE;
boxMon->boxDecrypted = FALSE;
boxMon->checksum = CHECKSUM(boxMon);
ENCRYPT_BOX(boxMon);
}
return ret;
return wasEncrypted;
}
void Pokemon_InitWithParams(Pokemon *mon, int species, int level, int ivs, BOOL hasFixedPersonality, int personality, int otIDType, int otID) {
@ -199,7 +201,7 @@ void Pokemon_InitWithParams(Pokemon *mon, int species, int level, int ivs, BOOL
void BoxPokemon_InitWithParams(BoxPokemon *boxMon, int species, int level, int ivs, BOOL hasFixedPersonality, int personality, int otIDType, int otID) {
u32 var1, var2;
BoxPokemon_Init(boxMon);
BOOL reencrypt = AcquireBoxMonLock(boxMon);
BOOL reencrypt = BoxPokemon_UnlockEncryption(boxMon);
if (!hasFixedPersonality) {
personality = (LCRandom() | (LCRandom() << 16));
}
@ -1835,7 +1837,7 @@ int Pokemon_CalcLevel(Pokemon *mon) {
}
int BoxPokemon_CalcLevel(BoxPokemon *boxMon) {
BOOL reencrypt = AcquireBoxMonLock(boxMon);
BOOL reencrypt = BoxPokemon_UnlockEncryption(boxMon);
int species = BoxPokemon_GetData(boxMon, MON_DATA_SPECIES, NULL);
int exp = BoxPokemon_GetData(boxMon, MON_DATA_EXPERIENCE, NULL);
BoxPokemon_LockEncryption(boxMon, reencrypt);
@ -1867,7 +1869,7 @@ u8 Pokemon_GetNature(Pokemon *mon) {
}
u8 BoxPokemon_GetNature(BoxPokemon *boxMon) {
BOOL reencrypt = AcquireBoxMonLock(boxMon);
BOOL reencrypt = BoxPokemon_UnlockEncryption(boxMon);
u32 personality = BoxPokemon_GetData(boxMon, MON_DATA_PERSONALITY, NULL);
BoxPokemon_LockEncryption(boxMon, reencrypt);
return Personality_GetNature(personality);
@ -1991,7 +1993,7 @@ u8 Pokemon_GetGender(Pokemon *mon) {
}
u8 BoxPokemon_GetGender(BoxPokemon *boxMon) {
BOOL reencrypt = AcquireBoxMonLock(boxMon);
BOOL reencrypt = BoxPokemon_UnlockEncryption(boxMon);
u16 species = BoxPokemon_GetData(boxMon, MON_DATA_SPECIES, NULL);
u32 personality = BoxPokemon_GetData(boxMon, MON_DATA_PERSONALITY, NULL);
BoxPokemon_LockEncryption(boxMon, reencrypt);
@ -2077,7 +2079,7 @@ void sub_02068B68(struct SomeDrawPokemonStruct *spC, Pokemon *pokemon, u8 sp10)
}
void sub_02068B70(struct SomeDrawPokemonStruct *spC, BoxPokemon *boxMon, u8 sp10) {
BOOL decry = AcquireBoxMonLock(boxMon);
BOOL decry = BoxPokemon_UnlockEncryption(boxMon);
u16 species = (u16)BoxPokemon_GetData(boxMon, MON_DATA_SPECIES_OR_EGG, NULL);
u8 gender = BoxPokemon_GetGender(boxMon);
u8 shiny = BoxPokemon_IsShiny(boxMon);
@ -2655,7 +2657,7 @@ void BoxPokemon_SetDefaultMoves(BoxPokemon *boxMon) {
u8 level;
u16 move;
levelUpLearnset = AllocFromHeap(HEAP_ID_DEFAULT, MAX_LEARNED_MOVES * sizeof(u16));
decry = AcquireBoxMonLock(boxMon);
decry = BoxPokemon_UnlockEncryption(boxMon);
species = (u16)BoxPokemon_GetData(boxMon, MON_DATA_SPECIES, NULL);
form = BoxPokemon_GetData(boxMon, MON_DATA_FORM, NULL);
level = (u8)BoxPokemon_CalcLevel(boxMon);
@ -2680,7 +2682,7 @@ u32 sub_02069698(Pokemon *pokemon, u16 move) {
u32 sub_020696A8(BoxPokemon *boxMon, u16 move) {
u32 ret = 0xFFFF;
int i;
BOOL decry = AcquireBoxMonLock(boxMon);
BOOL decry = BoxPokemon_UnlockEncryption(boxMon);
u16 cur_move;
for (i = 0; i < 4; i++) {
cur_move = (u16)BoxPokemon_GetData(boxMon, MON_DATA_MOVE1 + i, NULL);
@ -2703,7 +2705,7 @@ void sub_02069708(Pokemon *pokemon, u16 move) {
}
void sub_02069718(BoxPokemon *boxMon, u16 move) {
BOOL decry = AcquireBoxMonLock(boxMon);
BOOL decry = BoxPokemon_UnlockEncryption(boxMon);
int i;
u16 moves[4];
u8 pp[4];
@ -3207,7 +3209,7 @@ void sub_0206A1C4(Pokemon *pokemon) {
}
void sub_0206A1CC(BoxPokemon *boxMon) {
BOOL decry = AcquireBoxMonLock(boxMon);
BOOL decry = BoxPokemon_UnlockEncryption(boxMon);
int species = (int)BoxPokemon_GetData(boxMon, MON_DATA_SPECIES, NULL);
int pid = (int)BoxPokemon_GetData(boxMon, MON_DATA_PERSONALITY, NULL);
int ability1 = (int)Species_GetValue(species, SPECIES_DATA_ABILITY_1);
@ -3514,7 +3516,7 @@ void Pokemon_RemoveCapsule(Pokemon *pokemon) {
void RestoreBoxMonPP(BoxPokemon *boxMon) {
int i;
u8 pp;
BOOL decry = AcquireBoxMonLock(boxMon);
BOOL decry = BoxPokemon_UnlockEncryption(boxMon);
for (i = 0; i < 4; i++) {
if (BoxPokemon_GetData(boxMon, MON_DATA_MOVE1 + i, NULL) != MOVE_NONE) {
pp = (u8)BoxPokemon_GetData(boxMon, MON_DATA_MOVE1_MAX_PP + i, NULL);

View File

@ -8,7 +8,7 @@ u16 BoxMon_GetAlternateForm(struct BoxPokemon *boxmon);
u32 sub_0206B6D4(u32 species, u32 is_egg, u32 form);
u32 sub_0206B688(struct BoxPokemon *boxmon) {
BOOL decry = AcquireBoxMonLock(boxmon);
BOOL decry = BoxPokemon_UnlockEncryption(boxmon);
u32 species = BoxPokemon_GetData(boxmon, MON_DATA_SPECIES, NULL);
u32 is_egg = BoxPokemon_GetData(boxmon, MON_DATA_IS_EGG, NULL);
u32 form = BoxMon_GetAlternateForm(boxmon);
@ -100,7 +100,7 @@ u32 sub_0206B7BC(u32 species, u32 form, u32 is_egg) {
}
u32 sub_0206B83C(struct BoxPokemon *boxmon) {
BOOL decry = AcquireBoxMonLock(boxmon);
BOOL decry = BoxPokemon_UnlockEncryption(boxmon);
u32 form = BoxMon_GetAlternateForm(boxmon);
u32 species = BoxPokemon_GetData(boxmon, MON_DATA_SPECIES, NULL);
u32 is_egg = BoxPokemon_GetData(boxmon, MON_DATA_IS_EGG, NULL);

View File

@ -228,9 +228,9 @@ void BoxPokemon_Init(BoxPokemon *boxMon);
u32 SizeOfStructPokemon(void);
Pokemon *Pokemon_New(HeapID heapId);
BOOL Pokemon_UnlockEncryption(Pokemon *mon);
BOOL Pokemon_LockEncryption(Pokemon *mon, BOOL decrypt_result);
BOOL AcquireBoxMonLock(BoxPokemon *boxMon);
BOOL BoxPokemon_LockEncryption(BoxPokemon *boxMon, BOOL decrypt_result);
BOOL Pokemon_LockEncryption(Pokemon *mon, BOOL encrypt);
BOOL BoxPokemon_UnlockEncryption(BoxPokemon *boxMon);
BOOL BoxPokemon_LockEncryption(BoxPokemon *boxMon, BOOL encrypt);
void Pokemon_InitWithParams(Pokemon *mon, int species, int level, int fixedIV, int hasFixedPersonality, int fixedPersonality, int otIdType, int fixedOtId);
void BoxPokemon_InitWithParams(BoxPokemon *boxMon, int species, int level, int ivs, BOOL hasFixedPersonality, int personality, int otIDType, int otID);
void Pokemon_InitWithNature(Pokemon *mon, u16 species, u8 level, u8 fixedIv, u8 nature);