mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 23:17:03 -05:00
sub_806C330
This commit is contained in:
parent
15c4f42b33
commit
9d3b787619
|
|
@ -5,535 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_806BFC0
|
||||
sub_806BFC0:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x3C
|
||||
adds r4, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
str r1, [sp]
|
||||
adds r1, r4, 0
|
||||
adds r1, 0xA8
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x8
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r2, r4, 0
|
||||
adds r2, 0xB4
|
||||
movs r1, 0x22
|
||||
str r1, [r2]
|
||||
adds r1, r4, 0
|
||||
adds r1, 0xBC
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x4
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x4
|
||||
strb r0, [r1]
|
||||
adds r1, 0x9
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x2
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x4
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x3
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
adds r1, 0x1
|
||||
strb r0, [r1]
|
||||
movs r0, 0xB2
|
||||
lsls r0, 1
|
||||
adds r1, r4, r0
|
||||
movs r0, 0xFF
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806C168
|
||||
adds r1, r4, r2
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
strb r0, [r1]
|
||||
movs r1, 0
|
||||
movs r7, 0x84
|
||||
lsls r7, 1
|
||||
adds r0, r4, r7
|
||||
movs r5, 0x4
|
||||
_0806C080:
|
||||
strb r1, [r0]
|
||||
strb r1, [r0, 0x5]
|
||||
adds r0, 0x1
|
||||
subs r5, 0x1
|
||||
cmp r5, 0
|
||||
bge _0806C080
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x4]
|
||||
movs r5, 0
|
||||
adds r1, r4, 0
|
||||
adds r1, 0x5E
|
||||
str r1, [sp, 0x8]
|
||||
movs r2, 0x5C
|
||||
adds r2, r4
|
||||
mov r10, r2
|
||||
adds r7, r4, 0
|
||||
adds r7, 0xFD
|
||||
str r7, [sp, 0x20]
|
||||
adds r0, r4, 0
|
||||
adds r0, 0xF4
|
||||
str r0, [sp, 0xC]
|
||||
adds r1, 0x9D
|
||||
str r1, [sp, 0x1C]
|
||||
adds r2, r4, 0
|
||||
adds r2, 0xF5
|
||||
str r2, [sp, 0x10]
|
||||
subs r7, 0x7
|
||||
str r7, [sp, 0x14]
|
||||
adds r0, 0x3
|
||||
str r0, [sp, 0x18]
|
||||
adds r1, 0x4
|
||||
str r1, [sp, 0x24]
|
||||
movs r2, 0x1
|
||||
mov r9, r2
|
||||
movs r3, 0xA
|
||||
subs r7, 0xC2
|
||||
str r7, [sp, 0x28]
|
||||
subs r0, 0xCB
|
||||
str r0, [sp, 0x2C]
|
||||
adds r2, r4, 0
|
||||
adds r2, 0x24
|
||||
subs r1, 0xDF
|
||||
str r1, [sp, 0x38]
|
||||
adds r6, r4, 0
|
||||
adds r6, 0x1C
|
||||
movs r7, 0x80
|
||||
lsls r7, 1
|
||||
mov r8, r7
|
||||
_0806C0E0:
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r4, r1]
|
||||
adds r1, r5, 0
|
||||
str r2, [sp, 0x30]
|
||||
str r3, [sp, 0x34]
|
||||
bl GetPokemonAbility
|
||||
ldr r7, [sp, 0x8]
|
||||
adds r1, r7, r5
|
||||
strb r0, [r1]
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r2, [sp, 0x30]
|
||||
ldr r3, [sp, 0x34]
|
||||
cmp r0, 0x25
|
||||
bne _0806C104
|
||||
movs r0, 0x1
|
||||
str r0, [sp, 0x4]
|
||||
_0806C104:
|
||||
ldr r1, [sp]
|
||||
cmp r1, 0
|
||||
beq _0806C11E
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x14
|
||||
adds r0, r5
|
||||
mov r7, r9
|
||||
strb r7, [r0]
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x16
|
||||
adds r0, r5
|
||||
mov r1, r9
|
||||
strb r1, [r0]
|
||||
_0806C11E:
|
||||
strh r3, [r6]
|
||||
ldr r7, [sp, 0x38]
|
||||
strh r3, [r7]
|
||||
strh r3, [r2]
|
||||
ldr r1, [sp, 0x2C]
|
||||
mov r0, r8
|
||||
stm r1!, {r0}
|
||||
str r1, [sp, 0x2C]
|
||||
ldr r7, [sp, 0x28]
|
||||
stm r7!, {r0}
|
||||
str r7, [sp, 0x28]
|
||||
adds r2, 0x2
|
||||
ldr r0, [sp, 0x38]
|
||||
adds r0, 0x2
|
||||
str r0, [sp, 0x38]
|
||||
adds r6, 0x2
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x1
|
||||
ble _0806C0E0
|
||||
ldr r1, [sp, 0x4]
|
||||
cmp r1, 0
|
||||
beq _0806C170
|
||||
movs r0, 0
|
||||
bl GetApparentWeather
|
||||
ldr r1, _0806C16C
|
||||
lsls r0, 24
|
||||
lsrs r0, 22
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
movs r1, 0
|
||||
mov r2, r10
|
||||
strb r0, [r2]
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x5D
|
||||
strb r1, [r0]
|
||||
b _0806C188
|
||||
.align 2, 0
|
||||
_0806C168: .4byte 0x00000165
|
||||
_0806C16C: .4byte gUnknown_80F520C
|
||||
_0806C170:
|
||||
movs r5, 0
|
||||
_0806C172:
|
||||
movs r7, 0x2
|
||||
ldrsh r0, [r4, r7]
|
||||
adds r1, r5, 0
|
||||
bl GetPokemonType
|
||||
mov r2, r10
|
||||
adds r1, r2, r5
|
||||
strb r0, [r1]
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x1
|
||||
ble _0806C172
|
||||
_0806C188:
|
||||
ldr r0, _0806C1D0
|
||||
ldr r1, [r0]
|
||||
movs r2, 0
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0xC]
|
||||
movs r0, 0
|
||||
strh r2, [r4, 0x28]
|
||||
movs r7, 0x89
|
||||
lsls r7, 1
|
||||
adds r1, r4, r7
|
||||
strb r0, [r1]
|
||||
ldr r1, [sp, 0x20]
|
||||
strb r0, [r1]
|
||||
ldr r2, _0806C1D4
|
||||
adds r1, r4, r2
|
||||
strb r0, [r1]
|
||||
ldr r7, [sp, 0xC]
|
||||
strb r0, [r7]
|
||||
ldr r1, [sp, 0x1C]
|
||||
strb r0, [r1]
|
||||
ldr r2, [sp, 0x10]
|
||||
strb r0, [r2]
|
||||
ldr r7, [sp, 0x14]
|
||||
strb r0, [r7]
|
||||
ldr r1, [sp, 0x18]
|
||||
strb r0, [r1]
|
||||
ldr r2, [sp, 0x24]
|
||||
strb r0, [r2]
|
||||
add sp, 0x3C
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0806C1D0: .4byte gDungeon
|
||||
_0806C1D4: .4byte 0x00000113
|
||||
thumb_func_end sub_806BFC0
|
||||
|
||||
thumb_func_start sub_806C1D8
|
||||
sub_806C1D8:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
movs r5, 0
|
||||
_0806C1E2:
|
||||
ldr r0, _0806C258
|
||||
ldr r0, [r0]
|
||||
lsls r1, r5, 2
|
||||
ldr r2, _0806C25C
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
adds r5, 0x1
|
||||
mov r9, r5
|
||||
cmp r0, 0
|
||||
beq _0806C244
|
||||
ldr r4, [r4, 0x70]
|
||||
ldrb r6, [r4, 0xA]
|
||||
cmp r6, 0
|
||||
blt _0806C244
|
||||
movs r5, 0
|
||||
movs r0, 0x8C
|
||||
lsls r0, 1
|
||||
mov r12, r0
|
||||
movs r2, 0x1
|
||||
mov r8, r2
|
||||
adds r3, r4, 0
|
||||
movs r7, 0xFE
|
||||
_0806C218:
|
||||
lsls r0, r5, 3
|
||||
adds r0, r4
|
||||
add r0, r12
|
||||
ldrb r1, [r0]
|
||||
mov r0, r8
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0806C234
|
||||
ldr r0, _0806C260
|
||||
adds r2, r3, r0
|
||||
ldrb r1, [r2]
|
||||
adds r0, r7, 0
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
_0806C234:
|
||||
adds r3, 0x8
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x3
|
||||
ble _0806C218
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_806C264
|
||||
_0806C244:
|
||||
mov r5, r9
|
||||
cmp r5, 0x3
|
||||
ble _0806C1E2
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0806C258: .4byte gDungeon
|
||||
_0806C25C: .4byte 0x0001357c
|
||||
_0806C260: .4byte 0x00000119
|
||||
thumb_func_end sub_806C1D8
|
||||
|
||||
thumb_func_start sub_806C264
|
||||
sub_806C264:
|
||||
push {r4,r5,lr}
|
||||
mov r12, r1
|
||||
ldr r2, _0806C31C
|
||||
movs r1, 0x64
|
||||
muls r0, r1
|
||||
ldr r1, _0806C320
|
||||
adds r0, r1
|
||||
ldr r1, [r2]
|
||||
adds r3, r1, r0
|
||||
mov r2, r12
|
||||
ldrh r0, [r2, 0xE]
|
||||
strh r0, [r3, 0x10]
|
||||
ldrh r0, [r2, 0x10]
|
||||
strh r0, [r3, 0x12]
|
||||
ldr r0, [r2, 0x18]
|
||||
str r0, [r3, 0x18]
|
||||
adds r2, 0x14
|
||||
adds r1, r3, 0
|
||||
adds r1, 0x14
|
||||
movs r4, 0x1
|
||||
_0806C28C:
|
||||
ldrb r0, [r2]
|
||||
strb r0, [r1]
|
||||
ldrb r0, [r2, 0x2]
|
||||
strb r0, [r1, 0x2]
|
||||
adds r2, 0x1
|
||||
adds r1, 0x1
|
||||
subs r4, 0x1
|
||||
cmp r4, 0
|
||||
bge _0806C28C
|
||||
ldr r4, _0806C324
|
||||
adds r0, r4, 0
|
||||
mov r5, r12
|
||||
ldrh r5, [r5, 0x4]
|
||||
adds r0, r5
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x2
|
||||
bhi _0806C2B6
|
||||
movs r0, 0xBC
|
||||
lsls r0, 1
|
||||
strh r0, [r3, 0xE]
|
||||
_0806C2B6:
|
||||
adds r1, r3, 0
|
||||
adds r1, 0x1C
|
||||
movs r0, 0x8C
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldm r0!, {r2,r4,r5}
|
||||
stm r1!, {r2,r4,r5}
|
||||
ldm r0!, {r2,r4,r5}
|
||||
stm r1!, {r2,r4,r5}
|
||||
ldm r0!, {r2,r4,r5}
|
||||
stm r1!, {r2,r4,r5}
|
||||
mov r1, r12
|
||||
ldrb r0, [r1, 0x9]
|
||||
strb r0, [r3, 0x3]
|
||||
ldrh r0, [r1, 0xC]
|
||||
strh r0, [r3, 0x8]
|
||||
mov r0, r12
|
||||
adds r0, 0x8C
|
||||
ldr r0, [r0]
|
||||
str r0, [r3, 0x4C]
|
||||
mov r0, r12
|
||||
adds r0, 0x94
|
||||
ldrb r1, [r0]
|
||||
adds r0, r3, 0
|
||||
adds r0, 0x50
|
||||
strb r1, [r0]
|
||||
mov r2, r12
|
||||
ldr r0, [r2, 0x3C]
|
||||
str r0, [r3, 0x54]
|
||||
movs r0, 0x9E
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
str r0, [r3, 0x44]
|
||||
movs r0, 0xA0
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
str r0, [r3, 0x48]
|
||||
ldr r0, [r2, 0x60]
|
||||
str r0, [r3, 0x40]
|
||||
movs r4, 0xA
|
||||
ldrsh r1, [r3, r4]
|
||||
ldr r0, _0806C328
|
||||
cmp r1, r0
|
||||
bne _0806C316
|
||||
ldr r0, _0806C32C
|
||||
strh r0, [r3, 0xA]
|
||||
_0806C316:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0806C31C: .4byte gRecruitedPokemonRef
|
||||
_0806C320: .4byte 0x00008df8
|
||||
_0806C324: .4byte 0xfffffe87
|
||||
_0806C328: .4byte 0x000055aa
|
||||
_0806C32C: .4byte 0x00005aa5
|
||||
thumb_func_end sub_806C264
|
||||
|
||||
thumb_func_start sub_806C330
|
||||
sub_806C330:
|
||||
push {r4-r7,lr}
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
lsls r2, 16
|
||||
asrs r2, 16
|
||||
mov r12, r2
|
||||
lsls r3, 24
|
||||
lsrs r7, r3, 24
|
||||
ldr r0, _0806C370
|
||||
ldr r0, [r0]
|
||||
ldr r1, _0806C374
|
||||
adds r2, r0, r1
|
||||
movs r3, 0
|
||||
ldr r0, [r2, 0x40]
|
||||
cmp r3, r0
|
||||
bge _0806C382
|
||||
mov r1, r12
|
||||
lsls r0, r1, 16
|
||||
lsrs r6, r0, 16
|
||||
adds r1, r2, 0
|
||||
_0806C358:
|
||||
ldrb r0, [r1, 0x3]
|
||||
cmp r0, 0
|
||||
beq _0806C378
|
||||
ldrb r0, [r1, 0x4]
|
||||
cmp r0, r4
|
||||
bne _0806C378
|
||||
ldrb r0, [r1, 0x5]
|
||||
cmp r0, r5
|
||||
bne _0806C378
|
||||
strh r6, [r1]
|
||||
strb r7, [r1, 0x2]
|
||||
b _0806C3B8
|
||||
.align 2, 0
|
||||
_0806C370: .4byte gDungeon
|
||||
_0806C374: .4byte 0x0000057c
|
||||
_0806C378:
|
||||
adds r1, 0x8
|
||||
adds r3, 0x1
|
||||
ldr r0, [r2, 0x40]
|
||||
cmp r3, r0
|
||||
blt _0806C358
|
||||
_0806C382:
|
||||
ldr r0, [r2, 0x40]
|
||||
cmp r0, 0x7
|
||||
bgt _0806C3B8
|
||||
lsls r0, 3
|
||||
adds r0, r2, r0
|
||||
movs r1, 0x1
|
||||
strb r1, [r0, 0x3]
|
||||
ldr r0, [r2, 0x40]
|
||||
lsls r0, 3
|
||||
adds r0, r2, r0
|
||||
strb r4, [r0, 0x4]
|
||||
ldr r0, [r2, 0x40]
|
||||
lsls r0, 3
|
||||
adds r0, r2, r0
|
||||
strb r5, [r0, 0x5]
|
||||
ldr r0, [r2, 0x40]
|
||||
lsls r0, 3
|
||||
adds r0, r2, r0
|
||||
mov r1, r12
|
||||
strh r1, [r0]
|
||||
ldr r0, [r2, 0x40]
|
||||
lsls r0, 3
|
||||
adds r0, r2, r0
|
||||
strb r7, [r0, 0x2]
|
||||
ldr r0, [r2, 0x40]
|
||||
adds r0, 0x1
|
||||
str r0, [r2, 0x40]
|
||||
_0806C3B8:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_806C330
|
||||
|
||||
thumb_func_start sub_806C3C0
|
||||
sub_806C3C0:
|
||||
|
|
|
|||
|
|
@ -430,4 +430,6 @@
|
|||
#define NUM_MONSTERS MONSTER_JIRACHI
|
||||
#define MONSTER_MAX (MONSTER_RAYQUAZA_CUTSCENE + 1)
|
||||
|
||||
#endif // GUARD_CONSTANTS_MONSTER_H
|
||||
#define IS_CASTFORM_FORM_MONSTER(id)((id == MONSTER_CASTFORM_SNOWY || id == MONSTER_CASTFORM_SUNNY || id == MONSTER_CASTFORM_RAINY))
|
||||
|
||||
#endif // GUARD_CONSTANTS_MONSTER_H
|
||||
|
|
|
|||
|
|
@ -310,6 +310,22 @@ typedef struct unkDungeon2F3C
|
|||
/* 0x10 */ u8 unk10[2];
|
||||
} unkDungeon2F3C;
|
||||
|
||||
// Size :0x8
|
||||
typedef struct unkDungeon57CSub
|
||||
{
|
||||
s16 unk0;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
} unkDungeon57CSub;
|
||||
|
||||
typedef struct unkDungeon57C
|
||||
{
|
||||
unkDungeon57CSub unkArray[8];
|
||||
s32 unk40;
|
||||
} unkDungeon57C;
|
||||
|
||||
// size: 0x1CEDC
|
||||
typedef struct Dungeon
|
||||
{
|
||||
|
|
@ -340,7 +356,7 @@ typedef struct Dungeon
|
|||
u8 fillC0[0x134 - 0xC0];
|
||||
struct unkStruct_Dungeon134_sub unk134;
|
||||
/* 0x47C */ RGB colorRamp[0x100];
|
||||
/* 0x57C */ u8 fill57C[0x5C0 - 0x57c];
|
||||
/* 0x57C */ unkDungeon57C unk57C;
|
||||
/* 0x5C0 */ s32 unk5C0;
|
||||
/* 0x5C4 */ struct unkStruct_Dungeon5C4_sub unk5C4[3];
|
||||
/* 0x5F4 */ u8 faintStringBuffer[80];
|
||||
|
|
|
|||
|
|
@ -373,7 +373,7 @@ extern void sub_8083AB0(s16 param_0, Entity * target, Entity * entity);
|
|||
extern void sub_8046F84(s32 itemFlag);
|
||||
extern bool8 sub_8083C50(void);
|
||||
extern void sub_8068FE0(Entity *, u32, Entity *r2);
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
extern s32 GetMovesLearnedAtLevel(u16* dst, s16 species, s32 level, s32 IQPoints);
|
||||
extern bool8 IsKeepMoney(u8 dungeon);
|
||||
extern void sub_8042B0C(Entity *);
|
||||
|
|
@ -1041,7 +1041,7 @@ void sub_8043D60(void)
|
|||
monInfo->HP = monInfo->maxHPStat;
|
||||
monInfo->belly = monInfo->maxBelly;
|
||||
gDungeon->unk644.itemHoldersIdentified = FALSE;
|
||||
sub_806BFC0(monInfo, 0);
|
||||
ResetMonEntityData(monInfo, 0);
|
||||
monInfo->apparentID = monInfo->id;
|
||||
monInfo->perishSongTurns = 0;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ struct unkStruct_80F520C
|
|||
};
|
||||
|
||||
// Castform Forecast ability data
|
||||
extern struct unkStruct_80F520C gUnknown_80F520C[WEATHER_RANDOM];
|
||||
extern const struct unkStruct_80F520C gUnknown_80F520C[WEATHER_RANDOM];
|
||||
|
||||
extern u8 gUnknown_80F51E4[];
|
||||
extern u8 *gUnknown_80FCC7C[];
|
||||
|
|
@ -112,7 +112,7 @@ void TriggerWeatherAbilities(void)
|
|||
|
||||
s32 GetMonsterApparentID(Entity *pokemon, s16 id)
|
||||
{
|
||||
if (id == MONSTER_CASTFORM || id == MONSTER_CASTFORM_SNOWY || id == MONSTER_CASTFORM_SUNNY || id == MONSTER_CASTFORM_RAINY) {
|
||||
if (id == MONSTER_CASTFORM || IS_CASTFORM_FORM_MONSTER(id)) {
|
||||
if (HasAbility(pokemon, ABILITY_FORECAST))
|
||||
return gUnknown_80F520C[GetApparentWeather(pokemon)].unk2;
|
||||
return MONSTER_CASTFORM;
|
||||
|
|
@ -1665,10 +1665,11 @@ NAKED void sub_806BB6C(Entity *entity, s16 _species)
|
|||
#endif // NONMATCHING
|
||||
|
||||
extern s32 sub_803DA20(s32 param_1);
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern void sub_80694C0(Entity *, s32, s32, u32);
|
||||
extern void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32);
|
||||
|
||||
void ResetMonEntityData(EntityInfo *, bool8 a1);
|
||||
|
||||
void sub_806BC68(bool8 a0, Entity *entity, struct unkStruct_806B7F8 *structPtr, DungeonPos *pos)
|
||||
{
|
||||
DungeonPos entityPos;
|
||||
|
|
@ -1676,7 +1677,7 @@ void sub_806BC68(bool8 a0, Entity *entity, struct unkStruct_806B7F8 *structPtr,
|
|||
|
||||
gDungeon->unkC = 1;
|
||||
entInfo = GetEntInfo(entity);
|
||||
sub_806BFC0(entInfo, 1);
|
||||
ResetMonEntityData(entInfo, TRUE);
|
||||
entInfo->monsterBehavior = structPtr->unk2;
|
||||
entity->isVisible = TRUE;
|
||||
entity->unk22 = 0;
|
||||
|
|
@ -1748,7 +1749,7 @@ void sub_806BC68(bool8 a0, Entity *entity, struct unkStruct_806B7F8 *structPtr,
|
|||
entInfo->unkFF = 0;
|
||||
entInfo->unk174.raw = 0;
|
||||
entInfo->decoyAITracker = 0;
|
||||
sub_806BFC0(entInfo, 1);
|
||||
ResetMonEntityData(entInfo, TRUE);
|
||||
ZeroOutItem(&entInfo->heldItem);
|
||||
entInfo->unk64 = 0;
|
||||
entInfo->statusIcons = 0;
|
||||
|
|
@ -1796,4 +1797,176 @@ void sub_806BC68(bool8 a0, Entity *entity, struct unkStruct_806B7F8 *structPtr,
|
|||
LoadIQSkills(entity);
|
||||
sub_806A898(entity, FALSE, FALSE);
|
||||
}
|
||||
|
||||
void ResetMonEntityData(EntityInfo *entInfo, bool8 setStatsToOne)
|
||||
{
|
||||
s32 i;
|
||||
bool8 hasForecast;
|
||||
|
||||
entInfo->sleepClassStatus.status = 0;
|
||||
entInfo->sleepClassStatus.turns = 0;
|
||||
entInfo->burnClassStatus.status = 0;
|
||||
entInfo->burnClassStatus.turns = 0;
|
||||
entInfo->burnClassStatus.damageCountdown = 0;
|
||||
entInfo->burnClassStatus.unk4 = 0;
|
||||
entInfo->frozenClassStatus.status = 0;
|
||||
entInfo->frozenClassStatus.turns = 0;
|
||||
entInfo->frozenClassStatus.damageCountdown = 0;
|
||||
entInfo->frozenClassStatus.unk4 = 34;
|
||||
entInfo->cringeClassStatus.status = 0;
|
||||
entInfo->cringeClassStatus.turns = 0;
|
||||
entInfo->bideClassStatus.status = 0;
|
||||
entInfo->reflectClassStatus.status = 0;
|
||||
entInfo->reflectClassStatus.turns = 0;
|
||||
entInfo->curseClassStatus.status = 0;
|
||||
entInfo->curseClassStatus.turns = 0;
|
||||
entInfo->curseClassStatus.damageCountdown = 0;
|
||||
entInfo->leechSeedClassStatus.status = 0;
|
||||
entInfo->leechSeedClassStatus.turns = 0;
|
||||
entInfo->leechSeedClassStatus.damageCountdown = 0;
|
||||
entInfo->sureShotClassStatus.status = 0;
|
||||
entInfo->sureShotClassStatus.turns = 0;
|
||||
entInfo->longTossClassStatus.status = 0;
|
||||
entInfo->invisibleClassStatus.status = 0;
|
||||
entInfo->invisibleClassStatus.turns = 0;
|
||||
entInfo->blinkerClassStatus.status = 0;
|
||||
entInfo->blinkerClassStatus.turns = 0;
|
||||
entInfo->muzzled.muzzled = FALSE;
|
||||
entInfo->muzzled.turns = 0;
|
||||
entInfo->powerEars = FALSE;
|
||||
entInfo->scanning = FALSE;
|
||||
entInfo->stairSpotter = FALSE;
|
||||
entInfo->stairSpotter = FALSE;
|
||||
entInfo->unk164 = 0xFF;
|
||||
entInfo->unk165 = 0xFF;
|
||||
|
||||
for (i = 0; i < NUM_SPEED_COUNTERS; i++) {
|
||||
entInfo->speedUpCounters[i] = 0;
|
||||
entInfo->speedDownCounters[i] = 0;
|
||||
}
|
||||
|
||||
hasForecast = FALSE;
|
||||
for (i = 0; i < 2; i++) {
|
||||
entInfo->abilities[i] = GetPokemonAbility(entInfo->id, i);
|
||||
if (entInfo->abilities[i] == ABILITY_FORECAST) {
|
||||
hasForecast = TRUE;
|
||||
}
|
||||
if (setStatsToOne) {
|
||||
entInfo->atk[i] = 1;
|
||||
entInfo->def[i] = 1;
|
||||
}
|
||||
|
||||
entInfo->offensiveStages[i] = 10;
|
||||
entInfo->defensiveStages[i] = 10;
|
||||
entInfo->hitChanceStages[i] = 10;
|
||||
entInfo->offensiveMultipliers[i].raw = IntToF248_2(1).raw;
|
||||
entInfo->defensiveMultipliers[i].raw = IntToF248_2(1).raw;
|
||||
}
|
||||
|
||||
if (hasForecast) {
|
||||
entInfo->types[0] = gUnknown_80F520C[GetApparentWeather(NULL)].unk0;
|
||||
entInfo->types[1] = TYPE_NONE;
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < 2; i++) {
|
||||
entInfo->types[i] = GetPokemonType(entInfo->id, i);
|
||||
}
|
||||
}
|
||||
|
||||
gDungeon->unkC = 1;
|
||||
entInfo->flashFireBoost = 0;
|
||||
entInfo->stockpileStage = 0;
|
||||
entInfo->perishSongTurns = 0;
|
||||
entInfo->unk113 = 0;
|
||||
entInfo->grudge = 0;
|
||||
entInfo->expMultiplier = EXP_HALVED;
|
||||
entInfo->exposed = FALSE;
|
||||
entInfo->isColorChanged = 0;
|
||||
entInfo->bossFlag = 0;
|
||||
entInfo->unkFF = 0;
|
||||
}
|
||||
|
||||
void sub_806C264(s32 teamIndex, EntityInfo *entInfo);
|
||||
|
||||
void sub_806C1D8(void)
|
||||
{
|
||||
s32 i, j;
|
||||
|
||||
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
|
||||
Entity *entity = gDungeon->teamPokemon[i];
|
||||
if (EntityExists(entity)) {
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
s32 teamIndex = entInfo->teamIndex;
|
||||
if (teamIndex >= 0) {
|
||||
for (j = 0; j < MAX_MON_MOVES; j++) {
|
||||
if (MoveFlagExists(&entInfo->moves.moves[j])) {
|
||||
entInfo->moves.moves[j].moveFlags2 &= ~(1);
|
||||
}
|
||||
}
|
||||
sub_806C264(teamIndex, entInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_806C264(s32 teamIndex, EntityInfo *entInfo)
|
||||
{
|
||||
s32 i;
|
||||
PokemonStruct2 *monPtr = &gRecruitedPokemonRef->pokemon2[teamIndex];
|
||||
|
||||
monPtr->unk10 = entInfo->HP;
|
||||
monPtr->unk12 = entInfo->maxHPStat;
|
||||
monPtr->currExp = entInfo->exp;
|
||||
for (i = 0; i < 2; i++) {
|
||||
monPtr->offense.att[i] = entInfo->atk[i];
|
||||
monPtr->offense.def[i] = entInfo->def[i];
|
||||
}
|
||||
|
||||
if (IS_CASTFORM_FORM_MONSTER(entInfo->apparentID)) {
|
||||
monPtr->speciesNum = MONSTER_CASTFORM;
|
||||
}
|
||||
|
||||
monPtr->moves = entInfo->moves;
|
||||
monPtr->level = entInfo->level;
|
||||
monPtr->IQ = entInfo->IQ;
|
||||
monPtr->IQSkills = entInfo->IQSkillMenuFlags;
|
||||
monPtr->tacticIndex = entInfo->tactic;
|
||||
monPtr->hiddenPower = entInfo->hiddenPower;
|
||||
monPtr->belly = entInfo->belly;
|
||||
monPtr->maxBelly = entInfo->maxBelly;
|
||||
monPtr->itemSlot = entInfo->heldItem;
|
||||
if (monPtr->unkA == 0x55AA) {
|
||||
monPtr->unkA = 0x5AA5;
|
||||
}
|
||||
}
|
||||
|
||||
// s16 species memes again
|
||||
void sub_806C330(s32 _x, s32 _y, s16 _species, u32 _a3)
|
||||
{
|
||||
s32 i;
|
||||
s32 x = _x;
|
||||
s32 y = _y;
|
||||
s32 species = (_species);
|
||||
u8 a3 = _a3;
|
||||
unkDungeon57C *strPtr = &gDungeon->unk57C;
|
||||
|
||||
for (i = 0; i < strPtr->unk40; i++) {
|
||||
if (strPtr->unkArray[i].unk3 != 0 && strPtr->unkArray[i].unk4 == x && strPtr->unkArray[i].unk5 == y) {
|
||||
s16 speciesMatchMe = SpeciesId(_species);
|
||||
strPtr->unkArray[i].unk0 = speciesMatchMe;
|
||||
strPtr->unkArray[i].unk2 = a3;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (strPtr->unk40 < 8) {
|
||||
strPtr->unkArray[strPtr->unk40].unk3 = 1;
|
||||
strPtr->unkArray[strPtr->unk40].unk4 = x;
|
||||
strPtr->unkArray[strPtr->unk40].unk5 = y;
|
||||
strPtr->unkArray[strPtr->unk40].unk0 = species;
|
||||
strPtr->unkArray[strPtr->unk40].unk2 = a3;
|
||||
|
||||
strPtr->unk40++;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
extern u8 gUnknown_202F221;
|
||||
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
|
||||
const u8 gUnknown_8106EEF[] = {0x03, 0x04, 0x05, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 };
|
||||
|
||||
|
|
@ -786,7 +786,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
|
|||
EndCurseClassStatus(attacker, target, STATUS_DECOY);
|
||||
}
|
||||
sub_8078084(target);
|
||||
sub_806BFC0(targetData, 0);
|
||||
ResetMonEntityData(targetData, 0);
|
||||
sub_800DBBC();
|
||||
sub_806A390(target);
|
||||
sub_806CCB4(target, sub_806CEBC(target));
|
||||
|
|
@ -843,7 +843,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
|
|||
EndCurseClassStatus(attacker, target, STATUS_DECOY);
|
||||
}
|
||||
sub_8078084(target);
|
||||
sub_806BFC0(targetData, 0);
|
||||
ResetMonEntityData(targetData, 0);
|
||||
sub_800DBBC();
|
||||
sub_806A390(target);
|
||||
sub_806CCB4(target, sub_806CEBC(target));
|
||||
|
|
@ -897,7 +897,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
|
|||
EndCurseClassStatus(attacker, target, STATUS_DECOY);
|
||||
}
|
||||
sub_8078084(target);
|
||||
sub_806BFC0(targetData, 0);
|
||||
ResetMonEntityData(targetData, 0);
|
||||
sub_800DBBC();
|
||||
sub_806A390(target);
|
||||
sub_806CCB4(target, sub_806CEBC(target));
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
extern u8 *gUnknown_80FE2EC[];
|
||||
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
void sub_8069E0C(Entity *pokemon);
|
||||
void sub_8042A44(Entity *r0);
|
||||
void sub_8083D78(void);
|
||||
|
|
@ -105,7 +105,7 @@ void sub_8072B78(Entity *pokemon, Entity *target, s16 id)
|
|||
GetPokemonLevelData(&levelData,id_s32,entityInfo->level);
|
||||
entityInfo->exp = levelData.expRequired;
|
||||
target->axObj.spriteFile = file;
|
||||
sub_806BFC0(entityInfo,0);
|
||||
ResetMonEntityData(entityInfo,0);
|
||||
sub_8069E0C(target);
|
||||
sub_806CCB4(target,7);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FE2EC);
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ extern s32 GetMonsterApparentID(Entity *param_1, s16 param_2);
|
|||
extern void sub_806A898(Entity *, u32, u32);
|
||||
extern void HealTargetHP(Entity *pokemon, Entity *r1, s16, s16, u32);
|
||||
extern void DealDamageToEntity(Entity *, s16, u32, u32);
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
extern void sub_80420C8(Entity *r0);
|
||||
extern void nullsub_68(Entity *);
|
||||
extern void nullsub_67(Entity *);
|
||||
|
|
@ -1133,7 +1133,7 @@ void sub_807A0CC(Entity * pokemon, Entity * target)
|
|||
|
||||
if (EntityExists(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
sub_806BFC0(entityInfo,0);
|
||||
ResetMonEntityData(entityInfo,0);
|
||||
entityInfo->perishSongTurns = 0;
|
||||
entityInfo->exposed = FALSE;
|
||||
|
||||
|
|
|
|||
|
|
@ -381,7 +381,7 @@ extern void sub_8049884(void);
|
|||
extern void sub_8049B8C(void);
|
||||
extern void sub_8040A84(void);
|
||||
extern void sub_8086A54(Entity *);
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
extern void sub_808BBA8(Entity * );
|
||||
extern void sub_8041888(u32);
|
||||
extern u32 sub_80861F8(u32, Entity *, u32);
|
||||
|
|
@ -4240,7 +4240,7 @@ void sub_808BB3C(DungeonPos *pos1)
|
|||
|
||||
void sub_808BBA8(Entity *jirachiEntity)
|
||||
{
|
||||
sub_806BFC0(GetEntInfo(jirachiEntity),0);
|
||||
ResetMonEntityData(GetEntInfo(jirachiEntity),0);
|
||||
}
|
||||
|
||||
void JirachiDropInEffect(Entity *jirachiEntity)
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ void GenerateFloor(void)
|
|||
}
|
||||
|
||||
if (sKecleonShopMiddlePos.x >= 0 && sKecleonShopMiddlePos.y >= 0) {
|
||||
sub_806C330(sKecleonShopMiddlePos.x, sKecleonShopMiddlePos.y, 380, 0);
|
||||
sub_806C330(sKecleonShopMiddlePos.x, sKecleonShopMiddlePos.y, MONSTER_KECLEON, 0);
|
||||
}
|
||||
|
||||
if (sKecleonShopPosition.minX >= 0) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user