Merge pull request #94 from adrienntindall/master

Decomp unk_02097E4C.s -> pokemon_mood.c
This commit is contained in:
Revo 2022-09-03 13:19:07 -04:00 committed by GitHub
commit 6e9aef28ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 126 additions and 195 deletions

View File

@ -1,187 +0,0 @@
#include "constants/easy_chat.h"
#include "constants/items.h"
#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/species.h"
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start MonAdjustMood
MonAdjustMood: ; 0x02097E4C
push {r3, r4, r5, lr}
add r4, r1, #0
mov r1, #MON_DATA_MOOD
mov r2, #0
add r5, r0, #0
bl GetMonData
add r2, sp, #0
mov r1, #0
strb r0, [r2]
ldrsb r0, [r2, r1]
add r2, r0, r4
cmp r2, #0x7f
ble _02097E6C
mov r2, #0x7f
b _02097E78
_02097E6C:
add r0, r1, #0
sub r0, #0x7f
cmp r2, r0
bge _02097E78
add r2, r1, #0
sub r2, #0x7f
_02097E78:
add r0, sp, #0
strb r2, [r0]
add r0, r5, #0
mov r1, #MON_DATA_MOOD
add r2, sp, #0
bl SetMonData
pop {r3, r4, r5, pc}
thumb_func_end MonAdjustMood
thumb_func_start ItemIdGetMoodEffect
ItemIdGetMoodEffect: ; 0x02097E88
sub r0, #0x22
mov r1, #0
cmp r0, #0x1c
bhi _02097EF0
add r0, r0, r0
add r0, pc
ldrh r0, [r0, #6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_02097E9C: ; jump table
.short _02097EDA - _02097E9C - 2 ; case ITEM_ENERGYPOWDER
.short _02097EDE - _02097E9C - 2 ; case ITEM_ENERGY_ROOT
.short _02097EE2 - _02097E9C - 2 ; case ITEM_HEAL_POWDER
.short _02097EE6 - _02097E9C - 2 ; case ITEM_REVIVAL_HERB
.short _02097EF0 - _02097E9C - 2 ; case ITEM_ETHER
.short _02097EF0 - _02097E9C - 2 ; case ITEM_MAX_ETHER
.short _02097EF0 - _02097E9C - 2 ; case ITEM_ELIXIR
.short _02097EF0 - _02097E9C - 2 ; case ITEM_MAX_ELIXIR
.short _02097EF0 - _02097E9C - 2 ; case ITEM_LAVA_COOKIE
.short _02097EF0 - _02097E9C - 2 ; case ITEM_BERRY_JUICE
.short _02097EF0 - _02097E9C - 2 ; case ITEM_SACRED_ASH
.short _02097EEA - _02097E9C - 2 ; case ITEM_HP_UP
.short _02097EEA - _02097E9C - 2 ; case ITEM_PROTEIN
.short _02097EEA - _02097E9C - 2 ; case ITEM_IRON
.short _02097EEA - _02097E9C - 2 ; case ITEM_CARBOS
.short _02097EEA - _02097E9C - 2 ; case ITEM_CALCIUM
.short _02097ED6 - _02097E9C - 2 ; case ITEM_RARE_CANDY
.short _02097EF0 - _02097E9C - 2 ; case ITEM_PP_UP
.short _02097EEA - _02097E9C - 2 ; case ITEM_ZINC
.short _02097EF0 - _02097E9C - 2 ; case ITEM_PP_MAX
.short _02097EF0 - _02097E9C - 2 ; case ITEM_OLD_GATEAU
.short _02097EEE - _02097E9C - 2 ; case ITEM_GUARD_SPEC_
.short _02097EEE - _02097E9C - 2 ; case ITEM_DIRE_HIT
.short _02097EEE - _02097E9C - 2 ; case ITEM_X_ATTACK
.short _02097EEE - _02097E9C - 2 ; case ITEM_X_DEFENSE
.short _02097EEE - _02097E9C - 2 ; case ITEM_X_SPEED
.short _02097EEE - _02097E9C - 2 ; case ITEM_X_ACCURACY
.short _02097EEE - _02097E9C - 2 ; case ITEM_X_SPECIAL
.short _02097EEE - _02097E9C - 2 ; case ITEM_X_SP__DEF
_02097ED6:
mov r1, #0x28
b _02097EF0
_02097EDA:
sub r1, #0x14
b _02097EF0
_02097EDE:
sub r1, #0x1e
b _02097EF0
_02097EE2:
sub r1, #0x14
b _02097EF0
_02097EE6:
sub r1, #0x28
b _02097EF0
_02097EEA:
mov r1, #8
b _02097EF0
_02097EEE:
mov r1, #0xa
_02097EF0:
add r0, r1, #0
bx lr
thumb_func_end ItemIdGetMoodEffect
thumb_func_start ApplyItemEffectOnMonMood
ApplyItemEffectOnMonMood: ; 0x02097EF4
push {r4, lr}
add r4, r0, #0
add r0, r1, #0
bl ItemIdGetMoodEffect
add r1, r0, #0
beq _02097F08
add r0, r4, #0
bl MonAdjustMood
_02097F08:
pop {r4, pc}
.balign 4, 0
thumb_func_end ApplyItemEffectOnMonMood
thumb_func_start ApplyMonMoodModifier
ApplyMonMoodModifier: ; 0x02097F0C
push {r3, r4, r5, lr}
add r4, r1, #0
mov r1, #MON_DATA_SPECIES2
mov r2, #0
add r5, r0, #0
bl GetMonData
lsl r0, r0, #0x10
lsr r1, r0, #0x10
beq _02097F60
ldr r0, _02097F64 ; =SPECIES_EGG
cmp r1, r0
beq _02097F60
add r0, r5, #0
mov r1, #MON_DATA_MOOD
mov r2, #0
bl GetMonData
add r1, sp, #0
strb r0, [r1]
mov r0, #0
ldrsb r2, [r1, r0]
ldr r1, _02097F68 ; =_02108F44
ldrsb r1, [r1, r4]
add r2, r2, r1
add r1, r0, #0
sub r1, #0x7f
cmp r2, r1
bge _02097F4C
add r2, r0, #0
sub r2, #0x7f
b _02097F52
_02097F4C:
cmp r2, #0x7f
ble _02097F52
mov r2, #0x7f
_02097F52:
add r0, sp, #0
strb r2, [r0]
add r0, r5, #0
mov r1, #MON_DATA_MOOD
add r2, sp, #0
bl SetMonData
_02097F60:
pop {r3, r4, r5, pc}
nop
_02097F64: .word SPECIES_EGG
_02097F68: .word _02108F44
thumb_func_end ApplyMonMoodModifier
.rodata
_02108F44:
.byte 40
.byte 8
.byte 50
.byte 40
.byte -80
.byte -50
.byte -100
.byte 30

9
include/pokemon_mood.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef POKEHEARTGOLD_POKEMON_MOOD_H
#define POKEHEARTGOLD_POKEMON_MOOD_H
#include "pokemon.h"
void ApplyItemEffectOnMonMood(POKEMON *pokemon, u16 itemId);
void ApplyMonMoodModifier(POKEMON *pokemon, int modifierId);
#endif //POKEHEARTGOLD_POKEMON_MOOD_H

View File

@ -1,6 +0,0 @@
#ifndef POKEHEARTGOLD_UNK_02097E4C_H
#define POKEHEARTGOLD_UNK_02097E4C_H
void ApplyMonMoodModifier(POKEMON *pokemon, int a1);
#endif //POKEHEARTGOLD_UNK_02097E4C_H

View File

@ -326,7 +326,7 @@ Static main
Object asm/unk_02097B78.o
Object asm/unk_02097BE0.o
Object asm/unk_02097D3C.o
Object asm/unk_02097E4C.o
Object src/pokemon_mood.o
Object asm/unk_02097F6C.o
### Vendor libraries ###

115
src/pokemon_mood.c Normal file
View File

@ -0,0 +1,115 @@
#include "pokemon.h"
#include "constants/items.h"
static const s8 sMoodModifiers[] = {
40,
8,
50,
40,
-80,
-50,
-100,
30
};
static void MonAdjustMood(POKEMON *pokemon, s8 unk1) {
s8 mood;
s32 adjustedMood;
mood = GetMonData(pokemon, MON_DATA_MOOD, NULL);
adjustedMood = mood + unk1;
if (adjustedMood > 127) {
adjustedMood = 127;
} else if (adjustedMood < -127) {
adjustedMood = -127;
}
mood = adjustedMood;
SetMonData(pokemon, MON_DATA_MOOD, &mood);
}
static s8 ItemIdGetMoodEffect(u16 itemId) {
s8 moodEffect = 0;
switch (itemId) {
case ITEM_RARE_CANDY:
moodEffect = 40;
break;
case ITEM_ENERGYPOWDER:
moodEffect = -20;
break;
case ITEM_ENERGY_ROOT:
moodEffect = -30;
break;
case ITEM_HEAL_POWDER:
moodEffect = -20;
break;
case ITEM_REVIVAL_HERB:
moodEffect = -40;
break;
case ITEM_HP_UP:
case ITEM_PROTEIN:
case ITEM_IRON:
case ITEM_CARBOS:
case ITEM_CALCIUM:
case ITEM_ZINC:
moodEffect = 8;
break;
case ITEM_GUARD_SPEC_:
case ITEM_DIRE_HIT:
case ITEM_X_ATTACK:
case ITEM_X_DEFENSE:
case ITEM_X_SPEED:
case ITEM_X_ACCURACY:
case ITEM_X_SPECIAL:
case ITEM_X_SP__DEF:
moodEffect = 10;
break;
case ITEM_ETHER:
case ITEM_MAX_ETHER:
case ITEM_ELIXIR:
case ITEM_MAX_ELIXIR:
case ITEM_LAVA_COOKIE:
case ITEM_BERRY_JUICE:
case ITEM_SACRED_ASH:
case ITEM_PP_UP:
case ITEM_PP_MAX:
case ITEM_OLD_GATEAU:
moodEffect = 0;
break;
}
return moodEffect;
}
void ApplyItemEffectOnMonMood(POKEMON *pokemon, u16 itemId) {
s8 moodEffect = ItemIdGetMoodEffect(itemId);
if (moodEffect != 0) {
MonAdjustMood(pokemon, moodEffect);
}
}
void ApplyMonMoodModifier(POKEMON *pokemon, int modifierId) {
s8 mood;
u16 species;
s32 adjustedMood;
species = GetMonData(pokemon, MON_DATA_SPECIES2, NULL);
if (species != 0 && species != SPECIES_EGG) {
mood = GetMonData(pokemon, MON_DATA_MOOD, NULL);
adjustedMood = mood + sMoodModifiers[modifierId];
if (adjustedMood < -127) {
adjustedMood = -127;
} else if (adjustedMood > 127) {
adjustedMood = 127;
}
mood = adjustedMood;
SetMonData(pokemon, MON_DATA_MOOD, &mood);
}
}

View File

@ -1,7 +1,7 @@
#include "party.h"
#include "unk_0202ECC0.h"
#include "unk_0206979C.h"
#include "unk_02097E4C.h"
#include "pokemon_mood.h"
#include "script_pokemon_util.h"
#include "constants/items.h"