mirror of
https://github.com/pret/pokeheartgold.git
synced 2025-02-10 23:23:34 +00:00
Decompile overlay_25
This commit is contained in:
parent
369049dab5
commit
9dac4034a5
@ -115,4 +115,4 @@
|
||||
.public ov01_022060B8
|
||||
.public ov01_02206268
|
||||
.public ov01_022062CC
|
||||
.public ov25_022598C0
|
||||
.public TrainerHouse_StartBattle
|
||||
|
@ -1,47 +0,0 @@
|
||||
#include <nitro/fs/overlay.h>
|
||||
#pragma once
|
||||
.public CopyU16StringArray
|
||||
.public CopyU16StringArrayN
|
||||
.public StringFillEOS
|
||||
.public NewMsgDataFromNarc
|
||||
.public DestroyMsgData
|
||||
.public NewString_ReadMsgData
|
||||
.public GetSpeciesName
|
||||
.public MailMsg_Init_FromTemplate
|
||||
.public MailMsg_Copy
|
||||
.public FreeToHeap
|
||||
.public GF_AssertFail
|
||||
.public String_Delete
|
||||
.public String_GetLength
|
||||
.public String_cstr
|
||||
.public Save_TrainerHouse_Get
|
||||
.public SetupNativeScript
|
||||
.public ScriptReadHalfword
|
||||
.public FieldSysGetAttrAddr
|
||||
.public FieldSystem_VarGet
|
||||
.public CallTask_020509F0
|
||||
.public sub_020517E8
|
||||
.public sub_020517FC
|
||||
.public BattleSetup_New
|
||||
.public BattleSetup_AddMonToParty
|
||||
.public sub_02051D18
|
||||
.public BattleSetup_SetAllySideBattlersToPlayer
|
||||
.public GetUnionRoomAvatarAttrBySprite
|
||||
.public ZeroMonData
|
||||
.public AllocMonZeroed
|
||||
.public CreateMonWithFixedIVs
|
||||
.public CalcMonLevelAndStats
|
||||
.public GetMonData
|
||||
.public SetMonData
|
||||
.public GetMonExpBySpeciesAndLevel
|
||||
.public CopyPokemonToPokemon
|
||||
.public Party_InitWithMaxSize
|
||||
.public Party_GetCount
|
||||
.public Party_GetMonByIndex
|
||||
.public SaveArray_Party_Get
|
||||
.public MIi_CpuClear16
|
||||
.public MIi_CpuCopy16
|
||||
.public MI_CpuFill8
|
||||
.public ov01_021EF348
|
||||
.public ov01_021EF564
|
||||
.public ov25_022598C0
|
@ -4527,7 +4527,7 @@
|
||||
.short \arg0
|
||||
.endm
|
||||
|
||||
.macro scrcmd_809 arg0
|
||||
.macro show_trainer_house_intro_message arg0
|
||||
.short 809
|
||||
.short \arg0
|
||||
.endm
|
||||
|
@ -32,7 +32,7 @@ ScrCmd_808: ; 0x022053EC
|
||||
add r5, #0x80
|
||||
ldr r0, [r5]
|
||||
add r1, r4, #0
|
||||
bl ov25_022598C0
|
||||
bl TrainerHouse_StartBattle
|
||||
add r0, r6, #0
|
||||
bl UnloadOverlayByID
|
||||
mov r0, #1
|
||||
|
681
asm/overlay_25.s
681
asm/overlay_25.s
@ -1,681 +0,0 @@
|
||||
#include "config.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "msgdata/msg/msg_0285.h"
|
||||
#include "msgdata/msg/msg_0287.h"
|
||||
#include "msgdata/msg/msg_0292.h"
|
||||
#include "msgdata/msg/msg_0294.h"
|
||||
#include "msgdata/msg/msg_0296.h"
|
||||
#include "msgdata/msg/msg_0726.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_25.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start ov25_022598C0
|
||||
ov25_022598C0: ; 0x022598C0
|
||||
push {r4, r5, r6, r7, lr}
|
||||
sub sp, #0x184
|
||||
add r5, r0, #0
|
||||
ldr r0, [r5, #0xc]
|
||||
add r4, r1, #0
|
||||
bl Save_TrainerHouse_Get
|
||||
add r2, r0, #0
|
||||
cmp r4, #0xa
|
||||
bne _022598FE
|
||||
add r0, sp, #4
|
||||
bl ov25_02259948
|
||||
add r0, r5, #0
|
||||
add r1, sp, #4
|
||||
bl ov25_02259AAC
|
||||
add r6, r0, #0
|
||||
add r4, r6, #0
|
||||
add r4, #0x5c
|
||||
add r0, r4, #0
|
||||
ldr r1, _02259940 ; =ov25_02259D8C
|
||||
add r0, #0x24
|
||||
bl MailMsg_Init_FromTemplate
|
||||
add r4, #0x2c
|
||||
ldr r1, _02259944 ; =ov25_02259D94
|
||||
add r0, r4, #0
|
||||
bl MailMsg_Init_FromTemplate
|
||||
b _0225990E
|
||||
_022598FE:
|
||||
mov r1, #6
|
||||
lsl r1, r1, #6
|
||||
mul r1, r4
|
||||
add r0, r5, #0
|
||||
add r1, r2, r1
|
||||
bl ov25_02259AAC
|
||||
add r6, r0, #0
|
||||
_0225990E:
|
||||
add r0, r5, #0
|
||||
mov r1, #0
|
||||
add r0, #0xa0
|
||||
str r1, [r0]
|
||||
add r0, r6, #0
|
||||
bl sub_020517E8
|
||||
add r4, r0, #0
|
||||
add r0, r6, #0
|
||||
bl sub_020517FC
|
||||
add r7, r0, #0
|
||||
add r0, r5, #0
|
||||
mov r1, #0x18
|
||||
bl FieldSysGetAttrAddr
|
||||
str r0, [sp]
|
||||
ldr r0, [r5, #0x10]
|
||||
add r1, r6, #0
|
||||
add r2, r4, #0
|
||||
add r3, r7, #0
|
||||
bl CallTask_020509F0
|
||||
add sp, #0x184
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.balign 4, 0
|
||||
_02259940: .word ov25_02259D8C
|
||||
_02259944: .word ov25_02259D94
|
||||
thumb_func_end ov25_022598C0
|
||||
|
||||
thumb_func_start ov25_02259948
|
||||
ov25_02259948: ; 0x02259948
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
add r5, r0, #0
|
||||
mov r2, #6
|
||||
ldr r0, _02259A24 ; =ov25_02259D9C
|
||||
add r1, r5, #0
|
||||
lsl r2, r2, #6
|
||||
bl MIi_CpuCopy16
|
||||
ldr r2, _02259A28 ; =0x000002D6
|
||||
mov r0, #1
|
||||
mov r1, #0x1b
|
||||
mov r3, #0xb
|
||||
bl NewMsgDataFromNarc
|
||||
add r6, r0, #0
|
||||
bne _0225996C
|
||||
bl GF_AssertFail
|
||||
_0225996C:
|
||||
cmp r6, #0
|
||||
beq _022599C4
|
||||
add r0, r6, #0
|
||||
mov r1, #msg_0726_00003 ; Cal
|
||||
bl NewString_ReadMsgData
|
||||
add r4, r0, #0
|
||||
add r0, r6, #0
|
||||
bl DestroyMsgData
|
||||
cmp r4, #0
|
||||
bne _02259988
|
||||
bl GF_AssertFail
|
||||
_02259988:
|
||||
cmp r4, #0
|
||||
beq _022599C4
|
||||
add r0, r4, #0
|
||||
bl String_GetLength
|
||||
add r6, r0, #0
|
||||
cmp r6, #7
|
||||
bls _0225999C
|
||||
bl GF_AssertFail
|
||||
_0225999C:
|
||||
cmp r6, #7
|
||||
bls _022599A2
|
||||
mov r6, #7
|
||||
_022599A2:
|
||||
add r1, r5, #0
|
||||
ldr r0, _02259A2C ; =0x0000FFFF
|
||||
add r1, #8
|
||||
mov r2, #0x10
|
||||
bl MIi_CpuClear16
|
||||
add r0, r4, #0
|
||||
bl String_cstr
|
||||
add r1, r5, #0
|
||||
add r1, #8
|
||||
lsl r2, r6, #1
|
||||
bl MIi_CpuCopy16
|
||||
add r0, r4, #0
|
||||
bl String_Delete
|
||||
_022599C4:
|
||||
mov r7, #0
|
||||
add r5, #0x30
|
||||
_022599C8:
|
||||
ldrh r0, [r5]
|
||||
lsl r0, r0, #0x15
|
||||
lsr r0, r0, #0x15
|
||||
beq _02259A1A
|
||||
mov r1, #0xb
|
||||
bl GetSpeciesName
|
||||
add r4, r0, #0
|
||||
bne _022599DE
|
||||
bl GF_AssertFail
|
||||
_022599DE:
|
||||
cmp r4, #0
|
||||
beq _02259A1A
|
||||
add r0, r4, #0
|
||||
bl String_GetLength
|
||||
add r6, r0, #0
|
||||
cmp r6, #0xa
|
||||
bls _022599F2
|
||||
bl GF_AssertFail
|
||||
_022599F2:
|
||||
cmp r6, #0xa
|
||||
bls _022599F8
|
||||
mov r6, #0xa
|
||||
_022599F8:
|
||||
add r1, r5, #0
|
||||
ldr r0, _02259A2C ; =0x0000FFFF
|
||||
add r1, #0x24
|
||||
mov r2, #0x14
|
||||
bl MIi_CpuClear16
|
||||
add r0, r4, #0
|
||||
bl String_cstr
|
||||
add r1, r5, #0
|
||||
add r1, #0x24
|
||||
lsl r2, r6, #1
|
||||
bl MIi_CpuCopy16
|
||||
add r0, r4, #0
|
||||
bl String_Delete
|
||||
_02259A1A:
|
||||
add r7, r7, #1
|
||||
add r5, #0x38
|
||||
cmp r7, #6
|
||||
blt _022599C8
|
||||
pop {r3, r4, r5, r6, r7, pc}
|
||||
.balign 4, 0
|
||||
_02259A24: .word ov25_02259D9C
|
||||
_02259A28: .word 0x000002D6
|
||||
_02259A2C: .word 0x0000FFFF
|
||||
thumb_func_end ov25_02259948
|
||||
|
||||
thumb_func_start ScrCmd_809
|
||||
ScrCmd_809: ; 0x02259A30
|
||||
push {r3, r4, r5, lr}
|
||||
sub sp, #0x18
|
||||
add r5, r0, #0
|
||||
bl ScriptReadHalfword
|
||||
add r1, r0, #0
|
||||
add r0, r5, #0
|
||||
add r0, #0x80
|
||||
ldr r0, [r0]
|
||||
bl FieldSystem_VarGet
|
||||
add r4, r0, #0
|
||||
add r0, r5, #0
|
||||
add r0, #0x80
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0xc]
|
||||
bl Save_TrainerHouse_Get
|
||||
cmp r4, #0xa
|
||||
bne _02259A6C
|
||||
ldr r1, _02259AA4 ; =ov25_02259D84
|
||||
add r0, sp, #8
|
||||
bl MailMsg_Init_FromTemplate
|
||||
add r0, sp, #8
|
||||
add r1, sp, #0x10
|
||||
mov r2, #8
|
||||
bl MIi_CpuCopy16
|
||||
b _02259A7E
|
||||
_02259A6C:
|
||||
mov r1, #6
|
||||
lsl r1, r1, #6
|
||||
mul r1, r4
|
||||
add r0, r0, r1
|
||||
add r0, #0x18
|
||||
add r1, sp, #0x10
|
||||
mov r2, #8
|
||||
bl MIi_CpuCopy16
|
||||
_02259A7E:
|
||||
add r3, sp, #8
|
||||
mov r0, #0xe
|
||||
ldrsh r0, [r3, r0]
|
||||
str r0, [sp]
|
||||
mov r0, #1
|
||||
str r0, [sp, #4]
|
||||
ldrh r1, [r3, #8]
|
||||
ldrh r2, [r3, #0xa]
|
||||
ldrh r3, [r3, #0xc]
|
||||
add r0, r5, #0
|
||||
bl ov01_021EF564
|
||||
ldr r1, _02259AA8 ; =ov01_021EF348
|
||||
add r0, r5, #0
|
||||
bl SetupNativeScript
|
||||
mov r0, #1
|
||||
add sp, #0x18
|
||||
pop {r3, r4, r5, pc}
|
||||
.balign 4, 0
|
||||
_02259AA4: .word ov25_02259D84
|
||||
_02259AA8: .word ov01_021EF348
|
||||
thumb_func_end ScrCmd_809
|
||||
|
||||
thumb_func_start ov25_02259AAC
|
||||
ov25_02259AAC: ; 0x02259AAC
|
||||
push {r4, r5, r6, r7, lr}
|
||||
sub sp, #0x14
|
||||
str r1, [sp, #8]
|
||||
add r4, r0, #0
|
||||
ldr r1, _02259B8C ; =0x00002081
|
||||
mov r0, #0xb
|
||||
bl BattleSetup_New
|
||||
ldr r5, [r4, #0xc]
|
||||
add r6, r0, #0
|
||||
add r0, r5, #0
|
||||
bl SaveArray_Party_Get
|
||||
str r0, [sp, #0xc]
|
||||
add r0, r4, #0
|
||||
add r0, #0x94
|
||||
ldr r0, [r0]
|
||||
add r1, r4, #0
|
||||
str r0, [sp]
|
||||
add r0, r4, #0
|
||||
add r0, #0xb0
|
||||
ldr r0, [r0]
|
||||
add r2, r5, #0
|
||||
str r0, [sp, #4]
|
||||
ldr r3, [r4, #0x20]
|
||||
add r0, r6, #0
|
||||
ldr r3, [r3]
|
||||
bl sub_02051D18
|
||||
mov r0, #0x53
|
||||
mov r1, #6
|
||||
lsl r0, r0, #2
|
||||
str r1, [r6, r0]
|
||||
mov r1, #9
|
||||
add r0, r0, #4
|
||||
str r1, [r6, r0]
|
||||
mov r0, #0xb
|
||||
bl AllocMonZeroed
|
||||
add r5, r0, #0
|
||||
ldr r0, [sp, #0xc]
|
||||
bl Party_GetCount
|
||||
add r7, r0, #0
|
||||
ldr r0, [r6, #4]
|
||||
mov r1, #6
|
||||
bl Party_InitWithMaxSize
|
||||
mov r4, #0
|
||||
cmp r7, #0
|
||||
ble _02259B60
|
||||
_02259B12:
|
||||
ldr r0, [sp, #0xc]
|
||||
add r1, r4, #0
|
||||
bl Party_GetMonByIndex
|
||||
add r1, r5, #0
|
||||
bl CopyPokemonToPokemon
|
||||
add r0, r5, #0
|
||||
mov r1, #0xa1
|
||||
mov r2, #0
|
||||
bl GetMonData
|
||||
cmp r0, #0x32
|
||||
bls _02259B50
|
||||
add r0, r5, #0
|
||||
mov r1, #5
|
||||
mov r2, #0
|
||||
bl GetMonData
|
||||
mov r1, #0x32
|
||||
bl GetMonExpBySpeciesAndLevel
|
||||
str r0, [sp, #0x10]
|
||||
add r0, r5, #0
|
||||
mov r1, #8
|
||||
add r2, sp, #0x10
|
||||
bl SetMonData
|
||||
add r0, r5, #0
|
||||
bl CalcMonLevelAndStats
|
||||
_02259B50:
|
||||
add r0, r6, #0
|
||||
add r1, r5, #0
|
||||
mov r2, #0
|
||||
bl BattleSetup_AddMonToParty
|
||||
add r4, r4, #1
|
||||
cmp r4, r7
|
||||
blt _02259B12
|
||||
_02259B60:
|
||||
add r0, r5, #0
|
||||
bl FreeToHeap
|
||||
add r0, r6, #0
|
||||
bl BattleSetup_SetAllySideBattlersToPlayer
|
||||
ldr r1, [sp, #8]
|
||||
add r0, r6, #0
|
||||
mov r2, #1
|
||||
bl ov25_02259D14
|
||||
mov r2, #0
|
||||
add r1, r6, #0
|
||||
mov r0, #7
|
||||
_02259B7C:
|
||||
add r2, r2, #1
|
||||
str r0, [r1, #0x34]
|
||||
add r1, #0x34
|
||||
cmp r2, #4
|
||||
blt _02259B7C
|
||||
add r0, r6, #0
|
||||
add sp, #0x14
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.balign 4, 0
|
||||
_02259B8C: .word 0x00002081
|
||||
thumb_func_end ov25_02259AAC
|
||||
|
||||
thumb_func_start ov25_02259B90
|
||||
ov25_02259B90: ; 0x02259B90
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
sub sp, #0x28
|
||||
add r4, r1, #0
|
||||
add r6, r0, #0
|
||||
add r0, r4, #0
|
||||
bl ZeroMonData
|
||||
add r0, r6, #0
|
||||
add r0, #0x22
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x32
|
||||
bls _02259BAA
|
||||
mov r0, #0x32
|
||||
_02259BAA:
|
||||
add r2, sp, #8
|
||||
strb r0, [r2, #1]
|
||||
ldr r0, [r6, #0x10]
|
||||
ldr r3, _02259CC0 ; =0x3FFFFFFF
|
||||
str r0, [sp]
|
||||
ldrh r1, [r6]
|
||||
ldr r5, [r6, #0x14]
|
||||
ldrb r2, [r2, #1]
|
||||
lsl r1, r1, #0x15
|
||||
add r0, r4, #0
|
||||
lsr r1, r1, #0x15
|
||||
and r3, r5
|
||||
bl CreateMonWithFixedIVs
|
||||
ldrh r0, [r6]
|
||||
add r2, sp, #8
|
||||
add r2, #1
|
||||
lsl r0, r0, #0x10
|
||||
lsr r1, r0, #0x1b
|
||||
add r0, sp, #8
|
||||
strb r1, [r0, #1]
|
||||
add r0, r4, #0
|
||||
mov r1, #0x70
|
||||
bl SetMonData
|
||||
add r0, r4, #0
|
||||
mov r1, #6
|
||||
add r2, r6, #2
|
||||
bl SetMonData
|
||||
mov r5, #0
|
||||
str r6, [sp, #4]
|
||||
add r7, r5, #0
|
||||
_02259BEC:
|
||||
ldr r0, [sp, #4]
|
||||
add r2, sp, #8
|
||||
ldrh r1, [r0, #4]
|
||||
add r0, sp, #8
|
||||
add r2, #2
|
||||
strh r1, [r0, #2]
|
||||
add r1, r5, #0
|
||||
add r0, r4, #0
|
||||
add r1, #0x36
|
||||
bl SetMonData
|
||||
ldrb r0, [r6, #0x1e]
|
||||
add r2, sp, #8
|
||||
add r2, #1
|
||||
add r1, r0, #0
|
||||
asr r1, r7
|
||||
mov r0, #3
|
||||
and r1, r0
|
||||
add r0, sp, #8
|
||||
strb r1, [r0, #1]
|
||||
add r1, r5, #0
|
||||
add r0, r4, #0
|
||||
add r1, #0x3e
|
||||
bl SetMonData
|
||||
add r1, r5, #0
|
||||
add r0, r4, #0
|
||||
add r1, #0x42
|
||||
mov r2, #0
|
||||
bl GetMonData
|
||||
add r1, sp, #8
|
||||
strb r0, [r1]
|
||||
add r1, r5, #0
|
||||
add r0, r4, #0
|
||||
add r1, #0x3a
|
||||
add r2, sp, #8
|
||||
bl SetMonData
|
||||
ldr r0, [sp, #4]
|
||||
add r5, r5, #1
|
||||
add r0, r0, #2
|
||||
add r7, r7, #2
|
||||
str r0, [sp, #4]
|
||||
cmp r5, #4
|
||||
blt _02259BEC
|
||||
ldr r0, [r6, #0xc]
|
||||
mov r1, #7
|
||||
str r0, [sp, #0xc]
|
||||
add r0, r4, #0
|
||||
add r2, sp, #0xc
|
||||
bl SetMonData
|
||||
mov r5, #0
|
||||
add r7, sp, #8
|
||||
_02259C5A:
|
||||
add r0, r6, r5
|
||||
ldrb r0, [r0, #0x18]
|
||||
add r1, r5, #0
|
||||
add r2, sp, #8
|
||||
strb r0, [r7, #1]
|
||||
add r0, r4, #0
|
||||
add r1, #0xd
|
||||
add r2, #1
|
||||
bl SetMonData
|
||||
add r5, r5, #1
|
||||
cmp r5, #6
|
||||
blt _02259C5A
|
||||
add r2, r6, #0
|
||||
add r0, r4, #0
|
||||
mov r1, #0xa
|
||||
add r2, #0x20
|
||||
bl SetMonData
|
||||
add r2, r6, #0
|
||||
add r0, r4, #0
|
||||
mov r1, #9
|
||||
add r2, #0x21
|
||||
bl SetMonData
|
||||
add r0, sp, #0x10
|
||||
mov r1, #0xb
|
||||
bl StringFillEOS
|
||||
add r1, r6, #0
|
||||
add r0, sp, #0x10
|
||||
add r1, #0x24
|
||||
mov r2, #0xa
|
||||
bl CopyU16StringArrayN
|
||||
add r0, r4, #0
|
||||
mov r1, #0x75
|
||||
add r2, sp, #0x10
|
||||
bl SetMonData
|
||||
add r6, #0x1f
|
||||
add r0, r4, #0
|
||||
mov r1, #0xc
|
||||
add r2, r6, #0
|
||||
bl SetMonData
|
||||
add r0, r4, #0
|
||||
bl CalcMonLevelAndStats
|
||||
add sp, #0x28
|
||||
pop {r3, r4, r5, r6, r7, pc}
|
||||
.balign 4, 0
|
||||
_02259CC0: .word 0x3FFFFFFF
|
||||
thumb_func_end ov25_02259B90
|
||||
|
||||
thumb_func_start ov25_02259CC4
|
||||
ov25_02259CC4: ; 0x02259CC4
|
||||
push {r3, r4, r5, lr}
|
||||
add r4, r1, #0
|
||||
add r5, r0, #0
|
||||
add r0, r4, #0
|
||||
mov r1, #0
|
||||
mov r2, #0x34
|
||||
bl MI_CpuFill8
|
||||
ldrb r0, [r5, #7]
|
||||
ldrb r1, [r5, #4]
|
||||
mov r2, #1
|
||||
bl GetUnionRoomAvatarAttrBySprite
|
||||
strb r0, [r4, #1]
|
||||
mov r0, #0
|
||||
strb r0, [r4, #2]
|
||||
sub r0, r0, #1
|
||||
str r0, [r4, #0xc]
|
||||
add r0, r4, #0
|
||||
add r1, r5, #0
|
||||
add r0, #0x14
|
||||
add r1, #8
|
||||
bl CopyU16StringArray
|
||||
add r0, r4, #0
|
||||
add r1, r5, #0
|
||||
add r0, #0x24
|
||||
add r1, #0x20
|
||||
bl MailMsg_Copy
|
||||
add r0, r4, #0
|
||||
add r5, #0x28
|
||||
add r0, #0x2c
|
||||
add r1, r5, #0
|
||||
bl MailMsg_Copy
|
||||
mov r0, #0
|
||||
str r0, [r4, #0x10]
|
||||
pop {r3, r4, r5, pc}
|
||||
.balign 4, 0
|
||||
thumb_func_end ov25_02259CC4
|
||||
|
||||
thumb_func_start ov25_02259D14
|
||||
ov25_02259D14: ; 0x02259D14
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
sub sp, #8
|
||||
str r0, [sp]
|
||||
str r2, [sp, #4]
|
||||
add r5, r1, #0
|
||||
ldr r3, [sp]
|
||||
ldr r1, [sp, #4]
|
||||
mov r2, #0x34
|
||||
add r3, #0x28
|
||||
mul r2, r1
|
||||
add r0, r5, #0
|
||||
add r1, r3, r2
|
||||
bl ov25_02259CC4
|
||||
ldr r0, [sp, #4]
|
||||
ldr r1, [r5]
|
||||
lsl r4, r0, #2
|
||||
ldr r0, [sp]
|
||||
add r0, r0, r4
|
||||
str r1, [r0, #0x18]
|
||||
mov r0, #0xb
|
||||
bl AllocMonZeroed
|
||||
add r6, r0, #0
|
||||
ldr r0, [sp]
|
||||
mov r1, #6
|
||||
add r0, r0, r4
|
||||
ldr r0, [r0, #4]
|
||||
bl Party_InitWithMaxSize
|
||||
add r5, #0x30
|
||||
mov r7, #0
|
||||
add r4, r5, #0
|
||||
_02259D56:
|
||||
ldrh r0, [r5]
|
||||
lsl r0, r0, #0x15
|
||||
lsr r0, r0, #0x15
|
||||
beq _02259D7A
|
||||
add r0, r4, #0
|
||||
add r1, r6, #0
|
||||
bl ov25_02259B90
|
||||
ldr r0, [sp]
|
||||
ldr r2, [sp, #4]
|
||||
add r1, r6, #0
|
||||
bl BattleSetup_AddMonToParty
|
||||
add r7, r7, #1
|
||||
add r5, #0x38
|
||||
add r4, #0x38
|
||||
cmp r7, #6
|
||||
blt _02259D56
|
||||
_02259D7A:
|
||||
add r0, r6, #0
|
||||
bl FreeToHeap
|
||||
add sp, #8
|
||||
pop {r3, r4, r5, r6, r7, pc}
|
||||
thumb_func_end ov25_02259D14
|
||||
|
||||
.rodata
|
||||
|
||||
; It's MATCH!
|
||||
ov25_02259D84:
|
||||
.byte 0x00, msg_0294_00003, EC_GROUP_TRAINER, 0xFF
|
||||
.short msg_0285_match, 0x0000
|
||||
|
||||
; VICTORY! Thank you!
|
||||
ov25_02259D8C: ; 0x02259D8C
|
||||
.byte 0x01, msg_0296_00007, EC_GROUP_TRAINER, 0xFF
|
||||
.short msg_0285_victory, 0x0000
|
||||
|
||||
; You win... THANKS!
|
||||
ov25_02259D94: ; 0x02259D94
|
||||
.byte 0x02, msg_0292_00000, EC_GROUP_GREETINGS, 0xFF
|
||||
.short msg_0287_thanks, 0x0000
|
||||
|
||||
ov25_02259D9C: ; 0x02259D9C
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x0B, GAME_LANGUAGE, GAME_VERSION, 0x00
|
||||
|
||||
.short 0x0033, 0x000C, 0x004C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.short SPECIES_MEGANIUM
|
||||
.short ITEM_SITRUS_BERRY
|
||||
.short MOVE_LEECH_SEED, MOVE_PROTECT, MOVE_ENERGY_BALL, MOVE_TOXIC
|
||||
.word 0x11111111
|
||||
.word 0x00000101
|
||||
.word (20 << 0) | (20 << 5) | (20 << 10) | (20 << 15) | (20 << 20) | (20 << 25)
|
||||
.byte 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF
|
||||
.byte 0x00, 0x02, 0x41, 0x00, 0x32, 0x00
|
||||
|
||||
.short 0x0092, 0x005D, 0x007C, 0x0057, 0x0091, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
|
||||
.short SPECIES_TYPHLOSION
|
||||
.short ITEM_SALAC_BERRY
|
||||
.short MOVE_ERUPTION, MOVE_SUBSTITUTE, MOVE_FLAMETHROWER, MOVE_FOCUS_BLAST
|
||||
.word 0x11111111
|
||||
.word 0x00001010
|
||||
.word (20 << 0) | (20 << 5) | (20 << 10) | (20 << 15) | (20 << 20) | (20 << 25)
|
||||
.byte 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00
|
||||
.byte 0x00, 0x02, 0x42, 0x00, 0x32, 0x00
|
||||
|
||||
.short 0x0081, 0x0060, 0x0086, 0x00F1, 0x00A1, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
|
||||
.short SPECIES_FERALIGATR
|
||||
.short ITEM_LUM_BERRY
|
||||
.short MOVE_DRAGON_DANCE, MOVE_WATERFALL, MOVE_ICE_PUNCH, MOVE_CRUNCH
|
||||
.word 0x11111111
|
||||
.word 0x00000011
|
||||
.word (20 << 0) | (20 << 5) | (20 << 10) | (20 << 15) | (20 << 20) | (20 << 25)
|
||||
.byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x02, 0x43, 0x00, 0x32, 0x00
|
||||
|
||||
.short 0x005B, 0x00F1, 0x0071, 0x0055, 0x009C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
|
||||
.short SPECIES_NONE
|
||||
.short ITEM_NONE
|
||||
.short MOVE_NONE, MOVE_NONE, MOVE_NONE, MOVE_NONE
|
||||
.word 0x00000000
|
||||
.word 0x00000000
|
||||
.word (0 << 0) | (0 << 5) | (0 << 10) | (0 << 15) | (0 << 20) | (0 << 25)
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.short 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
|
||||
.short SPECIES_NONE
|
||||
.short ITEM_NONE
|
||||
.short MOVE_NONE, MOVE_NONE, MOVE_NONE, MOVE_NONE
|
||||
.word 0x00000000
|
||||
.word 0x00000000
|
||||
.word (0 << 0) | (0 << 5) | (0 << 10) | (0 << 15) | (0 << 20) | (0 << 25)
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.short 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
|
||||
.short SPECIES_NONE
|
||||
.short ITEM_NONE
|
||||
.short MOVE_NONE, MOVE_NONE, MOVE_NONE, MOVE_NONE
|
||||
.word 0x00000000
|
||||
.word 0x00000000
|
||||
.word (0 << 0) | (0 << 5) | (0 << 10) | (0 << 15) | (0 << 20) | (0 << 25)
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.short 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
|
||||
; 0x02259F20
|
@ -100,7 +100,7 @@ _0118:
|
||||
compare VAR_SPECIAL_RESULT, 1
|
||||
goto_if_eq _0186
|
||||
script_overlay_cmd 4, 0
|
||||
scrcmd_809 VAR_TEMP_x4000
|
||||
show_trainer_house_intro_message VAR_TEMP_x4000
|
||||
wait_button
|
||||
closemsg
|
||||
script_overlay_cmd 4, 1
|
||||
|
@ -87,6 +87,7 @@ typedef enum Terrain {
|
||||
#define BATTLE_TYPE_TUTORIAL (1 << 10)
|
||||
#define BATTLE_TYPE_11 (1 << 11)
|
||||
#define BATTLE_TYPE_BUG_CONTEST (1 << 12)
|
||||
#define BATTLE_TYPE_13 (1 << 13)
|
||||
#define BATTLE_TYPE_DEBUG (1 << 31)
|
||||
|
||||
#define BATTLE_TYPE_NO_EXP (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_TOWER | BATTLE_TYPE_PAL_PARK)
|
||||
|
@ -19,7 +19,7 @@ typedef struct MailMessageTemplate {
|
||||
u8 msg_no;
|
||||
s8 ec_groups[MAILMSG_FIELDS_MAX];
|
||||
u16 ec_words[MAILMSG_FIELDS_MAX];
|
||||
} MAIL_MSG_TEMPLATE;
|
||||
} MailMessageTemplate;
|
||||
|
||||
void MailMsg_Init(MAIL_MESSAGE *msg);
|
||||
BOOL MailMsg_Compare(const MAIL_MESSAGE *a, const MAIL_MESSAGE *b);
|
||||
@ -28,7 +28,7 @@ void MailMsg_SetFieldI(MAIL_MESSAGE *mailMessage, u16 field_no, u16 ec_word);
|
||||
void MailMsg_Copy(MAIL_MESSAGE *dst, const MAIL_MESSAGE *src);
|
||||
void MailMsg_Init_WithBank(MAIL_MESSAGE *mailMessage, u16 msgBank);
|
||||
void MailMsg_Init_Default(MAIL_MESSAGE *mailMessage);
|
||||
void MailMsg_Init_FromTemplate(MAIL_MESSAGE *mailMessage, const MAIL_MSG_TEMPLATE *template);
|
||||
void MailMsg_Init_FromTemplate(MAIL_MESSAGE *mailMessage, const MailMessageTemplate *template);
|
||||
String *MailMsg_GetExpandedString(const MAIL_MESSAGE *mailMessage, HeapID heapId);
|
||||
String *MailMsg_GetRawString(MAIL_MESSAGE *mailMessage, HeapID heapId);
|
||||
BOOL MailMsg_IsInit(MAIL_MESSAGE *mailMessage);
|
||||
|
@ -2,57 +2,69 @@
|
||||
#define POKEHEARTGOLD_SAVE_TRAINER_HOUSE_H
|
||||
|
||||
#include "save.h"
|
||||
#include "pokemon_types_def.h"
|
||||
#include "constants/pokemon.h"
|
||||
#include "global.h"
|
||||
|
||||
#define TRAINER_HALL_SET_MAX 10
|
||||
#define MAX_NUM_TRAINER_HOUSE_SETS 10
|
||||
|
||||
typedef struct TrainerHouseTrainer {
|
||||
u32 id;
|
||||
u8 unk_04;
|
||||
u8 sprite;
|
||||
u8 language;
|
||||
u8 version;
|
||||
u8 unk7;
|
||||
u8 gender;
|
||||
u16 otName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 filler_18[0x18];
|
||||
} TrainerHouseTrainer; // size=0x30
|
||||
MAIL_MESSAGE introMessage;
|
||||
MAIL_MESSAGE winMessage;
|
||||
MAIL_MESSAGE loseMessage;
|
||||
} TrainerHouseTrainer;
|
||||
|
||||
typedef struct TrainerHouseMon {
|
||||
u16 species:11;
|
||||
u16 form:5;
|
||||
u16 item;
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
u32 pid;
|
||||
u32 otid;
|
||||
u32 hpIv:5;
|
||||
u32 atkIv:5;
|
||||
u32 defIv:5;
|
||||
u32 spdIv:5;
|
||||
u32 spAtkIv:5;
|
||||
u32 spDefIv:5;
|
||||
u32 dummy:2;
|
||||
u32 pid;
|
||||
union {
|
||||
struct {
|
||||
u32 hpIv:5;
|
||||
u32 atkIv:5;
|
||||
u32 defIv:5;
|
||||
u32 spdIv:5;
|
||||
u32 spAtkIv:5;
|
||||
u32 spDefIv:5;
|
||||
u32 dummy:2;
|
||||
};
|
||||
u32 ivsWord;
|
||||
};
|
||||
u8 hpEv;
|
||||
u8 atkEv;
|
||||
u8 defEv;
|
||||
u8 spdEv;
|
||||
u8 spAtkEv;
|
||||
u8 spDefEv;
|
||||
u8 unk_1E[6];
|
||||
u8 ppUp;
|
||||
u8 language;
|
||||
u8 ability;
|
||||
u8 friendship;
|
||||
u8 level;
|
||||
u16 nickname[POKEMON_NAME_LENGTH];
|
||||
} TrainerHouseMon; // size=0x38
|
||||
} TrainerHouseMon;
|
||||
|
||||
typedef struct TrainerHouseSet {
|
||||
TrainerHouseTrainer trainer;
|
||||
TrainerHouseMon party[PARTY_SIZE];
|
||||
} TrainerHouseSet;
|
||||
|
||||
typedef struct TrainerHouseSave {
|
||||
TrainerHouseSet sets[TRAINER_HALL_SET_MAX];
|
||||
} TrainerHouseSave; // size=0xF00
|
||||
typedef struct TrainerHouse {
|
||||
TrainerHouseSet sets[MAX_NUM_TRAINER_HOUSE_SETS];
|
||||
} TrainerHouse;
|
||||
|
||||
u32 Save_TrainerHouse_sizeof(void);
|
||||
TrainerHouseSave *Save_TrainerHouse_Get(SaveData *saveData);
|
||||
void Save_TrainerHouse_Init(TrainerHouseSave *th);
|
||||
TrainerHouse *Save_TrainerHouse_Get(SaveData *saveData);
|
||||
void Save_TrainerHouse_Init(TrainerHouse *th);
|
||||
void TrainerHouseMon_SetZero(TrainerHouseMon *mon);
|
||||
void TrainerHouseTrainer_SetZero(TrainerHouseTrainer *trainer);
|
||||
void TrainerHouseSet_SetZero(TrainerHouseSet *set);
|
||||
|
@ -843,7 +843,7 @@ BOOL ScrCmd_805(ScriptContext* ctx);
|
||||
BOOL ScrCmd_806(ScriptContext* ctx);
|
||||
BOOL ScrCmd_SetTrainerHouseSprite(ScriptContext* ctx);
|
||||
BOOL ScrCmd_808(ScriptContext* ctx);
|
||||
BOOL ScrCmd_809(ScriptContext* ctx);
|
||||
BOOL ScrCmd_ShowTrainerHouseIntroMessage(ScriptContext* ctx);
|
||||
BOOL ScrCmd_810(ScriptContext* ctx);
|
||||
BOOL ScrCmd_811(ScriptContext* ctx);
|
||||
BOOL ScrCmd_812(ScriptContext* ctx);
|
||||
|
@ -87,7 +87,7 @@ typedef union TrainerMon {
|
||||
typedef struct TrainerData {
|
||||
/*000*/ u8 trainerType;
|
||||
/*001*/ u8 trainerClass;
|
||||
/*002*/ u8 unk_2; // unused
|
||||
/*002*/ u8 unk_2;
|
||||
/*003*/ u8 npoke;
|
||||
/*004*/ u16 items[4];
|
||||
/*00C*/ u32 aiFlags;
|
||||
|
2
main.lsf
2
main.lsf
@ -653,7 +653,7 @@ Overlay bug_contest
|
||||
Overlay OVY_25
|
||||
{
|
||||
After OVY_3
|
||||
Object asm/overlay_25.o
|
||||
Object src/overlay_25.o
|
||||
}
|
||||
Overlay OVY_26
|
||||
{
|
||||
|
@ -808,7 +808,7 @@ BOOL ScrCmd_805(ScriptContext *ctx);
|
||||
BOOL ScrCmd_806(ScriptContext *ctx);
|
||||
BOOL ScrCmd_SetTrainerHouseSprite(ScriptContext *ctx);
|
||||
BOOL ScrCmd_808(ScriptContext *ctx);
|
||||
BOOL ScrCmd_809(ScriptContext *ctx);
|
||||
BOOL ScrCmd_ShowTrainerHouseIntroMessage(ScriptContext *ctx);
|
||||
BOOL ScrCmd_810(ScriptContext *ctx);
|
||||
BOOL ScrCmd_811(ScriptContext *ctx);
|
||||
BOOL ScrCmd_812(ScriptContext *ctx);
|
||||
@ -1663,7 +1663,7 @@ const ScrCmdFunc gScriptCmdTable[] = {
|
||||
ScrCmd_806,
|
||||
ScrCmd_SetTrainerHouseSprite,
|
||||
ScrCmd_808,
|
||||
ScrCmd_809,
|
||||
ScrCmd_ShowTrainerHouseIntroMessage,
|
||||
ScrCmd_810,
|
||||
ScrCmd_811,
|
||||
ScrCmd_812,
|
||||
|
@ -47,7 +47,7 @@ void MailMsg_Init_Default(MAIL_MESSAGE *mailMessage) {
|
||||
mailMessage->msg_no = msg_0295_00005;
|
||||
}
|
||||
|
||||
void MailMsg_Init_FromTemplate(MAIL_MESSAGE *mailMessage, const MAIL_MSG_TEMPLATE *template) {
|
||||
void MailMsg_Init_FromTemplate(MAIL_MESSAGE *mailMessage, const MailMessageTemplate *template) {
|
||||
MailMsg_Init_WithBank(mailMessage, template->msg_bank);
|
||||
mailMessage->msg_no = template->msg_no;
|
||||
if (template->ec_groups[0] > 0) {
|
||||
|
310
src/overlay_25.c
Normal file
310
src/overlay_25.c
Normal file
@ -0,0 +1,310 @@
|
||||
#include "global.h"
|
||||
#include "assert.h"
|
||||
#include "encounter.h"
|
||||
#include "fieldmap.h"
|
||||
#include "heap.h"
|
||||
#include "mail_message.h"
|
||||
#include "msgdata.h"
|
||||
#include "overlay_01.h"
|
||||
#include "overlay_25.h"
|
||||
#include "party.h"
|
||||
#include "pm_string.h"
|
||||
#include "pokemon.h"
|
||||
#include "save_trainer_house.h"
|
||||
#include "scrcmd.h"
|
||||
#include "script.h"
|
||||
#include "string_util.h"
|
||||
#include "unk_020517A4.h"
|
||||
#include "unk_0205B3DC.h"
|
||||
#include "battle/battle_setup.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "msgdata/msg/msg_0285.h"
|
||||
#include "msgdata/msg/msg_0287.h"
|
||||
#include "msgdata/msg/msg_0292.h"
|
||||
#include "msgdata/msg/msg_0294.h"
|
||||
#include "msgdata/msg/msg_0296.h"
|
||||
#include "msgdata/msg/msg_0726.h"
|
||||
#include "msgdata/msg.naix"
|
||||
|
||||
#define MAX_TRAINER_HOUSE_LEVEL 50
|
||||
|
||||
static const MailMessageTemplate TrainerHouse_DefaultLoseMessage = {
|
||||
.msg_bank = MAILMSG_BANK_0292_GMM,
|
||||
.msg_no = msg_0292_00000,
|
||||
.ec_groups = { EC_GROUP_GREETINGS, 0xFF },
|
||||
.ec_words = { msg_0287_thanks, 0 },
|
||||
};
|
||||
|
||||
static const MailMessageTemplate TrainerHouse_DefaultWinMessage = {
|
||||
.msg_bank = MAILMSG_BANK_0296_GMM,
|
||||
.msg_no = msg_0296_00007,
|
||||
.ec_groups = { EC_GROUP_TRAINER, 0xFF },
|
||||
.ec_words = { msg_0285_victory, 0 },
|
||||
};
|
||||
|
||||
static const MailMessageTemplate TrainerHouse_DefaultIntroMessage = {
|
||||
.msg_bank = MAILMSG_BANK_0294_GMM,
|
||||
.msg_no = msg_0294_00003,
|
||||
.ec_groups = { EC_GROUP_TRAINER, 0xFF },
|
||||
.ec_words = { msg_0285_match, 0 },
|
||||
};
|
||||
|
||||
#define DUMMY_TRAINER_HOUSE_MON { \
|
||||
.language = GAME_LANGUAGE, \
|
||||
.nickname = { \
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, \
|
||||
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, \
|
||||
}, \
|
||||
}
|
||||
|
||||
static const TrainerHouseSet ov25_02259D9C = {
|
||||
.trainer = {
|
||||
.id = 0,
|
||||
.sprite = SPRITE_MAN3,
|
||||
.language = GAME_LANGUAGE,
|
||||
.version = GAME_VERSION,
|
||||
.gender = PLAYER_GENDER_MALE,
|
||||
.otName = { 0x33, 0x0c, 0x4c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, // "ひかる"
|
||||
},
|
||||
.party = {
|
||||
{
|
||||
.species = SPECIES_MEGANIUM,
|
||||
.item = ITEM_SITRUS_BERRY,
|
||||
.moves = { MOVE_LEECH_SEED, MOVE_PROTECT, MOVE_ENERGY_BALL, MOVE_TOXIC },
|
||||
.otid = 0x11111111,
|
||||
.pid = 0x00000101,
|
||||
.hpIv = 20,
|
||||
.atkIv = 20,
|
||||
.defIv = 20,
|
||||
.spdIv = 20,
|
||||
.spAtkIv = 20,
|
||||
.spDefIv = 20,
|
||||
.hpEv = 255,
|
||||
.spDefEv = 255,
|
||||
.language = GAME_LANGUAGE,
|
||||
.ability = ABILITY_OVERGROW,
|
||||
.level = 50,
|
||||
.nickname = { 0x92, 0x5d, 0x7c, 0x57, 0x91, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, // "メガニウム"
|
||||
},
|
||||
{
|
||||
.species = SPECIES_TYPHLOSION,
|
||||
.item = ITEM_SALAC_BERRY,
|
||||
.moves = { MOVE_ERUPTION, MOVE_SUBSTITUTE, MOVE_FLAMETHROWER, MOVE_FOCUS_BLAST },
|
||||
.otid = 0x11111111,
|
||||
.pid = 0x00001010,
|
||||
.hpIv = 20,
|
||||
.atkIv = 20,
|
||||
.defIv = 20,
|
||||
.spdIv = 20,
|
||||
.spAtkIv = 20,
|
||||
.spDefIv = 20,
|
||||
.spdEv = 255,
|
||||
.spAtkEv = 255,
|
||||
.language = GAME_LANGUAGE,
|
||||
.ability = ABILITY_BLAZE,
|
||||
.level = 50,
|
||||
.nickname = { 0x81, 0x60, 0x86, 0xf1, 0xa1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, // "バクフーン"
|
||||
},
|
||||
{
|
||||
.species = SPECIES_FERALIGATR,
|
||||
.item = ITEM_LUM_BERRY,
|
||||
.moves = { MOVE_DRAGON_DANCE, MOVE_WATERFALL, MOVE_ICE_PUNCH, MOVE_CRUNCH },
|
||||
.otid = 0x11111111,
|
||||
.pid = 0x00000011,
|
||||
.hpIv = 20,
|
||||
.atkIv = 20,
|
||||
.defIv = 20,
|
||||
.spdIv = 20,
|
||||
.spAtkIv = 20,
|
||||
.spDefIv = 20,
|
||||
.hpEv = 255,
|
||||
.atkEv = 255,
|
||||
.language = GAME_LANGUAGE,
|
||||
.ability = ABILITY_TORRENT,
|
||||
.level = 50,
|
||||
.nickname = { 0x5b, 0xf1, 0x71, 0x55, 0x9c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, // "オーダイル"
|
||||
},
|
||||
DUMMY_TRAINER_HOUSE_MON,
|
||||
DUMMY_TRAINER_HOUSE_MON,
|
||||
DUMMY_TRAINER_HOUSE_MON,
|
||||
},
|
||||
};
|
||||
|
||||
static void TrainerHouse_SetNames(TrainerHouseSet *set);
|
||||
static BattleSetup *TrainerHouse_NewBattleSetup(FieldSystem *fieldSystem, TrainerHouseSet *set);
|
||||
static void TrainerHouse_CopyToPokemon(TrainerHouseMon *trainerHouseMon, Pokemon *mon);
|
||||
static void TrainerHouse_InitTrainer(TrainerHouseSet *set, Trainer *trainer);
|
||||
static void TrainerHouse_InitBattleSetup(BattleSetup *setup, TrainerHouseSet *set, u32 battlerId);
|
||||
|
||||
void TrainerHouse_StartBattle(FieldSystem *fieldSystem, u32 trainerNum) {
|
||||
TrainerHouse *trainerHouse = Save_TrainerHouse_Get(fieldSystem->saveData);
|
||||
BattleSetup *setup;
|
||||
if (trainerNum == MAX_NUM_TRAINER_HOUSE_SETS) {
|
||||
TrainerHouseSet set;
|
||||
TrainerHouse_SetNames(&set);
|
||||
setup = TrainerHouse_NewBattleSetup(fieldSystem, &set);
|
||||
Trainer *trainer = &setup->trainer[BATTLER_ENEMY];
|
||||
MailMsg_Init_FromTemplate(&trainer->winMessage, &TrainerHouse_DefaultWinMessage);
|
||||
MailMsg_Init_FromTemplate(&trainer->loseMessage, &TrainerHouse_DefaultLoseMessage);
|
||||
} else {
|
||||
setup = TrainerHouse_NewBattleSetup(fieldSystem, &trainerHouse->sets[trainerNum]);
|
||||
}
|
||||
fieldSystem->unkA0 = NULL;
|
||||
u32 effect = sub_020517E8(setup);
|
||||
u32 bgm = sub_020517FC(setup);
|
||||
u32 *winFlag = FieldSysGetAttrAddr(fieldSystem, SCRIPTENV_BATTLE_WIN_FLAG);
|
||||
CallTask_020509F0(fieldSystem->taskman, setup, effect, bgm, winFlag);
|
||||
}
|
||||
|
||||
static void TrainerHouse_SetNames(TrainerHouseSet *set) {
|
||||
MIi_CpuCopy16((u16*)&ov25_02259D9C, (u16*)set, sizeof(TrainerHouseSet));
|
||||
MsgData *messageData = NewMsgDataFromNarc(MSGDATA_LOAD_LAZY, NARC_msgdata_msg, NARC_msg_msg_0726_bin, HEAP_ID_FIELD);
|
||||
GF_ASSERT(messageData);
|
||||
if (messageData) {
|
||||
String *otName = NewString_ReadMsgData(messageData, msg_0726_00003);
|
||||
DestroyMsgData(messageData);
|
||||
GF_ASSERT(otName);
|
||||
if (otName) {
|
||||
u32 length = String_GetLength(otName);
|
||||
GF_ASSERT(length <= PLAYER_NAME_LENGTH);
|
||||
if (length > PLAYER_NAME_LENGTH) {
|
||||
length = PLAYER_NAME_LENGTH;
|
||||
}
|
||||
MIi_CpuClear16(0xffff, set->trainer.otName, (PLAYER_NAME_LENGTH + 1) * sizeof(u16));
|
||||
MIi_CpuCopy16(String_cstr(otName), set->trainer.otName, length * sizeof(u16));
|
||||
String_Delete(otName);
|
||||
}
|
||||
}
|
||||
for (s32 i = 0; i < PARTY_SIZE; i++) {
|
||||
TrainerHouseMon *trainerHouseMon = &(set->party[i]);
|
||||
if (trainerHouseMon->species == SPECIES_NONE) {
|
||||
continue;
|
||||
}
|
||||
String *name = GetSpeciesName(trainerHouseMon->species, HEAP_ID_FIELD);
|
||||
GF_ASSERT(name);
|
||||
if (name) {
|
||||
u32 length = String_GetLength(name);
|
||||
GF_ASSERT(length <= POKEMON_NAME_LENGTH);
|
||||
if (length > POKEMON_NAME_LENGTH) {
|
||||
length = POKEMON_NAME_LENGTH;
|
||||
}
|
||||
MIi_CpuClear16(0xffff, trainerHouseMon->nickname, POKEMON_NAME_LENGTH * sizeof(u16));
|
||||
MIi_CpuCopy16(String_cstr(name), trainerHouseMon->nickname, length * sizeof(u16));
|
||||
String_Delete(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL ScrCmd_ShowTrainerHouseIntroMessage(ScriptContext *ctx) {
|
||||
u16 trainerNum = ScriptGetVar(ctx);
|
||||
TrainerHouse *trainerHouse = Save_TrainerHouse_Get(ctx->fieldSystem->saveData);
|
||||
MAIL_MESSAGE intro;
|
||||
MAIL_MESSAGE temp;
|
||||
if (trainerNum == MAX_NUM_TRAINER_HOUSE_SETS) {
|
||||
MailMsg_Init_FromTemplate(&temp, &TrainerHouse_DefaultIntroMessage);
|
||||
MIi_CpuCopy16((u16*)&temp, (u16*)&intro, sizeof(MAIL_MESSAGE));
|
||||
} else {
|
||||
MIi_CpuCopy16((u16*)&(trainerHouse->sets[trainerNum].trainer.introMessage), (u16*)&intro, sizeof(MAIL_MESSAGE));
|
||||
}
|
||||
ov01_021EF564(ctx, intro.msg_bank, intro.msg_no, intro.fields[0], intro.fields[1], TRUE);
|
||||
SetupNativeScript(ctx, ov01_021EF348);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BattleSetup *TrainerHouse_NewBattleSetup(FieldSystem *fieldSystem, TrainerHouseSet *set) {
|
||||
s32 i;
|
||||
BattleSetup *setup = BattleSetup_New(HEAP_ID_FIELD, BATTLE_TYPE_TRAINER | BATTLE_TYPE_TOWER | BATTLE_TYPE_13);
|
||||
SaveData *saveData = fieldSystem->saveData;
|
||||
Party *party = SaveArray_Party_Get(saveData);
|
||||
sub_02051D18(setup, fieldSystem, saveData, fieldSystem->location->mapId, fieldSystem->unk94, fieldSystem->unkB0);
|
||||
setup->battleBg = 6;
|
||||
setup->unk_150 = 9;
|
||||
Pokemon *mon = AllocMonZeroed(HEAP_ID_FIELD);
|
||||
s32 partyCount = Party_GetCount(party);
|
||||
Party_InitWithMaxSize(setup->party[BATTLER_PLAYER], PARTY_SIZE);
|
||||
for (i = 0; i < partyCount; i++) {
|
||||
CopyPokemonToPokemon(Party_GetMonByIndex(party, i), mon);
|
||||
if (GetMonData(mon, MON_DATA_LEVEL, NULL) > MAX_TRAINER_HOUSE_LEVEL) {
|
||||
u32 exp = GetMonExpBySpeciesAndLevel(GetMonData(mon, MON_DATA_SPECIES, NULL), MAX_TRAINER_HOUSE_LEVEL);
|
||||
SetMonData(mon, MON_DATA_EXPERIENCE, &exp);
|
||||
CalcMonLevelAndStats(mon);
|
||||
}
|
||||
BattleSetup_AddMonToParty(setup, mon, BATTLER_PLAYER);
|
||||
}
|
||||
FreeToHeap(mon);
|
||||
BattleSetup_SetAllySideBattlersToPlayer(setup);
|
||||
TrainerHouse_InitBattleSetup(setup, set, BATTLER_ENEMY);
|
||||
for (i = 0; i < BATTLER_MAX; i++) {
|
||||
setup->trainer[i].data.aiFlags = 7;
|
||||
}
|
||||
return setup;
|
||||
}
|
||||
|
||||
static void TrainerHouse_CopyToPokemon(TrainerHouseMon *trainerHouseMon, Pokemon *mon) {
|
||||
s32 i;
|
||||
u8 tempByte;
|
||||
ZeroMonData(mon);
|
||||
u32 level = trainerHouseMon->level > MAX_TRAINER_HOUSE_LEVEL
|
||||
? MAX_TRAINER_HOUSE_LEVEL
|
||||
: trainerHouseMon->level;
|
||||
tempByte = level;
|
||||
u32 species = trainerHouseMon->species;
|
||||
u32 ivs = trainerHouseMon->ivsWord & 0x3fffffff;
|
||||
u32 pid = trainerHouseMon->pid;
|
||||
CreateMonWithFixedIVs(mon, species, tempByte, ivs, pid);
|
||||
tempByte = trainerHouseMon->form;
|
||||
SetMonData(mon, MON_DATA_FORM, &tempByte);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &trainerHouseMon->item);
|
||||
for (i = 0 ; i < MAX_MON_MOVES; i++) {
|
||||
u16 move = trainerHouseMon->moves[i];
|
||||
SetMonData(mon, MON_DATA_MOVE1 + i, &move);
|
||||
tempByte = trainerHouseMon->ppUp >> (i * 2) & 3;
|
||||
SetMonData(mon, MON_DATA_MOVE1PPUP + i, &tempByte);
|
||||
u8 pp = GetMonData(mon, MON_DATA_MOVE1MAXPP + i, NULL);
|
||||
SetMonData(mon, MON_DATA_MOVE1PP + i, &pp);
|
||||
}
|
||||
u32 otid = trainerHouseMon->otid;
|
||||
SetMonData(mon, MON_DATA_OTID, &otid);
|
||||
for (i = 0; i < NUM_STATS; i++) {
|
||||
tempByte = *(&trainerHouseMon->hpEv + i);
|
||||
SetMonData(mon, MON_DATA_HP_EV + i, &tempByte);
|
||||
}
|
||||
SetMonData(mon, MON_DATA_ABILITY, &(trainerHouseMon->ability));
|
||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &(trainerHouseMon->friendship));
|
||||
u16 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
StringFillEOS(nickname, NELEMS(nickname));
|
||||
CopyU16StringArrayN(nickname, trainerHouseMon->nickname, POKEMON_NAME_LENGTH);
|
||||
SetMonData(mon, MON_DATA_NICKNAME, nickname);
|
||||
SetMonData(mon, MON_DATA_GAME_LANGUAGE, &(trainerHouseMon->language));
|
||||
CalcMonLevelAndStats(mon);
|
||||
}
|
||||
|
||||
static void TrainerHouse_InitTrainer(TrainerHouseSet *set, Trainer *trainer) {
|
||||
MI_CpuFill8(trainer, 0, sizeof(Trainer));
|
||||
trainer->data.trainerClass = GetUnionRoomAvatarAttrBySprite(set->trainer.gender, set->trainer.sprite, 1);
|
||||
trainer->data.unk_2 = 0;
|
||||
trainer->data.aiFlags = 0xffffffff;
|
||||
CopyU16StringArray(trainer->name, set->trainer.otName);
|
||||
MailMsg_Copy(&trainer->winMessage, &set->trainer.winMessage);
|
||||
MailMsg_Copy(&trainer->loseMessage, &set->trainer.loseMessage);
|
||||
trainer->data.doubleBattle = 0;
|
||||
}
|
||||
|
||||
static void TrainerHouse_InitBattleSetup(BattleSetup *setup, TrainerHouseSet *set, u32 battlerId) {
|
||||
s32 i;
|
||||
TrainerHouse_InitTrainer(set, &setup->trainer[battlerId]);
|
||||
setup->trainerId[battlerId] = set->trainer.id;
|
||||
Pokemon *tempMon = AllocMonZeroed(HEAP_ID_FIELD);
|
||||
Party_InitWithMaxSize(setup->party[battlerId], PARTY_SIZE);
|
||||
TrainerHouseMon *trainerHouseMon = set->party;
|
||||
for (i = 0; i < PARTY_SIZE; trainerHouseMon++, i++)
|
||||
{
|
||||
if (trainerHouseMon->species == SPECIES_NONE) {
|
||||
break;
|
||||
}
|
||||
TrainerHouse_CopyToPokemon(&set->party[i], tempMon);
|
||||
BattleSetup_AddMonToParty(setup, tempMon, battlerId);
|
||||
}
|
||||
FreeToHeap(tempMon);
|
||||
}
|
@ -67,7 +67,7 @@ const OVY_MGR_TEMPLATE ov36_App_MainMenu_SelectOption_Continue = {
|
||||
.ovy_id = FS_OVERLAY_ID_NONE,
|
||||
};
|
||||
|
||||
static const MAIL_MSG_TEMPLATE sMailMsgTemplates[2] = {
|
||||
static const MailMessageTemplate sMailMsgTemplates[2] = {
|
||||
{
|
||||
// ADVENTURE! EXCITED!
|
||||
.msg_bank = MAILMSG_BANK_0292_GMM,
|
||||
|
@ -4,18 +4,18 @@
|
||||
#include "constants/species.h"
|
||||
|
||||
u32 Save_TrainerHouse_sizeof(void) {
|
||||
return sizeof(TrainerHouseSave);
|
||||
return sizeof(TrainerHouse);
|
||||
}
|
||||
|
||||
TrainerHouseSave *Save_TrainerHouse_Get(SaveData *saveData) {
|
||||
TrainerHouse *Save_TrainerHouse_Get(SaveData *saveData) {
|
||||
return SaveArray_Get(saveData, SAVE_TRAINER_HOUSE);
|
||||
}
|
||||
|
||||
void Save_TrainerHouse_Init(TrainerHouseSave *th) {
|
||||
void Save_TrainerHouse_Init(TrainerHouse *th) {
|
||||
int i;
|
||||
|
||||
MI_CpuClear8(th, sizeof(TrainerHouseSave));
|
||||
for (i = 0; i < TRAINER_HALL_SET_MAX; i++) {
|
||||
MI_CpuClear8(th, sizeof(TrainerHouse));
|
||||
for (i = 0; i < MAX_NUM_TRAINER_HOUSE_SETS; i++) {
|
||||
TrainerHouseSet_SetZero(&th->sets[i]);
|
||||
}
|
||||
}
|
||||
@ -44,7 +44,7 @@ BOOL TrainerHouseSet_CheckHasData(const TrainerHouseSet *set) {
|
||||
}
|
||||
|
||||
BOOL TrainerHouseTrainer_Compare(const TrainerHouseTrainer *a, const TrainerHouseTrainer *b) {
|
||||
if (a->id != b->id || a->version != b->version || a->language != b->language || a->unk7 != b->unk7) {
|
||||
if (a->id != b->id || a->version != b->version || a->language != b->language || a->gender != b->gender) {
|
||||
return FALSE;
|
||||
}
|
||||
return !StringNotEqual(a->otName, b->otName);
|
||||
|
@ -437,10 +437,10 @@ BOOL ScrCmd_SetTrainerHouseSprite(ScriptContext *ctx) {
|
||||
u16 trainerNum = ScriptGetVar(ctx);
|
||||
u16 *hasTrainer = ScriptGetVarPointer(ctx);
|
||||
u16 *spriteId = GetVarPointer(ctx->fieldSystem, VAR_OBJ_1 + trainerNum);
|
||||
TrainerHouseSave *trainerHouse = Save_TrainerHouse_Get(ctx->fieldSystem->saveData);
|
||||
TrainerHouse *trainerHouse = Save_TrainerHouse_Get(ctx->fieldSystem->saveData);
|
||||
*hasTrainer = TrainerHouseSet_CheckHasData(&trainerHouse->sets[trainerNum]);
|
||||
if (*hasTrainer) {
|
||||
*spriteId = trainerHouse->sets[trainerNum].trainer.unk_04;
|
||||
*spriteId = trainerHouse->sets[trainerNum].trainer.sprite;
|
||||
} else {
|
||||
*spriteId = 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user