mirror of
https://github.com/pret/pokeheartgold.git
synced 2025-02-26 08:09:06 +00:00
Merge pull request #94 from adrienntindall/master
Decomp unk_02097E4C.s -> pokemon_mood.c
This commit is contained in:
commit
6e9aef28ed
@ -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
9
include/pokemon_mood.h
Normal 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
|
@ -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
|
2
main.lsf
2
main.lsf
@ -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
115
src/pokemon_mood.c
Normal 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);
|
||||
}
|
||||
}
|
@ -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"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user