Finish union room battle

This commit is contained in:
PikalaxALT 2019-04-01 22:30:30 -04:00 committed by huderlem
parent 4be97b2dc6
commit 7571969a45
11 changed files with 271 additions and 760 deletions

View File

@ -1,636 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_801AA08
sub_801AA08: @ 801AA08
push {r4,lr}
movs r4, 0
adds r3, r1, 0
adds r2, r0, 0
_0801AA10:
ldr r1, [r2]
ldr r0, [r3]
cmp r1, r0
beq _0801AA1C
movs r0, 0x1
b _0801AA28
_0801AA1C:
adds r3, 0x4
adds r2, 0x4
adds r4, 0x1
cmp r4, 0x3
ble _0801AA10
movs r0, 0
_0801AA28:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_801AA08
thumb_func_start sub_801AA30
sub_801AA30: @ 801AA30
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x10
adds r6, r0, 0
mov r9, r1
adds r5, r2, 0
lsls r4, r3, 24
lsrs r4, 24
movs r0, 0
mov r8, r0
mov r0, sp
movs r1, 0
movs r2, 0x10
bl memset
lsls r0, r4, 2
adds r0, r4
lsls r0, 3
ldr r1, =gTasks + 0x8
adds r7, r0, r1
movs r4, 0
_0801AA5E:
lsls r1, r4, 5
ldr r0, [r7]
adds r0, r1
mov r1, sp
bl sub_801A960
adds r1, r0, 0
ldr r0, [r5]
cmp r1, r0
beq _0801AA78
str r1, [r5]
movs r2, 0x1
mov r8, r2
_0801AA78:
adds r5, 0x4
adds r4, 0x1
cmp r4, 0xF
ble _0801AA5E
mov r0, sp
mov r1, r9
bl sub_801AA08
cmp r0, 0
bne _0801AA9C
mov r3, r8
cmp r3, 0x1
beq _0801AAC4
movs r0, 0
b _0801AAC6
.pool
_0801AA9C:
adds r1, r6, 0
mov r0, sp
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldr r0, [r0]
str r0, [r1]
mov r1, r9
mov r0, sp
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldr r0, [r0]
str r0, [r1]
ldr r0, [r6]
ldr r1, [r6, 0x4]
adds r0, r1
ldr r1, [r6, 0x8]
adds r0, r1
ldr r1, [r6, 0xC]
adds r0, r1
str r0, [r6, 0xC]
_0801AAC4:
movs r0, 0x1
_0801AAC6:
add sp, 0x10
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_801AA30
thumb_func_start sub_801AAD4
sub_801AAD4: @ 801AAD4
push {r4-r7,lr}
movs r0, 0xA
bl sub_8014210
movs r4, 0
movs r7, 0x64
ldr r6, =gPlayerParty
ldr r5, =gEnemyParty
_0801AAE4:
ldr r0, =gSelectedOrderFromParty
adds r0, r4, r0
ldrb r0, [r0]
subs r0, 0x1
adds r1, r0, 0
muls r1, r7
adds r1, r6
adds r0, r5, 0
movs r2, 0x64
bl memcpy
adds r5, 0x64
adds r4, 0x1
cmp r4, 0x1
ble _0801AAE4
ldr r4, =gPlayerParty
movs r0, 0xFA
lsls r0, 1
adds r5, r4, r0
_0801AB0A:
adds r0, r4, 0
bl ZeroMonData
adds r4, 0x64
cmp r4, r5
ble _0801AB0A
ldr r4, =gPlayerParty
movs r5, 0
adds r6, r4, 0
adds r6, 0x64
_0801AB1E:
ldr r1, =gEnemyParty
adds r1, r5, r1
adds r0, r4, 0
movs r2, 0x64
bl memcpy
adds r4, 0x64
adds r5, 0x64
cmp r4, r6
ble _0801AB1E
movs r0, 0x32
bl IncrementGameStat
bl CalculatePlayerPartyCount
ldr r0, =gTrainerBattleOpponent_A
movs r2, 0xC0
lsls r2, 4
adds r1, r2, 0
strh r1, [r0]
ldr r0, =CB2_InitBattle
bl SetMainCallback2
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_801AAD4
thumb_func_start sub_801AB68
sub_801AB68: @ 801AB68
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x18
adds r5, r0, 0
adds r7, r1, 0
adds r6, r2, 0
ldr r4, [sp, 0x38]
lsls r5, 24
lsrs r5, 24
lsls r6, 24
lsrs r6, 24
lsls r3, 24
lsrs r3, 24
movs r0, 0
mov r9, r0
movs r1, 0x1
mov r10, r1
ldr r0, =gUnknown_082F0DE4
mov r8, r0
ldrb r0, [r0]
lsls r1, r0, 4
orrs r1, r0
lsls r1, 24
lsrs r1, 24
adds r0, r5, 0
str r3, [sp, 0x14]
bl FillWindowPixelBuffer
mov r1, r9
str r1, [sp]
mov r0, r10
str r0, [sp, 0x4]
mov r1, r8
str r1, [sp, 0x8]
lsls r4, 24
asrs r4, 24
str r4, [sp, 0xC]
str r7, [sp, 0x10]
adds r0, r5, 0
movs r1, 0x1
adds r2, r6, 0
ldr r3, [sp, 0x14]
bl AddTextPrinterParameterized4
add sp, 0x18
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_801AB68
thumb_func_start sub_801ABDC
sub_801ABDC: @ 801ABDC
push {r4-r6,lr}
sub sp, 0x4
adds r4, r0, 0
adds r6, r1, 0
adds r5, r2, 0
movs r1, 0
ldrsh r0, [r4, r1]
cmp r0, 0
beq _0801ABF4
cmp r0, 0x1
beq _0801AC22
b _0801AC36
_0801ABF4:
movs r0, 0
movs r1, 0x1
movs r2, 0xD
bl DrawTextBorderOuter
str r5, [sp]
movs r0, 0
adds r1, r6, 0
movs r2, 0
movs r3, 0x1
bl sub_801AB68
movs r0, 0
bl PutWindowTilemap
movs r0, 0
movs r1, 0x3
bl CopyWindowToVram
ldrh r0, [r4]
adds r0, 0x1
strh r0, [r4]
b _0801AC36
_0801AC22:
movs r0, 0
bl IsTextPrinterActive
lsls r0, 16
lsrs r0, 16
cmp r0, 0
bne _0801AC36
strh r0, [r4]
movs r0, 0x1
b _0801AC38
_0801AC36:
movs r0, 0
_0801AC38:
add sp, 0x4
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_801ABDC
thumb_func_start sub_801AC40
sub_801AC40: @ 801AC40
push {lr}
bl LoadOam
bl ProcessSpriteCopyRequests
bl TransferPlttBuffer
pop {r0}
bx r0
thumb_func_end sub_801AC40
thumb_func_start sub_801AC54
sub_801AC54: @ 801AC54
push {r4,lr}
sub sp, 0xC
ldr r1, =gMain
movs r2, 0x87
lsls r2, 3
adds r0, r1, r2
ldrb r0, [r0]
adds r2, r1, 0
cmp r0, 0x33
bls _0801AC6A
b _0801AFAE
_0801AC6A:
lsls r0, 2
ldr r1, =_0801AC7C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_0801AC7C:
.4byte _0801AD4C
.4byte _0801ADFC
.4byte _0801AE24
.4byte _0801AE48
.4byte _0801AE98
.4byte _0801AFAE
.4byte _0801AF7C
.4byte _0801AF58
.4byte _0801AF7C
.4byte _0801AF98
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AFAE
.4byte _0801AF24
.4byte _0801AF40
_0801AD4C:
movs r0, 0
movs r1, 0
bl SetGpuReg
ldr r4, =gUnknown_02022C6C
movs r0, 0x4
bl AllocZeroed
str r0, [r4]
bl ResetSpriteData
bl FreeAllSpritePalettes
bl ResetTasks
movs r0, 0
bl ResetBgsAndClearDma3BusyFlags
ldr r1, =gUnknown_082F0DD0
movs r0, 0
movs r2, 0x1
bl InitBgsFromTemplates
bl reset_temp_tile_data_buffers
ldr r0, =gUnknown_082F0DD4
bl InitWindows
lsls r0, 16
cmp r0, 0
bne _0801AD8C
b _0801AFC2
_0801AD8C:
bl DeactivateAllTextPrinters
movs r0, 0
bl ClearWindowTilemap
movs r0, 0
movs r1, 0
bl FillWindowPixelBuffer
movs r0, 0
movs r1, 0x11
bl FillWindowPixelBuffer
movs r0, 0x1E
str r0, [sp]
movs r0, 0x14
str r0, [sp, 0x4]
movs r0, 0xF
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0
movs r2, 0
movs r3, 0
bl FillBgTilemapBufferRect
movs r0, 0
movs r1, 0x1
movs r2, 0xD0
bl LoadUserWindowBorderGfx
movs r0, 0
movs r1, 0x1
movs r2, 0xD0
bl LoadUserWindowBorderGfx_
bl sub_819789C
ldr r0, =sub_801AC40
bl SetVBlankCallback
ldr r1, =gMain
movs r0, 0x87
lsls r0, 3
adds r1, r0
b _0801AF8A
.pool
_0801ADFC:
ldr r0, =gUnknown_02022C6C
ldr r0, [r0]
ldr r1, =gText_CommStandbyAwaitingOtherPlayer
movs r2, 0
bl sub_801ABDC
cmp r0, 0
bne _0801AE0E
b _0801AFAE
_0801AE0E:
ldr r1, =gMain
movs r2, 0x87
lsls r2, 3
adds r1, r2
b _0801AF8A
.pool
_0801AE24:
movs r0, 0x1
negs r0, r0
movs r1, 0
str r1, [sp]
movs r2, 0x10
movs r3, 0
bl BeginNormalPaletteFade
movs r0, 0
bl ShowBg
ldr r1, =gMain
movs r0, 0x87
lsls r0, 3
adds r1, r0
b _0801AF8A
.pool
_0801AE48:
bl UpdatePaletteFade
lsls r0, 24
cmp r0, 0
beq _0801AE54
b _0801AFAE
_0801AE54:
ldr r4, =gBlockSendBuffer
adds r0, r4, 0
movs r1, 0
movs r2, 0x20
bl memset
ldr r0, =gSelectedOrderFromParty
ldrb r1, [r0]
ldrb r0, [r0, 0x1]
cmn r1, r0
bne _0801AE78
movs r0, 0x52
b _0801AE7A
.pool
_0801AE78:
movs r0, 0x51
_0801AE7A:
strb r0, [r4]
ldr r1, =gBlockSendBuffer
movs r0, 0
movs r2, 0x20
bl SendBlock
ldr r1, =gMain
movs r2, 0x87
lsls r2, 3
adds r1, r2
b _0801AF8A
.pool
_0801AE98:
bl GetBlockReceivedStatus
lsls r0, 24
lsrs r0, 24
cmp r0, 0x3
beq _0801AEA6
b _0801AFAE
_0801AEA6:
ldr r1, =gBlockRecvBuffer
ldrh r0, [r1]
cmp r0, 0x51
bne _0801AEE0
movs r2, 0x80
lsls r2, 1
adds r0, r1, r2
ldrh r0, [r0]
cmp r0, 0x51
bne _0801AEE0
movs r0, 0x1
negs r0, r0
movs r1, 0
str r1, [sp]
movs r2, 0
movs r3, 0x10
bl BeginNormalPaletteFade
ldr r0, =gMain
movs r1, 0x87
lsls r1, 3
adds r0, r1
movs r1, 0x32
b _0801AF16
.pool
_0801AEE0:
bl sub_800AC34
ldr r4, =gBlockRecvBuffer
bl GetMultiplayerId
lsls r0, 24
lsrs r0, 16
adds r0, r4
ldrh r0, [r0]
cmp r0, 0x52
bne _0801AF0C
ldr r0, =gMain
movs r2, 0x87
lsls r2, 3
adds r0, r2
movs r1, 0x6
b _0801AF16
.pool
_0801AF0C:
ldr r0, =gMain
movs r1, 0x87
lsls r1, 3
adds r0, r1
movs r1, 0x8
_0801AF16:
strb r1, [r0]
bl ResetBlockReceivedFlags
b _0801AFAE
.pool
_0801AF24:
bl UpdatePaletteFade
lsls r0, 24
cmp r0, 0
bne _0801AFAE
bl sub_800ADF8
ldr r1, =gMain
movs r2, 0x87
lsls r2, 3
adds r1, r2
b _0801AF8A
.pool
_0801AF40:
bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0801AFAE
ldr r0, =sub_801AAD4
bl SetMainCallback2
b _0801AFAE
.pool
_0801AF58:
ldr r0, =gUnknown_02022C6C
ldr r0, [r0]
ldr r1, =gText_RefusedBattle
movs r2, 0x1
bl sub_801ABDC
cmp r0, 0
beq _0801AFAE
ldr r0, =CB2_ReturnToField
bl SetMainCallback2
b _0801AFAE
.pool
_0801AF7C:
ldr r0, =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
bne _0801AFAE
movs r0, 0x87
lsls r0, 3
adds r1, r2, r0
_0801AF8A:
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
b _0801AFAE
.pool
_0801AF98:
ldr r0, =gUnknown_02022C6C
ldr r0, [r0]
ldr r1, =gText_BattleWasRefused
movs r2, 0x1
bl sub_801ABDC
cmp r0, 0
beq _0801AFAE
ldr r0, =CB2_ReturnToField
bl SetMainCallback2
_0801AFAE:
bl RunTasks
bl RunTextPrinters
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
_0801AFC2:
add sp, 0xC
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_801AC54

View File

@ -1,17 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_082F0DD0:: @ 82F0DD0
.4byte 0x000001FC
.align 2
gUnknown_082F0DD4:: @ 82F0DD4
window_template 0x00, 0x03, 0x0f, 0x18, 0x04, 0x0e, 0x0014
null_window_template
.align 2
gUnknown_082F0DE4:: @ 82F0DE4
.byte 0x01, 0x02, 0x03

View File

@ -51,7 +51,7 @@
#define GAME_STAT_USED_DAYCARE 47 #define GAME_STAT_USED_DAYCARE 47
#define GAME_STAT_RODE_CABLE_CAR 48 #define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49 #define GAME_STAT_ENTERED_HOT_SPRINGS 49
#define GAME_STAT_50 50 #define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
#define GAME_STAT_51 51 #define GAME_STAT_51 51
#define NUM_USED_GAME_STATS 52 #define NUM_USED_GAME_STATS 52

View File

@ -71,6 +71,6 @@ void RestoreSerialTimer3IntrHandlers(void);
void StartTimer1(void); void StartTimer1(void);
void SeedRngAndSetTrainerId(void); void SeedRngAndSetTrainerId(void);
u16 GetGeneratedTrainerIdLower(void); u16 GetGeneratedTrainerIdLower(void);
void sub_819789C(void);
#endif // GUARD_MAIN_H #endif // GUARD_MAIN_H

View File

@ -2677,5 +2677,8 @@ extern const u8 gText_PeopleTrading[];
extern const u8 gText_PeopleBattling[]; extern const u8 gText_PeopleBattling[];
extern const u8 gText_PeopleInUnionRoom[]; extern const u8 gText_PeopleInUnionRoom[];
extern const u8 gText_PeopleCommunicating[]; extern const u8 gText_PeopleCommunicating[];
extern const u8 gText_CommStandbyAwaitingOtherPlayer[];
extern const u8 gText_RefusedBattle[];
extern const u8 gText_BattleWasRefused[];
#endif // GUARD_STRINGS_H #endif // GUARD_STRINGS_H

View File

@ -2,5 +2,6 @@
#define GUARD_UNION_ROOM_BATTLE_H #define GUARD_UNION_ROOM_BATTLE_H
u8 sub_8013C40(void); u8 sub_8013C40(void);
void sub_8014210(u16 battleFlags);
#endif //GUARD_UNION_ROOM_BATTLE_H #endif //GUARD_UNION_ROOM_BATTLE_H

View File

@ -58,7 +58,6 @@ SECTIONS {
src/mystery_gift.o(.text); src/mystery_gift.o(.text);
src/union_room_player_avatar.o(.text); src/union_room_player_avatar.o(.text);
src/union_room_battle.o(.text); src/union_room_battle.o(.text);
asm/union_room_battle.o(.text);
src/mevent2.o(.text); src/mevent2.o(.text);
src/mevent_801BAAC.o(.text); src/mevent_801BAAC.o(.text);
asm/mevent_server.o(.text); asm/mevent_server.o(.text);
@ -415,7 +414,6 @@ SECTIONS {
src/mystery_gift.o(.rodata); src/mystery_gift.o(.rodata);
src/union_room_player_avatar.o(.rodata); src/union_room_player_avatar.o(.rodata);
src/union_room_battle.o(.rodata); src/union_room_battle.o(.rodata);
data/union_room_battle.o(.rodata);
src/mevent2.o(.rodata); src/mevent2.o(.rodata);
src/mevent_801BAAC.o(.rodata); src/mevent_801BAAC.o(.rodata);
data/mevent_server.o(.rodata); data/mevent_server.o(.rodata);

View File

@ -914,7 +914,7 @@ struct Story
}; };
static const struct Story sStorytellerStories[] = { static const struct Story sStorytellerStories[] = {
{GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, {GAME_STAT_NUM_UNION_ROOM_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956},
{GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE},
{GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8},
{GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E}, {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E},

View File

@ -2332,7 +2332,7 @@ void sub_8013F90(u8 taskId)
if (GetBlockReceivedStatus() == 3) if (GetBlockReceivedStatus() == 3)
{ {
gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]); gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]);
IncrementGameStat(GAME_STAT_50); IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES);
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
} }

View File

@ -9,6 +9,7 @@
#include "alloc.h" #include "alloc.h"
#include "menu.h" #include "menu.h"
#include "window.h" #include "window.h"
#include "text_window.h"
#include "scanline_effect.h" #include "scanline_effect.h"
#include "m4a.h" #include "m4a.h"
#include "dynamic_placeholder_text_util.h" #include "dynamic_placeholder_text_util.h"
@ -18,6 +19,9 @@
#include "international_string_util.h" #include "international_string_util.h"
#include "sound.h" #include "sound.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "party_menu.h"
#include "battle_setup.h"
#include "link.h"
#include "union_room.h" #include "union_room.h"
#include "union_room_battle.h" #include "union_room_battle.h"
@ -31,13 +35,20 @@ struct UnkStruct_3000DAC
/*0x62*/ u8 filler_62[10]; /*0x62*/ u8 filler_62[10];
}; };
struct UnkStruct_2022C6C
{
s16 a0;
};
IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC; IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC;
IWRAM_DATA bool32 gUnknown_03000DB0; IWRAM_DATA bool32 gUnknown_03000DB0;
EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL;
void sub_801A43C(void); void sub_801A43C(void);
void sub_801A6C0(u8 taskId); void sub_801A6C0(u8 taskId);
static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode); static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode);
bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 a3); bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId);
const u16 gWirelessInfoScreenPal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal"); const u16 gWirelessInfoScreenPal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal");
const u32 gWirelessInfoScreenGfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz"); const u32 gWirelessInfoScreenGfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz");
@ -128,6 +139,29 @@ const u8 gUnknown_082F0D70[][3] = {
{0x0e, 0x01, 0x02} {0x0e, 0x01, 0x02}
}; };
const struct BgTemplate gUnknown_082F0DD0[] = {
{
.bg = 0,
.charBaseIndex = 3,
.mapBaseIndex = 31
}
};
const struct WindowTemplate gUnknown_082F0DD4[] = {
{
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 15,
.width = 24,
.height = 4,
.paletteNum = 0xE,
.baseBlock = 0x014
},
{ 0xFF }
};
const u8 gUnknown_082F0DE4[] = { 1, 2, 3 };
void sub_801A3F4(void) void sub_801A3F4(void)
{ {
if (!IsDma3ManagerBusyWithBgCopy()) if (!IsDma3ManagerBusyWithBgCopy())
@ -333,12 +367,10 @@ static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 m
AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str); AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str);
} }
#ifdef NONMATCHING u32 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1)
// register swap r2, r3
u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1)
{ {
s32 i, j, r2; s32 i, j, r2;
u8 result = a0->unk.field_0.unk_0a_0; u32 result = a0->unk.field_0.unk_0a_0;
for (i = 0; i < (unsigned)ARRAY_COUNT(gUnknown_082F0D70); i++) for (i = 0; i < (unsigned)ARRAY_COUNT(gUnknown_082F0D70); i++)
{ {
@ -370,97 +402,230 @@ u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1)
} }
return result; return result;
} }
#else
NAKED bool32 sub_801AA08(u32 * a0, u32 * a1)
u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1)
{ {
asm_unified("\tpush {r4-r7,lr}\n" s32 i;
"\tmov r7, r10\n" for (i = 0; i < 4; i++)
"\tmov r6, r9\n" {
"\tmov r5, r8\n" if (a0[i] != a1[i])
"\tpush {r5-r7}\n" {
"\tsub sp, 0x4\n" return TRUE;
"\tmov r12, r0\n" }
"\tadds r7, r1, 0\n" }
"\tldrb r0, [r0, 0xA]\n" return FALSE;
"\tlsls r0, 25\n" }
"\tlsrs r0, 25\n"
"\tmov r8, r0\n" bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId)
"\tmovs r4, 0\n" {
"\tldr r0, =gUnknown_082F0D70\n" bool32 r8 = FALSE;
"\tmov r9, r0\n" u32 sp0[4] = {0, 0, 0, 0};
"\tmovs r1, 0x1\n" struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data;
"\tadd r1, r9\n" s32 i;
"\tmov r10, r1\n"
"\tmov r3, r12\n" for (i = 0; i < 16; i++)
"\tadds r3, 0x4\n" {
"\tstr r3, [sp]\n" u32 r1 = sub_801A960(&(*data)[i], sp0);
"_0801A98A:\n" if (r1 != a2[i])
"\tlsls r0, r4, 1\n" {
"\tadds r2, r0, r4\n" a2[i] = r1;
"\tmov r3, r9\n" r8 = TRUE;
"\tadds r1, r2, r3\n" }
"\tadds r5, r0, 0\n" }
"\tadds r6, r4, 0x1\n" if (sub_801AA08(sp0, a1) == 0)
"\tldrb r1, [r1]\n" {
"\tcmp r8, r1\n" if (r8 != TRUE)
"\tbne _0801A9EE\n" {
"\tmov r0, r12\n" return FALSE;
"\tldrb r1, [r0, 0x1A]\n" }
"\tmovs r0, 0x3\n" }
"\tands r0, r1\n" else
"\tcmp r0, 0x1\n" {
"\tbne _0801A9EE\n" memcpy(a0, sp0, sizeof(sp0));
"\tmov r0, r9\n" memcpy(a1, sp0, sizeof(sp0));
"\tadds r0, 0x2\n" a0[3] = a0[0] + a0[1] + a0[2] + a0[3];
"\tadds r3, r2, r0\n" }
"\tldrb r0, [r3]\n" return TRUE;
"\tcmp r0, 0\n" }
"\tbne _0801A9DC\n"
"\tmovs r2, 0\n" void sub_801AAD4(void)
"\tmovs r1, 0\n" {
"\tldr r3, [sp]\n" s32 i;
"_0801A9BA:\n" sub_8014210(10);
"\tadds r0, r3, r1\n" for (i = 0; i < 2; i++)
"\tldrb r0, [r0]\n" {
"\tcmp r0, 0\n" gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1];
"\tbeq _0801A9C4\n" }
"\tadds r2, 0x1\n" for (i = 0; i < 6; i++)
"_0801A9C4:\n" {
"\tadds r1, 0x1\n" ZeroMonData(&gPlayerParty[i]);
"\tcmp r1, 0x3\n" }
"\tble _0801A9BA\n" for (i = 0; i < 2; i++)
"\tadds r2, 0x1\n" {
"\tadds r0, r5, r4\n" gPlayerParty[i] = gEnemyParty[i];
"\tadd r0, r10\n" }
"\tldrb r1, [r0]\n" IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES);
"\tlsls r1, 2\n" CalculatePlayerPartyCount();
"\tadds r1, r7\n" gTrainerBattleOpponent_A = 0xC00;
"\tb _0801A9E8\n" SetMainCallback2(CB2_InitBattle);
"\t.pool\n" }
"_0801A9DC:\n"
"\tmov r1, r10\n" void sub_801AB68(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
"\tadds r0, r2, r1\n" {
"\tldrb r1, [r0]\n" s32 letterSpacing = 0;
"\tlsls r1, 2\n" s32 lineSpacing = 1;
"\tadds r1, r7\n" FillWindowPixelBuffer(windowId, (gUnknown_082F0DE4[0] << 4) | gUnknown_082F0DE4[0]);
"\tldrb r2, [r3]\n" AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_082F0DE4, speed, str);
"_0801A9E8:\n" }
"\tldr r0, [r1]\n"
"\tadds r0, r2\n" bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed)
"\tstr r0, [r1]\n" {
"_0801A9EE:\n" switch (*state)
"\tadds r4, r6, 0\n" {
"\tcmp r4, 0x1E\n" case 0:
"\tbls _0801A98A\n" DrawTextBorderOuter(0, 0x001, 0xD);
"\tmov r0, r8\n" sub_801AB68(0, str, 0, 1, speed);
"\tadd sp, 0x4\n" PutWindowTilemap(0);
"\tpop {r3-r5}\n" CopyWindowToVram(0, 3);
"\tmov r8, r3\n" (*state)++;
"\tmov r9, r4\n" break;
"\tmov r10, r5\n" case 1:
"\tpop {r4-r7}\n" if (!IsTextPrinterActive(0))
"\tpop {r1}\n" {
"\tbx r1"); *state = 0;
return TRUE;
}
break;
}
return FALSE;
}
void sub_801AC40(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void sub_801AC54(void)
{
switch (gMain.state)
{
case 0:
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
gUnknown_02022C6C = AllocZeroed(4);
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_082F0DD0, 1);
reset_temp_tile_data_buffers();
if (!InitWindows(gUnknown_082F0DD4))
{
return;
}
DeactivateAllTextPrinters();
ClearWindowTilemap(0);
FillWindowPixelBuffer(0, 0x00);
FillWindowPixelBuffer(0, 0x11);
FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF);
LoadUserWindowBorderGfx(0, 1, 0xD0);
LoadUserWindowBorderGfx_(0, 1, 0xD0);
sub_819789C();
SetVBlankCallback(sub_801AC40);
gMain.state++;
break;
case 1:
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_CommStandbyAwaitingOtherPlayer, 0))
{
gMain.state++;
}
break;
case 2:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
ShowBg(0);
gMain.state++;
break;
case 3:
if (!UpdatePaletteFade())
{
memset(gBlockSendBuffer, 0, 0x20);
if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1])
{
gBlockSendBuffer[0] = 0x52;
}
else
{
gBlockSendBuffer[0] = 0x51;
}
SendBlock(0, gBlockSendBuffer, 0x20);
gMain.state++;
}
break;
case 4:
if (GetBlockReceivedStatus() == 3)
{
if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gMain.state = 50;
}
else
{
sub_800AC34();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52)
{
gMain.state = 6;
}
else
{
gMain.state = 8;
}
}
ResetBlockReceivedFlags();
}
break;
case 50:
if (!UpdatePaletteFade())
{
sub_800ADF8();
gMain.state++;
}
break;
case 51:
if (IsLinkTaskFinished())
{
SetMainCallback2(sub_801AAD4);
}
break;
case 6:
if (gReceivedRemoteLinkPlayers == 0)
{
gMain.state++;
}
break;
case 7:
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_RefusedBattle, 1))
{
SetMainCallback2(CB2_ReturnToField);
}
break;
case 8:
if (gReceivedRemoteLinkPlayers == 0)
{
gMain.state++;
}
break;
case 9:
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_BattleWasRefused, 1))
{
SetMainCallback2(CB2_ReturnToField);
}
break;
}
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
} }
#endif //NONMATCHING

View File

@ -9,10 +9,7 @@
.include "src/union_room.o" .include "src/union_room.o"
.include "src/mystery_gift.o" .include "src/mystery_gift.o"
.include "src/union_room_player_avatar.o" .include "src/union_room_player_avatar.o"
.include "src/union_room_battle.o"
gUnknown_02022C6C: @ 2022C6C
.space 0x4
.include "src/mevent2.o" .include "src/mevent2.o"
.include "src/mevent_801BAAC.o" .include "src/mevent_801BAAC.o"