diff options
143 files changed, 10144 insertions, 14707 deletions
@@ -65,9 +65,7 @@ FIX := tools/gbafix/gbafix$(EXE) .PHONY: rom clean compare tidy -$(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SONG_BUILDDIR) $(MID_BUILDDIR)) - -C_SRCS := $(wildcard $(C_SUBDIR)/*.c) +C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) @@ -82,9 +80,13 @@ SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) -OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) +OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) +SUBDIRS := $(sort $(dir $(OBJS))) + +$(shell mkdir -p $(SUBDIRS)) + rom: $(ROM) # For contributors to make sure a change didn't affect the contents of the ROM. @@ -133,10 +135,10 @@ $(C_BUILDDIR)/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -ifeq ($(NODEP),) -$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) -else +ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: c_dep := +else +$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) endif $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) @@ -145,19 +147,19 @@ $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s -ifeq ($(NODEP),) -$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s) -else +ifeq ($(NODEP),1) $(ASM_BUILDDIR)/%.o: asm_dep := +else +$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s) endif $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) $(AS) $(ASFLAGS) -o $@ $< -ifeq ($(NODEP),) -$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) -else +ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: data_dep := +else +$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) endif $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) diff --git a/asm/battle_frontier_1.s b/asm/battle_frontier_1.s index a5e52f04e..c47ca5d76 100644 --- a/asm/battle_frontier_1.s +++ b/asm/battle_frontier_1.s @@ -7,180 +7,6 @@ - thumb_func_start sub_8195C7C -sub_8195C7C: @ 8195C7C - push {r4-r7,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r7, r0, 30 - ldr r0, =0x000040ce - bl VarGet - lsls r0, 24 - ldr r4, [r4] - lsls r1, r7, 1 - lsrs r5, r0, 22 - adds r1, r5 - ldr r3, =0x00000dc8 - adds r6, r4, r3 - adds r3, r6, r1 - ldrh r2, [r3] - ldr r0, =0x0000270e - cmp r2, r0 - bhi _08195CCA - adds r2, 0x1 - strh r2, [r3] - movs r3, 0xDD - lsls r3, 4 - adds r0, r4, r3 - adds r1, r0, r1 - adds r0, r5, 0 - ldrh r3, [r1] - cmp r7, r3 - bls _08195CC0 - adds r0, 0x2 -_08195CC0: - adds r0, r6, r0 - ldrh r0, [r0] - cmp r0, 0 - beq _08195CCA - strh r2, [r1] -_08195CCA: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195C7C - - thumb_func_start sub_8195CE4 -sub_8195CE4: @ 8195CE4 - push {r4,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, =0x00000ca8 - adds r0, r2 - strb r1, [r0] - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, =0x00000ca9 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bl sub_81A4C30 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195CE4 - - thumb_func_start sub_8195D28 -sub_8195D28: @ 8195D28 - push {r4,r5,lr} - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - ldr r4, =gSaveBlock2Ptr - ldr r2, [r4] - ldr r3, =0x00000ca9 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 30 - lsrs r1, 29 - lsrs r0, 14 - adds r1, r0 - ldr r0, =0x00000dc8 - adds r2, r0 - adds r2, r1 - ldrh r0, [r2] - cmp r0, 0x29 - bls _08195D88 - bl Random - ldr r4, [r4] - ldr r5, =gUnknown_0860DE84 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - ldr r1, =0x00000dc6 - adds r4, r1 - b _08195DA6 - .pool -_08195D88: - bl Random - ldr r4, [r4] - ldr r5, =gUnknown_0860DE78 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - ldr r3, =0x00000dc6 - adds r4, r3 -_08195DA6: - strh r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195D28 - - thumb_func_start sub_8195DB8 -sub_8195DB8: @ 8195DB8 - push {r4,r5,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000dc6 - adds r0, r1 - ldrh r0, [r0] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bne _08195E00 - ldr r0, [r4] - ldr r1, =0x00000dc6 - adds r0, r1 - ldrh r0, [r0] - ldr r1, =gStringVar1 - bl CopyItemName - ldr r0, [r4] - ldr r1, =0x00000dc6 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - ldr r0, =gSpecialVar_Result - strh r5, [r0] - b _08195E06 - .pool -_08195E00: - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] -_08195E06: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195DB8 - thumb_func_start sub_8195E10 sub_8195E10: @ 8195E10 push {lr} diff --git a/asm/battle_frontier_2.s b/asm/battle_frontier_2.s index 291ea90c4..f4dc876ed 100644 --- a/asm/battle_frontier_2.s +++ b/asm/battle_frontier_2.s @@ -6,6649 +6,8 @@ .text - - - thumb_func_start sub_81A5238 -sub_81A5238: @ 81A5238 - push {lr} - ldr r1, =gUnknown_08611F84 - ldr r0, =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5238 - - thumb_func_start sub_81A5258 -sub_81A5258: @ 81A5258 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 - ldrb r0, [r5] - cmp r0, 0xA - bls _081A5268 - b _081A5544 -_081A5268: - lsls r0, 2 - ldr r1, =_081A5278 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081A5278: - .4byte _081A52A4 - .4byte _081A52F4 - .4byte _081A531C - .4byte _081A53B4 - .4byte _081A540C - .4byte _081A542C - .4byte _081A544C - .4byte _081A5490 - .4byte _081A553E - .4byte _081A54D4 - .4byte _081A5520 -_081A52A4: - ldr r0, =0x7fffff1c - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x8 - bl BeginNormalPaletteFade - ldr r1, =0x00003f3e - movs r0, 0x48 - bl SetGpuReg - ldr r0, =gUnknown_08611F74 - bl LoadCompressedObjectPic - ldr r0, =gUnknown_08D855E8 - movs r1, 0xF8 - lsls r1, 1 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r1, =gBattle_WIN0H - movs r0, 0xFF - strh r0, [r1] - ldr r1, =gBattle_WIN0V - movs r0, 0x70 - strh r0, [r1] - b _081A553E - .pool -_081A52F4: - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081A5306 - b _081A5544 -_081A5306: - str r0, [sp] - movs r0, 0x5 - movs r1, 0 - movs r2, 0x18 - movs r3, 0xD - bl HandleBattleWindow - b _081A553E - .pool -_081A531C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081A5328 - b _081A5544 -_081A5328: - ldr r1, =gBattleTextBuff1 - movs r2, 0xA1 - strb r2, [r1] - movs r0, 0xFF - strb r0, [r1, 0x1] - ldr r1, =gBattleTextBuff2 - strb r2, [r1] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x1] - ldr r0, =gText_PlayerMon1Name - bl BattleStringExpandPlaceholdersToDisplayedString - ldr r4, =gDisplayedStringBattle - adds r0, r4, 0 - movs r1, 0xF - bl BattlePutTextOnWindow - ldr r0, =gText_Vs - movs r1, 0x10 - bl BattlePutTextOnWindow - ldr r0, =gText_OpponentMon1Name - bl BattleStringExpandPlaceholdersToDisplayedString - adds r0, r4, 0 - movs r1, 0x11 - bl BattlePutTextOnWindow - ldr r0, =gText_Mind - movs r1, 0x12 - bl BattlePutTextOnWindow - ldr r0, =gText_Skill - movs r1, 0x13 - bl BattlePutTextOnWindow - ldr r0, =gText_Body - movs r1, 0x14 - bl BattlePutTextOnWindow - ldr r0, =gText_Judgement - bl BattleStringExpandPlaceholdersToDisplayedString - adds r0, r4, 0 - movs r1, 0x15 - bl BattlePutTextOnWindow - b _081A553E - .pool -_081A53B4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081A53C0 - b _081A5544 -_081A53C0: - ldr r1, =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - movs r6, 0x80 - lsls r6, 15 - movs r4, 0x7 -_081A53CE: - asrs r1, r6, 16 - ldr r0, =gUnknown_08611F5C - movs r2, 0x54 - movs r3, 0 - bl CreateSprite - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - movs r1, 0x3 - bl StartSpriteAnim - movs r0, 0x80 - lsls r0, 13 - adds r6, r0 - subs r4, 0x1 - cmp r4, 0 - bge _081A53CE - b _081A553C - .pool -_081A540C: - ldr r0, =0x00000109 - bl PlaySE - movs r0, 0x50 - movs r1, 0x28 - movs r2, 0 - movs r3, 0 - bl sub_81A5558 - movs r0, 0xA0 - movs r1, 0x28 - movs r2, 0 - b _081A5464 - .pool -_081A542C: - ldr r0, =0x00000109 - bl PlaySE - movs r0, 0x50 - movs r1, 0x38 - movs r2, 0x1 - movs r3, 0 - bl sub_81A5558 - movs r0, 0xA0 - movs r1, 0x38 - movs r2, 0x1 - b _081A5464 - .pool -_081A544C: - ldr r0, =0x00000109 - bl PlaySE - movs r0, 0x50 - movs r1, 0x48 - movs r2, 0x2 - movs r3, 0 - bl sub_81A5558 - movs r0, 0xA0 - movs r1, 0x48 - movs r2, 0x2 -_081A5464: - movs r3, 0x1 - bl sub_81A5558 - ldr r0, =gText_Judgement - bl BattleStringExpandPlaceholdersToDisplayedString - ldr r0, =gDisplayedStringBattle - movs r1, 0x15 - bl BattlePutTextOnWindow - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - movs r6, 0x1 - b _081A5544 - .pool -_081A5490: - movs r0, 0x85 - lsls r0, 1 - bl PlaySE - ldr r0, =gBattleTextBuff1 - ldr r1, =gBattleTextBuff2 - ldrb r2, [r0] - ldrb r0, [r1] - cmp r2, r0 - bls _081A54BC - movs r6, 0x2 - ldr r1, =gBattleScripting - movs r0, 0 - strb r0, [r1, 0x17] - b _081A553E - .pool -_081A54BC: - cmp r2, r0 - bcs _081A54D0 - movs r6, 0x3 - ldr r1, =gBattleScripting - movs r0, 0x1 - strb r0, [r1, 0x17] - b _081A553E - .pool -_081A54D0: - movs r6, 0x4 - b _081A553E -_081A54D4: - ldr r1, =0x00003f3e - movs r0, 0x48 - bl SetGpuReg - movs r0, 0x1 - str r0, [sp] - movs r0, 0x5 - movs r1, 0 - movs r2, 0x18 - movs r3, 0xD - bl HandleBattleWindow - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =gMPlayInfo_BGM - ldr r1, =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - ldr r0, =0x7fffff1c - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0x8 - movs r3, 0 - bl BeginNormalPaletteFade - b _081A553E - .pool -_081A5520: - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081A5544 - ldr r1, =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - movs r0, 0xFA - lsls r0, 2 - bl FreeSpriteTilesByTag -_081A553C: - movs r6, 0x1 -_081A553E: - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] -_081A5544: - adds r0, r6, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A5258 - - thumb_func_start sub_81A5558 -sub_81A5558: @ 81A5558 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r7, r3, 24 - movs r6, 0 - movs r1, 0 - ldr r0, =gBattleStruct - ldr r0, [r0] - movs r3, 0xA6 - lsls r3, 2 - adds r4, r0, r3 - ldr r5, =0x0000029a - adds r3, r0, r5 - adds r5, 0x2 - adds r5, r0 - mov r8, r5 - cmp r2, 0x1 - beq _081A55C4 - cmp r2, 0x1 - bgt _081A55A8 - cmp r2, 0 - beq _081A55B0 - b _081A5612 - .pool -_081A55A8: - mov r0, r9 - cmp r0, 0x2 - beq _081A55D8 - b _081A5612 -_081A55B0: - adds r0, r4, r7 - movs r6, 0 - ldrsb r6, [r0, r6] - movs r1, 0x1 - adds r0, r7, 0 - eors r0, r1 - adds r0, r4, r0 - movs r1, 0 - ldrsb r1, [r0, r1] - b _081A5612 -_081A55C4: - adds r0, r3, r7 - movs r6, 0 - ldrsb r6, [r0, r6] - movs r1, 0x1 - adds r0, r7, 0 - eors r0, r1 - adds r0, r3, r0 - movs r1, 0 - ldrsb r1, [r0, r1] - b _081A5612 -_081A55D8: - ldr r3, =gBattleMons - mov r9, r3 - movs r5, 0x58 - adds r0, r7, 0 - muls r0, r5 - add r0, r9 - ldrh r0, [r0, 0x28] - movs r4, 0x64 - muls r0, r4 - lsls r1, r7, 1 - add r1, r8 - ldrh r1, [r1] - bl __divsi3 - adds r6, r0, 0 - movs r0, 0x1 - adds r1, r7, 0 - eors r1, r0 - adds r0, r1, 0 - muls r0, r5 - add r0, r9 - ldrh r0, [r0, 0x28] - muls r0, r4 - lsls r1, 1 - add r1, r8 - ldrh r1, [r1] - bl __divsi3 - adds r1, r0, 0 -_081A5612: - cmp r6, r1 - ble _081A5638 - movs r4, 0x2 - cmp r7, 0 - beq _081A5628 - ldr r1, =gBattleTextBuff2 - b _081A562A - .pool -_081A5628: - ldr r1, =gBattleTextBuff1 -_081A562A: - ldrb r0, [r1] - adds r0, 0x2 - strb r0, [r1] - b _081A565E - .pool -_081A5638: - cmp r6, r1 - bne _081A565C - movs r4, 0x1 - cmp r7, 0 - beq _081A564C - ldr r1, =gBattleTextBuff2 - b _081A564E - .pool -_081A564C: - ldr r1, =gBattleTextBuff1 -_081A564E: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _081A565E - .pool -_081A565C: - movs r4, 0 -_081A565E: - ldr r0, =gUnknown_08611F5C - ldr r1, [sp] - mov r2, r10 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - adds r1, r4, 0 - bl StartSpriteAnim - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5558 - - thumb_func_start sub_81A5698 -sub_81A5698: @ 81A5698 - push {lr} - adds r1, r0, 0 - ldr r0, =gBattleCommunication - ldrb r0, [r0] - cmp r0, 0x8 - bls _081A56AA - adds r0, r1, 0 - bl DestroySprite -_081A56AA: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5698 - - thumb_func_start sub_81A56B4 -sub_81A56B4: @ 81A56B4 - ldr r0, =gBattleStruct - ldr r2, [r0] - movs r0, 0xA6 - lsls r0, 2 - adds r1, r2, r0 - adds r0, 0x2 - adds r3, r2, r0 - adds r0, 0x2 - adds r2, r0 - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - strb r0, [r3] - strb r0, [r3, 0x1] - ldr r0, =gBattleMons - ldrh r1, [r0, 0x28] - strh r1, [r2] - adds r0, 0x80 - ldrh r0, [r0] - strh r0, [r2, 0x2] - bx lr - .pool - thumb_func_end sub_81A56B4 - - thumb_func_start sub_81A56E8 -sub_81A56E8: @ 81A56E8 - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gBattleStruct - ldr r1, [r1] - movs r2, 0xA6 - lsls r2, 2 - adds r1, r2 - adds r1, r0 - ldr r2, =gBattleArenaMoveMindRatings - ldr r0, =gCurrentMove - ldrh r0, [r0] - adds r0, r2 - ldrb r0, [r0] - ldrb r2, [r1] - adds r0, r2 - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_81A56E8 - - thumb_func_start sub_81A5718 -sub_81A5718: @ 81A5718 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - adds r6, r3, 0 - ldr r0, =gBattleStruct - ldr r2, [r0] - ldr r0, =0x0000029a - adds r5, r2, r0 - ldr r0, =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 18 - ands r0, r1 - cmp r0, 0 - beq _081A57DA - ldr r0, =0x000002a2 - adds r4, r2, r0 - ldrb r2, [r4] - ldr r0, =gBitTable - lsls r1, r3, 2 - adds r1, r0 - ldr r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _081A576C - bics r2, r1 - strb r2, [r4] - adds r1, r5, r3 - ldrb r0, [r1] - subs r0, 0x2 - b _081A57D8 - .pool -_081A576C: - ldr r0, =gMoveResultFlags - ldrb r1, [r0] - movs r0, 0x29 - ands r0, r1 - cmp r0, 0 - beq _081A5798 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081A5788 - ldr r0, =gBattleCommunication - ldrb r0, [r0, 0x6] - cmp r0, 0x1 - beq _081A57DA -_081A5788: - adds r1, r5, r3 - ldrb r0, [r1] - subs r0, 0x2 - b _081A57D8 - .pool -_081A5798: - movs r0, 0x6 - ands r0, r1 - cmp r0, 0x6 - bne _081A57A4 - adds r1, r5, r3 - b _081A57D4 -_081A57A4: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081A57B4 - adds r1, r5, r3 - ldrb r0, [r1] - adds r0, 0x2 - b _081A57D8 -_081A57B4: - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081A57C4 - adds r1, r5, r3 - ldrb r0, [r1] - subs r0, 0x1 - b _081A57D8 -_081A57C4: - ldr r0, =gProtectStructs - lsls r1, r6, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - bne _081A57DA - adds r1, r5, r6 -_081A57D4: - ldrb r0, [r1] - adds r0, 0x1 -_081A57D8: - strb r0, [r1] -_081A57DA: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5718 - - thumb_func_start sub_81A57E4 -sub_81A57E4: @ 81A57E4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - ldr r0, =gBattleStruct - ldr r0, [r0] - ldr r5, =0x0000029a - adds r3, r0, r5 - movs r0, 0x99 - lsls r0, 1 - cmp r1, r0 - bgt _081A582A - subs r0, 0x1 - cmp r1, r0 - bge _081A585C - cmp r1, 0xC5 - bgt _081A581C - cmp r1, 0xC3 - bge _081A585C - cmp r1, 0x77 - beq _081A585C - b _081A5864 - .pool -_081A581C: - cmp r1, 0xC7 - blt _081A5864 - cmp r1, 0xCC - ble _081A585C - cmp r1, 0xCE - beq _081A585C - b _081A5864 -_081A582A: - ldr r0, =0x00000147 - cmp r1, r0 - beq _081A585C - cmp r1, r0 - bgt _081A5848 - subs r0, 0x12 - cmp r1, r0 - beq _081A585C - adds r0, 0x2 - cmp r1, r0 - beq _081A585C - b _081A5864 - .pool -_081A5848: - movs r0, 0xAD - lsls r0, 1 - cmp r2, r0 - blt _081A5864 - adds r0, 0x1 - cmp r2, r0 - ble _081A585C - adds r0, 0x3 - cmp r2, r0 - bne _081A5864 -_081A585C: - adds r1, r3, r4 - ldrb r0, [r1] - subs r0, 0x3 - strb r0, [r1] -_081A5864: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81A57E4 - - thumb_func_start sub_81A586C -sub_81A586C: @ 81A586C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gBattleStruct - ldr r3, [r1] - movs r1, 0xA7 - lsls r1, 2 - adds r3, r1 - lsls r2, r0, 1 - adds r2, r3 - ldr r5, =gBattleMons - movs r4, 0x58 - adds r1, r0, 0 - muls r1, r4 - adds r1, r5 - ldrh r1, [r1, 0x28] - strh r1, [r2] - movs r1, 0x1 - eors r0, r1 - lsls r1, r0, 1 - adds r1, r3 - muls r0, r4 - adds r0, r5 - ldrh r2, [r0, 0x28] - ldrh r0, [r1] - cmp r0, r2 - bls _081A58A4 - strh r2, [r1] -_081A58A4: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A586C - - thumb_func_start sub_81A58B4 -sub_81A58B4: @ 81A58B4 - push {r4-r6,lr} - ldr r4, =gSaveBlock2Ptr - ldr r1, [r4] - ldr r3, =0x00000ca9 - adds r0, r1, r3 - ldrb r0, [r0] - lsls r0, 30 - lsrs r5, r0, 30 - ldr r0, =0x00000ca8 - adds r1, r0 - movs r2, 0 - strb r2, [r1] - ldr r1, [r4] - ldr r6, =0x00000cb2 - adds r0, r1, r6 - strh r2, [r0] - adds r1, r3 - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r1, [r4] - adds r1, r3 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - cmp r5, 0 - beq _081A5914 - ldr r0, [r4] - ldr r1, =0x00000cdc - adds r0, r1 - ldr r2, [r0] - movs r0, 0x80 - b _081A591E - .pool -_081A5914: - ldr r0, [r4] - ldr r3, =0x00000cdc - adds r0, r3 - ldr r2, [r0] - movs r0, 0x40 -_081A591E: - ands r2, r0 - cmp r2, 0 - bne _081A5930 - ldr r0, [r4] - lsls r1, r5, 1 - ldr r6, =0x00000dda - adds r0, r6 - adds r0, r1 - strh r2, [r0] -_081A5930: - ldr r0, =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0x4 - ldrsb r1, [r0, r1] - movs r2, 0x5 - ldrsb r2, [r0, r2] - movs r3, 0x1 - negs r3, r3 - movs r0, 0 - bl saved_warp2_set - ldr r1, =gTrainerBattleOpponent_A - movs r0, 0 - strh r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A58B4 - - thumb_func_start sub_81A5964 -sub_81A5964: @ 81A5964 - push {r4,lr} - ldr r0, =gSaveBlock2Ptr - ldr r3, [r0] - ldr r1, =0x00000ca9 - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r1, r0, 30 - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x1 - beq _081A59B0 - cmp r0, 0x1 - bgt _081A5994 - cmp r0, 0 - beq _081A599A - b _081A59EE - .pool -_081A5994: - cmp r0, 0x2 - beq _081A59C8 - b _081A59EE -_081A599A: - ldr r0, =gSpecialVar_Result - ldr r2, =0x00000dd8 - adds r1, r3, r2 - ldrh r1, [r1] - strh r1, [r0] - b _081A59EE - .pool -_081A59B0: - ldr r2, =gSpecialVar_Result - lsls r1, 1 - ldr r4, =0x00000dda - adds r0, r3, r4 - adds r0, r1 - ldrh r0, [r0] - b _081A59EC - .pool -_081A59C8: - cmp r1, 0 - beq _081A59E0 - ldr r2, =gSpecialVar_Result - ldr r1, =0x00000cdc - adds r0, r3, r1 - ldr r0, [r0] - movs r1, 0x80 - b _081A59EA - .pool -_081A59E0: - ldr r2, =gSpecialVar_Result - ldr r4, =0x00000cdc - adds r0, r3, r4 - ldr r0, [r0] - movs r1, 0x40 -_081A59EA: - ands r0, r1 -_081A59EC: - strh r0, [r2] -_081A59EE: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5964 - - thumb_func_start sub_81A59FC -sub_81A59FC: @ 81A59FC - push {lr} - ldr r0, =gSaveBlock2Ptr - ldr r2, [r0] - ldr r1, =0x00000ca9 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r1, r0, 30 - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x1 - beq _081A5A48 - cmp r0, 0x1 - bgt _081A5A2C - cmp r0, 0 - beq _081A5A32 - b _081A5ABA - .pool -_081A5A2C: - cmp r0, 0x2 - beq _081A5A60 - b _081A5ABA -_081A5A32: - ldr r0, =gSpecialVar_0x8006 - ldrh r1, [r0] - ldr r3, =0x00000dd8 - adds r0, r2, r3 - strh r1, [r0] - b _081A5ABA - .pool -_081A5A48: - lsls r1, 1 - ldr r3, =0x00000dda - adds r0, r2, r3 - adds r0, r1 - ldr r1, =gSpecialVar_0x8006 - ldrh r1, [r1] - strh r1, [r0] - b _081A5ABA - .pool -_081A5A60: - cmp r1, 0 - beq _081A5A90 - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - cmp r0, 0 - beq _081A5A80 - ldr r1, =0x00000cdc - adds r0, r2, r1 - ldr r1, [r0] - movs r2, 0x80 - orrs r1, r2 - b _081A5AB8 - .pool -_081A5A80: - ldr r3, =0x00000cdc - adds r0, r2, r3 - ldr r1, [r0] - movs r2, 0x81 - negs r2, r2 - b _081A5AB6 - .pool -_081A5A90: - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - cmp r0, 0 - beq _081A5AAC - ldr r1, =0x00000cdc - adds r0, r2, r1 - ldr r1, [r0] - movs r2, 0x40 - orrs r1, r2 - b _081A5AB8 - .pool -_081A5AAC: - ldr r3, =0x00000cdc - adds r0, r2, r3 - ldr r1, [r0] - movs r2, 0x41 - negs r2, r2 -_081A5AB6: - ands r1, r2 -_081A5AB8: - str r1, [r0] -_081A5ABA: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A59FC - - thumb_func_start sub_81A5AC4 -sub_81A5AC4: @ 81A5AC4 - push {r4,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, =0x00000ca8 - adds r0, r2 - strb r1, [r0] - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, =0x00000ca9 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bl sub_81A4C30 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5AC4 - - thumb_func_start sub_81A5B08 -sub_81A5B08: @ 81A5B08 - push {r4,r5,lr} - ldr r4, =gSaveBlock2Ptr - ldr r1, [r4] - ldr r2, =0x00000ca9 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r2, =0x00000dda - adds r1, r2 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0x29 - bls _081A5B58 - bl Random - ldr r4, [r4] - ldr r5, =gUnknown_08611FAC - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - ldr r1, =0x00000dd8 - adds r4, r1 - b _081A5B76 - .pool -_081A5B58: - bl Random - ldr r4, [r4] - ldr r5, =gUnknown_08611FA0 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - ldr r2, =0x00000dd8 - adds r4, r2 -_081A5B76: - strh r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5B08 - - thumb_func_start sub_81A5B88 -sub_81A5B88: @ 81A5B88 - push {r4,r5,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000dd8 - adds r0, r1 - ldrh r0, [r0] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bne _081A5BD0 - ldr r0, [r4] - ldr r1, =0x00000dd8 - adds r0, r1 - ldrh r0, [r0] - ldr r1, =gStringVar1 - bl CopyItemName - ldr r0, [r4] - ldr r1, =0x00000dd8 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - ldr r0, =gSpecialVar_Result - strh r5, [r0] - b _081A5BD6 - .pool -_081A5BD0: - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] -_081A5BD6: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5B88 - - thumb_func_start sub_81A5BE0 -sub_81A5BE0: @ 81A5BE0 - push {lr} - ldr r0, =gStringVar1 - ldr r1, =gTrainerBattleOpponent_A - ldrh r1, [r1] - bl GetFrontierTrainerName - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5BE0 - - thumb_func_start sub_81A5BF8 -sub_81A5BF8: @ 81A5BF8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - movs r0, 0x1B - mov r8, r0 - movs r5, 0x7 - movs r4, 0x1 - str r4, [sp] - movs r6, 0x6 - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0xFE - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0x20 - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x31 - movs r2, 0 - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x33 - movs r2, 0x1 - movs r3, 0xE - bl FillBgTilemapBufferRect - mov r0, r8 - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x34 - movs r2, 0x2 - movs r3, 0xE - bl FillBgTilemapBufferRect - movs r0, 0x1C - mov r8, r0 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x35 - movs r2, 0x1C - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x36 - movs r2, 0x1D - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - movs r6, 0x5 - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x37 - movs r2, 0 - movs r3, 0xF - bl FillBgTilemapBufferRect - mov r0, r8 - str r0, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x39 - movs r2, 0x1 - movs r3, 0xF - bl FillBgTilemapBufferRect - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x3A - movs r2, 0x1D - movs r3, 0xF - bl FillBgTilemapBufferRect - ldr r1, =0x00000831 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r2, 0 - movs r3, 0x13 - bl FillBgTilemapBufferRect - ldr r1, =0x00000833 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r2, 0x1 - movs r3, 0x13 - bl FillBgTilemapBufferRect - ldr r1, =0x00000834 - movs r0, 0x1A - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r2, 0x2 - movs r3, 0x13 - bl FillBgTilemapBufferRect - ldr r1, =0x00000835 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r2, 0x1C - movs r3, 0x13 - bl FillBgTilemapBufferRect - ldr r1, =0x00000836 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r2, 0x1D - movs r3, 0x13 - bl FillBgTilemapBufferRect - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5BF8 - - thumb_func_start sub_81A5D44 -sub_81A5D44: @ 81A5D44 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - movs r5, 0 - movs r4, 0x1 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xE - bl FillBgTilemapBufferRect - movs r6, 0x4 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x4 - movs r2, 0x1 - movs r3, 0xE - bl FillBgTilemapBufferRect - movs r0, 0x1B - mov r8, r0 - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x5 - movs r2, 0x2 - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x6 - movs r2, 0x1C - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x7 - movs r2, 0x1D - movs r3, 0xE - bl FillBgTilemapBufferRect - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x8 - movs r2, 0 - movs r3, 0xF - bl FillBgTilemapBufferRect - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x9 - movs r2, 0x1 - movs r3, 0xF - bl FillBgTilemapBufferRect - mov r0, r8 - str r0, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0xA - movs r2, 0x2 - movs r3, 0xF - bl FillBgTilemapBufferRect - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0xB - movs r2, 0x1C - movs r3, 0xF - bl FillBgTilemapBufferRect - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0xC - movs r2, 0x1D - movs r3, 0xF - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0xD - movs r2, 0 - movs r3, 0x13 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0xE - movs r2, 0x1 - movs r3, 0x13 - bl FillBgTilemapBufferRect - mov r0, r8 - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0xF - movs r2, 0x2 - movs r3, 0x13 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x10 - movs r2, 0x1C - movs r3, 0x13 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x11 - movs r2, 0x1D - movs r3, 0x13 - bl FillBgTilemapBufferRect - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81A5D44 - - thumb_func_start sub_81A5E74 -sub_81A5E74: @ 81A5E74 - push {lr} - ldr r1, =gUnknown_08612120 - ldr r0, =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5E74 - - thumb_func_start sub_81A5E94 -sub_81A5E94: @ 81A5E94 - push {r4-r7,lr} - ldr r5, =gSaveBlock2Ptr - ldr r0, [r5] - ldr r4, =0x00000ca9 - adds r0, r4 - ldrb r0, [r0] - lsls r0, 30 - lsrs r7, r0, 30 - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, [r5] - ldr r1, =0x00000ca8 - adds r0, r1 - movs r2, 0 - strb r2, [r0] - ldr r1, [r5] - ldr r3, =0x00000cb2 - adds r0, r1, r3 - strh r2, [r0] - adds r1, r4 - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r1, [r5] - adds r1, r4 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r4, [r5] - ldr r0, =0x00000cdc - adds r3, r4, r0 - ldr r2, =gUnknown_08612164 - lsls r0, r7, 2 - lsls r1, r6, 3 - adds r0, r1 - adds r0, r2 - ldr r3, [r3] - ldr r0, [r0] - ands r3, r0 - cmp r3, 0 - bne _081A5F0A - lsls r1, r7, 1 - lsls r0, r6, 2 - adds r1, r0 - ldr r2, =0x00000de2 - adds r0, r4, r2 - adds r0, r1 - strh r3, [r0] - adds r2, 0x10 - adds r0, r4, r2 - adds r0, r1 - strh r3, [r0] -_081A5F0A: - ldr r1, =gUnknown_03001288 - movs r0, 0 - strb r0, [r1] - movs r2, 0 - ldr r6, =gSaveBlock1Ptr - movs r4, 0xE7 - lsls r4, 4 - ldr r0, =0x0000ffff - adds r3, r0, 0 -_081A5F1C: - ldr r1, [r5] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0 - adds r1, r4 - ldrh r0, [r1] - orrs r0, r3 - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x5 - bls _081A5F1C - movs r2, 0 - ldr r4, =gUnknown_03006298 - ldr r1, =0x0000ffff - adds r3, r1, 0 -_081A5F40: - lsls r0, r2, 1 - adds r0, r4 - ldrh r1, [r0] - orrs r1, r3 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x2 - bls _081A5F40 - ldr r0, [r6] - movs r1, 0x4 - ldrsb r1, [r0, r1] - movs r2, 0x5 - ldrsb r2, [r0, r2] - movs r3, 0x1 - negs r3, r3 - movs r0, 0 - bl saved_warp2_set - ldr r1, =gTrainerBattleOpponent_A - movs r0, 0 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5E94 - - thumb_func_start sub_81A5FA8 -sub_81A5FA8: @ 81A5FA8 - push {r4-r7,lr} - ldr r7, =gSaveBlock2Ptr - ldr r0, [r7] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r6, r0, 30 - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x2 - beq _081A6000 - cmp r0, 0x2 - bgt _081A5FE4 - cmp r0, 0x1 - beq _081A5FEA - b _081A6044 - .pool -_081A5FE4: - cmp r0, 0x3 - beq _081A6030 - b _081A6044 -_081A5FEA: - ldr r3, =gSpecialVar_Result - ldr r0, [r7] - lsls r1, r6, 1 - lsls r2, r5, 2 - adds r1, r2 - ldr r2, =0x00000de2 - b _081A603C - .pool -_081A6000: - ldr r4, =gSpecialVar_Result - ldr r2, [r7] - ldr r0, =0x00000cdc - adds r2, r0 - ldr r3, =gUnknown_08612164 - lsls r0, r6, 2 - lsls r1, r5, 3 - adds r0, r1 - adds r0, r3 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - strh r0, [r4] - b _081A6044 - .pool -_081A6030: - ldr r3, =gSpecialVar_Result - ldr r0, [r7] - lsls r1, r6, 1 - lsls r2, r5, 2 - adds r1, r2 - ldr r2, =0x00000df2 -_081A603C: - adds r0, r2 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3] -_081A6044: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A5FA8 - - thumb_func_start sub_81A6054 -sub_81A6054: @ 81A6054 - push {r4-r6,lr} - ldr r6, =gSaveBlock2Ptr - ldr r0, [r6] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r5, r0, 30 - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x2 - beq _081A60B4 - cmp r0, 0x2 - bgt _081A6090 - cmp r0, 0x1 - beq _081A6096 - b _081A6128 - .pool -_081A6090: - cmp r0, 0x3 - beq _081A6108 - b _081A6128 -_081A6096: - ldr r2, [r6] - lsls r0, r5, 1 - lsls r1, r4, 2 - adds r0, r1 - ldr r1, =0x00000de2 - adds r2, r1 - adds r2, r0 - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - strh r0, [r2] - b _081A6128 - .pool -_081A60B4: - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - cmp r0, 0 - beq _081A60E4 - ldr r2, [r6] - ldr r0, =0x00000cdc - adds r2, r0 - ldr r3, =gUnknown_08612164 - lsls r1, r5, 2 - lsls r0, r4, 3 - adds r1, r0 - adds r1, r3 - ldr r0, [r2] - ldr r1, [r1] - orrs r0, r1 - str r0, [r2] - b _081A6128 - .pool -_081A60E4: - ldr r2, [r6] - ldr r1, =0x00000cdc - adds r2, r1 - ldr r3, =gUnknown_08612174 - lsls r1, r5, 2 - lsls r0, r4, 3 - adds r1, r0 - adds r1, r3 - ldr r0, [r2] - ldr r1, [r1] - ands r0, r1 - str r0, [r2] - b _081A6128 - .pool -_081A6108: - ldr r3, =gUnknown_03001288 - ldrb r0, [r3] - cmp r0, 0x1 - bne _081A6128 - ldr r2, [r6] - lsls r0, r5, 1 - lsls r1, r4, 2 - adds r0, r1 - ldr r1, =0x00000df2 - adds r2, r1 - adds r2, r0 - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - movs r1, 0 - strh r0, [r2] - strb r1, [r3] -_081A6128: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A6054 - - thumb_func_start sub_81A613C -sub_81A613C: @ 81A613C - push {r4,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, =0x00000ca8 - adds r0, r2 - strb r1, [r0] - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, =0x00000ca9 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bl sub_81A4C30 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A613C - - thumb_func_start nullsub_75 -nullsub_75: @ 81A6180 - bx lr - thumb_func_end nullsub_75 - - thumb_func_start nullsub_123 -nullsub_123: @ 81A6184 - bx lr - thumb_func_end nullsub_123 - - thumb_func_start sub_81A6188 -sub_81A6188: @ 81A6188 - push {lr} - bl ZeroPlayerPartyMons - bl DoBattleFactorySelectScreen - pop {r0} - bx r0 - thumb_func_end sub_81A6188 - - thumb_func_start sub_81A6198 -sub_81A6198: @ 81A6198 - push {lr} - bl DoBattleFactorySwapScreen - pop {r0} - bx r0 - thumb_func_end sub_81A6198 - - thumb_func_start sub_81A61A4 -sub_81A61A4: @ 81A61A4 - ldr r1, =gUnknown_03001288 - movs r0, 0x1 - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_81A61A4 - - thumb_func_start sub_81A61B0 -sub_81A61B0: @ 81A61B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 30 - str r0, [sp, 0x10] - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - ldr r1, [r4] - ldr r3, [sp, 0x10] - lsls r2, r3, 1 - lsrs r0, 14 - adds r2, r0 - ldr r6, =0x00000de2 - adds r1, r6 - adds r1, r2 - ldrh r0, [r1] - movs r1, 0x7 - bl __udivsi3 - ldr r2, =gFacilityTrainers - ldr r1, =gBattleFrontierTrainers - str r1, [r2] - ldr r5, =0x00000cb2 - lsls r0, 24 - str r0, [sp, 0x20] - mov r8, r0 -_081A61FA: - ldr r0, [r4] - adds r0, r5 - ldrb r1, [r0] - mov r2, r8 - lsrs r0, r2, 24 - bl sub_8162548 - lsls r0, 16 - lsrs r3, r0, 16 - movs r7, 0 - ldr r1, [r4] - adds r0, r1, r5 - ldr r6, [sp, 0x10] - lsls r6, 24 - str r6, [sp, 0x1C] - ldrh r0, [r0] - cmp r7, r0 - bge _081A6244 - ldr r2, =0x00000cb4 - adds r0, r1, r2 - ldrh r0, [r0] - ldr r6, =gSaveBlock2Ptr - cmp r0, r3 - beq _081A6244 - ldr r1, [r6] - ldr r6, =0x00000cb2 - adds r0, r1, r6 - ldrh r2, [r0] - ldr r0, =0x00000cb4 - adds r1, r0 -_081A6236: - adds r1, 0x2 - adds r7, 0x1 - cmp r7, r2 - bge _081A6244 - ldrh r0, [r1] - cmp r0, r3 - bne _081A6236 -_081A6244: - ldr r0, [r4] - ldr r1, =0x00000cb2 - adds r0, r1 - ldr r6, =gSaveBlock2Ptr - ldrh r0, [r0] - cmp r7, r0 - bne _081A61FA - ldr r0, =gTrainerBattleOpponent_A - strh r3, [r0] - ldr r2, [r6] - adds r1, r2, r1 - ldrh r0, [r1] - cmp r0, 0x5 - bhi _081A626C - adds r1, r0, 0 - lsls r1, 1 - ldr r4, =0x00000cb4 - adds r0, r2, r4 - adds r0, r1 - strh r3, [r0] -_081A626C: - movs r7, 0 - mov r10, sp - movs r6, 0 - lsls r6, 1 - str r6, [sp, 0x14] - add r6, sp - str r6, [sp, 0x18] -_081A627A: - ldr r1, [sp, 0x1C] - lsrs r0, r1, 24 - ldr r2, [sp, 0x20] - lsrs r1, r2, 24 - movs r2, 0 - bl sub_81A6EF0 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - ldr r4, =gFacilityTrainerMons - ldr r2, [r4] - lsls r1, r0, 4 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, 0xC9 - beq _081A636E - movs r3, 0 - ldr r6, =gSaveBlock2Ptr - mov r8, r1 - adds r5, r0, 0 - ldr r1, [r6] -_081A62A6: - movs r4, 0xE7 - lsls r4, 4 - adds r0, r1, r4 - ldrh r0, [r0] - lsls r0, 4 - adds r0, r2 - ldrh r0, [r0] - cmp r5, r0 - beq _081A62C0 - adds r1, 0xC - adds r3, 0x1 - cmp r3, 0x5 - ble _081A62A6 -_081A62C0: - cmp r3, 0x6 - bne _081A636E - ldr r6, [sp, 0x10] - cmp r6, 0 - bne _081A62D0 - ldr r0, =0x00000351 - cmp r9, r0 - bhi _081A636E -_081A62D0: - movs r2, 0 - adds r4, r2, r7 - cmp r2, r4 - bge _081A6302 - ldr r1, [sp, 0x18] - ldrh r0, [r1] - cmp r0, r5 - beq _081A6302 - adds r6, r4, 0 - ldr r3, =gFacilityTrainerMons - mov r12, r3 - mov r5, r8 - ldr r3, [sp, 0x14] - add r3, sp -_081A62EC: - adds r3, 0x2 - adds r2, 0x1 - cmp r2, r6 - bge _081A6302 - mov r1, r12 - ldr r0, [r1] - adds r0, r5, r0 - ldrh r1, [r3] - ldrh r0, [r0] - cmp r1, r0 - bne _081A62EC -_081A6302: - cmp r2, r4 - bne _081A636E - movs r2, 0 - cmp r2, r4 - bge _081A633E - ldr r3, =gBattleFrontierHeldItems - mov r12, r3 - add r0, sp, 0x8 - ldr r6, [sp, 0x14] - adds r3, r0, r6 - mov r0, r8 - str r0, [sp, 0x24] - adds r5, r4, 0 -_081A631C: - ldrh r1, [r3] - cmp r1, 0 - beq _081A6336 - ldr r6, =gFacilityTrainerMons - ldr r0, [r6] - ldr r6, [sp, 0x24] - adds r0, r6, r0 - ldrb r0, [r0, 0xA] - lsls r0, 1 - add r0, r12 - ldrh r0, [r0] - cmp r1, r0 - beq _081A633E -_081A6336: - adds r3, 0x2 - adds r2, 0x1 - cmp r2, r5 - blt _081A631C -_081A633E: - cmp r2, r4 - bne _081A636E - lsls r4, r7, 1 - ldr r0, =gFacilityTrainerMons - ldr r1, [r0] - add r1, r8 - ldrh r0, [r1] - mov r2, r10 - strh r0, [r2] - add r2, sp, 0x8 - adds r2, r4 - ldr r3, =gBattleFrontierHeldItems - ldrb r0, [r1, 0xA] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r2] - ldr r0, =gUnknown_03006298 - adds r4, r0 - mov r3, r9 - strh r3, [r4] - movs r4, 0x2 - add r10, r4 - adds r7, 0x1 -_081A636E: - cmp r7, 0x3 - bne _081A627A - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A61B0 - - thumb_func_start sub_81A63B8 -sub_81A63B8: @ 81A63B8 - push {lr} - ldr r0, =gTrainerBattleOpponent_A - ldrh r0, [r0] - movs r1, 0 - bl SetBattleFacilityTrainerGfxId - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A63B8 - - thumb_func_start sub_81A63CC -sub_81A63CC: @ 81A63CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x2 - beq _081A63FC - ldr r1, =gFacilityTrainerMons - ldr r0, =gBattleFrontierMons - b _081A6400 - .pool -_081A63FC: - ldr r1, =gFacilityTrainerMons - ldr r0, =gSlateportBattleTentMons -_081A6400: - str r0, [r1] - movs r7, 0 - ldr r2, =gSaveBlock2Ptr - mov r8, r2 -_081A6408: - mov r0, r8 - ldr r1, [r0] - adds r0, r7, 0x3 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 2 - adds r1, r4 - ldr r0, =gUnknown_03006298 - lsls r6, r7, 1 - adds r6, r0 - ldrh r0, [r6] - movs r2, 0xE7 - lsls r2, 4 - adds r1, r2 - strh r0, [r1] - movs r0, 0x64 - adds r5, r7, 0 - muls r5, r0 - ldr r0, =gEnemyParty - adds r5, r0 - adds r0, r5, 0 - movs r1, 0x28 - movs r2, 0 - bl GetBoxMonData - mov r2, r8 - ldr r1, [r2] - adds r1, r4 - ldr r2, =0x00000e78 - adds r1, r2 - strb r0, [r1] - adds r0, r5, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - mov r2, r8 - ldr r1, [r2] - ldr r2, =0x00000e74 - adds r1, r2 - adds r1, r4 - str r0, [r1] - adds r0, r5, 0 - movs r1, 0x2E - movs r2, 0 - bl GetBoxMonData - mov r2, r8 - ldr r1, [r2] - adds r1, r4 - ldr r2, =0x00000e79 - adds r1, r2 - strb r0, [r1] - ldrh r1, [r6] - ldr r0, =gFacilityTrainerMons - ldr r0, [r0] - lsls r1, 4 - adds r1, r0 - ldrb r2, [r1, 0xA] - lsls r2, 1 - ldr r0, =gBattleFrontierHeldItems - adds r2, r0 - adds r0, r5, 0 - movs r1, 0xC - bl SetMonData - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x2 - bls _081A6408 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A63CC - - thumb_func_start sub_81A64C4 -sub_81A64C4: @ 81A64C4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000ca9 - adds r2, r0, r1 - ldrb r1, [r2] - movs r3, 0x3 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0x2 - bne _081A6500 - ldr r1, =gFacilityTrainerMons - ldr r0, =gSlateportBattleTentMons - str r0, [r1] - movs r2, 0x1E - str r2, [sp, 0x14] - b _081A6518 - .pool -_081A6500: - ldr r1, =gFacilityTrainerMons - ldr r0, =gBattleFrontierMons - str r0, [r1] - ldrb r1, [r2] - adds r0, r3, 0 - ands r0, r1 - movs r4, 0x32 - str r4, [sp, 0x14] - cmp r0, 0 - beq _081A6518 - movs r5, 0x64 - str r5, [sp, 0x14] -_081A6518: - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x1 - bls _081A6522 - b _081A666C -_081A6522: - bl ZeroPlayerPartyMons - movs r0, 0 - mov r8, r0 - mov r1, sp - adds r1, 0x12 - str r1, [sp, 0x1C] - ldr r2, =gFacilityTrainerMons - mov r9, r2 -_081A6534: - ldr r4, =gSaveBlock2Ptr - ldr r2, [r4] - mov r5, r8 - lsls r5, 1 - mov r10, r5 - mov r3, r10 - add r3, r8 - lsls r3, 2 - adds r1, r2, r3 - movs r4, 0xE7 - lsls r4, 4 - adds r0, r1, r4 - ldrh r7, [r0] - ldr r5, =0x00000e78 - adds r1, r5 - ldrb r6, [r1] - movs r1, 0x64 - mov r0, r8 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - mov r4, r9 - ldr r1, [r4] - lsls r4, r7, 4 - adds r1, r4, r1 - ldrh r1, [r1] - movs r5, 0x1 - str r5, [sp] - ldr r5, =0x00000e74 - adds r2, r5 - adds r2, r3 - ldr r2, [r2] - str r2, [sp, 0x4] - movs r2, 0 - str r2, [sp, 0x8] - str r2, [sp, 0xC] - ldr r2, [sp, 0x14] - adds r3, r6, 0 - bl CreateMon - movs r1, 0 - mov r2, r9 - ldr r0, [r2] - adds r4, r0 - ldrb r4, [r4, 0xB] - mov r5, r8 - adds r5, 0x1 - str r5, [sp, 0x18] - movs r5, 0x5 -_081A6596: - adds r0, r4, 0 - movs r2, 0x1 - ands r0, r2 - cmp r0, 0 - beq _081A65A2 - adds r1, 0x1 -_081A65A2: - lsrs r4, 1 - subs r5, 0x1 - cmp r5, 0 - bge _081A6596 - movs r0, 0xFF - lsls r0, 1 - bl __divsi3 - add r1, sp, 0x10 - strh r0, [r1] - movs r4, 0x1 - movs r5, 0 - lsls r7, 4 - movs r0, 0x64 - mov r6, r8 - muls r6, r0 - ldr r3, =gPlayerParty -_081A65C4: - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrb r0, [r0, 0xB] - ands r0, r4 - cmp r0, 0 - beq _081A65E2 - adds r1, r5, 0 - adds r1, 0x1A - adds r0, r6, r3 - add r2, sp, 0x10 - str r3, [sp, 0x20] - bl SetMonData - ldr r3, [sp, 0x20] -_081A65E2: - lsls r0, r4, 25 - lsrs r4, r0, 24 - adds r5, 0x1 - cmp r5, 0x5 - ble _081A65C4 - movs r2, 0x64 - mov r4, r8 - muls r4, r2 - ldr r5, =gPlayerParty - adds r0, r4, r5 - bl CalculateMonStats - movs r0, 0 - ldr r1, [sp, 0x1C] - strb r0, [r1] - movs r6, 0 -_081A6602: - mov r2, r9 - ldr r0, [r2] - adds r0, r7, r0 - lsls r1, r6, 1 - adds r0, 0x2 - adds r0, r1 - ldrh r1, [r0] - lsls r2, r6, 24 - lsrs r2, 24 - adds r0, r4, r5 - bl SetMonMoveAvoidReturn - adds r6, 0x1 - cmp r6, 0x3 - ble _081A6602 - movs r5, 0x64 - mov r4, r8 - muls r4, r5 - ldr r0, =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x20 - ldr r2, [sp, 0x1C] - bl SetMonData - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrb r2, [r0, 0xA] - lsls r2, 1 - ldr r0, =gBattleFrontierHeldItems - adds r2, r0 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - mov r2, r10 - add r2, r8 - lsls r2, 2 - ldr r5, =gSaveBlock2Ptr - ldr r0, [r5] - adds r2, r0 - ldr r0, =0x00000e79 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x2E - bl SetMonData - ldr r1, [sp, 0x18] - mov r8, r1 - cmp r1, 0x2 - bgt _081A666C - b _081A6534 -_081A666C: - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0 - beq _081A667A - cmp r0, 0x2 - beq _081A667A - b _081A67AE -_081A667A: - movs r2, 0 - mov r8, r2 - ldr r4, =gFacilityTrainerMons - mov r9, r4 -_081A6682: - ldr r5, =gSaveBlock2Ptr - ldr r3, [r5] - mov r0, r8 - adds r0, 0x3 - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - adds r1, r3, r2 - movs r4, 0xE7 - lsls r4, 4 - adds r0, r1, r4 - ldrh r7, [r0] - ldr r5, =0x00000e78 - adds r1, r5 - ldrb r6, [r1] - movs r1, 0x64 - mov r0, r8 - muls r0, r1 - ldr r1, =gEnemyParty - adds r0, r1 - mov r4, r9 - ldr r1, [r4] - lsls r4, r7, 4 - adds r1, r4, r1 - ldrh r1, [r1] - movs r5, 0x1 - str r5, [sp] - ldr r5, =0x00000e74 - adds r3, r5 - adds r3, r2 - ldr r2, [r3] - str r2, [sp, 0x4] - movs r2, 0 - str r2, [sp, 0x8] - str r2, [sp, 0xC] - ldr r2, [sp, 0x14] - adds r3, r6, 0 - bl CreateMon - movs r1, 0 - mov r2, r9 - ldr r0, [r2] - adds r4, r0 - ldrb r4, [r4, 0xB] - mov r5, r8 - lsls r5, 1 - mov r10, r5 - mov r0, r8 - adds r0, 0x1 - str r0, [sp, 0x18] - movs r5, 0x5 -_081A66E8: - adds r0, r4, 0 - movs r2, 0x1 - ands r0, r2 - cmp r0, 0 - beq _081A66F4 - adds r1, 0x1 -_081A66F4: - lsrs r4, 1 - subs r5, 0x1 - cmp r5, 0 - bge _081A66E8 - add r4, sp, 0x10 - movs r0, 0xFF - lsls r0, 1 - bl __divsi3 - strh r0, [r4] - movs r4, 0x1 - movs r5, 0 - lsls r7, 4 - movs r0, 0x64 - mov r6, r8 - muls r6, r0 - ldr r3, =gEnemyParty -_081A6716: - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrb r0, [r0, 0xB] - ands r0, r4 - cmp r0, 0 - beq _081A6734 - adds r1, r5, 0 - adds r1, 0x1A - adds r0, r6, r3 - add r2, sp, 0x10 - str r3, [sp, 0x20] - bl SetMonData - ldr r3, [sp, 0x20] -_081A6734: - lsls r0, r4, 25 - lsrs r4, r0, 24 - adds r5, 0x1 - cmp r5, 0x5 - ble _081A6716 - movs r2, 0x64 - mov r4, r8 - muls r4, r2 - ldr r5, =gEnemyParty - adds r0, r4, r5 - bl CalculateMonStats - movs r6, 0 -_081A674E: - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - lsls r1, r6, 1 - adds r0, 0x2 - adds r0, r1 - ldrh r1, [r0] - lsls r2, r6, 24 - lsrs r2, 24 - adds r0, r4, r5 - bl SetMonMoveAvoidReturn - adds r6, 0x1 - cmp r6, 0x3 - ble _081A674E - movs r2, 0x64 - mov r4, r8 - muls r4, r2 - ldr r0, =gEnemyParty - adds r4, r0 - mov r5, r9 - ldr r0, [r5] - adds r0, r7, r0 - ldrb r2, [r0, 0xA] - lsls r2, 1 - ldr r0, =gBattleFrontierHeldItems - adds r2, r0 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - mov r2, r10 - add r2, r8 - lsls r2, 2 - ldr r1, =gSaveBlock2Ptr - ldr r0, [r1] - adds r2, r0 - ldr r5, =0x00000e9d - adds r2, r5 - adds r0, r4, 0 - movs r1, 0x2E - bl SetMonData - ldr r0, [sp, 0x18] - mov r8, r0 - cmp r0, 0x2 - bgt _081A67AE - b _081A6682 -_081A67AE: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A64C4 - - thumb_func_start sub_81A67EC -sub_81A67EC: @ 81A67EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4C - ldr r1, =gFacilityTrainers - ldr r0, =gBattleFrontierTrainers - str r0, [r1] - mov r0, sp - adds r0, 0xC - str r0, [sp, 0x38] - mov r1, sp - adds r1, 0x18 - str r1, [sp, 0x3C] - ldr r2, =gSaveBlock2Ptr - mov r9, r2 - movs r2, 0 - adds r3, r1, 0 - adds r1, r0, 0 - mov r0, sp - movs r4, 0x5 - mov r8, r4 -_081A681A: - strh r2, [r0] - strh r2, [r1] - strh r2, [r3] - adds r3, 0x2 - adds r1, 0x2 - adds r0, 0x2 - movs r5, 0x1 - negs r5, r5 - add r8, r5 - mov r4, r8 - cmp r4, 0 - bge _081A681A - mov r5, r9 - ldr r0, [r5] - ldr r7, =0x00000ca9 - adds r0, r7 - ldrb r4, [r0] - lsls r4, 30 - lsrs r4, 30 - ldr r6, =0x000040ce - adds r0, r6, 0 - bl VarGet - lsls r0, 24 - ldr r1, [r5] - lsls r4, 1 - lsrs r0, 22 - adds r4, r0 - ldr r5, =0x00000de2 - adds r1, r5 - adds r1, r4 - ldrh r0, [r1] - movs r1, 0x7 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - adds r0, r6, 0 - bl VarGet - lsls r0, 16 - lsrs r0, 16 - movs r2, 0 - cmp r0, 0x1 - bne _081A6878 - movs r2, 0x1 -_081A6878: - ldr r1, =gFacilityTrainerMons - ldr r0, =gBattleFrontierMons - str r0, [r1] - mov r1, r9 - ldr r0, [r1] - adds r0, r7 - ldrb r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _081A68B4 - movs r4, 0x1 - str r4, [sp, 0x28] - b _081A68B8 - .pool -_081A68B4: - movs r5, 0 - str r5, [sp, 0x28] -_081A68B8: - adds r0, r2, 0 - ldr r1, [sp, 0x28] - bl sub_81A6F70 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x2C] - movs r0, 0 - mov r10, r0 - mov r8, r0 - ldr r1, [sp, 0x3C] - str r1, [sp, 0x40] - mov r2, sp - str r2, [sp, 0x44] - lsls r4, r0, 1 - str r4, [sp, 0x30] - ldr r5, [sp, 0x38] - adds r5, r4 - str r5, [sp, 0x34] -_081A68DE: - ldr r0, [sp, 0x2C] - cmp r8, r0 - bge _081A68EC - ldr r0, [sp, 0x28] - ldr r1, [sp, 0x24] - movs r2, 0x1 - b _081A68F2 -_081A68EC: - ldr r0, [sp, 0x28] - ldr r1, [sp, 0x24] - movs r2, 0 -_081A68F2: - bl sub_81A6EF0 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r0, =gFacilityTrainerMons - ldr r1, [r0] - lsls r2, r7, 4 - adds r4, r2, r1 - ldrh r1, [r4] - mov r9, r2 - cmp r1, 0xC9 - beq _081A69E2 - movs r3, 0 - mov r2, r8 - adds r6, r3, r2 - cmp r3, r6 - bge _081A6950 - ldr r5, [sp, 0x34] - ldrh r0, [r5] - cmp r0, r7 - beq _081A6950 - mov r12, r4 - adds r2, r1, 0 - lsls r4, r3, 1 - ldr r1, [sp, 0x30] - add r1, sp - str r6, [sp, 0x48] -_081A6928: - ldrh r0, [r1] - cmp r0, r2 - bne _081A693A - mov r0, r10 - cmp r0, 0 - bne _081A6950 - mov r5, r12 - ldrh r5, [r5] - mov r10, r5 -_081A693A: - adds r4, 0x2 - adds r1, 0x2 - adds r3, 0x1 - ldr r0, [sp, 0x48] - cmp r3, r0 - bge _081A6950 - ldr r5, [sp, 0x38] - adds r0, r5, r4 - ldrh r0, [r0] - cmp r0, r7 - bne _081A6928 -_081A6950: - cmp r3, r6 - bne _081A69E2 - movs r3, 0 - cmp r3, r6 - bge _081A699C - ldr r0, =gBattleFrontierHeldItems - mov r12, r0 - ldr r1, [sp, 0x30] - ldr r2, [sp, 0x3C] - adds r5, r1, r2 -_081A6964: - ldrh r4, [r5] - cmp r4, 0 - beq _081A6994 - ldr r1, =gFacilityTrainerMons - ldr r0, [r1] - mov r2, r9 - adds r1, r2, r0 - ldrb r0, [r1, 0xA] - lsls r0, 1 - add r0, r12 - ldrh r0, [r0] - cmp r4, r0 - bne _081A6994 - ldrh r0, [r1] - cmp r0, r10 - bne _081A699C - movs r4, 0 - mov r10, r4 - b _081A699C - .pool -_081A6994: - adds r5, 0x2 - adds r3, 0x1 - cmp r3, r6 - blt _081A6964 -_081A699C: - cmp r3, r6 - bne _081A69E2 - ldr r0, =gSaveBlock2Ptr - ldr r1, [r0] - mov r5, r8 - lsls r3, r5, 1 - adds r0, r3, r5 - lsls r0, 2 - adds r1, r0 - movs r0, 0xE7 - lsls r0, 4 - adds r1, r0 - strh r7, [r1] - ldr r2, =gFacilityTrainerMons - ldr r1, [r2] - add r1, r9 - ldrh r0, [r1] - ldr r4, [sp, 0x44] - strh r0, [r4] - ldr r2, =gBattleFrontierHeldItems - ldrb r0, [r1, 0xA] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - ldr r5, [sp, 0x40] - strh r0, [r5] - ldr r0, [sp, 0x38] - adds r3, r0, r3 - strh r7, [r3] - adds r5, 0x2 - str r5, [sp, 0x40] - adds r4, 0x2 - str r4, [sp, 0x44] - movs r1, 0x1 - add r8, r1 -_081A69E2: - mov r2, r8 - cmp r2, 0x6 - beq _081A69EA - b _081A68DE -_081A69EA: - add sp, 0x4C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A67EC - - thumb_func_start sub_81A6A08 -sub_81A6A08: @ 81A6A08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x18 - ldr r1, =gFacilityTrainerMons - ldr r0, =gBattleFrontierMons - str r0, [r1] - movs r4, 0 - add r5, sp, 0x14 - ldr r7, =gSpecialVar_Result - movs r1, 0 -_081A6A1E: - mov r2, sp - adds r0, r2, r4 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x11 - bls _081A6A1E - movs r4, 0 - ldr r0, =gUnknown_03006298 - mov r8, r0 - ldr r0, =gFacilityTrainerMons - ldr r6, [r0] - ldr r1, =gBaseStats - mov r12, r1 -_081A6A3C: - lsls r0, r4, 1 - add r0, r8 - ldrh r0, [r0] - lsls r0, 4 - adds r0, r6 - ldrh r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r2, r12 - adds r3, r0, r2 - ldrb r2, [r3, 0x6] - mov r0, sp - adds r1, r0, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldrb r1, [r3, 0x7] - cmp r2, r1 - beq _081A6A70 - ldrb r0, [r3, 0x7] - mov r2, sp - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_081A6A70: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _081A6A3C - movs r0, 0 - strb r0, [r5] - strb r0, [r5, 0x1] - movs r4, 0x1 - adds r3, r5, 0 -_081A6A84: - ldrb r0, [r3] - add r0, sp - mov r2, sp - adds r1, r2, r4 - ldrb r2, [r0] - ldrb r0, [r1] - cmp r2, r0 - bcs _081A6AAC - strb r4, [r5] - b _081A6AB2 - .pool -_081A6AAC: - cmp r2, r0 - bne _081A6AB2 - strb r4, [r3, 0x1] -_081A6AB2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x11 - bls _081A6A84 - ldrb r1, [r5] - mov r4, sp - adds r0, r4, r1 - ldrb r2, [r0] - cmp r2, 0 - beq _081A6ADA - ldrb r3, [r5, 0x1] - adds r0, r4, r3 - ldrb r0, [r0] - cmp r2, r0 - bhi _081A6AD6 - cmp r1, r3 - bne _081A6ADA -_081A6AD6: - strh r1, [r7] - b _081A6ADE -_081A6ADA: - movs r0, 0x12 - strh r0, [r7] -_081A6ADE: - add sp, 0x18 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81A6A08 - - thumb_func_start sub_81A6AEC -sub_81A6AEC: @ 81A6AEC - push {r4-r7,lr} - sub sp, 0x8 - movs r7, 0 - ldr r1, =gFacilityTrainerMons - ldr r0, =gBattleFrontierMons - str r0, [r1] - movs r4, 0 - movs r1, 0 -_081A6AFC: - mov r2, sp - adds r0, r2, r4 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x7 - bls _081A6AFC - movs r4, 0 -_081A6B0E: - ldr r1, =gUnknown_03006298 - lsls r0, r4, 1 - adds r0, r1 - ldrh r6, [r0] - movs r5, 0 -_081A6B18: - ldr r0, =gFacilityTrainerMons - ldr r1, [r0] - lsls r0, r6, 4 - adds r0, r1 - lsls r1, r5, 1 - adds r0, 0x2 - adds r0, r1 - ldrh r0, [r0] - bl sub_81A6BA4 - lsls r0, 24 - lsrs r0, 24 - mov r2, sp - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _081A6B18 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _081A6B0E - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - movs r4, 0x1 - adds r5, r1, 0 - ldr r3, =gBattleFactoryStyleRequiredMoveCounts - adds r2, r5, 0 -_081A6B5C: - mov r1, sp - adds r0, r1, r4 - subs r1, r4, 0x1 - adds r1, r3 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bcc _081A6B74 - strh r4, [r2] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_081A6B74: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x7 - bls _081A6B5C - cmp r7, 0x2 - bls _081A6B86 - movs r0, 0x8 - strh r0, [r5] -_081A6B86: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A6AEC - - thumb_func_start sub_81A6BA4 -sub_81A6BA4: @ 81A6BA4 - push {r4-r6,lr} - lsls r0, 16 - lsrs r5, r0, 16 - movs r2, 0 - ldr r6, =gBattleFactoryStyleMoveListPointers -_081A6BAE: - movs r3, 0 - lsls r0, r2, 2 - adds r0, r6 - ldr r1, [r0] - ldrh r0, [r1] - adds r4, r2, 0x1 - cmp r0, 0 - beq _081A6BE4 - lsls r0, r4, 24 - lsrs r2, r0, 24 -_081A6BC2: - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r5 - bne _081A6BD4 - adds r0, r2, 0 - b _081A6BEE - .pool -_081A6BD4: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - bne _081A6BC2 -_081A6BE4: - lsls r0, r4, 24 - lsrs r2, r0, 24 - cmp r2, 0x6 - bls _081A6BAE - movs r0, 0 -_081A6BEE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81A6BA4 - - thumb_func_start sub_81A6BF4 -sub_81A6BF4: @ 81A6BF4 - push {lr} - movs r2, 0 - ldr r1, =gMapHeader - ldr r3, =0xfffffea5 - adds r0, r3, 0 - ldrh r1, [r1, 0x12] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _081A6C0C - movs r2, 0x1 -_081A6C0C: - adds r0, r2, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A6BF4 - - thumb_func_start sub_81A6C1C -sub_81A6C1C: @ 81A6C1C - push {r4,lr} - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x2 - beq _081A6C48 - ldr r1, =gFacilityTrainerMons - ldr r0, =gBattleFrontierMons - b _081A6C4C - .pool -_081A6C48: - ldr r1, =gFacilityTrainerMons - ldr r0, =gSlateportBattleTentMons -_081A6C4C: - str r0, [r1] - movs r4, 0 -_081A6C50: - movs r0, 0x64 - muls r0, r4 - ldr r1, =gPlayerParty - adds r0, r1 - ldr r1, =gSaveBlock2Ptr - ldr r2, [r1] - lsls r1, r4, 1 - adds r1, r4 - lsls r1, 2 - adds r2, r1 - movs r1, 0xE7 - lsls r1, 4 - adds r2, r1 - ldrh r2, [r2] - ldr r1, =gFacilityTrainerMons - ldr r1, [r1] - lsls r2, 4 - adds r2, r1 - ldrb r2, [r2, 0xA] - lsls r2, 1 - ldr r1, =gBattleFrontierHeldItems - adds r2, r1 - movs r1, 0xC - bl SetMonData - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _081A6C50 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A6C1C - - thumb_func_start sub_81A6CA8 -sub_81A6CA8: @ 81A6CA8 - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - negs r2, r1 - orrs r2, r1 - lsrs r2, 31 - lsrs r1, r0, 24 - cmp r1, 0x8 - bls _081A6CBE - movs r1, 0x7 -_081A6CBE: - ldr r0, =gUnknown_08612184 - lsls r1, 1 - adds r1, r2, r1 - adds r1, r0 - ldrb r0, [r1] - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A6CA8 - - thumb_func_start sub_81A6CD0 -sub_81A6CD0: @ 81A6CD0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x34 - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 30 - str r0, [sp, 0x2C] - ldr r0, =0x000040ce - bl VarGet - lsls r0, 24 - ldr r1, [r4] - ldr r3, [sp, 0x2C] - lsls r2, r3, 1 - lsrs r0, 22 - adds r2, r0 - ldr r7, =0x00000de2 - adds r1, r7 - adds r1, r2 - ldrh r0, [r1] - movs r1, 0x7 - bl __udivsi3 - lsls r0, 24 - lsrs r1, r0, 24 - str r1, [sp, 0x30] - movs r2, 0x80 - lsls r2, 18 - adds r0, r2 - lsrs r0, 24 - movs r1, 0 - bl sub_81A6CA8 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - bl SetFacilityPtrsGetLevel - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x20] - movs r3, 0 - mov r9, r3 - ldr r1, [r4] - ldrb r4, [r1, 0xA] - ldrb r0, [r1, 0xB] - lsls r0, 8 - orrs r4, r0 - ldrb r0, [r1, 0xC] - lsls r0, 16 - orrs r4, r0 - ldrb r0, [r1, 0xD] - lsls r0, 24 - orrs r4, r0 - str r4, [sp, 0x28] -_081A6D4C: - ldr r0, [sp, 0x2C] - ldr r1, [sp, 0x30] - movs r2, 0 - bl sub_81A6EF0 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r7, =gFacilityTrainerMons - ldr r1, [r7] - lsls r0, r5, 4 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0xC9 - bne _081A6D6A - b _081A6EB8 -_081A6D6A: - ldr r0, [sp, 0x20] - cmp r0, 0x32 - bne _081A6D78 - ldr r0, =0x00000351 - cmp r5, r0 - bls _081A6D78 - b _081A6EB8 -_081A6D78: - movs r2, 0 - ldr r1, =gSaveBlock2Ptr - ldr r0, [r1] - movs r3, 0xE7 - lsls r3, 4 - adds r0, r3 - ldrh r0, [r0] - cmp r5, r0 - beq _081A6DA2 - adds r4, r1, 0 - movs r1, 0 -_081A6D8E: - adds r1, 0xC - adds r2, 0x1 - cmp r2, 0x5 - bgt _081A6DA2 - ldr r0, [r4] - adds r0, r1 - adds r0, r3 - ldrh r0, [r0] - cmp r5, r0 - bne _081A6D8E -_081A6DA2: - cmp r2, 0x6 - beq _081A6DA8 - b _081A6EB8 -_081A6DA8: - movs r4, 0 - cmp r4, r9 - bge _081A6DDC - add r2, sp, 0xC - ldr r7, =gFacilityTrainerMons - ldr r0, [r7] - lsls r1, r5, 4 - adds r0, r1, r0 - ldrh r2, [r2] - adds r7, r1, 0 - ldrh r0, [r0] - cmp r2, r0 - beq _081A6DDC - ldr r6, =gFacilityTrainerMons - adds r3, r7, 0 - add r2, sp, 0xC -_081A6DC8: - adds r2, 0x2 - adds r4, 0x1 - cmp r4, r9 - bge _081A6DDC - ldr r0, [r6] - adds r0, r3, r0 - ldrh r1, [r2] - ldrh r0, [r0] - cmp r1, r0 - bne _081A6DC8 -_081A6DDC: - cmp r4, r9 - bne _081A6EB8 - movs r4, 0 - cmp r4, r9 - bge _081A6E0C - ldr r7, =gBattleFrontierHeldItems - ldr r6, =gFacilityTrainerMons - add r2, sp, 0x14 - lsls r3, r5, 4 -_081A6DEE: - ldrh r1, [r2] - cmp r1, 0 - beq _081A6E04 - ldr r0, [r6] - adds r0, r3, r0 - ldrb r0, [r0, 0xA] - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - cmp r1, r0 - beq _081A6E0C -_081A6E04: - adds r2, 0x2 - adds r4, 0x1 - cmp r4, r9 - blt _081A6DEE -_081A6E0C: - cmp r4, r9 - bne _081A6EB8 - mov r0, r9 - lsls r2, r0, 1 - mov r1, sp - adds r1, r2 - adds r1, 0xC - ldr r3, =gFacilityTrainerMons - ldr r4, [r3] - lsls r5, 4 - mov r8, r5 - add r4, r8 - ldrh r0, [r4] - strh r0, [r1] - add r1, sp, 0x14 - adds r1, r2 - ldr r2, =gBattleFrontierHeldItems - ldrb r0, [r4, 0xA] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - movs r0, 0x64 - mov r5, r9 - muls r5, r0 - ldr r6, =gEnemyParty - adds r0, r5, r6 - ldrh r1, [r4] - ldr r7, [sp, 0x20] - lsls r2, r7, 24 - ldrb r3, [r4, 0xC] - ldr r7, [sp, 0x24] - str r7, [sp] - ldrb r4, [r4, 0xB] - str r4, [sp, 0x4] - ldr r4, [sp, 0x28] - str r4, [sp, 0x8] - lsrs r2, 24 - bl CreateMonWithEVSpreadPersonalityOTID - add r0, sp, 0x1C - movs r7, 0 - strb r7, [r0] - movs r4, 0 - mov r7, r8 - mov r10, r0 - movs r0, 0x1 - add r0, r9 - mov r8, r0 -_081A6E6E: - ldr r1, =gFacilityTrainerMons - ldr r0, [r1] - adds r0, r7, r0 - lsls r1, r4, 1 - adds r0, 0x2 - adds r0, r1 - ldrh r1, [r0] - lsls r2, r4, 24 - lsrs r2, 24 - adds r0, r5, r6 - bl SetMonMoveAvoidReturn - adds r4, 0x1 - cmp r4, 0x3 - ble _081A6E6E - movs r0, 0x64 - mov r4, r9 - muls r4, r0 - ldr r0, =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x20 - mov r2, r10 - bl SetMonData - ldr r2, =gFacilityTrainerMons - ldr r0, [r2] - adds r0, r7, r0 - ldrb r2, [r0, 0xA] - lsls r2, 1 - ldr r0, =gBattleFrontierHeldItems - adds r2, r0 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - mov r9, r8 -_081A6EB8: - mov r3, r9 - cmp r3, 0x3 - beq _081A6EC0 - b _081A6D4C -_081A6EC0: - add sp, 0x34 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A6CD0 - - thumb_func_start sub_81A6EF0 -sub_81A6EF0: @ 81A6EF0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r2, 24 - lsrs r2, 24 - movs r4, 0x8 - negs r1, r0 - orrs r1, r0 - asrs r1, 31 - ands r1, r4 - adds r4, r1, 0 - cmp r3, 0x6 - bhi _081A6F2C - cmp r2, 0 - beq _081A6F20 - ldr r2, =gUnknown_08612194 - adds r1, r3 - adds r1, 0x1 - b _081A6F38 - .pool -_081A6F20: - ldr r2, =gUnknown_08612194 - adds r1, r3 - b _081A6F38 - .pool -_081A6F2C: - adds r1, r3, 0 - cmp r1, 0x7 - beq _081A6F34 - movs r1, 0x7 -_081A6F34: - ldr r2, =gUnknown_08612194 - adds r1, r4, r1 -_081A6F38: - lsls r1, 2 - adds r0, r2, 0x2 - adds r0, r1, r0 - adds r1, r2 - ldrh r0, [r0] - ldrh r4, [r1] - subs r0, r4 - adds r0, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r4, r0, r4 - lsls r4, 16 - lsrs r0, r4, 16 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A6EF0 - - thumb_func_start sub_81A6F70 -sub_81A6F70: @ 81A6F70 - push {lr} - lsls r0, 24 - lsls r1, 24 - ldr r2, =gSaveBlock2Ptr - ldr r2, [r2] - lsrs r1, 23 - lsrs r0, 22 - adds r1, r0 - ldr r0, =0x00000df2 - adds r2, r0 - adds r2, r1 - ldrb r1, [r2] - movs r0, 0 - cmp r1, 0xE - bls _081A6FA8 - movs r0, 0x1 - cmp r1, 0x15 - bls _081A6FA8 - movs r0, 0x2 - cmp r1, 0x1C - bls _081A6FA8 - movs r0, 0x3 - cmp r1, 0x23 - bls _081A6FA8 - movs r0, 0x5 - cmp r1, 0x2A - bhi _081A6FA8 - movs r0, 0x4 -_081A6FA8: - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A6F70 - - thumb_func_start GetAiScriptsInBattleFactory -GetAiScriptsInBattleFactory: @ 81A6FB4 - push {r4,r5,lr} - ldr r5, =gSaveBlock2Ptr - ldr r0, [r5] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r4, r0, 30 - cmp r4, 0x2 - beq _081A6FF8 - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - ldr r1, [r5] - lsls r2, r4, 1 - lsrs r0, 14 - adds r2, r0 - ldr r0, =0x00000de2 - adds r1, r0 - adds r1, r2 - ldrh r0, [r1] - movs r1, 0x7 - bl __udivsi3 - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, =gTrainerBattleOpponent_A - ldrh r1, [r0] - ldr r0, =0x000003fe - cmp r1, r0 - beq _081A7018 - cmp r2, 0x1 - bgt _081A7014 -_081A6FF8: - movs r0, 0 - b _081A701E - .pool -_081A7014: - cmp r2, 0x3 - ble _081A701C -_081A7018: - movs r0, 0x7 - b _081A701E -_081A701C: - movs r0, 0x1 -_081A701E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetAiScriptsInBattleFactory - - thumb_func_start SetMonMoveAvoidReturn -SetMonMoveAvoidReturn: @ 81A7024 - push {lr} - lsls r1, 16 - lsls r2, 24 - lsrs r2, 24 - lsrs r1, 16 - cmp r1, 0xD8 - bne _081A7034 - movs r1, 0xDA -_081A7034: - bl SetMonMoveSlot - pop {r0} - bx r0 - thumb_func_end SetMonMoveAvoidReturn - - thumb_func_start sub_81A703C -sub_81A703C: @ 81A703C - push {lr} - ldr r1, =gUnknown_086125F8 - ldr r0, =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A703C - - thumb_func_start sub_81A705C -sub_81A705C: @ 81A705C - push {lr} - bl sub_81A79EC - ldr r1, =gUnknown_0300128C - strb r0, [r1] - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A705C - - thumb_func_start sub_81A7070 -sub_81A7070: @ 81A7070 - push {r4-r7,lr} - ldr r0, =0x00004010 - movs r1, 0x1C - bl VarSet - ldr r0, =0x00004011 - movs r1, 0xE2 - bl VarSet - movs r4, 0x1 - movs r6, 0 - movs r5, 0 - movs r7, 0 - ldr r0, =gUnknown_0300128C - ldrb r0, [r0] - cmp r0, 0x8 - bhi _081A7132 - lsls r0, 2 - ldr r1, =_081A70AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081A70AC: - .4byte _081A70D0 - .4byte _081A70DA - .4byte _081A70DE - .4byte _081A70E8 - .4byte _081A70FC - .4byte _081A70D6 - .4byte _081A7100 - .4byte _081A7108 - .4byte _081A710E -_081A70D0: - movs r0, 0 - bl sub_81A82A4 -_081A70D6: - movs r4, 0 - b _081A711A -_081A70DA: - movs r5, 0x1C - b _081A711A -_081A70DE: - bl sub_81A7B58 - lsls r0, 24 - lsrs r5, r0, 24 - b _081A711A -_081A70E8: - movs r5, 0x30 - ldr r0, =gUnknown_0300128D - ldrb r0, [r0] - movs r7, 0xE1 - cmp r0, 0x1 - bne _081A7118 - movs r7, 0xE2 - b _081A7118 - .pool -_081A70FC: - movs r5, 0x30 - b _081A711A -_081A7100: - movs r0, 0x1 - bl sub_81A82A4 - b _081A7114 -_081A7108: - bl sub_81A8374 - b _081A70D6 -_081A710E: - movs r0, 0x5 - bl SetFrontierBrainEventObjGfx -_081A7114: - movs r7, 0x1C - movs r4, 0 -_081A7118: - movs r6, 0x1 -_081A711A: - cmp r4, 0x1 - bne _081A7126 - ldr r0, =0x00004010 - adds r1, r5, 0 - bl VarSet -_081A7126: - cmp r6, 0x1 - bne _081A7132 - ldr r0, =0x00004011 - adds r1, r7, 0 - bl VarSet -_081A7132: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7070 - - thumb_func_start sub_81A7140 -sub_81A7140: @ 81A7140 - push {lr} - ldr r1, =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, =0x00000ca9 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r2, r0, 30 - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - adds r3, r1, 0 - cmp r0, 0x4 - bhi _081A723A - lsls r0, 2 - ldr r1, =_081A7174 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081A7174: - .4byte _081A7188 - .4byte _081A71A0 - .4byte _081A71C4 - .4byte _081A71E8 - .4byte _081A720C -_081A7188: - ldr r0, =gSpecialVar_Result - ldr r1, [r3] - ldr r3, =0x00000e02 - adds r1, r3 - ldrh r1, [r1] - strh r1, [r0] - b _081A723A - .pool -_081A71A0: - ldr r2, =gSpecialVar_Result - ldr r1, [r3] - ldr r3, =0x00000ca9 - adds r0, r1, r3 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r3, =0x00000e04 - adds r1, r3 - adds r1, r0 - ldrh r0, [r1] - b _081A7238 - .pool -_081A71C4: - ldr r2, =gSpecialVar_Result - ldr r1, [r3] - ldr r3, =0x00000ca9 - adds r0, r1, r3 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r3, =0x00000e08 - adds r1, r3 - adds r1, r0 - ldrh r0, [r1] - b _081A7238 - .pool -_081A71E8: - ldr r2, =gSpecialVar_Result - ldr r1, [r3] - ldr r3, =0x00000ca9 - adds r0, r1, r3 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r3, =0x00000e0c - adds r1, r3 - adds r1, r0 - ldrh r0, [r1] - b _081A7238 - .pool -_081A720C: - cmp r2, 0 - beq _081A7228 - ldr r2, =gSpecialVar_Result - ldr r0, [r3] - ldr r1, =0x00000cdc - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 4 - b _081A7236 - .pool -_081A7228: - ldr r2, =gSpecialVar_Result - ldr r0, [r3] - ldr r3, =0x00000cdc - adds r0, r3 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 3 -_081A7236: - ands r0, r1 -_081A7238: - strh r0, [r2] -_081A723A: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7140 - - thumb_func_start sub_81A7248 -sub_81A7248: @ 81A7248 - push {r4,r5,lr} - ldr r1, =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, =0x00000ca9 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r3, r0, 30 - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - adds r2, r1, 0 - cmp r0, 0x4 - bls _081A7264 - b _081A73AA -_081A7264: - lsls r0, 2 - ldr r1, =_081A7280 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081A7280: - .4byte _081A7294 - .4byte _081A72AC - .4byte _081A72D8 - .4byte _081A7314 - .4byte _081A7344 -_081A7294: - ldr r0, [r2] - ldr r1, =gSpecialVar_0x8006 - ldrh r1, [r1] - ldr r5, =0x00000e02 - adds r0, r5 - strh r1, [r0] - b _081A73AA - .pool -_081A72AC: - ldr r0, =gSpecialVar_0x8006 - ldrh r3, [r0] - ldr r0, =0x0000270f - cmp r3, r0 - bls _081A72B8 - b _081A73AA -_081A72B8: - ldr r0, [r2] - ldr r2, =0x00000ca9 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, 30 - lsrs r1, 29 - ldr r5, =0x00000e04 - b _081A732C - .pool -_081A72D8: - ldr r0, =gSpecialVar_0x8006 - ldrh r4, [r0] - adds r3, r4, 0 - ldr r0, =0x0000270f - cmp r3, r0 - bhi _081A73AA - ldr r1, [r2] - ldr r2, =0x00000ca9 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r2, r0, 30 - lsrs r0, r2, 29 - ldr r5, =0x00000e08 - adds r1, r5 - adds r0, r1, r0 - ldrh r0, [r0] - cmp r0, r3 - bcs _081A73AA - lsrs r0, r2, 29 - adds r0, r1, r0 - strh r4, [r0] - b _081A73AA - .pool -_081A7314: - ldr r0, =gSpecialVar_0x8006 - ldrh r3, [r0] - ldr r0, =0x0000270f - cmp r3, r0 - bhi _081A73AA - ldr r0, [r2] - ldr r2, =0x00000ca9 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, 30 - lsrs r1, 29 - ldr r5, =0x00000e0c -_081A732C: - adds r0, r5 - adds r0, r1 - strh r3, [r0] - b _081A73AA - .pool -_081A7344: - cmp r3, 0 - beq _081A737C - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - cmp r0, 0 - beq _081A7368 - ldr r0, [r2] - ldr r1, =0x00000cdc - adds r0, r1 - ldr r1, [r0] - movs r2, 0x80 - lsls r2, 4 - orrs r1, r2 - b _081A73A8 - .pool -_081A7368: - ldr r0, [r2] - ldr r2, =0x00000cdc - adds r0, r2 - ldr r1, [r0] - ldr r2, =0xfffff7ff - b _081A73A6 - .pool -_081A737C: - ldr r0, =gSpecialVar_0x8006 - ldrh r0, [r0] - cmp r0, 0 - beq _081A739C - ldr r0, [r2] - ldr r5, =0x00000cdc - adds r0, r5 - ldr r1, [r0] - movs r2, 0x80 - lsls r2, 3 - orrs r1, r2 - b _081A73A8 - .pool -_081A739C: - ldr r0, [r2] - ldr r1, =0x00000cdc - adds r0, r1 - ldr r1, [r0] - ldr r2, =0xfffffbff -_081A73A6: - ands r1, r2 -_081A73A8: - str r1, [r0] -_081A73AA: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7248 - - thumb_func_start sub_81A73B8 -sub_81A73B8: @ 81A73B8 - push {lr} - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000cb2 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0xE - bls _081A73DC - ldr r1, =gSpecialVar_Result - movs r0, 0x1 - b _081A73E0 - .pool -_081A73DC: - ldr r1, =gSpecialVar_Result - movs r0, 0 -_081A73E0: - strh r0, [r1] - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A73B8 - - thumb_func_start sub_81A73EC -sub_81A73EC: @ 81A73EC - ldr r0, =gSpecialVar_Result - ldr r1, =gUnknown_0300128C - ldrb r1, [r1] - strh r1, [r0] - bx lr - .pool - thumb_func_end sub_81A73EC - - thumb_func_start sub_81A7400 -sub_81A7400: @ 81A7400 - ldr r1, =gUnknown_0300128E - movs r0, 0x1 - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_81A7400 - - thumb_func_start sub_81A740C -sub_81A740C: @ 81A740C - ldr r1, =gUnknown_0300128E - movs r0, 0 - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_81A740C - - thumb_func_start sub_81A7418 -sub_81A7418: @ 81A7418 - push {r4,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, =0x00000ca8 - adds r0, r2 - strb r1, [r0] - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, =0x00000ca9 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bl save_serialize_map - movs r0, 0x1 - bl TrySavingData - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7418 - - thumb_func_start nullsub_76 -nullsub_76: @ 81A7460 - bx lr - thumb_func_end nullsub_76 - - thumb_func_start nullsub_124 -nullsub_124: @ 81A7464 - bx lr - thumb_func_end nullsub_124 - - thumb_func_start sub_81A7468 -sub_81A7468: @ 81A7468 - push {lr} - ldr r0, =gUnknown_03001290 - ldr r0, [r0] - cmp r0, 0x20 - beq _081A748E - cmp r0, 0x20 - bhi _081A7484 - cmp r0, 0x7 - beq _081A74BC - cmp r0, 0x10 - beq _081A7498 - b _081A74C2 - .pool -_081A7484: - cmp r0, 0x40 - beq _081A74B0 - cmp r0, 0x80 - beq _081A74A4 - b _081A74C2 -_081A748E: - ldr r1, =gSpecialVar_Result - movs r0, 0 - b _081A74C0 - .pool -_081A7498: - ldr r1, =gSpecialVar_Result - movs r0, 0x1 - b _081A74C0 - .pool -_081A74A4: - ldr r1, =gSpecialVar_Result - movs r0, 0x2 - b _081A74C0 - .pool -_081A74B0: - ldr r1, =gSpecialVar_Result - movs r0, 0x3 - b _081A74C0 - .pool -_081A74BC: - ldr r1, =gSpecialVar_Result - movs r0, 0x4 -_081A74C0: - strh r0, [r1] -_081A74C2: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7468 - - thumb_func_start sub_81A74CC -sub_81A74CC: @ 81A74CC - ldr r0, =gSpecialVar_Result - ldr r1, =gUnknown_0300128D - ldrb r1, [r1] - strh r1, [r0] - bx lr - .pool - thumb_func_end sub_81A74CC - - thumb_func_start sub_81A74E0 -sub_81A74E0: @ 81A74E0 - push {r4,lr} - bl Random - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x1 - ands r4, r0 - adds r4, 0x1 - adds r0, r4, 0 - bl sub_81A7F38 - ldr r0, =gSpecialVar_Result - strh r4, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A74E0 - - thumb_func_start sub_81A7508 -sub_81A7508: @ 81A7508 - push {lr} - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000cb2 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0x4 - bhi _081A7538 - ldr r1, =gUnknown_0861231C - ldr r0, =gUnknown_03001294 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x2] - b _081A7560 - .pool -_081A7538: - cmp r0, 0xA - bhi _081A7554 - ldr r1, =gUnknown_0861231C - ldr r0, =gUnknown_03001294 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x3] - b _081A7560 - .pool -_081A7554: - ldr r1, =gUnknown_0861231C - ldr r0, =gUnknown_03001294 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x4] -_081A7560: - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, =gUnknown_086123E4 - adds r0, r1 - bl FrontierSpeechToString - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7508 - - thumb_func_start sub_81A7580 -sub_81A7580: @ 81A7580 - push {lr} - ldr r0, =sub_81A7EE4 - movs r1, 0x2 - bl CreateTask - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7580 - - thumb_func_start sub_81A7594 -sub_81A7594: @ 81A7594 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r4, 0 - movs r1, 0 -_081A759E: - mov r2, sp - adds r0, r2, r4 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081A759E - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData - lsls r2, r0, 16 - mov r1, sp - strb r0, [r1] - mov r0, sp - lsrs r2, 24 - strb r2, [r0, 0x1] - adds r0, r5, 0 - movs r1, 0x39 - mov r2, sp - bl SetMonData - adds r0, r5, 0 - movs r1, 0x15 - bl GetMonData - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 -_081A75DA: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r5, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r4, 0 - bl CalculatePPWithBonus - mov r1, sp - strb r0, [r1] - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r5, 0 - mov r2, sp - bl SetMonData - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081A75DA - mov r0, sp - movs r1, 0 - strb r1, [r0] - strb r1, [r0, 0x1] - strb r1, [r0, 0x2] - strb r1, [r0, 0x3] - adds r0, r5, 0 - movs r1, 0x37 - mov r2, sp - bl SetMonData - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81A7594 - - thumb_func_start sub_81A7628 -sub_81A7628: @ 81A7628 - push {r4,lr} - adds r4, r1, 0 - bl GetMonAbility - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - cmp r4, 0x20 - beq _081A7652 - cmp r4, 0x20 - bhi _081A7648 - cmp r4, 0x7 - beq _081A7664 - cmp r4, 0x10 - beq _081A7658 - b _081A7674 -_081A7648: - cmp r4, 0x40 - beq _081A765E - cmp r4, 0x80 - beq _081A766E - b _081A7674 -_081A7652: - cmp r0, 0x28 - bne _081A7674 - b _081A7672 -_081A7658: - cmp r0, 0x29 - bne _081A7674 - b _081A7672 -_081A765E: - cmp r0, 0x7 - bne _081A7674 - b _081A7672 -_081A7664: - cmp r0, 0xF - beq _081A7672 - cmp r0, 0x48 - bne _081A7674 - b _081A7672 -_081A766E: - cmp r0, 0x11 - bne _081A7674 -_081A7672: - movs r1, 0x1 -_081A7674: - adds r0, r1, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81A7628 - - thumb_func_start sub_81A767C -sub_81A767C: @ 81A767C - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - movs r3, 0 - cmp r1, 0x20 - beq _081A76C4 - cmp r1, 0x20 - bhi _081A7696 - cmp r1, 0x7 - beq _081A771C - cmp r1, 0x10 - beq _081A7704 - b _081A771C -_081A7696: - cmp r1, 0x40 - beq _081A76E0 - cmp r1, 0x80 - bne _081A771C - ldr r1, =gBaseStats - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x6] - cmp r2, 0x8 - beq _081A771A - cmp r2, 0x3 - beq _081A771A - ldrb r0, [r0, 0x7] - cmp r0, 0x8 - beq _081A771A - cmp r0, 0x3 - bne _081A771C - b _081A771A - .pool -_081A76C4: - ldr r0, =gBaseStats - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x6] - cmp r0, 0xF - beq _081A771A - ldrb r0, [r1, 0x7] - cmp r0, 0xF - bne _081A771C - b _081A771A - .pool -_081A76E0: - ldr r1, =gBaseStats - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x6] - cmp r2, 0x4 - beq _081A771A - cmp r2, 0xD - beq _081A771A - ldrb r0, [r0, 0x7] - cmp r0, 0x4 - beq _081A771A - cmp r0, 0xD - bne _081A771C - b _081A771A - .pool -_081A7704: - ldr r0, =gBaseStats - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x6] - cmp r0, 0xA - beq _081A771A - ldrb r0, [r1, 0x7] - cmp r0, 0xA - bne _081A771C -_081A771A: - movs r3, 0x1 -_081A771C: - adds r0, r3, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A767C - - thumb_func_start sub_81A7728 -sub_81A7728: @ 81A7728 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r6, 0 -_081A7736: - mov r1, sp - adds r0, r1, r6 - strb r6, [r0] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x2 - bls _081A7736 - movs r4, 0 - mov r8, r4 -_081A774A: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r6, r0, 24 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - adds r2, r1, r6 - ldrb r3, [r2] - adds r1, r0 - ldrb r0, [r1] - strb r0, [r2] - strb r3, [r1] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x9 - bls _081A774A - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r4, =0x00000cb2 - adds r0, r4 - ldrh r0, [r0] - movs r1, 0x1 - mov r10, r1 - cmp r0, 0x4 - bls _081A77A8 - movs r4, 0x3 - mov r10, r4 - cmp r0, 0x9 - bhi _081A77A8 - movs r0, 0x2 - mov r10, r0 -_081A77A8: - movs r1, 0 - str r1, [sp, 0x4] - ldr r7, =gUnknown_03001290 -_081A77AE: - movs r4, 0 - mov r9, r4 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0x22 - bhi _081A77DC - movs r0, 0x80 - b _081A77FC - .pool -_081A77DC: - cmp r0, 0x3B - bhi _081A77E4 - movs r0, 0x20 - b _081A77FC -_081A77E4: - cmp r0, 0x4F - bhi _081A77EC - movs r0, 0x40 - b _081A77FC -_081A77EC: - cmp r1, 0x59 - bhi _081A77FA - movs r0, 0x7 - b _081A77FC -_081A77F4: - movs r0, 0x1 - mov r9, r0 - b _081A786E -_081A77FA: - movs r0, 0x10 -_081A77FC: - str r0, [r7] - ldr r0, =gUnknown_03001290 - ldr r0, [r0] - ldr r1, [sp, 0x4] - cmp r1, r0 - beq _081A7874 - str r0, [sp, 0x4] - movs r4, 0 - mov r8, r4 - movs r6, 0 -_081A7810: - mov r1, sp - adds r0, r1, r6 - ldrb r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x37 - bl GetMonData - bl pokemon_ailments_get_primary - lsls r0, 24 - cmp r0, 0 - bne _081A7860 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _081A7860 - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - ldr r1, [r7] - adds r0, r4, 0 - bl sub_81A767C - lsls r0, 24 - cmp r0, 0 - beq _081A77F4 -_081A7860: - cmp r8, r10 - beq _081A786E - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x2 - bls _081A7810 -_081A786E: - mov r4, r8 - cmp r4, 0 - beq _081A78CC -_081A7874: - mov r0, r9 - cmp r0, 0 - beq _081A77AE - ldr r0, =gUnknown_03001290 - ldr r0, [r0] - cmp r0, 0x20 - beq _081A7898 - cmp r0, 0x20 - bhi _081A78D0 - cmp r0, 0x7 - beq _081A78D0 - cmp r0, 0x10 - beq _081A78A4 - b _081A78D0 - .pool -_081A7898: - ldr r1, =gUnknown_0300128D - movs r0, 0x1 - b _081A78D4 - .pool -_081A78A4: - bl Random - lsls r0, 16 - lsrs r1, r0, 16 - movs r2, 0x1 - ands r1, r2 - cmp r1, 0 - beq _081A78C0 - ldr r0, =gUnknown_0300128D - strb r2, [r0] - b _081A78D6 - .pool -_081A78C0: - ldr r0, =gUnknown_0300128D - strb r1, [r0] - b _081A78D6 - .pool -_081A78CC: - movs r0, 0 - b _081A7956 -_081A78D0: - ldr r1, =gUnknown_0300128D - movs r0, 0 -_081A78D4: - strb r0, [r1] -_081A78D6: - movs r1, 0 - mov r8, r1 - movs r6, 0 -_081A78DC: - mov r4, sp - adds r0, r4, r6 - ldrb r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x37 - bl GetMonData - bl pokemon_ailments_get_primary - lsls r0, 24 - cmp r0, 0 - bne _081A7946 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _081A7946 - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - ldr r7, =gUnknown_03001290 - ldr r1, [r7] - adds r0, r5, 0 - bl sub_81A7628 - lsls r0, 24 - cmp r0, 0 - bne _081A7946 - ldr r1, [r7] - adds r0, r4, 0 - bl sub_81A767C - lsls r0, 24 - cmp r0, 0 - bne _081A7946 - adds r0, r5, 0 - movs r1, 0x37 - adds r2, r7, 0 - bl SetMonData -_081A7946: - cmp r8, r10 - beq _081A7954 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x2 - bls _081A78DC -_081A7954: - movs r0, 0x1 -_081A7956: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A7728 - - thumb_func_start sub_81A7974 -sub_81A7974: @ 81A7974 - push {r4-r7,lr} - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000cb2 - adds r0, r1 - ldrh r0, [r0] - movs r7, 0x1 - cmp r0, 0x4 - bls _081A798E - movs r7, 0x3 - cmp r0, 0x9 - bhi _081A798E - movs r7, 0x2 -_081A798E: - movs r6, 0 - movs r5, 0 - b _081A79A2 - .pool -_081A799C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_081A79A2: - cmp r5, 0x2 - bhi _081A79D8 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - bl pokemon_ailments_get_primary - lsls r0, 24 - cmp r0, 0 - bne _081A79D4 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _081A79D4 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_081A79D4: - cmp r6, r7 - bne _081A799C -_081A79D8: - cmp r6, 0 - beq _081A79E4 - movs r0, 0x1 - b _081A79E6 - .pool -_081A79E4: - movs r0, 0 -_081A79E6: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81A7974 - - thumb_func_start sub_81A79EC -sub_81A79EC: @ 81A79EC - push {r4-r6,lr} - sub sp, 0x8 - ldr r1, =gSaveBlock2Ptr - ldr r0, [r1] - movs r4, 0xE1 - lsls r4, 4 - adds r0, r4 - ldrb r2, [r0] - movs r3, 0x78 - ands r3, r2 - adds r5, r1, 0 - cmp r3, 0x40 - bne _081A7A10 - lsls r0, r2, 25 - lsrs r0, 28 - b _081A7B48 - .pool -_081A7A10: - ldr r0, =gSpecialVar_0x8007 - lsls r1, r2, 29 - ldrh r0, [r0] - lsrs r1, 29 - cmp r0, r1 - bne _081A7A34 - cmp r3, 0x18 - bne _081A7A24 - bl sub_81A7728 -_081A7A24: - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - lsls r0, 25 - lsrs r0, 28 - b _081A7B48 - .pool -_081A7A34: - movs r2, 0 - ldr r3, =gUnknown_0861266C - movs r1, 0 -_081A7A3A: - mov r4, sp - adds r0, r4, r2 - strb r1, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _081A7A3A - movs r4, 0x8 - ldr r0, [r5] - movs r6, 0xE1 - lsls r6, 4 - adds r0, r6 - ldrb r0, [r0] - lsls r0, 25 - lsrs r0, 28 - adds r0, r3 - ldrb r1, [r0] - movs r2, 0 - adds r5, r3, 0 - movs r3, 0x1 -_081A7A64: - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, r1 - bne _081A7A78 - mov r6, sp - adds r0, r6, r2 - strb r3, [r0] - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081A7A78: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _081A7A64 - mov r0, sp - ldrb r0, [r0, 0x7] - cmp r0, 0x1 - beq _081A7AA0 - bl sub_81A8554 - lsls r0, 24 - cmp r0, 0 - bne _081A7AA0 - mov r1, sp - movs r0, 0x1 - strb r0, [r1, 0x7] - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081A7AA0: - mov r0, sp - ldrb r0, [r0, 0x3] - cmp r0, 0x1 - beq _081A7ABE - bl sub_81A7974 - lsls r0, 24 - cmp r0, 0 - bne _081A7ABE - mov r1, sp - movs r0, 0x1 - strb r0, [r1, 0x3] - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081A7ABE: - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0xE1 - lsls r1, 4 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081A7AFA - mov r0, sp - ldrb r0, [r0, 0x1] - cmp r0, 0x1 - beq _081A7AE6 - mov r1, sp - movs r0, 0x1 - strb r0, [r1, 0x1] - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081A7AE6: - mov r0, sp - ldrb r0, [r0, 0x4] - cmp r0, 0x1 - beq _081A7AFA - mov r1, sp - movs r0, 0x1 - strb r0, [r1, 0x4] - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081A7AFA: - adds r0, r4, 0 - bl AllocZeroed - adds r5, r0, 0 - movs r3, 0 - movs r2, 0 -_081A7B06: - mov r6, sp - adds r0, r6, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _081A7B1C - adds r1, r3, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r1, r5, r1 - strb r2, [r1] -_081A7B1C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _081A7B06 - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r4, 0 - bl __modsi3 - adds r0, r5, r0 - ldrb r4, [r0] - adds r0, r5, 0 - bl Free - cmp r4, 0x3 - bne _081A7B46 - bl sub_81A7728 -_081A7B46: - adds r0, r4, 0 -_081A7B48: - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A79EC - - thumb_func_start sub_81A7B58 -sub_81A7B58: @ 81A7B58 - push {r4,lr} - ldr r4, =gUnknown_03001294 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x19 - bl __umodsi3 - strb r0, [r4] - ldr r1, =gUnknown_0861231C - ldrb r0, [r4] - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0] - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A7B58 - - thumb_func_start sub_81A7B84 -sub_81A7B84: @ 81A7B84 - ldr r0, =gUnknown_0300128E - ldrb r0, [r0] - bx lr - .pool - thumb_func_end sub_81A7B84 - - thumb_func_start TryGenerateBattlePikeWildMon -TryGenerateBattlePikeWildMon: @ 81A7B90 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - bl GetBattlePikeWildMonHeaderId - lsls r0, 24 - lsrs r6, r0, 24 - ldr r7, =gSaveBlock2Ptr - ldr r0, [r7] - ldr r4, =0x00000ca9 - adds r0, r4 - ldrb r0, [r0] - lsls r0, 30 - ldr r1, =gUnknown_08612314 - lsrs r0, 28 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x4] - ldr r0, =gEnemyParty - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - lsls r0, r5, 16 - lsrs r0, 16 - bl sub_81A890C - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, [r7] - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _081A7C1C - bl GetHighestLevelInPlayerParty - adds r7, r0, 0 - cmp r7, 0x3B - ble _081A7C08 - lsls r0, r6, 2 - ldr r1, [sp, 0x4] - adds r0, r1 - ldr r1, [r0] - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x2] - subs r7, r0 - cmp r7, 0x3B - bgt _081A7C32 -_081A7C08: - movs r7, 0x3C - b _081A7C32 - .pool -_081A7C1C: - lsls r0, r6, 2 - ldr r2, [sp, 0x4] - adds r0, r2 - ldr r1, [r0] - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x2] - movs r0, 0x32 - subs r7, r0, r1 -_081A7C32: - mov r0, r8 - cmp r0, 0x1 - bne _081A7C4A - lsls r0, r7, 24 - lsrs r0, 24 - bl sub_81A88B0 - lsls r0, 24 - cmp r0, 0 - bne _081A7C4A - movs r0, 0 - b _081A7CE2 -_081A7C4A: - ldr r0, =gEnemyParty - ldr r1, =gBaseStats - mov r8, r1 - lsls r6, 2 - mov r9, r6 - ldr r2, [sp, 0x4] - add r2, r9 - mov r10, r2 - ldr r1, [r2] - lsls r6, r5, 1 - adds r4, r6, r5 - lsls r4, 2 - adds r1, r4, r1 - ldrh r2, [r1] - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - add r1, r8 - ldrb r2, [r1, 0x13] - movs r1, 0xCA - lsls r1, 1 - muls r2, r1 - lsls r1, r7, 2 - ldr r3, =gExperienceTables - adds r1, r3 - adds r2, r1 - movs r1, 0x19 - bl SetMonData - mov r1, r10 - ldr r0, [r1] - adds r4, r0 - ldrh r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0, 0x17] - mov r7, r9 - cmp r0, 0 - beq _081A7CA8 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ands r0, r1 -_081A7CA8: - str r0, [sp] - ldr r0, =gEnemyParty - movs r1, 0x2E - mov r2, sp - bl SetMonData - movs r4, 0 - adds r0, r6, r5 - lsls r6, r0, 2 -_081A7CBA: - ldr r2, [sp, 0x4] - adds r0, r7, r2 - ldr r0, [r0] - adds r0, r6, r0 - lsls r1, r4, 1 - adds r0, 0x4 - adds r0, r1 - ldrh r1, [r0] - lsls r2, r4, 24 - lsrs r2, 24 - ldr r0, =gEnemyParty - bl SetMonMoveSlot - adds r4, 0x1 - cmp r4, 0x3 - ble _081A7CBA - ldr r0, =gEnemyParty - bl CalculateMonStats - movs r0, 0x1 -_081A7CE2: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end TryGenerateBattlePikeWildMon - - thumb_func_start GetBattlePikeWildMonHeaderId -GetBattlePikeWildMonHeaderId: @ 81A7D00 - push {lr} - ldr r0, =gSaveBlock2Ptr - ldr r1, [r0] - ldr r2, =0x00000ca9 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r2, =0x00000e04 - adds r1, r2 - adds r1, r0 - ldrh r1, [r1] - adds r2, r1, 0 - movs r0, 0x8C - lsls r0, 1 - cmp r1, r0 - bhi _081A7D34 - movs r1, 0 - b _081A7D4C - .pool -_081A7D34: - movs r0, 0x8C - lsls r0, 2 - cmp r1, r0 - bhi _081A7D40 - movs r1, 0x1 - b _081A7D4C -_081A7D40: - movs r0, 0xD2 - lsls r0, 2 - movs r1, 0x3 - cmp r2, r0 - bhi _081A7D4C - movs r1, 0x2 -_081A7D4C: - adds r0, r1, 0 - pop {r1} - bx r1 - thumb_func_end GetBattlePikeWildMonHeaderId - - thumb_func_start sub_81A7D54 -sub_81A7D54: @ 81A7D54 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, =gUnknown_08612688 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_081A7D66: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _081A7D66 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7D54 - - thumb_func_start sub_81A7D8C -sub_81A7D8C: @ 81A7D8C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _081A7DA4 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _081A7DC8 -_081A7DA4: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x16] - adds r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _081A7DBC - movs r0, 0x10 - strh r0, [r4, 0x16] -_081A7DBC: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, =0x00002d6b - bl BlendPalettes -_081A7DC8: - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0xF - ble _081A7DDA - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] -_081A7DDA: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A7D8C - - thumb_func_start sub_81A7DE8 -sub_81A7DE8: @ 81A7DE8 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _081A7E00 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _081A7E22 -_081A7E00: - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x16] - ldrh r1, [r4, 0x12] - subs r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - cmp r0, 0 - bge _081A7E16 - movs r0, 0 - strh r0, [r4, 0x16] -_081A7E16: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, =0x00002d6b - bl BlendPalettes -_081A7E22: - movs r0, 0x16 - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _081A7E56 - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _081A7E50 - ldr r0, =sub_81A7D54 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _081A7E56 - .pool -_081A7E50: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - strh r1, [r4, 0x8] -_081A7E56: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81A7DE8 - - thumb_func_start sub_81A7E60 -sub_81A7E60: @ 81A7E60 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r3, [sp, 0x18] - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r0, =sub_81A7D54 - movs r1, 0x3 - str r3, [sp] - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, r8 - strh r0, [r1, 0xA] - strh r4, [r1, 0xC] - strh r5, [r1, 0xE] - strh r6, [r1, 0x10] - ldr r3, [sp] - strh r3, [r1, 0x12] - strh r0, [r1, 0x14] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7E60 - - thumb_func_start sub_81A7EC4 -sub_81A7EC4: @ 81A7EC4 - push {lr} - ldr r0, =sub_81A7D54 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _081A7EDC - movs r0, 0 - b _081A7EDE - .pool -_081A7EDC: - movs r0, 0x1 -_081A7EDE: - pop {r1} - bx r1 - thumb_func_end sub_81A7EC4 - - thumb_func_start sub_81A7EE4 -sub_81A7EE4: @ 81A7EE4 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _081A7F1C - adds r0, r2, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x3 - movs r3, 0x2 - bl sub_81A7E60 - b _081A7F30 - .pool -_081A7F1C: - bl sub_81A7EC4 - lsls r0, 24 - cmp r0, 0 - beq _081A7F30 - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_081A7F30: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81A7EE4 - - thumb_func_start sub_81A7F38 -sub_81A7F38: @ 81A7F38 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - cmp r0, 0 - bne _081A7F50 - b _081A807A -_081A7F50: - movs r0, 0 - mov r8, r0 -_081A7F54: - mov r0, sp - add r0, r8 - mov r1, r8 - strb r1, [r0] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x2 - bls _081A7F54 - movs r5, 0 -_081A7F6C: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r4, r0, 24 - mov r2, sp - add r2, r8 - ldrb r3, [r2] - mov r0, sp - adds r1, r0, r4 - ldrb r0, [r1] - strb r0, [r2] - strb r3, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x9 - bls _081A7F6C - movs r1, 0 - mov r8, r1 -_081A7FB0: - movs r0, 0 - mov r10, r0 - mov r4, sp - add r4, r8 - ldrb r1, [r4] - movs r0, 0x64 - muls r1, r0 - ldr r0, =gPlayerParty - adds r7, r1, r0 - adds r0, r7, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r7, 0 - movs r1, 0x3A - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - str r4, [sp, 0x8] - cmp r5, r6 - bcc _081A8044 - adds r0, r7, 0 - movs r1, 0x37 - bl GetMonData - bl pokemon_ailments_get_primary - lsls r0, 24 - cmp r0, 0 - beq _081A7FFC - movs r0, 0x1 - mov r10, r0 - b _081A8048 - .pool -_081A7FFC: - adds r0, r7, 0 - movs r1, 0x15 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r4, 0 - b _081A8014 -_081A800E: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081A8014: - cmp r4, 0x3 - bhi _081A8048 - adds r1, r4, 0 - adds r1, 0xD - adds r0, r7, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r1, r9 - adds r2, r4, 0 - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r6, r0, 24 - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r7, 0 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r6 - bcs _081A800E -_081A8044: - movs r1, 0x1 - mov r10, r1 -_081A8048: - mov r0, r10 - cmp r0, 0x1 - bne _081A806C - ldr r0, [sp, 0x8] - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - bl sub_81A7594 - ldr r0, [sp, 0x4] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - cmp r0, 0 - beq _081A807A -_081A806C: - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x2 - bls _081A7FB0 -_081A807A: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A7F38 - - thumb_func_start sub_81A8090 -sub_81A8090: @ 81A8090 - push {r4,lr} - ldr r4, =gSpecialVar_Result - bl InBattlePike - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A8090 - - thumb_func_start InBattlePike -InBattlePike: @ 81A80A8 - push {lr} - movs r2, 0 - ldr r0, =gMapHeader - ldrh r1, [r0, 0x12] - ldr r3, =0xfffffea1 - adds r0, r1, r3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _081A80CA - movs r0, 0xB3 - lsls r0, 1 - cmp r1, r0 - beq _081A80CA - adds r0, 0x1 - cmp r1, r0 - bne _081A80CC -_081A80CA: - movs r2, 0x1 -_081A80CC: - adds r0, r2, 0 - pop {r1} - bx r1 - .pool - thumb_func_end InBattlePike - - thumb_func_start sub_81A80DC -sub_81A80DC: @ 81A80DC - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, =gSpecialVar_Result - movs r0, 0 - strh r0, [r4] - movs r0, 0x1 - bl sub_81A8590 - lsls r0, 24 - cmp r0, 0 - beq _081A8138 - movs r0, 0x1 - strh r0, [r4] - bl Random - ldr r5, =gSaveBlock2Ptr - ldr r4, [r5] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - movs r3, 0xE1 - lsls r3, 4 - adds r4, r3 - movs r1, 0x7 - ands r1, r0 - ldrb r2, [r4] - movs r0, 0x8 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4] - ldr r2, [r5] - adds r2, r3 - ldrb r1, [r2] - movs r0, 0x79 - negs r0, r0 - ands r0, r1 - movs r1, 0x40 - b _081A8248 - .pool -_081A8138: - bl Random - ldr r7, =gSaveBlock2Ptr - ldr r4, [r7] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - movs r3, 0xE1 - lsls r3, 4 - adds r4, r3 - movs r1, 0x7 - ands r1, r0 - ldrb r2, [r4] - movs r0, 0x8 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4] - ldr r0, [r7] - adds r0, r3 - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - movs r6, 0x8 - cmp r0, 0 - beq _081A8172 - movs r6, 0x6 -_081A8172: - adds r0, r6, 0 - bl AllocZeroed - adds r5, r0, 0 - movs r2, 0 - movs r3, 0 - cmp r2, r6 - bcs _081A81BE - adds r4, r7, 0 -_081A8184: - ldr r0, [r4] - movs r1, 0xE1 - lsls r1, 4 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081A81B0 - cmp r2, 0x1 - beq _081A81B4 - cmp r2, 0x4 - beq _081A81B4 - adds r1, r3, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r1, r5, r1 - strb r2, [r1] - b _081A81B4 - .pool -_081A81B0: - adds r0, r5, r2 - strb r2, [r0] -_081A81B4: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r6 - bcc _081A8184 -_081A81BE: - bl Random - ldr r7, =gSaveBlock2Ptr - ldr r4, [r7] - lsls r0, 16 - lsrs r0, 16 - adds r1, r6, 0 - bl __modsi3 - adds r0, r5, r0 - ldrb r0, [r0] - movs r6, 0xE1 - lsls r6, 4 - adds r4, r6 - movs r1, 0xF - ands r1, r0 - lsls r1, 3 - ldrb r2, [r4] - movs r0, 0x79 - negs r0, r0 - mov r8, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4] - adds r0, r5, 0 - bl Free - ldr r0, [r7] - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x78 - ands r0, r1 - cmp r0, 0x18 - bne _081A821C - bl sub_81A7974 - lsls r0, 24 - cmp r0, 0 - bne _081A821C - ldr r2, [r7] - adds r2, r6 - ldrb r1, [r2] - mov r0, r8 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r2] -_081A821C: - ldr r5, =gSaveBlock2Ptr - ldr r0, [r5] - movs r4, 0xE1 - lsls r4, 4 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x78 - ands r0, r1 - cmp r0, 0x38 - bne _081A824C - bl sub_81A8554 - lsls r0, 24 - cmp r0, 0 - bne _081A824C - ldr r2, [r5] - adds r2, r4 - ldrb r1, [r2] - movs r0, 0x79 - negs r0, r0 - ands r0, r1 - movs r1, 0x10 -_081A8248: - orrs r0, r1 - strb r0, [r2] -_081A824C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A80DC - - thumb_func_start sub_81A825C -sub_81A825C: @ 81A825C - ldr r1, =gSpecialVar_Result - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - movs r2, 0xE1 - lsls r2, 4 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 29 - lsrs r0, 29 - strh r0, [r1] - bx lr - .pool - thumb_func_end sub_81A825C - - thumb_func_start sub_81A827C -sub_81A827C: @ 81A827C - ldr r2, =gSpecialVar_Result - ldr r1, =gUnknown_0861266C - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - movs r3, 0xE1 - lsls r3, 4 - adds r0, r3 - ldrb r0, [r0] - lsls r0, 25 - lsrs r0, 28 - adds r0, r1 - ldrb r0, [r0] - strh r0, [r2] - bx lr - .pool - thumb_func_end sub_81A827C - - thumb_func_start sub_81A82A4 -sub_81A82A4: @ 81A82A4 - push {r4-r7,lr} - lsls r0, 24 - movs r7, 0x6 - cmp r0, 0 - bne _081A82B0 - movs r7, 0x1 -_081A82B0: - ldr r4, =gSaveBlock2Ptr - ldr r1, [r4] - ldr r2, =0x00000ca9 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r2, =0x00000e04 - adds r1, r2 - adds r1, r0 - ldrh r0, [r1] - movs r1, 0xE - bl __udivsi3 - lsls r0, 16 - lsrs r6, r0, 16 - adds r5, r4, 0 -_081A82D2: - lsls r0, r6, 24 - lsrs r0, 24 - adds r1, r7, 0 - bl sub_8162548 - lsls r0, 16 - lsrs r4, r0, 16 - movs r3, 0 - ldr r1, [r5] - ldr r2, =0x00000cb2 - adds r0, r1, r2 - ldrh r0, [r0] - subs r2, r0, 0x1 - cmp r3, r2 - bge _081A831A - ldr r0, =0x00000cb4 - adds r1, r0 - b _081A8314 - .pool -_081A830C: - adds r1, 0x2 - adds r3, 0x1 - cmp r3, r2 - bge _081A831A -_081A8314: - ldrh r0, [r1] - cmp r0, r4 - bne _081A830C -_081A831A: - ldr r0, [r5] - ldr r1, =0x00000cb2 - adds r0, r1 - ldrh r0, [r0] - subs r0, 0x1 - cmp r3, r0 - bne _081A82D2 - ldr r5, =gTrainerBattleOpponent_A - strh r4, [r5] - ldr r1, =gFacilityTrainers - ldr r0, =gBattleFrontierTrainers - str r0, [r1] - ldrh r0, [r5] - movs r1, 0 - bl SetBattleFacilityTrainerGfxId - ldr r0, =gSaveBlock2Ptr - ldr r1, [r0] - ldr r0, =0x00000cb2 - adds r2, r1, r0 - ldrh r0, [r2] - cmp r0, 0xD - bhi _081A8356 - subs r0, 0x1 - lsls r0, 1 - ldr r2, =0x00000cb4 - adds r1, r2 - adds r1, r0 - ldrh r0, [r5] - strh r0, [r1] -_081A8356: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A82A4 - thumb_func_start sub_81A8374 -sub_81A8374: @ 81A8374 - push {r4-r7,lr} - ldr r4, =gSaveBlock2Ptr - ldr r1, [r4] - ldr r2, =0x00000ca9 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r0, 29 - ldr r2, =0x00000e04 - adds r1, r2 - adds r1, r0 - ldrh r0, [r1] - movs r1, 0xE - bl __udivsi3 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, =gFacilityTrainers - ldr r0, =gBattleFrontierTrainers - str r0, [r1] - lsls r7, r5, 24 - adds r6, r4, 0 -_081A83A0: - lsls r0, r5, 24 - lsrs r0, 24 - movs r1, 0x1 - bl sub_8162548 - lsls r0, 16 - lsrs r4, r0, 16 - movs r3, 0 - ldr r1, [r6] - ldr r2, =0x00000cb2 - adds r0, r1, r2 - ldrh r0, [r0] - subs r2, r0, 0x1 - cmp r3, r2 - bge _081A83EE - ldr r0, =0x00000cb4 - adds r1, r0 - b _081A83E8 - .pool -_081A83E0: - adds r1, 0x2 - adds r3, 0x1 - cmp r3, r2 - bge _081A83EE -_081A83E8: - ldrh r0, [r1] - cmp r0, r4 - bne _081A83E0 -_081A83EE: - ldr r0, [r6] - ldr r1, =0x00000cb2 - adds r0, r1 - ldrh r0, [r0] - subs r0, 0x1 - cmp r3, r0 - bne _081A83A0 - ldr r5, =gTrainerBattleOpponent_A - strh r4, [r5] - ldrh r0, [r5] - movs r1, 0 - bl SetBattleFacilityTrainerGfxId - ldr r3, =gSaveBlock2Ptr - ldr r1, [r3] - ldr r0, =0x00000cb2 - adds r2, r1, r0 - ldrh r0, [r2] - cmp r0, 0xE - bhi _081A8424 - subs r0, 0x1 - lsls r0, 1 - ldr r2, =0x00000cb4 - adds r1, r2 - adds r1, r0 - ldrh r0, [r5] - strh r0, [r1] -_081A8424: - adds r5, r3, 0 -_081A8426: - lsrs r0, r7, 24 - movs r1, 0x1 - bl sub_8162548 - lsls r0, 16 - lsrs r4, r0, 16 - movs r3, 0 - ldr r1, [r5] - ldr r2, =0x00000cb2 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r3, r0 - bge _081A8466 - adds r2, 0x2 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, r4 - beq _081A8466 - ldr r0, =gSaveBlock2Ptr - ldr r1, [r0] - subs r2, 0x2 - adds r0, r1, r2 - ldrh r2, [r0] - ldr r0, =0x00000cb4 - adds r1, r0 -_081A8458: - adds r1, 0x2 - adds r3, 0x1 - cmp r3, r2 - bge _081A8466 - ldrh r0, [r1] - cmp r0, r4 - bne _081A8458 -_081A8466: - ldr r0, [r5] - ldr r1, =0x00000cb2 - adds r0, r1 - ldrh r0, [r0] - cmp r3, r0 - bne _081A8426 - ldr r5, =gTrainerBattleOpponent_B - strh r4, [r5] - ldrh r0, [r5] - movs r1, 0x1 - bl SetBattleFacilityTrainerGfxId - ldr r0, =gSaveBlock2Ptr - ldr r1, [r0] - ldr r0, =0x00000cb2 - adds r2, r1, r0 - ldrh r0, [r2] - cmp r0, 0xD - bhi _081A849A - subs r0, 0x2 - lsls r0, 1 - ldr r2, =0x00000cb4 - adds r1, r2 - adds r1, r0 - ldrh r0, [r5] - strh r0, [r1] -_081A849A: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A8374 - - thumb_func_start sub_81A84B4 -sub_81A84B4: @ 81A84B4 - push {r4,r5,lr} - movs r2, 0 - ldr r5, =gSaveBlock2Ptr - ldr r4, =0x00000cb4 - ldr r0, =0x0000ffff - adds r3, r0, 0 -_081A84C0: - ldr r1, [r5] - lsls r0, r2, 1 - adds r1, r4 - adds r1, r0 - ldrh r0, [r1] - orrs r0, r3 - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xD - bls _081A84C0 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A84B4 - - thumb_func_start sub_81A84EC -sub_81A84EC: @ 81A84EC - push {lr} - ldr r0, =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0 - bne _081A8524 - ldr r3, =gTrainerBattleOpponent_A - ldrh r1, [r3] - ldr r0, =0x0000012b - cmp r1, r0 - bhi _081A8542 - ldr r2, =gFacilityTrainers - movs r0, 0x34 - muls r1, r0 - ldr r0, [r2] - adds r0, r1 - adds r0, 0xC - bl FrontierSpeechToString - b _081A8542 - .pool -_081A8524: - cmp r0, 0x1 - bne _081A8542 - ldr r3, =gTrainerBattleOpponent_B - ldrh r1, [r3] - ldr r0, =0x0000012b - cmp r1, r0 - bhi _081A8542 - ldr r2, =gFacilityTrainers - movs r0, 0x34 - muls r1, r0 - ldr r0, [r2] - adds r0, r1 - adds r0, 0xC - bl FrontierSpeechToString -_081A8542: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A84EC - thumb_func_start sub_81A8554 -sub_81A8554: @ 81A8554 - push {r4-r6,lr} - ldr r5, =gPlayerParty - movs r6, 0 - movs r4, 0 -_081A855C: - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _081A856E - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_081A856E: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, 0x64 - cmp r4, 0x2 - bls _081A855C - cmp r6, 0x1 - bhi _081A8588 - movs r0, 0x1 - b _081A858A - .pool -_081A8588: - movs r0, 0 -_081A858A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81A8554 - - thumb_func_start sub_81A8590 -sub_81A8590: @ 81A8590 - push {r4-r6,lr} - lsls r0, 24 - movs r6, 0 - ldr r1, =gSaveBlock2Ptr - ldr r2, [r1] - ldr r3, =0x00000ca9 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 30 - lsrs r1, 29 - ldr r3, =0x00000e04 - adds r2, r3 - adds r2, r1 - lsrs r4, r0, 24 - ldrh r2, [r2] - adds r0, r4, r2 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x5 - bl GetPlayerSymbolCountForFacility - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - blt _081A85F0 - cmp r2, 0x1 - bgt _081A85F0 - ldr r1, =gUnknown_086125DC - adds r0, r2, 0 - adds r0, 0x14 - adds r0, r1 - ldrb r0, [r0] - ldrb r1, [r1, 0x17] - subs r0, r1 - cmp r4, r0 - bne _081A8634 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - b _081A8634 - .pool -_081A85F0: - ldr r5, =gUnknown_086125DC - movs r0, 0x5 - lsls r3, r0, 2 - adds r0, r3, r5 - ldrb r1, [r0] - adds r0, r5, 0x3 - adds r0, r3, r0 - ldrb r2, [r0] - subs r1, r2 - cmp r4, r1 - bne _081A8610 - movs r6, 0x3 - b _081A8634 - .pool -_081A8610: - adds r0, r5, 0x1 - adds r0, r3, r0 - ldrb r1, [r0] - subs r0, r1, r2 - cmp r4, r0 - beq _081A8632 - cmp r4, r1 - bls _081A8634 - subs r0, r4, r1 - adds r0, r2 - adds r1, r5, 0x2 - adds r1, r3, r1 - ldrb r1, [r1] - bl __modsi3 - cmp r0, 0 - bne _081A8634 -_081A8632: - movs r6, 0x4 -_081A8634: - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81A8590 - - thumb_func_start sub_81A863C -sub_81A863C: @ 81A863C - push {r4,lr} - ldr r4, =gSpecialVar_Result - movs r0, 0 - bl sub_81A8590 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A863C - - thumb_func_start sub_81A8658 -sub_81A8658: @ 81A8658 - push {r4,lr} - ldr r3, =gUnknown_08612675 - ldr r2, =gSpecialVar_0x8007 - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0xE1 - lsls r1, 4 - adds r0, r1 - ldrb r1, [r0] - lsls r1, 29 - lsrs r1, 29 - lsls r0, r1, 1 - adds r0, r1 - ldrh r2, [r2] - adds r0, r2 - adds r0, r3 - ldrb r4, [r0] - adds r0, r4, 0 - bl sub_81A7F38 - ldr r0, =gSpecialVar_Result - strh r4, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A8658 - - thumb_func_start sub_81A869C -sub_81A869C: @ 81A869C - ldr r0, =gSaveBlock2Ptr - ldr r2, [r0] - ldr r0, =gSpecialVar_0x8005 - ldrb r1, [r0] - movs r0, 0xE1 - lsls r0, 4 - adds r2, r0 - lsls r1, 7 - ldrb r3, [r2] - movs r0, 0x7F - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - bx lr - .pool - thumb_func_end sub_81A869C - - thumb_func_start sub_81A86C0 -sub_81A86C0: @ 81A86C0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r1, =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] - movs r0, 0 - mov r10, r0 -_081A86D4: - movs r0, 0 - mov r9, r0 - movs r0, 0x64 - mov r1, r10 - muls r1, r0 - ldr r0, =gPlayerParty - adds r7, r1, r0 - adds r0, r7, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r7, 0 - movs r1, 0x3A - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - cmp r4, r5 - bcc _081A8762 - adds r0, r7, 0 - movs r1, 0x37 - bl GetMonData - bl pokemon_ailments_get_primary - lsls r0, 24 - cmp r0, 0 - bne _081A8762 - adds r0, r7, 0 - movs r1, 0x15 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r6, 0 - b _081A8732 - .pool -_081A872C: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_081A8732: - cmp r6, 0x3 - bhi _081A8766 - adds r1, r6, 0 - adds r1, 0xD - adds r0, r7, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r1, r8 - adds r2, r6, 0 - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r5, r0, 24 - adds r1, r6, 0 - adds r1, 0x11 - adds r0, r7, 0 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r5 - bcs _081A872C -_081A8762: - movs r0, 0x1 - mov r9, r0 -_081A8766: - mov r0, r9 - cmp r0, 0x1 - bne _081A8778 - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - b _081A8786 - .pool -_081A8778: - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - cmp r0, 0x2 - bls _081A86D4 -_081A8786: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81A86C0 - - thumb_func_start sub_81A8794 -sub_81A8794: @ 81A8794 - push {r4-r7,lr} - movs r5, 0 - ldr r7, =gSaveBlock1Ptr - ldr r6, =gSaveBlock2Ptr -_081A879C: - ldr r0, [r6] - lsls r4, r5, 1 - ldr r1, =0x00000caa - adds r0, r1 - adds r0, r4 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - movs r2, 0xEA - lsls r2, 1 - adds r1, r2 - ldr r0, [r7] - adds r0, r1 - movs r1, 0xC - bl GetMonData - ldr r1, [r6] - ldr r2, =0x00000e12 - adds r1, r2 - adds r1, r4 - strh r0, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _081A879C - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A8794 - - thumb_func_start sub_81A87E8 -sub_81A87E8: @ 81A87E8 - push {r4,lr} - movs r4, 0 -_081A87EC: - ldr r0, =gSaveBlock2Ptr - ldr r2, [r0] - lsls r3, r4, 1 - ldr r1, =0x00000caa - adds r0, r2, r1 - adds r0, r3 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - 100 - adds r0, r1 - ldr r1, =0x00000e12 - adds r3, r1 - adds r2, r3 - movs r1, 0xC - bl SetMonData - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _081A87EC - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A87E8 - - thumb_func_start sub_81A8830 -sub_81A8830: @ 81A8830 - push {r4-r6,lr} - ldr r3, =gSaveBlock2Ptr - ldr r1, [r3] - ldr r2, =0x00000ca9 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 30 - lsrs r5, r0, 30 - ldr r0, =0x00000ca8 - adds r1, r0 - movs r4, 0 - strb r4, [r1] - ldr r1, [r3] - ldr r6, =0x00000cb2 - adds r0, r1, r6 - strh r4, [r0] - adds r1, r2 - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r3, [r3] - ldr r0, =0x00000cdc - adds r2, r3, r0 - ldr r1, =gUnknown_08612690 - lsls r0, r5, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _081A887C - lsls r1, r5, 1 - ldr r2, =0x00000e04 - adds r0, r3, r2 - adds r0, r1 - strh r4, [r0] -_081A887C: - ldr r0, =gTrainerBattleOpponent_A - strh r4, [r0] - ldr r1, =gBattleOutcome - movs r0, 0 - strb r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81A8830 - - thumb_func_start sub_81A88B0 -sub_81A88B0: @ 81A88B0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, =gPlayerParty - adds r0, r4, 0 - movs r1, 0x6 - bl GetMonData - cmp r0, 0 - bne _081A8904 - adds r0, r4, 0 - bl GetMonAbility - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x33 - beq _081A88D6 - cmp r0, 0x16 - bne _081A8904 -_081A88D6: - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bls _081A8904 - subs r0, 0x5 - cmp r5, r0 - bgt _081A8904 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _081A8904 - movs r0, 0 - b _081A8906 - .pool -_081A8904: - movs r0, 0x1 -_081A8906: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81A88B0 - - thumb_func_start sub_81A890C -sub_81A890C: @ 81A890C - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, =0x0000017b - cmp r2, r0 - bne _081A8920 - movs r1, 0 - b _081A892A - .pool -_081A8920: - ldr r0, =0x00000149 - movs r1, 0x2 - cmp r2, r0 - bne _081A892A - movs r1, 0x1 -_081A892A: - adds r0, r1, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81A890C thumb_func_start sub_81A8934 @ void sub_81A8934(u8) diff --git a/asm/field_screen.s b/asm/field_screen.s index c11aef1b4..8a97644ac 100644 --- a/asm/field_screen.s +++ b/asm/field_screen.s @@ -7851,7 +7851,7 @@ palette_bg_faded_fill_black: @ 80AF020 thumb_func_start pal_fill_for_maplights pal_fill_for_maplights: @ 80AF040 push {r4,lr} - bl get_map_light_from_warp0 + bl GetLastUsedWarpMapType adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 diff --git a/asm/fldeff_80F9BCC.s b/asm/fldeff_80F9BCC.s index 3cfbe215a..a361faa32 100644 --- a/asm/fldeff_80F9BCC.s +++ b/asm/fldeff_80F9BCC.s @@ -2262,8 +2262,8 @@ _080FAEA2: bx r0 thumb_func_end task50_overworld_poison_effect - thumb_func_start overworld_poison_effect -overworld_poison_effect: @ 80FAEA8 + thumb_func_start FldeffPoison_Start +FldeffPoison_Start: @ 80FAEA8 push {lr} movs r0, 0x4F bl PlaySE @@ -2273,7 +2273,7 @@ overworld_poison_effect: @ 80FAEA8 pop {r0} bx r0 .pool - thumb_func_end overworld_poison_effect + thumb_func_end FldeffPoison_Start thumb_func_start FieldPoisonEffectIsRunning FieldPoisonEffectIsRunning: @ 80FAEC0 diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 927a0edd1..8ab0f3ce5 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1251,20 +1251,20 @@ various \battler, 8 .endm - .macro various9 battler - various \battler, 9 + .macro arenajudgmentwindow + various BS_ATTACKER, VARIOUS_ARENA_JUDGMENT_WINDOW .endm - .macro various10 battler - various \battler, 10 + .macro arenaopponentmonlost + various BS_ATTACKER, VARIOUS_ARENA_OPPONENT_MON_LOST .endm - .macro various11 battler - various \battler, 11 + .macro arenaplayermonlost + various BS_ATTACKER, VARIOUS_ARENA_PLAYER_MON_LOST .endm - .macro various12 battler - various \battler, 12 + .macro arenabothmonlost + various BS_ATTACKER, VARIOUS_ARENA_BOTH_MONS_LOST .endm .macro forfeityesnobox battler @@ -1279,12 +1279,12 @@ various \battler, 15 .endm - .macro various16 battler - various \battler, 16 + .macro arenajudmengtstring id + various \id, VARIOUS_ARENA_JUDGMENT_STRING .endm - .macro various17 battler - various \battler, 17 + .macro arenawaitmessage id + various \id, VARIOUS_ARENA_WAIT_STRING .endm .macro waitcry battler @@ -1307,7 +1307,7 @@ various BS_ATTACKER, VARIOUS_VOLUME_UP .endm - .macro various23 battler + .macro setalreadystatusedmoveattempt battler various \battler, 23 .endm diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt index 615026aee..02301ce23 100644 --- a/common_syms/field_camera.txt +++ b/common_syms/field_camera.txt @@ -1,3 +1,3 @@ -gUnknown_03005DD0 -gUnknown_03005DE8 -gUnknown_03005DEC +gFieldCamera +gTotalCameraPixelOffsetY +gTotalCameraPixelOffsetX diff --git a/data/battle_frontier/battle_arena_move_mind_ratings.inc b/data/battle_frontier/battle_arena_move_mind_ratings.inc deleted file mode 100644 index e1d0b26a9..000000000 --- a/data/battle_frontier/battle_arena_move_mind_ratings.inc +++ /dev/null @@ -1,357 +0,0 @@ - .align 2 -gBattleArenaMoveMindRatings:: @ 8611DC0 - .byte 0 @ - - .byte 1 @ Pound - .byte 1 @ Karate Chop - .byte 1 @ Double Slap - .byte 1 @ Comet Punch - .byte 1 @ Mega Punch - .byte 1 @ Pay Day - .byte 1 @ Fire Punch - .byte 1 @ Ice Punch - .byte 1 @ Thunder Punch - .byte 1 @ Scratch - .byte 1 @ Vice Grip - .byte 1 @ Guillotine - .byte 1 @ Razor Wind - .byte 0 @ Swords Dance - .byte 1 @ Cut - .byte 1 @ Gust - .byte 1 @ Wing Attack - .byte 0 @ Whirlwind - .byte 1 @ Fly - .byte 1 @ Bind - .byte 1 @ Slam - .byte 1 @ Vine Whip - .byte 1 @ Stomp - .byte 1 @ Double Kick - .byte 1 @ Mega Kick - .byte 1 @ Jump Kick - .byte 1 @ Rolling Kick - .byte 0 @ Sand-Attack - .byte 1 @ Headbutt - .byte 1 @ Horn Attack - .byte 1 @ Fury Attack - .byte 1 @ Horn Drill - .byte 1 @ Tackle - .byte 1 @ Body Slam - .byte 1 @ Wrap - .byte 1 @ Take Down - .byte 1 @ Thrash - .byte 1 @ Double-Edge - .byte 0 @ Tail Whip - .byte 1 @ Poison Sting - .byte 1 @ Twineedle - .byte 1 @ Pin Missile - .byte 0 @ Leer - .byte 1 @ Bite - .byte 0 @ Growl - .byte 0 @ Roar - .byte 0 @ Sing - .byte 0 @ Supersonic - .byte 1 @ Sonic Boom - .byte 0 @ Disable - .byte 1 @ Acid - .byte 1 @ Ember - .byte 1 @ Flamethrower - .byte 0 @ Mist - .byte 1 @ Water Gun - .byte 1 @ Hydro Pump - .byte 1 @ Surf - .byte 1 @ Ice Beam - .byte 1 @ Blizzard - .byte 1 @ Psybeam - .byte 1 @ Bubble Beam - .byte 1 @ Aurora Beam - .byte 1 @ Hyper Beam - .byte 1 @ Peck - .byte 1 @ Drill Peck - .byte 1 @ Submission - .byte 1 @ Low Kick - .byte 0 @ Counter - .byte 1 @ Seismic Toss - .byte 1 @ Strength - .byte 1 @ Absorb - .byte 1 @ Mega Drain - .byte 0 @ Leech Seed - .byte 0 @ Growth - .byte 1 @ Razor Leaf - .byte 1 @ Solar Beam - .byte 0 @ Poison Powder - .byte 0 @ Stun Spore - .byte 0 @ Sleep Powder - .byte 1 @ Petal Dance - .byte 0 @ String Shot - .byte 1 @ Dragon Rage - .byte 1 @ Fire Spin - .byte 1 @ Thunder Shock - .byte 1 @ Thunderbolt - .byte 0 @ Thunder Wave - .byte 1 @ Thunder - .byte 1 @ Rock Throw - .byte 1 @ Earthquake - .byte 1 @ Fissure - .byte 1 @ Dig - .byte 0 @ Toxic - .byte 1 @ Confusion - .byte 1 @ Psychic - .byte 0 @ Hypnosis - .byte 0 @ Meditate - .byte 0 @ Agility - .byte 1 @ Quick Attack - .byte 1 @ Rage - .byte 0 @ Teleport - .byte 1 @ Night Shade - .byte 0 @ Mimic - .byte 0 @ Screech - .byte 0 @ Double Team - .byte 0 @ Recover - .byte 0 @ Harden - .byte 0 @ Minimize - .byte 0 @ Smokescreen - .byte 0 @ Confuse Ray - .byte 0 @ Withdraw - .byte 0 @ Defense Curl - .byte 0 @ Barrier - .byte 0 @ Light Screen - .byte 0 @ Haze - .byte 0 @ Reflect - .byte 0 @ Focus Energy - .byte 0 @ Bide - .byte 0 @ Metronome - .byte 0 @ Mirror Move - .byte 1 @ Self-Destruct - .byte 1 @ Egg Bomb - .byte 1 @ Lick - .byte 1 @ Smog - .byte 1 @ Sludge - .byte 1 @ Bone Club - .byte 1 @ Fire Blast - .byte 1 @ Waterfall - .byte 1 @ Clamp - .byte 1 @ Swift - .byte 1 @ Skull Bash - .byte 1 @ Spike Cannon - .byte 1 @ Constrict - .byte 0 @ Amnesia - .byte 0 @ Kinesis - .byte 0 @ Soft-Boiled - .byte 1 @ Hi Jump Kick - .byte 0 @ Glare - .byte 1 @ Dream Eater - .byte 0 @ Poison Gas - .byte 1 @ Barrage - .byte 1 @ Leech Life - .byte 0 @ Lovely Kiss - .byte 1 @ Sky Attack - .byte 0 @ Transform - .byte 1 @ Bubble - .byte 1 @ Dizzy Punch - .byte 0 @ Spore - .byte 0 @ Flash - .byte 1 @ Psywave - .byte 0 @ Splash - .byte 0 @ Acid Armor - .byte 1 @ Crabhammer - .byte 1 @ Explosion - .byte 1 @ Fury Swipes - .byte 1 @ Bonemerang - .byte 0 @ Rest - .byte 1 @ Rock Slide - .byte 1 @ Hyper Fang - .byte 0 @ Sharpen - .byte 0 @ Conversion - .byte 1 @ Tri Attack - .byte 1 @ Super Fang - .byte 1 @ Slash - .byte 0 @ Substitute - .byte 1 @ Struggle - .byte 0 @ Sketch - .byte 1 @ Triple Kick - .byte 1 @ Thief - .byte 0 @ Spider Web - .byte 0 @ Mind Reader - .byte 0 @ Nightmare - .byte 1 @ Flame Wheel - .byte 1 @ Snore - .byte 0 @ Curse - .byte 1 @ Flail - .byte 0 @ Conversion 2 - .byte 1 @ Aeroblast - .byte 0 @ Cotton Spore - .byte 1 @ Reversal - .byte 0 @ Spite - .byte 1 @ Powder Snow - .byte -1 @ Protect - .byte 1 @ Mach Punch - .byte 0 @ Scary Face - .byte 1 @ Faint Attack - .byte 0 @ Sweet Kiss - .byte 0 @ Belly Drum - .byte 1 @ Sludge Bomb - .byte 1 @ Mud-Slap - .byte 1 @ Octazooka - .byte 0 @ Spikes - .byte 1 @ Zap Cannon - .byte 0 @ Foresight - .byte 0 @ Destiny Bond - .byte 0 @ Perish Song - .byte 1 @ Icy Wind - .byte -1 @ Detect - .byte 1 @ Bone Rush - .byte 0 @ Lock-On - .byte 1 @ Outrage - .byte 0 @ Sandstorm - .byte 1 @ Giga Drain - .byte -1 @ Endure - .byte 0 @ Charm - .byte 1 @ Rollout - .byte 1 @ False Swipe - .byte 0 @ Swagger - .byte 0 @ Milk Drink - .byte 1 @ Spark - .byte 1 @ Fury Cutter - .byte 1 @ Steel Wing - .byte 0 @ Mean Look - .byte 0 @ Attract - .byte 0 @ Sleep Talk - .byte 0 @ Heal Bell - .byte 1 @ Return - .byte 1 @ Present - .byte 1 @ Frustration - .byte 0 @ Safeguard - .byte 0 @ Pain Split - .byte 1 @ Sacred Fire - .byte 1 @ Magnitude - .byte 1 @ Dynamic Punch - .byte 1 @ Megahorn - .byte 1 @ Dragon Breath - .byte 0 @ Baton Pass - .byte 0 @ Encore - .byte 1 @ Pursuit - .byte 1 @ Rapid Spin - .byte 0 @ Sweet Scent - .byte 1 @ Iron Tail - .byte 1 @ Metal Claw - .byte 1 @ Vital Throw - .byte 0 @ Morning Sun - .byte 0 @ Synthesis - .byte 0 @ Moonlight - .byte 1 @ Hidden Power - .byte 1 @ Cross Chop - .byte 1 @ Twister - .byte 0 @ Rain Dance - .byte 0 @ Sunny Day - .byte 1 @ Crunch - .byte 0 @ Mirror Coat - .byte 0 @ Psych Up - .byte 1 @ Extreme Speed - .byte 1 @ Ancient Power - .byte 1 @ Shadow Ball - .byte 1 @ Future Sight - .byte 1 @ Rock Smash - .byte 1 @ Whirlpool - .byte 1 @ Beat Up - .byte -1 @ Fake Out - .byte 1 @ Uproar - .byte 0 @ Stockpile - .byte 1 @ Spit Up - .byte 0 @ Swallow - .byte 1 @ Heat Wave - .byte 0 @ Hail - .byte 0 @ Torment - .byte 0 @ Flatter - .byte 0 @ Will-O-Wisp - .byte 0 @ Memento - .byte 1 @ Facade - .byte 1 @ Focus Punch - .byte 1 @ Smelling Salt - .byte 0 @ Follow Me - .byte 0 @ Nature Power - .byte 0 @ Charge - .byte 0 @ Taunt - .byte 0 @ Helping Hand - .byte 0 @ Trick - .byte 0 @ Role Play - .byte 0 @ Wish - .byte 0 @ Assist - .byte 0 @ Ingrain - .byte 1 @ Superpower - .byte 0 @ Magic Coat - .byte 0 @ Recycle - .byte 1 @ Revenge - .byte 1 @ Brick Break - .byte 0 @ Yawn - .byte 1 @ Knock Off - .byte 1 @ Endeavor - .byte 1 @ Eruption - .byte 0 @ Skill Swap - .byte 0 @ Imprison - .byte 0 @ Refresh - .byte 0 @ Grudge - .byte 0 @ Snatch - .byte 1 @ Secret Power - .byte 1 @ Dive - .byte 1 @ Arm Thrust - .byte 0 @ Camouflage - .byte 0 @ Tail Glow - .byte 1 @ Luster Purge - .byte 1 @ Mist Ball - .byte 0 @ Feather Dance - .byte 0 @ Teeter Dance - .byte 1 @ Blaze Kick - .byte 0 @ Mud Sport - .byte 1 @ Ice Ball - .byte 1 @ Needle Arm - .byte 0 @ Slack Off - .byte 1 @ Hyper Voice - .byte 1 @ Poison Fang - .byte 1 @ Crush Claw - .byte 1 @ Blast Burn - .byte 1 @ Hydro Cannon - .byte 1 @ Meteor Mash - .byte 1 @ Astonish - .byte 1 @ Weather Ball - .byte 0 @ Aromatherapy - .byte 0 @ Fake Tears - .byte 1 @ Air Cutter - .byte 1 @ Overheat - .byte 0 @ Odor Sleuth - .byte 1 @ Rock Tomb - .byte 1 @ Silver Wind - .byte 0 @ Metal Sound - .byte 0 @ Grass Whistle - .byte 0 @ Tickle - .byte 0 @ Cosmic Power - .byte 1 @ Water Spout - .byte 1 @ Signal Beam - .byte 1 @ Shadow Punch - .byte 1 @ Extrasensory - .byte 1 @ Sky Uppercut - .byte 1 @ Sand Tomb - .byte 1 @ Sheer Cold - .byte 1 @ Muddy Water - .byte 1 @ Bullet Seed - .byte 1 @ Aerial Ace - .byte 1 @ Icicle Spear - .byte 0 @ Iron Defense - .byte 0 @ Block - .byte 0 @ Howl - .byte 1 @ Dragon Claw - .byte 1 @ Frenzy Plant - .byte 0 @ Bulk Up - .byte 1 @ Bounce - .byte 1 @ Mud Shot - .byte 1 @ Poison Tail - .byte 1 @ Covet - .byte 1 @ Volt Tackle - .byte 1 @ Magical Leaf - .byte 0 @ Water Sport - .byte 0 @ Calm Mind - .byte 1 @ Leaf Blade - .byte 0 @ Dragon Dance - .byte 1 @ Rock Blast - .byte 1 @ Shock Wave - .byte 1 @ Water Pulse - .byte 1 @ Doom Desire - .byte 1 @ Psycho Boost diff --git a/data/battle_frontier/battle_factory_style_move_lists.inc b/data/battle_frontier/battle_factory_style_move_lists.inc deleted file mode 100644 index 3ec428525..000000000 --- a/data/battle_frontier/battle_factory_style_move_lists.inc +++ /dev/null @@ -1,191 +0,0 @@ - .align 2 -gBattleFactoryStyleRequiredMoveCounts:: @ 8611FC0 - .byte 3 - .byte 3 - .byte 3 - .byte 2 - .byte 2 - .byte 2 - .byte 2 - - .align 2 -gBattleFactoryStyleMoveList_TotalPreparation:: @ 8611FC8 - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_GROWTH - .2byte MOVE_MEDITATE - .2byte MOVE_AGILITY - .2byte MOVE_DOUBLE_TEAM - .2byte MOVE_HARDEN - .2byte MOVE_MINIMIZE - .2byte MOVE_WITHDRAW - .2byte MOVE_DEFENSE_CURL - .2byte MOVE_BARRIER - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_AMNESIA - .2byte MOVE_ACID_ARMOR - .2byte MOVE_SHARPEN - .2byte MOVE_CONVERSION - .2byte MOVE_CONVERSION_2 - .2byte MOVE_BELLY_DRUM - .2byte MOVE_PSYCH_UP - .2byte MOVE_CHARGE - .2byte MOVE_SNATCH - .2byte MOVE_TAIL_GLOW - .2byte MOVE_COSMIC_POWER - .2byte MOVE_IRON_DEFENSE - .2byte MOVE_HOWL - .2byte MOVE_BULK_UP - .2byte MOVE_CALM_MIND - .2byte MOVE_DRAGON_DANCE - .2byte 0 - -gBattleFactoryStyleMoveList_ImpossibleToPredict:: @ 8612000 - .2byte MOVE_MIMIC - .2byte MOVE_METRONOME - .2byte MOVE_MIRROR_MOVE - .2byte MOVE_TRANSFORM - .2byte MOVE_SUBSTITUTE - .2byte MOVE_SKETCH - .2byte MOVE_CURSE - .2byte MOVE_PRESENT - .2byte MOVE_FOLLOW_ME - .2byte MOVE_TRICK - .2byte MOVE_ROLE_PLAY - .2byte MOVE_ASSIST - .2byte MOVE_SKILL_SWAP - .2byte MOVE_CAMOUFLAGE - .2byte 0 - -gBattleFactoryStyleMoveList_WeakeningTheFoe:: @ 861201E - .2byte MOVE_SAND_ATTACK - .2byte MOVE_TAIL_WHIP - .2byte MOVE_LEER - .2byte MOVE_GROWL - .2byte MOVE_STRING_SHOT - .2byte MOVE_SCREECH - .2byte MOVE_SMOKESCREEN - .2byte MOVE_KINESIS - .2byte MOVE_FLASH - .2byte MOVE_COTTON_SPORE - .2byte MOVE_SPITE - .2byte MOVE_SCARY_FACE - .2byte MOVE_CHARM - .2byte MOVE_KNOCK_OFF - .2byte MOVE_SWEET_SCENT - .2byte MOVE_FEATHER_DANCE - .2byte MOVE_FAKE_TEARS - .2byte MOVE_METAL_SOUND - .2byte MOVE_TICKLE - .2byte 0 - -gBattleFactoryStyleMoveList_HighRiskHighReturn:: @ 8612046 - .2byte MOVE_GUILLOTINE - .2byte MOVE_HORN_DRILL - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_HYPER_BEAM - .2byte MOVE_COUNTER - .2byte MOVE_FISSURE - .2byte MOVE_BIDE - .2byte MOVE_SELF_DESTRUCT - .2byte MOVE_SKY_ATTACK - .2byte MOVE_EXPLOSION - .2byte MOVE_FLAIL - .2byte MOVE_REVERSAL - .2byte MOVE_DESTINY_BOND - .2byte MOVE_PERISH_SONG - .2byte MOVE_PAIN_SPLIT - .2byte MOVE_MIRROR_COAT - .2byte MOVE_MEMENTO - .2byte MOVE_GRUDGE - .2byte MOVE_FACADE - .2byte MOVE_FOCUS_PUNCH - .2byte MOVE_BLAST_BURN - .2byte MOVE_HYDRO_CANNON - .2byte MOVE_OVERHEAT - .2byte MOVE_FRENZY_PLANT - .2byte MOVE_PSYCHO_BOOST - .2byte MOVE_VOLT_TACKLE - .2byte 0 - -gBattleFactoryStyleMoveList_Endurance:: @ 861207C - .2byte MOVE_MIST - .2byte MOVE_RECOVER - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_HAZE - .2byte MOVE_REFLECT - .2byte MOVE_SOFT_BOILED - .2byte MOVE_REST - .2byte MOVE_PROTECT - .2byte MOVE_DETECT - .2byte MOVE_ENDURE - .2byte MOVE_MILK_DRINK - .2byte MOVE_HEAL_BELL - .2byte MOVE_SAFEGUARD - .2byte MOVE_BATON_PASS - .2byte MOVE_MORNING_SUN - .2byte MOVE_SYNTHESIS - .2byte MOVE_MOONLIGHT - .2byte MOVE_SWALLOW - .2byte MOVE_WISH - .2byte MOVE_INGRAIN - .2byte MOVE_MAGIC_COAT - .2byte MOVE_RECYCLE - .2byte MOVE_REFRESH - .2byte MOVE_MUD_SPORT - .2byte MOVE_SLACK_OFF - .2byte MOVE_AROMATHERAPY - .2byte MOVE_WATER_SPORT - .2byte 0 - -gBattleFactoryStyleMoveList_SlowAndSteady:: @ 86120B4 - .2byte MOVE_SING - .2byte MOVE_SUPERSONIC - .2byte MOVE_DISABLE - .2byte MOVE_LEECH_SEED - .2byte MOVE_POISON_POWDER - .2byte MOVE_STUN_SPORE - .2byte MOVE_SLEEP_POWDER - .2byte MOVE_THUNDER_WAVE - .2byte MOVE_TOXIC - .2byte MOVE_HYPNOSIS - .2byte MOVE_CONFUSE_RAY - .2byte MOVE_GLARE - .2byte MOVE_POISON_GAS - .2byte MOVE_LOVELY_KISS - .2byte MOVE_SPORE - .2byte MOVE_SPIDER_WEB - .2byte MOVE_SWEET_KISS - .2byte MOVE_SPIKES - .2byte MOVE_SWAGGER - .2byte MOVE_MEAN_LOOK - .2byte MOVE_ATTRACT - .2byte MOVE_ENCORE - .2byte MOVE_TORMENT - .2byte MOVE_FLATTER - .2byte MOVE_WILL_O_WISP - .2byte MOVE_TAUNT - .2byte MOVE_YAWN - .2byte MOVE_IMPRISON - .2byte MOVE_SNATCH - .2byte MOVE_TEETER_DANCE - .2byte MOVE_GRASS_WHISTLE - .2byte MOVE_BLOCK - .2byte 0 - -gBattleFactoryStyleMoveList_DependsOnTheBattlesFlow:: @ 86120F6 - .2byte MOVE_SANDSTORM - .2byte MOVE_RAIN_DANCE - .2byte MOVE_SUNNY_DAY - .2byte MOVE_HAIL - .2byte MOVE_WEATHER_BALL - .2byte 0 - - .align 2 -gBattleFactoryStyleMoveListPointers:: @ 8612104 - .4byte gBattleFactoryStyleMoveList_TotalPreparation - .4byte gBattleFactoryStyleMoveList_SlowAndSteady - .4byte gBattleFactoryStyleMoveList_Endurance - .4byte gBattleFactoryStyleMoveList_HighRiskHighReturn - .4byte gBattleFactoryStyleMoveList_WeakeningTheFoe - .4byte gBattleFactoryStyleMoveList_ImpossibleToPredict - .4byte gBattleFactoryStyleMoveList_DependsOnTheBattlesFlow diff --git a/data/battle_frontier_1.s b/data/battle_frontier_1.s index 4074c360c..b1375e05f 100644 --- a/data/battle_frontier_1.s +++ b/data/battle_frontier_1.s @@ -6,31 +6,6 @@ .section .rodata .align 2 -gUnknown_0860DE50:: @ 860DE50 - .4byte sub_8195980 - .4byte sub_8195A38 - .4byte sub_8195AE4 - .4byte sub_8195BB0 - .4byte sub_8195C20 - .4byte sub_8195C50 - .4byte sub_8195C7C - .4byte sub_8195CE4 - .4byte sub_8195D28 - .4byte sub_8195DB8 - -gUnknown_0860DE78:: @ 860DE78 - .2byte 0x003f, 0x0040, 0x0041, 0x0043, 0x0042, 0x0046 - -gUnknown_0860DE84:: @ 860DE84 - .2byte 0x00b3, 0x00b4, 0x00b7, 0x00c8, 0x00b9, 0x00bb, 0x00c4, 0x00c6, 0x00ba, 0x0000 - -gUnknown_0860DE98:: @ 860DE98 - .4byte 0x00000010, 0x00000020, 0x00400000, 0x00800000 - -gUnknown_0860DEA8:: @ 860DEA8 - .4byte 0xffffffef, 0xffffffdf, 0xffbfffff, 0xff7fffff - - .align 2 gUnknown_0860DEB8:: @ 860DEB8 //struct .2byte 0x0025, 0x0000, 0x0108, 0x0208, 0x0308, 0x0103, 0x0008, 0x0108, 0x0208, 0x0000 .2byte 0x02e1, 0x0000, 0x010c, 0x020c, 0x030c, 0x013e, 0x000c, 0x010c, 0x020c, 0x0000 diff --git a/data/battle_frontier_2.s b/data/battle_frontier_2.s index cbd38a119..2b1eab991 100644 --- a/data/battle_frontier_2.s +++ b/data/battle_frontier_2.s @@ -102,895 +102,3 @@ gUnknown_08611DB0:: @ 8611DB0 gUnknown_08611DB8:: @ 8611DB8 .4byte gUnknown_08611D5C .4byte gUnknown_08611D94 - -@ 8611DC0 - .include "data/battle_frontier/battle_arena_move_mind_ratings.inc" - - .align 2 -gUnknown_08611F24:: @ 8611F24 - .byte 0x00, 0x00, 0x00, 0x40, 0x00, 0xf0, 0x00, 0x00 - - .align 2 -gUnknown_08611F2C:: @ 8611F2C - .2byte 0x0000, 0x0001, 0xffff, 0x0000 - - .align 2 -gUnknown_08611F34:: @ 8611F34 - .2byte 0x0004, 0x0001, 0xffff, 0x0000 - - .align 2 -gUnknown_08611F3C:: @ 8611F3C - .2byte 0x0008, 0x0001, 0xffff, 0x0000 - - .align 2 -gUnknown_08611F44:: @ 8611F44 - .2byte 0x000c, 0x0001, 0xffff, 0x0000 - - .align 2 -gUnknown_08611F4C:: @ 8611F4C - .4byte gUnknown_08611F2C - .4byte gUnknown_08611F34 - .4byte gUnknown_08611F3C - .4byte gUnknown_08611F44 - - .align 2 -gUnknown_08611F5C:: @ 8611F5C - spr_template 0x03e8, 0xffff, gUnknown_08611F24, gUnknown_08611F4C, NULL, gDummySpriteAffineAnimTable, sub_81A5698 - - .align 2 -gUnknown_08611F74:: @ 8611F74 - obj_tiles gUnknown_08D854E8, 0x0200, 0x03e8 - null_obj_tiles - - .align 2 -gUnknown_08611F84:: @ 8611F84 - .4byte sub_81A58B4 - .4byte sub_81A5964 - .4byte sub_81A59FC - .4byte sub_81A5AC4 - .4byte sub_81A5B08 - .4byte sub_81A5B88 - .4byte sub_81A5BE0 - - .align 1 -gUnknown_08611FA0:: @ 8611FA0 - .2byte 0x003f, 0x0040, 0x0041, 0x0043, 0x0042, 0x0046 - - .align 1 -gUnknown_08611FAC:: @ 8611FAC - .2byte 0x00b3, 0x00b4, 0x00b7, 0x00c8, 0x00b9, 0x00bb, 0x00c4, 0x00c6, 0x00ba, 0x0000 - -@ 8611FC0 - .include "data/battle_frontier/battle_factory_style_move_lists.inc" - - .align 2 -gUnknown_08612120:: @ 8612120 - .4byte sub_81A5E94 - .4byte sub_81A5FA8 - .4byte sub_81A6054 - .4byte sub_81A613C - .4byte nullsub_75 - .4byte nullsub_123 - .4byte sub_81A6188 - .4byte sub_81A6198 - .4byte sub_81A61A4 - .4byte sub_81A63CC - .4byte sub_81A64C4 - .4byte sub_81A63B8 - .4byte sub_81A61B0 - .4byte sub_81A67EC - .4byte sub_81A6A08 - .4byte sub_81A6AEC - .4byte sub_81A6C1C - - .align 2 -gUnknown_08612164:: @ 8612164 - .4byte 0x00000100, 0x00000200, 0x01000000, 0x02000000 - - .align 2 -gUnknown_08612174:: @ 8612174 - .4byte 0xfffffeff, 0xfffffdff, 0xfeffffff, 0xfdffffff - -gUnknown_08612184:: @ 8612184 - .byte 0x03, 0x06, 0x06, 0x09, 0x09, 0x0c, 0x0c, 0x0f, 0x0f, 0x12, 0x15, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f - - .align 1 -gUnknown_08612194:: @ 8612194 - .2byte 0x006e, 0x00c7, 0x00a2, 0x010a, 0x010b, 0x0173, 0x0174, 0x01d3, 0x01d4, 0x0233, 0x0234, 0x0293, 0x0294, 0x02f3, 0x0174, 0x0351 - .2byte 0x0174, 0x01d3, 0x01d4, 0x0233, 0x0234, 0x0293, 0x0294, 0x02f3, 0x0174, 0x0371, 0x0174, 0x0371, 0x0174, 0x0371, 0x0174, 0x0371 - - .align 1 -gUnknown_086121D4:: @ 86121D4 - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x016a, 0x0005, 0x0105, 0x00d4 - .2byte 0x005c, 0x0145 - - .align 1 -gUnknown_086121F8:: @ 86121F8 - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x0065, 0x0005, 0x0099, 0x0078 - .2byte 0x0057, 0x005c - - .align 1 -gUnknown_0861221C:: @ 861221C - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x0133, 0x0005, 0x0093, 0x004e - .2byte 0x004d, 0x00ed - - .align 1 -gUnknown_08612240:: @ 8612240 - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x00ca, 0x0005, 0x0044, 0x00f3 - .2byte 0x00db, 0x00c2 - - .align 2 -gUnknown_08612264:: @ 8612264 - .4byte gUnknown_086121D4 - .4byte gUnknown_086121F8 - .4byte gUnknown_0861221C - .4byte gUnknown_08612240 - - .align 1 -gUnknown_08612274:: @ 8612274 - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x016a, 0x0005, 0x0105, 0x00d4 - .2byte 0x005c, 0x003a - - .align 1 -gUnknown_08612298:: @ 8612298 - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x0065, 0x0005, 0x0099, 0x0078 - .2byte 0x0057, 0x005c - - .align 1 -gUnknown_086122BC:: @ 86122BC - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x0133, 0x0005, 0x0093, 0x004e - .2byte 0x004d, 0x00ed - - .align 1 -gUnknown_086122E0:: @ 86122E0 - .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x00ca, 0x0005, 0x0044, 0x00f3 - .2byte 0x00db, 0x00e3 - - .align 2 -gUnknown_08612304:: @ 8612304 - .4byte gUnknown_08612274 - .4byte gUnknown_08612298 - .4byte gUnknown_086122BC - .4byte gUnknown_086122E0 - - .align 2 -gUnknown_08612314:: @ 8612314 - .4byte gUnknown_08612264 - .4byte gUnknown_08612304 - - .align 2 -gUnknown_0861231C:: @ 861231C - .2byte 0x0012 - .byte 0x03, 0x05, 0x06 - - .align 2 - .2byte 0x0005 - .byte 0x0d, 0x20, 0x25 - - .align 2 - .2byte 0x0011 - .byte 0x08, 0x0b, 0x0c - - .align 2 - .2byte 0x0024 - .byte 0x22, 0x1e, 0x21 - - .align 2 - .2byte 0x0015 - .byte 0x00, 0x00, 0x00 - - .align 2 - .2byte 0x001e - .byte 0x01, 0x01, 0x01 - - .align 2 - .2byte 0x002c - .byte 0x16, 0x17, 0x1b - - .align 2 - .2byte 0x0037 - .byte 0x08, 0x16, 0x1f - - .align 2 - .2byte 0x000e - .byte 0x0d, 0x27, 0x15 - - .align 2 - .2byte 0x0014 - .byte 0x02, 0x04, 0x11 - - .align 2 - .2byte 0x0038 - .byte 0x1e, 0x14, 0x24 - - .align 2 - .2byte 0x0042 - .byte 0x1c, 0x22, 0x19 - - .align 2 - .2byte 0x0026 - .byte 0x17, 0x26, 0x1a - - .align 2 - .2byte 0x0032 - .byte 0x17, 0x1e, 0x0b - - .align 2 - .2byte 0x002f - .byte 0x0f, 0x13, 0x0e - - .align 2 - .2byte 0x0027 - .byte 0x02, 0x1d, 0x1a - - .align 2 - .2byte 0x0033 - .byte 0x25, 0x0c, 0x20 - - .align 2 - .2byte 0x0021 - .byte 0x18, 0x17, 0x26 - - .align 2 - .2byte 0x0018 - .byte 0x05, 0x16, 0x04 - - .align 2 - .2byte 0x000b - .byte 0x29, 0x25, 0x23 - - .align 2 - .2byte 0x0035 - .byte 0x27, 0x0e, 0x0d - - .align 2 - .2byte 0x0030 - .byte 0x0a, 0x07, 0x09 - - .align 2 - .2byte 0x000c - .byte 0x28, 0x14, 0x10 - - .align 2 - .2byte 0x0034 - .byte 0x12, 0x0d, 0x15 - - .align 2 - .2byte 0x0013 - .byte 0x16, 0x1f, 0x1b - - .align 2 -gUnknown_086123E4:: @ 86123E4 - .byte 0x29, 0x0a, 0x30, 0x06, 0x01, 0x0a, 0x0f, 0x14, 0x20, 0x10, 0x0e, 0x27 - .byte 0x2a, 0x0a, 0x1d, 0x08, 0x1b, 0x06, 0x34, 0x10, 0x20, 0x1e, 0x29, 0x0a - .byte 0x22, 0x1e, 0x31, 0x12, 0x01, 0x0a, 0x18, 0x10, 0x1a, 0x1c, 0x03, 0x0c - .byte 0x0f, 0x1e, 0x0b, 0x10, 0x39, 0x10, 0x0f, 0x20, 0x2b, 0x10, 0x14, 0x0a - .byte 0x3b, 0x10, 0x02, 0x0a, 0x1e, 0x16, 0x20, 0x10, 0x3e, 0x14, 0x03, 0x0c - .byte 0x31, 0x0a, 0x02, 0x0e, 0x15, 0x0e, 0x36, 0x14, 0x37, 0x10, 0x0a, 0x1e - .byte 0x29, 0x0a, 0x25, 0x10, 0x2a, 0x14, 0x34, 0x10, 0x0f, 0x1e, 0x1b, 0x0a - .byte 0x01, 0x0a, 0x07, 0x0e, 0x2a, 0x12, 0x0f, 0x1e, 0x1f, 0x06, 0xff, 0xff - .byte 0x35, 0x1a, 0x36, 0x10, 0x0f, 0x0e, 0x01, 0x0a, 0x21, 0x26, 0x0f, 0x1e - .byte 0x25, 0x0e, 0x2f, 0x10, 0x2d, 0x06, 0x1e, 0x20, 0x03, 0x0c, 0xff, 0xff - .byte 0x1d, 0x0c, 0x1d, 0x08, 0x2b, 0x0a, 0x0f, 0x10, 0x02, 0x0a, 0x03, 0x0c - .byte 0x2a, 0x0a, 0x3e, 0x0a, 0x00, 0x20, 0x27, 0x10, 0x08, 0x1c, 0x04, 0x0c - .byte 0x01, 0x0a, 0x12, 0x12, 0x01, 0x0a, 0x00, 0x10, 0x2d, 0x06, 0xff, 0xff - .byte 0x22, 0x1e, 0x31, 0x12, 0x01, 0x0a, 0x18, 0x10, 0x1c, 0x1c, 0x03, 0x0c - .byte 0x01, 0x0a, 0x0b, 0x06, 0x30, 0x10, 0x28, 0x0a, 0x49, 0x25, 0x24, 0x06 - .byte 0x14, 0x10, 0x2c, 0x0a, 0x15, 0x04, 0x42, 0x16, 0x1b, 0x1e, 0x03, 0x0c - .byte 0x28, 0x06, 0x0f, 0x1a, 0x0b, 0x10, 0x17, 0x20, 0x00, 0x0c, 0xff, 0xff - .byte 0x01, 0x0a, 0x15, 0x10, 0x47, 0x16, 0x0f, 0x1e, 0x39, 0x0e, 0x36, 0x0e - .byte 0x01, 0x0a, 0x17, 0x10, 0x20, 0x16, 0x19, 0x0e, 0x31, 0x0a, 0x38, 0x0c - .byte 0x1d, 0x0c, 0x1d, 0x08, 0x00, 0x0c, 0x22, 0x10, 0x12, 0x1c, 0x0b, 0x02 - .byte 0x29, 0x10, 0x04, 0x14, 0x2f, 0x10, 0x06, 0x10, 0x28, 0x1e, 0x1c, 0x1c - .byte 0x29, 0x10, 0x20, 0x0e, 0x28, 0x10, 0x16, 0x1c, 0x29, 0x1e, 0x03, 0x0c - .byte 0x0f, 0x1e, 0x0b, 0x10, 0x2f, 0x0e, 0x38, 0x06, 0x0c, 0x10, 0xff, 0xff - .byte 0x29, 0x0a, 0x08, 0x14, 0x2f, 0x10, 0x1e, 0x06, 0x2c, 0x10, 0xff, 0xff - .byte 0x23, 0x10, 0x0b, 0x10, 0x1d, 0x08, 0x2d, 0x06, 0x37, 0x10, 0x14, 0x0a - .byte 0x29, 0x0a, 0x22, 0x10, 0x08, 0x14, 0x2f, 0x10, 0x1e, 0x16, 0x29, 0x10 - .byte 0x01, 0x06, 0x2c, 0x10, 0x01, 0x0a, 0x15, 0x10, 0x39, 0x0e, 0x36, 0x0e - .byte 0x20, 0x10, 0x0b, 0x02, 0x3f, 0x10, 0x12, 0x1c, 0x04, 0x0c, 0xff, 0xff - .byte 0x18, 0x10, 0x02, 0x0a, 0x3a, 0x10, 0x46, 0x04, 0x0e, 0x02, 0x03, 0x0c - .byte 0x10, 0x1e, 0x0b, 0x02, 0x0a, 0x1e, 0x0b, 0x10, 0x3a, 0x06, 0xff, 0xff - .byte 0x02, 0x0a, 0x12, 0x12, 0x0f, 0x1e, 0x0b, 0x10, 0x38, 0x06, 0x03, 0x0c - .byte 0x22, 0x1e, 0x00, 0x10, 0x1b, 0x16, 0x3f, 0x10, 0x0f, 0x1e, 0x03, 0x0c - .byte 0x29, 0x0a, 0x1e, 0x0e, 0x25, 0x10, 0x26, 0x1e, 0x00, 0x0c, 0xff, 0xff - .byte 0x01, 0x0a, 0x1e, 0x0e, 0x36, 0x12, 0x2f, 0x10, 0x0b, 0x12, 0x04, 0x0c - .byte 0x05, 0x28, 0x0f, 0x1e, 0x1b, 0x0a, 0x0b, 0x10, 0x20, 0x10, 0x3b, 0x06 - .byte 0x01, 0x0a, 0x1f, 0x10, 0x3e, 0x0a, 0x37, 0x10, 0x20, 0x10, 0x28, 0x06 - .byte 0x26, 0x10, 0x31, 0x0a, 0x29, 0x1e, 0x1c, 0x1c, 0x01, 0x0a, 0x12, 0x12 - .byte 0x0a, 0x0c, 0x00, 0x0c, 0x29, 0x10, 0x1c, 0x10, 0x0f, 0x1e, 0x23, 0x0c - .byte 0x28, 0x0a, 0x0e, 0x02, 0x0f, 0x10, 0x39, 0x10, 0x2a, 0x14, 0x04, 0x0c - .byte 0x28, 0x0a, 0x0e, 0x02, 0x0f, 0x10, 0x20, 0x06, 0x2f, 0x10, 0x3c, 0x04 - .byte 0x39, 0x0c, 0x39, 0x0c, 0x00, 0x0c, 0x29, 0x0a, 0x17, 0x20, 0x39, 0x0c - .byte 0x5c, 0x26, 0x0b, 0x10, 0x20, 0x10, 0x30, 0x12, 0x05, 0x1e, 0x0c, 0x10 - -gUnknown_086125DC:: @ 86125DC - .byte 0x23, 0x46, 0x23, 0x01, 0x04, 0x09, 0x05, 0x00, 0x15, 0x2a, 0x15, 0x01, 0x1c, 0x38, 0x1c, 0x01, 0x15, 0x2a, 0x15, 0x01, 0x1c, 0x8c, 0x38, 0x01, 0x15, 0x46, 0x23, 0x00 - - .align 2 -gUnknown_086125F8:: @ 86125F8 - .4byte sub_81A705C - .4byte sub_81A7140 - .4byte sub_81A7248 - .4byte sub_81A73B8 - .4byte sub_81A7070 - .4byte sub_81A73EC - .4byte sub_81A7400 - .4byte sub_81A740C - .4byte sub_81A7418 - .4byte nullsub_76 - .4byte nullsub_124 - .4byte sub_81A7468 - .4byte sub_81A74CC - .4byte sub_81A74E0 - .4byte sub_81A7508 - .4byte sub_81A7580 - .4byte sub_81A8090 - .4byte sub_81A80DC - .4byte sub_81A825C - .4byte sub_81A827C - .4byte sub_81A84B4 - .4byte sub_81A84EC - .4byte sub_81A863C - .4byte sub_81A8658 - .4byte sub_81A869C - .4byte sub_81A86C0 - .4byte sub_81A8794 - .4byte sub_81A87E8 - .4byte sub_81A8830 - -gUnknown_0861266C:: @ 861266C - .byte 0x03, 0x03, 0x01, 0x00, 0x00, 0x02, 0x02, 0x01, 0x04 - -gUnknown_08612675:: @ 8612675 - .byte 0x02, 0x01, 0x00, 0x02, 0x00, 0x01, 0x01, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x01, 0x00, 0x01, 0x02, 0x00 - - .align 2 -gUnknown_08612688:: @ 8612688 - .4byte sub_81A7D8C - .4byte sub_81A7DE8 - - .align 2 -gUnknown_08612690:: @ 8612690 - .4byte 0x00000400, 0x00000800 - -gUnknown_08612698:: @ 8612698 - store_lock_anim - walk_right - free_unlock_anim - step_end - -gUnknown_0861269C:: @ 861269C - store_lock_anim - walk_down - free_unlock_anim - step_end - -gUnknown_086126A0:: @ 86126A0 - store_lock_anim - walk_left - free_unlock_anim - step_end - -gUnknown_086126A4:: @ 86126A4 - store_lock_anim - walk_up - free_unlock_anim - step_end - -gUnknown_086126A8:: @ 86126A8 - face_right - step_end - -gUnknown_086126AA:: @ 86126AA - face_down - step_end - -gUnknown_086126AC:: @ 86126AC - face_left - step_end - -gUnknown_086126AE:: @ 86126AE - face_up - step_end - -@ 86126B0 - .include "data/battle_frontier/battle_pyramid_level_50_wild_mons.inc" - -@ 8612E80 - .include "data/battle_frontier/battle_pyramid_open_level_wild_mons.inc" - - .align 2 -gUnknown_08613650:: @ 8613650 - .byte 0x07, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x80, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00 - .byte 0x05, 0x03, 0x00, 0x00, 0x78, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x78, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x00, 0x00, 0x00 - .byte 0x04, 0x04, 0x00, 0x01, 0x70, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x02, 0x70, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00 - .byte 0x03, 0x05, 0x00, 0x00, 0x68, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x01, 0x68, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, 0x00, 0x00 - .byte 0x04, 0x05, 0x00, 0x02, 0x60, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x04, 0x60, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x00, 0x00 - .byte 0x02, 0x03, 0x00, 0x00, 0x58, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x58, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x00 - .byte 0x03, 0x07, 0x00, 0x00, 0x50, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x50, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x00, 0x00 - .byte 0x03, 0x06, 0x00, 0x00, 0x50, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x50, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00 - -gUnknown_08613750:: @ 8613750 - .byte 0x28, 0x00, 0x46, 0x01, 0x5a, 0x02, 0x64, 0x03, 0x23, 0x01, 0x37, 0x02, 0x4b, 0x03, 0x5a, 0x04, 0x64, 0x0a, 0x23, 0x02, 0x37, 0x03, 0x4b, 0x04, 0x5a, 0x05, 0x64, 0x0b, 0x23, 0x03, 0x37, 0x04 - .byte 0x4b, 0x05, 0x5a, 0x06, 0x64, 0x0c, 0x23, 0x04, 0x37, 0x05, 0x4b, 0x06, 0x5a, 0x07, 0x64, 0x0d, 0x23, 0x05, 0x37, 0x06, 0x4b, 0x07, 0x5a, 0x08, 0x64, 0x0e, 0x23, 0x06, 0x37, 0x07, 0x4b, 0x08 - .byte 0x5a, 0x09, 0x64, 0x0f - -gUnknown_08613794:: @ 8613794 - .byte 0x00, 0x04, 0x09, 0x0e, 0x13, 0x18, 0x1d, 0x00 - - .align 1 -gUnknown_0861379C:: @ 861379C - .2byte 0x0015, 0x0051, 0x0085, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x0087, 0x0022, 0x008a, 0x0018 - .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x0088, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c - .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x0086, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db - .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 - .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 - .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 - .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c - .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db - .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 - .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 - .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 - .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c - .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 - - .align 1 -gUnknown_0861392C:: @ 861392C - .2byte 0x0015, 0x0051, 0x0085, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x0087, 0x0022, 0x008a, 0x0018 - .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x0088, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c - .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x0086, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db - .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 - .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 - .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 - .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c - .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db - .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 - .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 - .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 - .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c - .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 - -gUnknown_08613ABC:: @ 8613ABC - .byte 0x1f, 0x00, 0x2e, 0x01, 0x3d, 0x02, 0x47, 0x03, 0x51, 0x04, 0x5b, 0x05, 0x5e, 0x06, 0x61, 0x07, 0x64, 0x08, 0x0f, 0x00, 0x2e, 0x01, 0x3d, 0x02, 0x47, 0x03, 0x51, 0x04, 0x5b, 0x05, 0x5e, 0x06 - .byte 0x61, 0x08, 0x64, 0x09, 0x0f, 0x00, 0x1e, 0x01, 0x3d, 0x02, 0x47, 0x03, 0x51, 0x04, 0x5b, 0x05, 0x5e, 0x06, 0x61, 0x07, 0x64, 0x08, 0x1c, 0x00, 0x2b, 0x01, 0x3a, 0x02, 0x44, 0x03, 0x4e, 0x04 - .byte 0x58, 0x05, 0x5c, 0x07, 0x60, 0x08, 0x64, 0x09, 0x0f, 0x00, 0x2b, 0x01, 0x3a, 0x02, 0x44, 0x03, 0x4e, 0x04, 0x58, 0x05, 0x5c, 0x06, 0x60, 0x07, 0x64, 0x09, 0x0f, 0x00, 0x1e, 0x01, 0x3a, 0x02 - .byte 0x44, 0x03, 0x4e, 0x04, 0x58, 0x05, 0x5c, 0x06, 0x60, 0x07, 0x64, 0x08, 0x1c, 0x00, 0x2b, 0x01, 0x3a, 0x02, 0x44, 0x03, 0x4e, 0x04, 0x58, 0x05, 0x5c, 0x06, 0x60, 0x08, 0x64, 0x09 - -gUnknown_08613B3A:: @ 8613B3A - .byte 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_08613B44:: @ 8613B44 - .byte 0x03, 0x06 - - .align 2 - .byte 0x0b, 0x06 - - .align 2 - .byte 0x0d, 0x06 - - .align 2 - .byte 0x0f, 0x01 - - .align 2 - .byte 0x2b, 0x04 - - .align 2 - .byte 0x2d, 0x01 - - .align 2 - .byte 0x24, 0x09 - - .align 2 - .byte 0x29, 0x04 - - .align 2 - .byte 0x05, 0x05 - - .align 2 - .byte 0x18, 0x04 - - .align 2 - .byte 0x2f, 0x00 - - .align 2 - .byte 0x2e, 0x09 - - .align 2 - .byte 0x11, 0x0c - - .align 2 - .byte 0x10, 0x0b - - .align 2 - .byte 0x1e, 0x0d - - .align 2 - .byte 0x08, 0x01 - - .align 2 - .byte 0x17, 0x03 - - .align 2 - .byte 0x0c, 0x04 - - .align 2 - .byte 0x38, 0x04 - - .align 2 - .byte 0x1c, 0x03 - - .align 2 - .byte 0x1a, 0x00 - - .align 2 - .byte 0x19, 0x0b - - .align 2 - .byte 0x09, 0x07 - - .align 2 - .byte 0x31, 0x07 - - .align 2 - .byte 0x35, 0x07 - - .align 2 - .byte 0x36, 0x01 - - .align 2 - .byte 0x33, 0x00 - - .align 2 - .byte 0x2a, 0x03 - - .align 2 - .byte 0x16, 0x0d - - .align 2 - .byte 0x0e, 0x03 - - .align 2 - .byte 0x15, 0x01 - - .align 2 - .byte 0x14, 0x01 - - .align 2 - .byte 0x2c, 0x01 - - .align 2 - .byte 0x1b, 0x02 - - .align 2 - .byte 0x04, 0x01 - - .align 2 - .byte 0x07, 0x03 - - .align 2 - .byte 0x34, 0x05 - - .align 2 - .byte 0x32, 0x00 - - .align 2 - .byte 0x37, 0x02 - - .align 2 - .byte 0x1d, 0x04 - - .align 2 - .byte 0x22, 0x09 - - .align 2 - .byte 0x1f, 0x01 - - .align 2 - .byte 0x25, 0x00 - - .align 2 - .byte 0x0a, 0x04 - - .align 2 - .byte 0x28, 0x00 - - .align 2 - .byte 0x06, 0x05 - - .align 2 - .byte 0x27, 0x0b - - .align 2 - .byte 0x26, 0x00 - - .align 2 - .byte 0x13, 0x00 - - .align 2 - .byte 0x12, 0x02 - - .align 2 - .byte 0x39, 0x08 - - .align 2 - .byte 0x02, 0x0b - - .align 2 - .byte 0x20, 0x01 - - .align 2 - .byte 0x21, 0x00 - - .align 2 -gUnknown_08613C1C:: @ 8613C1C - .byte 0x0d, 0x03, 0x0e, 0x04, 0x10, 0x01, 0x11, 0x00, 0x03, 0x02, 0x12, 0x03, 0x0c, 0x03, 0x13, 0x03, 0x14, 0x03, 0x15, 0x02, 0x17, 0x02, 0x07, 0x02, 0x0a, 0x04, 0x19, 0x02, 0x1a, 0x02, 0x1b, 0x00 - .byte 0x1d, 0x02, 0x1e, 0x02, 0x1f, 0x03, 0x20, 0x04, 0x26, 0x00, 0x27, 0x01, 0x29, 0x04, 0x2a, 0x05, 0x09, 0x04, 0x16, 0x05, 0x2b, 0x00, 0x2d, 0x04, 0x2e, 0x02, 0x30, 0x02, 0x32, 0x02, 0x31, 0x03 - .byte 0x2f, 0x03, 0x33, 0x03, 0x34, 0x02, 0x04, 0x02, 0x35, 0x00, 0x36, 0x03, 0x37, 0x03, 0x38, 0x03, 0x1c, 0x01, 0x3a, 0x02, 0x05, 0x02, 0x42, 0x02, 0x02, 0x03, 0x44, 0x02, 0x45, 0x03, 0x47, 0x03 - .byte 0x43, 0x00, 0x00, 0x04 - - .align 2 -gUnknown_08613C80:: @ 8613C80 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252D2D - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252D57 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252D81 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252DAB - - .align 2 -gUnknown_08613C90:: @ 8613C90 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25330B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2532CC - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25328B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253248 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253206 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2531C4 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253183 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253140 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2530FD - - .align 2 -gUnknown_08613CB4:: @ 8613CB4 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2544A6 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25445A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25440B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2543BA - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25436A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25431A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2542CB - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25427A - - .align 2 -gUnknown_08613CD4:: @ 8613CD4 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252DD5 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E03 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E31 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E5F - - .align 2 -gUnknown_08613CE4:: @ 8613CE4 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25362E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2535D4 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253578 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25351A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2534BD - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253460 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253404 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2533A6 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25334D - - .align 2 -gUnknown_08613D08:: @ 8613D08 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25471E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2546CC - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25467C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25462A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2545D9 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254588 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254538 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2544E6 - - .align 2 -gUnknown_08613D28:: @ 8613D28 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E8D - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252EAA - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252EC7 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252EE4 - - .align 2 -gUnknown_08613D38:: @ 8613D38 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2539EC - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253980 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253915 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2538A8 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25383C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2537D0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253765 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2536F8 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25368B - - .align 2 -gUnknown_08613D5C:: @ 8613D5C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254A0B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2549AE - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25494D - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2548EB - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25488A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254829 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2547C9 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254767 - - .align 2 -gUnknown_08613D7C:: @ 8613D7C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252F01 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252F3A - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252F73 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252FAC - - .align 2 -gUnknown_08613D8C:: @ 8613D8C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253D3E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253CE0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253C87 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253C2C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253BD2 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253B78 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253B1F - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253AC4 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253A69 - - .align 2 -gUnknown_08613DB0:: @ 8613DB0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254C3E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254BF1 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254BAE - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254B69 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254B25 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254AE1 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254A9E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254A59 - - .align 2 -gUnknown_08613DD0:: @ 8613DD0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252FE5 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253000 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25301B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253036 - - .align 2 -gUnknown_08613DE0:: @ 8613DE0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253F6C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253F34 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253EFA - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253EBE - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253E83 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253E48 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253E0E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253DD2 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253D96 - - .align 2 -gUnknown_08613E04:: @ 8613E04 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254E6E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254E27 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254DE0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254D97 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254D4F - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254D07 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254CC0 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254C77 - - .align 2 -gUnknown_08613E24:: @ 8613E24 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253051 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25307C - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2530A7 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2530D2 - - .align 2 -gUnknown_08613E34:: @ 8613E34 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25422B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2541DD - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25418D - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25413B - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2540EA - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254099 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254049 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253FF7 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253FA5 - - .align 2 -gUnknown_08613E58:: @ 8613E58 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_255068 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25502F - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254FF6 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254FBB - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254F81 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254F47 - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254F0E - .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254ED3 - - .align 2 -gUnknown_08613E78:: @ 8613E78 - .4byte gUnknown_08613C80 - .4byte gUnknown_08613C90 - .4byte gUnknown_08613CB4 - - .align 2 -gUnknown_08613E84:: @ 8613E84 - .4byte gUnknown_08613CD4 - .4byte gUnknown_08613CE4 - .4byte gUnknown_08613D08 - - .align 2 -gUnknown_08613E90:: @ 8613E90 - .4byte gUnknown_08613D28 - .4byte gUnknown_08613D38 - .4byte gUnknown_08613D5C - - .align 2 -gUnknown_08613E9C:: @ 8613E9C - .4byte gUnknown_08613D7C - .4byte gUnknown_08613D8C - .4byte gUnknown_08613DB0 - - .align 2 -gUnknown_08613EA8:: @ 8613EA8 - .4byte gUnknown_08613DD0 - .4byte gUnknown_08613DE0 - .4byte gUnknown_08613E04 - - .align 2 -gUnknown_08613EB4:: @ 8613EB4 - .4byte gUnknown_08613E24 - .4byte gUnknown_08613E34 - .4byte gUnknown_08613E58 - - .align 2 -gUnknown_08613EC0:: @ 8613EC0 - .4byte gUnknown_08613E78 - .4byte gUnknown_08613E84 - .4byte gUnknown_08613E90 - .4byte gUnknown_08613E9C - .4byte gUnknown_08613EA8 - .4byte gUnknown_08613EB4 - -gUnknown_08613ED8:: @ 8613ED8 - .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x03, 0x04 - - .align 2 -gUnknown_08613EE0:: @ 8613EE0 - .4byte sub_81A8E9C - .4byte sub_81A8F38 - .4byte sub_81A9048 - .4byte sub_81A9134 - .4byte sub_81A917C - .4byte sub_81A91FC - .4byte sub_81A9254 - .4byte CalculateBattlePyramidItemBallItemId - .4byte sub_81A93C8 - .4byte sub_81A9414 - .4byte sub_81A9424 - .4byte sub_81A9618 - .4byte sub_81A966C - .4byte sub_81A9684 - .4byte sub_81A975C - .4byte sub_81A97C8 - .4byte sub_81A9828 - .4byte sub_81A9834 - - .align 1 -gUnknown_08613F28:: @ 8613F28 - .2byte 0x003f, 0x0040, 0x0041, 0x0043, 0x0042, 0x0046 - - .align 2 -gUnknown_08613F34:: @ 8613F34 - .2byte 0x00b3, 0x00b4, 0x00b7, 0x00c8, 0x00b9, 0x00bb, 0x00c4, 0x00c6, 0x00ba - -gUnknown_08613F46:: @ 8613F46 - .byte 0x01, 0x04, 0xff, 0xff, 0x00, 0x02, 0x05, 0xff, 0x01, 0x03, 0x06, 0xff, 0x02, 0x07, 0xff, 0xff, 0x00, 0x05, 0x08, 0xff, 0x01, 0x04, 0x06, 0x09, 0x02, 0x05, 0x07, 0x0a, 0x03, 0x06, 0x0b, 0xff - .byte 0x04, 0x09, 0x0c, 0xff, 0x05, 0x08, 0x0a, 0x0d, 0x06, 0x09, 0x0b, 0x0e, 0x07, 0x0a, 0x0f, 0xff, 0x08, 0x0d, 0xff, 0xff, 0x09, 0x0c, 0x0e, 0xff, 0x0a, 0x0d, 0x0f, 0xff, 0x0b, 0x0e, 0xff, 0xff - -gUnknown_08613F86:: @ 8613F86 - .byte 0x1e, 0x28, 0x32, 0x3c, 0x46, 0x50, 0x55, 0x5a, 0x5f, 0x64 - diff --git a/data/battle_frontier_3.s b/data/battle_frontier_3.s new file mode 100644 index 000000000..29f0b2df1 --- /dev/null +++ b/data/battle_frontier_3.s @@ -0,0 +1,547 @@ +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/trainers.h" + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + +gUnknown_08612698:: @ 8612698 + store_lock_anim + walk_right + free_unlock_anim + step_end + +gUnknown_0861269C:: @ 861269C + store_lock_anim + walk_down + free_unlock_anim + step_end + +gUnknown_086126A0:: @ 86126A0 + store_lock_anim + walk_left + free_unlock_anim + step_end + +gUnknown_086126A4:: @ 86126A4 + store_lock_anim + walk_up + free_unlock_anim + step_end + +gUnknown_086126A8:: @ 86126A8 + face_right + step_end + +gUnknown_086126AA:: @ 86126AA + face_down + step_end + +gUnknown_086126AC:: @ 86126AC + face_left + step_end + +gUnknown_086126AE:: @ 86126AE + face_up + step_end + +@ 86126B0 + .include "data/battle_frontier/battle_pyramid_level_50_wild_mons.inc" + +@ 8612E80 + .include "data/battle_frontier/battle_pyramid_open_level_wild_mons.inc" + + .align 2 +gUnknown_08613650:: @ 8613650 + .byte 0x07, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x80, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00 + .byte 0x05, 0x03, 0x00, 0x00, 0x78, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x78, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x00, 0x00, 0x00 + .byte 0x04, 0x04, 0x00, 0x01, 0x70, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x02, 0x70, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00 + .byte 0x03, 0x05, 0x00, 0x00, 0x68, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x01, 0x68, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, 0x00, 0x00 + .byte 0x04, 0x05, 0x00, 0x02, 0x60, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x04, 0x60, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x00, 0x00 + .byte 0x02, 0x03, 0x00, 0x00, 0x58, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x58, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x00 + .byte 0x03, 0x07, 0x00, 0x00, 0x50, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x50, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x00, 0x00 + .byte 0x03, 0x06, 0x00, 0x00, 0x50, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x50, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00 + +gUnknown_08613750:: @ 8613750 + .byte 0x28, 0x00, 0x46, 0x01, 0x5a, 0x02, 0x64, 0x03, 0x23, 0x01, 0x37, 0x02, 0x4b, 0x03, 0x5a, 0x04, 0x64, 0x0a, 0x23, 0x02, 0x37, 0x03, 0x4b, 0x04, 0x5a, 0x05, 0x64, 0x0b, 0x23, 0x03, 0x37, 0x04 + .byte 0x4b, 0x05, 0x5a, 0x06, 0x64, 0x0c, 0x23, 0x04, 0x37, 0x05, 0x4b, 0x06, 0x5a, 0x07, 0x64, 0x0d, 0x23, 0x05, 0x37, 0x06, 0x4b, 0x07, 0x5a, 0x08, 0x64, 0x0e, 0x23, 0x06, 0x37, 0x07, 0x4b, 0x08 + .byte 0x5a, 0x09, 0x64, 0x0f + +gUnknown_08613794:: @ 8613794 + .byte 0x00, 0x04, 0x09, 0x0e, 0x13, 0x18, 0x1d, 0x00 + + .align 1 +gUnknown_0861379C:: @ 861379C + .2byte 0x0015, 0x0051, 0x0085, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x0087, 0x0022, 0x008a, 0x0018 + .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x0088, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c + .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x0086, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db + .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 + .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 + .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 + .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c + .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db + .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 + .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 + .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 + .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c + .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 + + .align 1 +gUnknown_0861392C:: @ 861392C + .2byte 0x0015, 0x0051, 0x0085, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x0087, 0x0022, 0x008a, 0x0018 + .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x0088, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c + .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x0086, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db + .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 + .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 + .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 + .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c + .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025, 0x0015, 0x004d, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db + .2byte 0x0019, 0x002d, 0x0015, 0x004e, 0x008d, 0x0022, 0x008a, 0x0018, 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004f, 0x008d, 0x0022 + .2byte 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x0049, 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 + .2byte 0x0015, 0x0051, 0x008d, 0x0022, 0x008d, 0x0018, 0x00b3, 0x00db, 0x0019, 0x002d, 0x0015, 0x004a, 0x008d, 0x0022, 0x008a, 0x0018 + .2byte 0x00c8, 0x00ba, 0x0013, 0x0025, 0x0015, 0x004b, 0x008d, 0x0022, 0x008d, 0x0018, 0x00c6, 0x00c4, 0x0019, 0x002d, 0x0015, 0x004c + .2byte 0x008d, 0x0022, 0x008a, 0x0018, 0x00b7, 0x00bb, 0x0013, 0x0025 + +gUnknown_08613ABC:: @ 8613ABC + .byte 0x1f, 0x00, 0x2e, 0x01, 0x3d, 0x02, 0x47, 0x03, 0x51, 0x04, 0x5b, 0x05, 0x5e, 0x06, 0x61, 0x07, 0x64, 0x08, 0x0f, 0x00, 0x2e, 0x01, 0x3d, 0x02, 0x47, 0x03, 0x51, 0x04, 0x5b, 0x05, 0x5e, 0x06 + .byte 0x61, 0x08, 0x64, 0x09, 0x0f, 0x00, 0x1e, 0x01, 0x3d, 0x02, 0x47, 0x03, 0x51, 0x04, 0x5b, 0x05, 0x5e, 0x06, 0x61, 0x07, 0x64, 0x08, 0x1c, 0x00, 0x2b, 0x01, 0x3a, 0x02, 0x44, 0x03, 0x4e, 0x04 + .byte 0x58, 0x05, 0x5c, 0x07, 0x60, 0x08, 0x64, 0x09, 0x0f, 0x00, 0x2b, 0x01, 0x3a, 0x02, 0x44, 0x03, 0x4e, 0x04, 0x58, 0x05, 0x5c, 0x06, 0x60, 0x07, 0x64, 0x09, 0x0f, 0x00, 0x1e, 0x01, 0x3a, 0x02 + .byte 0x44, 0x03, 0x4e, 0x04, 0x58, 0x05, 0x5c, 0x06, 0x60, 0x07, 0x64, 0x08, 0x1c, 0x00, 0x2b, 0x01, 0x3a, 0x02, 0x44, 0x03, 0x4e, 0x04, 0x58, 0x05, 0x5c, 0x06, 0x60, 0x08, 0x64, 0x09 + +gUnknown_08613B3A:: @ 8613B3A + .byte 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x00, 0x00, 0x00 + + .align 2 +gUnknown_08613B44:: @ 8613B44 + .byte 0x03, 0x06 + + .align 2 + .byte 0x0b, 0x06 + + .align 2 + .byte 0x0d, 0x06 + + .align 2 + .byte 0x0f, 0x01 + + .align 2 + .byte 0x2b, 0x04 + + .align 2 + .byte 0x2d, 0x01 + + .align 2 + .byte 0x24, 0x09 + + .align 2 + .byte 0x29, 0x04 + + .align 2 + .byte 0x05, 0x05 + + .align 2 + .byte 0x18, 0x04 + + .align 2 + .byte 0x2f, 0x00 + + .align 2 + .byte 0x2e, 0x09 + + .align 2 + .byte 0x11, 0x0c + + .align 2 + .byte 0x10, 0x0b + + .align 2 + .byte 0x1e, 0x0d + + .align 2 + .byte 0x08, 0x01 + + .align 2 + .byte 0x17, 0x03 + + .align 2 + .byte 0x0c, 0x04 + + .align 2 + .byte 0x38, 0x04 + + .align 2 + .byte 0x1c, 0x03 + + .align 2 + .byte 0x1a, 0x00 + + .align 2 + .byte 0x19, 0x0b + + .align 2 + .byte 0x09, 0x07 + + .align 2 + .byte 0x31, 0x07 + + .align 2 + .byte 0x35, 0x07 + + .align 2 + .byte 0x36, 0x01 + + .align 2 + .byte 0x33, 0x00 + + .align 2 + .byte 0x2a, 0x03 + + .align 2 + .byte 0x16, 0x0d + + .align 2 + .byte 0x0e, 0x03 + + .align 2 + .byte 0x15, 0x01 + + .align 2 + .byte 0x14, 0x01 + + .align 2 + .byte 0x2c, 0x01 + + .align 2 + .byte 0x1b, 0x02 + + .align 2 + .byte 0x04, 0x01 + + .align 2 + .byte 0x07, 0x03 + + .align 2 + .byte 0x34, 0x05 + + .align 2 + .byte 0x32, 0x00 + + .align 2 + .byte 0x37, 0x02 + + .align 2 + .byte 0x1d, 0x04 + + .align 2 + .byte 0x22, 0x09 + + .align 2 + .byte 0x1f, 0x01 + + .align 2 + .byte 0x25, 0x00 + + .align 2 + .byte 0x0a, 0x04 + + .align 2 + .byte 0x28, 0x00 + + .align 2 + .byte 0x06, 0x05 + + .align 2 + .byte 0x27, 0x0b + + .align 2 + .byte 0x26, 0x00 + + .align 2 + .byte 0x13, 0x00 + + .align 2 + .byte 0x12, 0x02 + + .align 2 + .byte 0x39, 0x08 + + .align 2 + .byte 0x02, 0x0b + + .align 2 + .byte 0x20, 0x01 + + .align 2 + .byte 0x21, 0x00 + + .align 2 +gUnknown_08613C1C:: @ 8613C1C + .byte 0x0d, 0x03, 0x0e, 0x04, 0x10, 0x01, 0x11, 0x00, 0x03, 0x02, 0x12, 0x03, 0x0c, 0x03, 0x13, 0x03, 0x14, 0x03, 0x15, 0x02, 0x17, 0x02, 0x07, 0x02, 0x0a, 0x04, 0x19, 0x02, 0x1a, 0x02, 0x1b, 0x00 + .byte 0x1d, 0x02, 0x1e, 0x02, 0x1f, 0x03, 0x20, 0x04, 0x26, 0x00, 0x27, 0x01, 0x29, 0x04, 0x2a, 0x05, 0x09, 0x04, 0x16, 0x05, 0x2b, 0x00, 0x2d, 0x04, 0x2e, 0x02, 0x30, 0x02, 0x32, 0x02, 0x31, 0x03 + .byte 0x2f, 0x03, 0x33, 0x03, 0x34, 0x02, 0x04, 0x02, 0x35, 0x00, 0x36, 0x03, 0x37, 0x03, 0x38, 0x03, 0x1c, 0x01, 0x3a, 0x02, 0x05, 0x02, 0x42, 0x02, 0x02, 0x03, 0x44, 0x02, 0x45, 0x03, 0x47, 0x03 + .byte 0x43, 0x00, 0x00, 0x04 + + .align 2 +gUnknown_08613C80:: @ 8613C80 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252D2D + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252D57 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252D81 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252DAB + + .align 2 +gUnknown_08613C90:: @ 8613C90 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25330B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2532CC + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25328B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253248 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253206 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2531C4 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253183 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253140 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2530FD + + .align 2 +gUnknown_08613CB4:: @ 8613CB4 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2544A6 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25445A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25440B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2543BA + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25436A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25431A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2542CB + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25427A + + .align 2 +gUnknown_08613CD4:: @ 8613CD4 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252DD5 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E03 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E31 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E5F + + .align 2 +gUnknown_08613CE4:: @ 8613CE4 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25362E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2535D4 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253578 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25351A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2534BD + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253460 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253404 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2533A6 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25334D + + .align 2 +gUnknown_08613D08:: @ 8613D08 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25471E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2546CC + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25467C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25462A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2545D9 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254588 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254538 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2544E6 + + .align 2 +gUnknown_08613D28:: @ 8613D28 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252E8D + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252EAA + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252EC7 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252EE4 + + .align 2 +gUnknown_08613D38:: @ 8613D38 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2539EC + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253980 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253915 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2538A8 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25383C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2537D0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253765 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2536F8 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25368B + + .align 2 +gUnknown_08613D5C:: @ 8613D5C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254A0B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2549AE + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25494D + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2548EB + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25488A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254829 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2547C9 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254767 + + .align 2 +gUnknown_08613D7C:: @ 8613D7C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252F01 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252F3A + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252F73 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252FAC + + .align 2 +gUnknown_08613D8C:: @ 8613D8C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253D3E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253CE0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253C87 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253C2C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253BD2 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253B78 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253B1F + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253AC4 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253A69 + + .align 2 +gUnknown_08613DB0:: @ 8613DB0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254C3E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254BF1 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254BAE + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254B69 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254B25 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254AE1 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254A9E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254A59 + + .align 2 +gUnknown_08613DD0:: @ 8613DD0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_252FE5 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253000 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25301B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253036 + + .align 2 +gUnknown_08613DE0:: @ 8613DE0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253F6C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253F34 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253EFA + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253EBE + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253E83 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253E48 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253E0E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253DD2 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253D96 + + .align 2 +gUnknown_08613E04:: @ 8613E04 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254E6E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254E27 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254DE0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254D97 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254D4F + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254D07 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254CC0 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254C77 + + .align 2 +gUnknown_08613E24:: @ 8613E24 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253051 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25307C + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2530A7 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2530D2 + + .align 2 +gUnknown_08613E34:: @ 8613E34 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25422B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2541DD + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25418D + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25413B + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_2540EA + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254099 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254049 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253FF7 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_253FA5 + + .align 2 +gUnknown_08613E58:: @ 8613E58 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_255068 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_25502F + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254FF6 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254FBB + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254F81 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254F47 + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254F0E + .4byte BattleFrontier_BattlePyramidEmptySquare_Text_254ED3 + + .align 2 +gUnknown_08613E78:: @ 8613E78 + .4byte gUnknown_08613C80 + .4byte gUnknown_08613C90 + .4byte gUnknown_08613CB4 + + .align 2 +gUnknown_08613E84:: @ 8613E84 + .4byte gUnknown_08613CD4 + .4byte gUnknown_08613CE4 + .4byte gUnknown_08613D08 + + .align 2 +gUnknown_08613E90:: @ 8613E90 + .4byte gUnknown_08613D28 + .4byte gUnknown_08613D38 + .4byte gUnknown_08613D5C + + .align 2 +gUnknown_08613E9C:: @ 8613E9C + .4byte gUnknown_08613D7C + .4byte gUnknown_08613D8C + .4byte gUnknown_08613DB0 + + .align 2 +gUnknown_08613EA8:: @ 8613EA8 + .4byte gUnknown_08613DD0 + .4byte gUnknown_08613DE0 + .4byte gUnknown_08613E04 + + .align 2 +gUnknown_08613EB4:: @ 8613EB4 + .4byte gUnknown_08613E24 + .4byte gUnknown_08613E34 + .4byte gUnknown_08613E58 + + .align 2 +gUnknown_08613EC0:: @ 8613EC0 + .4byte gUnknown_08613E78 + .4byte gUnknown_08613E84 + .4byte gUnknown_08613E90 + .4byte gUnknown_08613E9C + .4byte gUnknown_08613EA8 + .4byte gUnknown_08613EB4 + +gUnknown_08613ED8:: @ 8613ED8 + .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x03, 0x04 + + .align 2 +gUnknown_08613EE0:: @ 8613EE0 + .4byte sub_81A8E9C + .4byte sub_81A8F38 + .4byte sub_81A9048 + .4byte sub_81A9134 + .4byte sub_81A917C + .4byte sub_81A91FC + .4byte sub_81A9254 + .4byte CalculateBattlePyramidItemBallItemId + .4byte sub_81A93C8 + .4byte sub_81A9414 + .4byte sub_81A9424 + .4byte sub_81A9618 + .4byte sub_81A966C + .4byte sub_81A9684 + .4byte sub_81A975C + .4byte sub_81A97C8 + .4byte sub_81A9828 + .4byte sub_81A9834 + + .align 1 +gUnknown_08613F28:: @ 8613F28 + .2byte 0x003f, 0x0040, 0x0041, 0x0043, 0x0042, 0x0046 + + .align 2 +gUnknown_08613F34:: @ 8613F34 + .2byte 0x00b3, 0x00b4, 0x00b7, 0x00c8, 0x00b9, 0x00bb, 0x00c4, 0x00c6, 0x00ba + +gUnknown_08613F46:: @ 8613F46 + .byte 0x01, 0x04, 0xff, 0xff, 0x00, 0x02, 0x05, 0xff, 0x01, 0x03, 0x06, 0xff, 0x02, 0x07, 0xff, 0xff, 0x00, 0x05, 0x08, 0xff, 0x01, 0x04, 0x06, 0x09, 0x02, 0x05, 0x07, 0x0a, 0x03, 0x06, 0x0b, 0xff + .byte 0x04, 0x09, 0x0c, 0xff, 0x05, 0x08, 0x0a, 0x0d, 0x06, 0x09, 0x0b, 0x0e, 0x07, 0x0a, 0x0f, 0xff, 0x08, 0x0d, 0xff, 0xff, 0x09, 0x0c, 0x0e, 0xff, 0x0a, 0x0d, 0x0f, 0xff, 0x0b, 0x0e, 0xff, 0xff + +gUnknown_08613F86:: @ 8613F86 + .byte 0x1e, 0x28, 0x32, 0x3c, 0x46, 0x50, 0x55, 0x5a, 0x5f, 0x64 diff --git a/data/battle_pike.s b/data/battle_pike.s new file mode 100644 index 000000000..88f040f17 --- /dev/null +++ b/data/battle_pike.s @@ -0,0 +1,212 @@ +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/trainers.h" + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + .align 2 +gUnknown_086121D4:: @ 86121D4 + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x016a, 0x0005, 0x0105, 0x00d4 + .2byte 0x005c, 0x0145 + + .align 1 +gUnknown_086121F8:: @ 86121F8 + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x0065, 0x0005, 0x0099, 0x0078 + .2byte 0x0057, 0x005c + + .align 1 +gUnknown_0861221C:: @ 861221C + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x0133, 0x0005, 0x0093, 0x004e + .2byte 0x004d, 0x00ed + + .align 1 +gUnknown_08612240:: @ 8612240 + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0022, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x0039, 0x00ca, 0x0005, 0x0044, 0x00f3 + .2byte 0x00db, 0x00c2 + + .align 2 +gUnknown_08612264:: @ 8612264 + .4byte gUnknown_086121D4 + .4byte gUnknown_086121F8 + .4byte gUnknown_0861221C + .4byte gUnknown_08612240 + + .align 1 +gUnknown_08612274:: @ 8612274 + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x016a, 0x0005, 0x0105, 0x00d4 + .2byte 0x005c, 0x003a + + .align 1 +gUnknown_08612298:: @ 8612298 + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x0065, 0x0005, 0x0099, 0x0078 + .2byte 0x0057, 0x005c + + .align 1 +gUnknown_086122BC:: @ 86122BC + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x0133, 0x0005, 0x0093, 0x004e + .2byte 0x004d, 0x00ed + + .align 1 +gUnknown_086122E0:: @ 86122E0 + .2byte 0x017b, 0x0004, 0x005c, 0x0089, 0x0131, 0x00bc, 0x0149, 0x0004, 0x005c, 0x005f, 0x0022, 0x003a, 0x00ca, 0x0005, 0x0044, 0x00f3 + .2byte 0x00db, 0x00e3 + + .align 2 +gUnknown_08612304:: @ 8612304 + .4byte gUnknown_08612274 + .4byte gUnknown_08612298 + .4byte gUnknown_086122BC + .4byte gUnknown_086122E0 + + .align 2 +gUnknown_08612314:: @ 8612314 + .4byte gUnknown_08612264 + .4byte gUnknown_08612304 + + .align 2 +gUnknown_0861231C:: @ 861231C + .2byte 0x0012 + .byte 0x03, 0x05, 0x06 + + .align 2 + .2byte 0x0005 + .byte 0x0d, 0x20, 0x25 + + .align 2 + .2byte 0x0011 + .byte 0x08, 0x0b, 0x0c + + .align 2 + .2byte 0x0024 + .byte 0x22, 0x1e, 0x21 + + .align 2 + .2byte 0x0015 + .byte 0x00, 0x00, 0x00 + + .align 2 + .2byte 0x001e + .byte 0x01, 0x01, 0x01 + + .align 2 + .2byte 0x002c + .byte 0x16, 0x17, 0x1b + + .align 2 + .2byte 0x0037 + .byte 0x08, 0x16, 0x1f + + .align 2 + .2byte 0x000e + .byte 0x0d, 0x27, 0x15 + + .align 2 + .2byte 0x0014 + .byte 0x02, 0x04, 0x11 + + .align 2 + .2byte 0x0038 + .byte 0x1e, 0x14, 0x24 + + .align 2 + .2byte 0x0042 + .byte 0x1c, 0x22, 0x19 + + .align 2 + .2byte 0x0026 + .byte 0x17, 0x26, 0x1a + + .align 2 + .2byte 0x0032 + .byte 0x17, 0x1e, 0x0b + + .align 2 + .2byte 0x002f + .byte 0x0f, 0x13, 0x0e + + .align 2 + .2byte 0x0027 + .byte 0x02, 0x1d, 0x1a + + .align 2 + .2byte 0x0033 + .byte 0x25, 0x0c, 0x20 + + .align 2 + .2byte 0x0021 + .byte 0x18, 0x17, 0x26 + + .align 2 + .2byte 0x0018 + .byte 0x05, 0x16, 0x04 + + .align 2 + .2byte 0x000b + .byte 0x29, 0x25, 0x23 + + .align 2 + .2byte 0x0035 + .byte 0x27, 0x0e, 0x0d + + .align 2 + .2byte 0x0030 + .byte 0x0a, 0x07, 0x09 + + .align 2 + .2byte 0x000c + .byte 0x28, 0x14, 0x10 + + .align 2 + .2byte 0x0034 + .byte 0x12, 0x0d, 0x15 + + .align 2 + .2byte 0x0013 + .byte 0x16, 0x1f, 0x1b + + .align 2 +gUnknown_086123E4:: @ 86123E4 + .byte 0x29, 0x0a, 0x30, 0x06, 0x01, 0x0a, 0x0f, 0x14, 0x20, 0x10, 0x0e, 0x27 + .byte 0x2a, 0x0a, 0x1d, 0x08, 0x1b, 0x06, 0x34, 0x10, 0x20, 0x1e, 0x29, 0x0a + .byte 0x22, 0x1e, 0x31, 0x12, 0x01, 0x0a, 0x18, 0x10, 0x1a, 0x1c, 0x03, 0x0c + .byte 0x0f, 0x1e, 0x0b, 0x10, 0x39, 0x10, 0x0f, 0x20, 0x2b, 0x10, 0x14, 0x0a + .byte 0x3b, 0x10, 0x02, 0x0a, 0x1e, 0x16, 0x20, 0x10, 0x3e, 0x14, 0x03, 0x0c + .byte 0x31, 0x0a, 0x02, 0x0e, 0x15, 0x0e, 0x36, 0x14, 0x37, 0x10, 0x0a, 0x1e + .byte 0x29, 0x0a, 0x25, 0x10, 0x2a, 0x14, 0x34, 0x10, 0x0f, 0x1e, 0x1b, 0x0a + .byte 0x01, 0x0a, 0x07, 0x0e, 0x2a, 0x12, 0x0f, 0x1e, 0x1f, 0x06, 0xff, 0xff + .byte 0x35, 0x1a, 0x36, 0x10, 0x0f, 0x0e, 0x01, 0x0a, 0x21, 0x26, 0x0f, 0x1e + .byte 0x25, 0x0e, 0x2f, 0x10, 0x2d, 0x06, 0x1e, 0x20, 0x03, 0x0c, 0xff, 0xff + .byte 0x1d, 0x0c, 0x1d, 0x08, 0x2b, 0x0a, 0x0f, 0x10, 0x02, 0x0a, 0x03, 0x0c + .byte 0x2a, 0x0a, 0x3e, 0x0a, 0x00, 0x20, 0x27, 0x10, 0x08, 0x1c, 0x04, 0x0c + .byte 0x01, 0x0a, 0x12, 0x12, 0x01, 0x0a, 0x00, 0x10, 0x2d, 0x06, 0xff, 0xff + .byte 0x22, 0x1e, 0x31, 0x12, 0x01, 0x0a, 0x18, 0x10, 0x1c, 0x1c, 0x03, 0x0c + .byte 0x01, 0x0a, 0x0b, 0x06, 0x30, 0x10, 0x28, 0x0a, 0x49, 0x25, 0x24, 0x06 + .byte 0x14, 0x10, 0x2c, 0x0a, 0x15, 0x04, 0x42, 0x16, 0x1b, 0x1e, 0x03, 0x0c + .byte 0x28, 0x06, 0x0f, 0x1a, 0x0b, 0x10, 0x17, 0x20, 0x00, 0x0c, 0xff, 0xff + .byte 0x01, 0x0a, 0x15, 0x10, 0x47, 0x16, 0x0f, 0x1e, 0x39, 0x0e, 0x36, 0x0e + .byte 0x01, 0x0a, 0x17, 0x10, 0x20, 0x16, 0x19, 0x0e, 0x31, 0x0a, 0x38, 0x0c + .byte 0x1d, 0x0c, 0x1d, 0x08, 0x00, 0x0c, 0x22, 0x10, 0x12, 0x1c, 0x0b, 0x02 + .byte 0x29, 0x10, 0x04, 0x14, 0x2f, 0x10, 0x06, 0x10, 0x28, 0x1e, 0x1c, 0x1c + .byte 0x29, 0x10, 0x20, 0x0e, 0x28, 0x10, 0x16, 0x1c, 0x29, 0x1e, 0x03, 0x0c + .byte 0x0f, 0x1e, 0x0b, 0x10, 0x2f, 0x0e, 0x38, 0x06, 0x0c, 0x10, 0xff, 0xff + .byte 0x29, 0x0a, 0x08, 0x14, 0x2f, 0x10, 0x1e, 0x06, 0x2c, 0x10, 0xff, 0xff + .byte 0x23, 0x10, 0x0b, 0x10, 0x1d, 0x08, 0x2d, 0x06, 0x37, 0x10, 0x14, 0x0a + .byte 0x29, 0x0a, 0x22, 0x10, 0x08, 0x14, 0x2f, 0x10, 0x1e, 0x16, 0x29, 0x10 + .byte 0x01, 0x06, 0x2c, 0x10, 0x01, 0x0a, 0x15, 0x10, 0x39, 0x0e, 0x36, 0x0e + .byte 0x20, 0x10, 0x0b, 0x02, 0x3f, 0x10, 0x12, 0x1c, 0x04, 0x0c, 0xff, 0xff + .byte 0x18, 0x10, 0x02, 0x0a, 0x3a, 0x10, 0x46, 0x04, 0x0e, 0x02, 0x03, 0x0c + .byte 0x10, 0x1e, 0x0b, 0x02, 0x0a, 0x1e, 0x0b, 0x10, 0x3a, 0x06, 0xff, 0xff + .byte 0x02, 0x0a, 0x12, 0x12, 0x0f, 0x1e, 0x0b, 0x10, 0x38, 0x06, 0x03, 0x0c + .byte 0x22, 0x1e, 0x00, 0x10, 0x1b, 0x16, 0x3f, 0x10, 0x0f, 0x1e, 0x03, 0x0c + .byte 0x29, 0x0a, 0x1e, 0x0e, 0x25, 0x10, 0x26, 0x1e, 0x00, 0x0c, 0xff, 0xff + .byte 0x01, 0x0a, 0x1e, 0x0e, 0x36, 0x12, 0x2f, 0x10, 0x0b, 0x12, 0x04, 0x0c + .byte 0x05, 0x28, 0x0f, 0x1e, 0x1b, 0x0a, 0x0b, 0x10, 0x20, 0x10, 0x3b, 0x06 + .byte 0x01, 0x0a, 0x1f, 0x10, 0x3e, 0x0a, 0x37, 0x10, 0x20, 0x10, 0x28, 0x06 + .byte 0x26, 0x10, 0x31, 0x0a, 0x29, 0x1e, 0x1c, 0x1c, 0x01, 0x0a, 0x12, 0x12 + .byte 0x0a, 0x0c, 0x00, 0x0c, 0x29, 0x10, 0x1c, 0x10, 0x0f, 0x1e, 0x23, 0x0c + .byte 0x28, 0x0a, 0x0e, 0x02, 0x0f, 0x10, 0x39, 0x10, 0x2a, 0x14, 0x04, 0x0c + .byte 0x28, 0x0a, 0x0e, 0x02, 0x0f, 0x10, 0x20, 0x06, 0x2f, 0x10, 0x3c, 0x04 + .byte 0x39, 0x0c, 0x39, 0x0c, 0x00, 0x0c, 0x29, 0x0a, 0x17, 0x20, 0x39, 0x0c + .byte 0x5c, 0x26, 0x0b, 0x10, 0x20, 0x10, 0x30, 0x12, 0x05, 0x1e, 0x0c, 0x10 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index edf49eda5..be91c7c7e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -318,7 +318,7 @@ BattleScript_EffectSleep:: goto BattleScript_MoveEnd BattleScript_AlreadyAsleep:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNALREADYASLEEP waitmessage 0x40 @@ -731,7 +731,7 @@ BattleScript_EffectToxic:: goto BattleScript_MoveEnd BattleScript_AlreadyPoisoned:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x40 printstring STRINGID_PKMNALREADYPOISONED waitmessage 0x40 @@ -779,7 +779,7 @@ BattleScript_RestCantSleep:: goto BattleScript_MoveEnd BattleScript_RestIsAlreadyAsleep:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNALREADYASLEEP2 waitmessage 0x40 @@ -944,7 +944,7 @@ BattleScript_EffectConfuse:: goto BattleScript_MoveEnd BattleScript_AlreadyConfused:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNALREADYCONFUSED waitmessage 0x40 @@ -1051,7 +1051,7 @@ BattleScript_EffectParalyze:: goto BattleScript_MoveEnd BattleScript_AlreadyParalyzed:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNISALREADYPARALYZED waitmessage 0x40 @@ -1128,7 +1128,7 @@ BattleScript_SubstituteString:: waitmessage 0x40 goto BattleScript_MoveEnd BattleScript_AlreadyHasSubstitute:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNHASSUBSTITUTE waitmessage 0x40 @@ -2226,7 +2226,7 @@ BattleScript_WaterVeilPrevents:: goto BattleScript_MoveEnd BattleScript_AlreadyBurned:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNALREADYHASBURN waitmessage 0x40 @@ -2643,7 +2643,7 @@ BattleScript_TeeterDanceSubstitutePrevents:: goto BattleScript_TeeterDanceDoMoveEndIncrement BattleScript_TeeterDanceAlreadyConfused:: - various23 BS_ATTACKER + setalreadystatusedmoveattempt BS_ATTACKER pause 0x20 printstring STRINGID_PKMNALREADYCONFUSED waitmessage 0x40 @@ -4487,54 +4487,54 @@ BattleScript_ArenaTurnBeginning:: pause 0x8 playse SE_HANTEI1 various14 BS_ATTACKER - various16 8 - various17 8 + arenajudmengtstring 8 + arenawaitmessage 8 pause 0x40 various15 BS_ATTACKER volumeup end2 -BattleScript_82DB8E0:: +BattleScript_82DB8E0:: @ Unused battlescript playse SE_PINPON various14 BS_ATTACKER - various16 BS_TARGET - various17 BS_TARGET + arenajudmengtstring BS_TARGET + arenawaitmessage BS_TARGET pause 0x40 various15 BS_ATTACKER end2 -BattleScript_82DB8F3:: - makevisible 11 +BattleScript_ArenaDoJudgment:: + makevisible BS_PLAYER1 waitstate makevisible BS_OPPONENT1 waitstate volumedown - playse 0x109 + playse SE_HANTEI1 pause 0x8 - playse 0x109 + playse SE_HANTEI1 pause 0x40 various14 BS_ATTACKER - various16 BS_ATTACKER - various17 BS_ATTACKER + arenajudmengtstring 1 + arenawaitmessage 1 pause 0x40 setbyte gBattleCommunication, 0x0 - various9 BS_ATTACKER + arenajudgmentwindow pause 0x40 - various9 BS_ATTACKER - various16 BS_EFFECT_BATTLER - various17 BS_EFFECT_BATTLER - various9 BS_ATTACKER - various16 BS_FAINTED - various17 BS_FAINTED - various9 BS_ATTACKER - various16 0x4 - various17 0x4 - various9 BS_ATTACKER - jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x3, BattleScript_82DB973 - jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x4, BattleScript_82DB992 - various16 0x5 - various17 0x5 - various9 BS_ATTACKER + arenajudgmentwindow + arenajudmengtstring 2 + arenawaitmessage 2 + arenajudgmentwindow + arenajudmengtstring 3 + arenawaitmessage 3 + arenajudgmentwindow + arenajudmengtstring 4 + arenawaitmessage 4 + arenajudgmentwindow + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x3, BattleScript_ArenaJudgmentPlayerLoses + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x4, BattleScript_ArenaJudgmentDraw + arenajudmengtstring 5 + arenawaitmessage 5 + arenajudgmentwindow various15 BS_ATTACKER printstring STRINGID_DEFEATEDOPPONENTBYREFEREE waitmessage 0x40 @@ -4542,39 +4542,39 @@ BattleScript_82DB8F3:: waitcry BS_ATTACKER dofaintanimation BS_OPPONENT1 cleareffectsonfaint BS_OPPONENT1 - various10 BS_ATTACKER + arenaopponentmonlost end2 -BattleScript_82DB973:: - various16 0x6 - various17 0x6 - various9 BS_ATTACKER +BattleScript_ArenaJudgmentPlayerLoses: + arenajudmengtstring 6 + arenawaitmessage 6 + arenajudgmentwindow various15 BS_ATTACKER printstring STRINGID_LOSTTOOPPONENTBYREFEREE waitmessage 0x40 - playfaintcry 11 + playfaintcry BS_PLAYER1 waitcry BS_ATTACKER - dofaintanimation 11 - cleareffectsonfaint 11 - various11 BS_ATTACKER + dofaintanimation BS_PLAYER1 + cleareffectsonfaint BS_PLAYER1 + arenaplayermonlost end2 -BattleScript_82DB992:: - various16 BS_BATTLER_0 - various17 BS_BATTLER_0 - various9 BS_ATTACKER +BattleScript_ArenaJudgmentDraw: + arenajudmengtstring 7 + arenawaitmessage 7 + arenajudgmentwindow various15 BS_ATTACKER printstring STRINGID_TIEDOPPONENTBYREFEREE waitmessage 0x40 - playfaintcry 11 + playfaintcry BS_PLAYER1 waitcry BS_ATTACKER - dofaintanimation 11 - cleareffectsonfaint 11 + dofaintanimation BS_PLAYER1 + cleareffectsonfaint BS_PLAYER1 playfaintcry BS_OPPONENT1 waitcry BS_ATTACKER dofaintanimation BS_OPPONENT1 cleareffectsonfaint BS_OPPONENT1 - various12 BS_ATTACKER + arenabothmonlost end2 BattleScript_AskIfWantsToForfeitMatch:: diff --git a/data/event_scripts.s b/data/event_scripts.s index 8fb50a92b..e52b95f24 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1,13 +1,14 @@ +#include "constants/battle_frontier.h" +#include "constants/field_effects.h" #include "constants/flags.h" #include "constants/items.h" +#include "constants/heal_locations.h" #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" -#include "constants/vars.h" -#include "constants/heal_locations.h" #include "constants/trainers.h" -#include "constants/battle_frontier.h" +#include "constants/vars.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .include "constants/constants.inc" @@ -434,13 +435,13 @@ gStdScripts_End:: @ 81DC2CC EventScript_SecretBasePC:: @ 823B4BB lockall - playse 2 + playse SE_PC_LOGIN message Text_276805 - dofieldeffect 61 + dofieldeffect FLDEFF_PCTURN_ON waitstate waitmessage waitbuttonpress - playse 5 + playse SE_SELECT goto EventScript_23B4D3 end @@ -496,12 +497,12 @@ EventScript_23B585:: @ 823B585 EventScript_RecordMixingSecretBasePC:: @ 823B589 lockall message Text_276805 - playse 2 - dofieldeffect 61 + playse SE_PC_LOGIN + dofieldeffect FLDEFF_PCTURN_ON waitstate waitmessage waitbuttonpress - playse 5 + playse SE_SELECT goto EventScript_23B5A1 end @@ -584,7 +585,7 @@ EventScript_23B680:: @ 823B680 EventScript_SecretBaseSandOrnament:: @ 823B684 special sub_80EBE7C - dofieldeffect 52 + dofieldeffect FLDEFF_SAND_PILLAR waitstate end @@ -1435,8 +1436,8 @@ OldaleTown_PokemonCenter_1F_EventScript_27198D:: @ 827198D OldaleTown_PokemonCenter_1F_EventScript_271993:: @ 8271993 applymovement VAR_0x800B, OldaleTown_PokemonCenter_1F_Movement_2725A4 waitmovement 0 - dofieldeffect 25 - waitfieldeffect 25 + dofieldeffect FLDEFF_POKECENTER_HEAL + waitfieldeffect FLDEFF_POKECENTER_HEAL applymovement VAR_0x800B, OldaleTown_PokemonCenter_1F_Movement_2725AA waitmovement 0 special HealPlayerParty @@ -1914,7 +1915,7 @@ EventScript_UseSurf:: @ 8271EA0 compare VAR_RESULT, 0 goto_eq EventScript_271ED5 msgbox gUnknown_0827300D, 4 - dofieldeffect 9 + dofieldeffect FLDEFF_USE_SURF EventScript_271ED5:: @ 8271ED5 releaseall @@ -3325,7 +3326,7 @@ EventScript_2736B3:: @ 82736B3 EventScript_Poison:: @ 82736BC lockall - special sub_80F972C + special ExecuteWhiteOut waitstate compare VAR_RESULT, 1 goto_eq EventScript_2736D9 @@ -3356,7 +3357,7 @@ EventScript_2736F8:: @ 82736F8 waitmessage waitbuttonpress setvar VAR_0x8004, 16 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 1 goto_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_2C4222 setvar VAR_0x8004, 12 @@ -4447,14 +4448,14 @@ EventScript_275A50:: @ 8275A50 goto_eq EventScript_275CDE msgbox Route103_Text_290771, 4 closemessage - dofieldeffect 11 + dofieldeffect FLDEFF_USE_SECRET_POWER_CAVE waitstate goto EventScript_275A9B end EventScript_275A86:: @ 8275A86 lockall - dofieldeffect 11 + dofieldeffect FLDEFF_USE_SECRET_POWER_CAVE waitstate goto EventScript_275A9B end @@ -4479,14 +4480,14 @@ EventScript_275AA9:: @ 8275AA9 goto_eq EventScript_275CDE msgbox Route103_Text_290771, 4 closemessage - dofieldeffect 26 + dofieldeffect FLDEFF_USE_SECRET_POWER_TREE waitstate goto EventScript_275AF4 end EventScript_275ADF:: @ 8275ADF lockall - dofieldeffect 26 + dofieldeffect FLDEFF_USE_SECRET_POWER_TREE waitstate goto EventScript_275AF4 end @@ -4511,14 +4512,14 @@ EventScript_275B02:: @ 8275B02 goto_eq EventScript_275CDE msgbox Route103_Text_290771, 4 closemessage - dofieldeffect 27 + dofieldeffect FLDEFF_USE_SECRET_POWER_SHRUB waitstate goto EventScript_275B4D end EventScript_275B38:: @ 8275B38 lockall - dofieldeffect 27 + dofieldeffect FLDEFF_USE_SECRET_POWER_SHRUB waitstate goto EventScript_275B4D end @@ -10204,9 +10205,9 @@ BattleFrontier_BattlePikeRandomRoom1_MapScripts_2C3E1B: @ 82C3E1B BattleFrontier_BattlePikeRandomRoom1_MapScript1_2C3E25: @ 82C3E25 setvar VAR_0x8004, 4 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 5 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 0, BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3EB1 case 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3EB1 @@ -10251,7 +10252,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3EE8:: @ 82C3EE8 setvar VAR_OBJ_GFX_ID_1, 28 setvar VAR_OBJ_GFX_ID_0, 28 setvar VAR_0x8004, 5 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 3 goto_eq BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F35 compare VAR_RESULT, 6 @@ -10294,12 +10295,12 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_2C3F64:: @ 82C3F64 BattleFrontier_BattlePikeThreePathRoom_EventScript_2C3F6F:: @ 82C3F6F setvar VAR_0x8004, 1 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 1 setvar VAR_0x8005, 2 special CallFrontierUtilFunc @@ -10309,9 +10310,9 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_2C3F6F:: @ 82C3F6F copyvar VAR_0x8006, VAR_RESULT special CallFrontierUtilFunc setvar VAR_0x8004, 0 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 5 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_2C4030 case 1, BattleFrontier_BattlePikeThreePathRoom_EventScript_2C4030 @@ -10368,19 +10369,19 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_2C408D:: @ 82C408D BattleFrontier_BattlePikeRandomRoom1_EventScript_2C40A2:: @ 82C40A2 setvar VAR_0x8004, 25 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 1 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4128 compare VAR_RESULT, 1 call_if 5, BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4136 setvar VAR_0x8004, 1 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 1 setvar VAR_0x8005, 2 special CallFrontierUtilFunc @@ -10390,7 +10391,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_2C40A2:: @ 82C40A2 copyvar VAR_0x8006, VAR_RESULT special CallFrontierUtilFunc setvar VAR_0x8004, 3 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 1 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4144 compare VAR_RESULT, 0 @@ -10402,14 +10403,14 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4128:: @ 82C4128 BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4128:: @ 82C4128 setvar VAR_0x8004, 24 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction return BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4136:: @ 82C4136 BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4136:: @ 82C4136 setvar VAR_0x8004, 24 setvar VAR_0x8005, 0 - special sub_81A703C + special CallBattlePikeFunction return BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4144:: @ 82C4144 @@ -10430,21 +10431,21 @@ BattleFrontier_BattlePikeRandomRoom3_EventScript_2C415C:: @ 82C415C BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4174:: @ 82C4174 setvar VAR_0x8004, 7 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 25 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 1 call_if 1, BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4128 compare VAR_RESULT, 1 call_if 5, BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4136 setvar VAR_0x8004, 1 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 1 setvar VAR_0x8005, 2 special CallFrontierUtilFunc @@ -10454,7 +10455,7 @@ BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4174:: @ 82C4174 copyvar VAR_0x8006, VAR_RESULT special CallFrontierUtilFunc setvar VAR_0x8004, 3 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 1 call_if 1, BattleFrontier_BattlePikeRandomRoom3_EventScript_2C4144 compare VAR_RESULT, 0 diff --git a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc index 69df3aca2..84f0ebeea 100644 --- a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc @@ -73,7 +73,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_25752E:: @ 825752E waitse waitmovement 0 setvar VAR_0x8004, 6 - special sub_81A5238 + special CallBattleArenaFunction msgbox BattleFrontier_BattleArenaBattleRoom_Text_257C68, 4 closemessage applymovement 7, BattleFrontier_BattleArenaBattleRoom_Movement_257BF2 @@ -88,7 +88,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_25752E:: @ 825752E applymovement 7, BattleFrontier_BattleArenaBattleRoom_Movement_257BF2 waitmovement 0 setvar VAR_0x8004, 5 - special sub_8195960 + special CallBattlePalaceFunction msgbox gStringVar4, 4 waitmessage call BattleFrontier_BattleArenaBattleRoom_EventScript_257B6C @@ -105,7 +105,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2575DB:: @ 82575DB waitse waitmovement 0 setvar VAR_0x8004, 6 - special sub_81A5238 + special CallBattleArenaFunction msgbox BattleFrontier_BattleArenaBattleRoom_Text_257CCE, 4 BattleFrontier_BattleArenaBattleRoom_EventScript_257615:: @ 8257615 @@ -266,7 +266,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_25789A:: @ 825789A waitmessage setvar VAR_0x8004, 3 setvar VAR_0x8005, 2 - special sub_81A5238 + special CallBattleArenaFunction playse SE_SAVE waitse fadescreen 1 diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 710dd1ece..19976c855 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -32,11 +32,11 @@ BattleFrontier_BattleArenaLobby_EventScript_255C88:: @ 8255C88 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 setvar VAR_0x8006, 0 - special sub_81A5238 + special CallBattleArenaFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_81A5238 + special CallBattleArenaFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 0 @@ -78,7 +78,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255D2B:: @ 8255D2B setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_81A5238 + special CallBattleArenaFunction call BattleFrontier_BattleArenaLobby_EventScript_255D59 msgbox BattleFrontier_BattleArenaLobby_Text_256A74, 4 closemessage @@ -93,7 +93,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255D59:: @ 8255D59 special HealPlayerParty setvar VAR_0x8004, 3 setvar VAR_0x8005, 0 - special sub_81A5238 + special CallBattleArenaFunction playse SE_SAVE waitse call BattleFrontier_BattleArenaLobby_EventScript_23E8E0 @@ -119,7 +119,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255DC0:: @ 8255DC0 waitmessage setvar VAR_0x8004, 3 setvar VAR_0x8005, 1 - special sub_81A5238 + special CallBattleArenaFunction playse SE_SAVE waitse setvar VAR_0x8004, 2 @@ -183,11 +183,11 @@ BattleFrontier_BattleArenaLobby_EventScript_255EE8:: @ 8255EE8 setvar VAR_0x8005, 4 special CallFrontierUtilFunc setvar VAR_0x8004, 0 - special sub_81A5238 + special CallBattleArenaFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 1 - special sub_81A5238 + special CallBattleArenaFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 1 diff --git a/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc index 6d2350b6f..74b10e0f0 100644 --- a/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc @@ -69,7 +69,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_25AE67:: @ 825AE67 waitmovement 0 call BattleFrontier_BattleFactoryBattleRoom_EventScript_25B1B4 setvar VAR_0x8004, 11 - special sub_81A5E74 + special CallBattleFactoryFunction removeobject 2 setobjectxyperm 2, 7, 1 addobject 2 @@ -80,7 +80,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_25AEA7:: @ 825AEA7 compare VAR_TEMP_F, 0 goto_if 5, BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF9C setvar VAR_0x8004, 5 - special sub_8195960 + special CallBattlePalaceFunction lockall msgbox gStringVar4, 4 waitmessage @@ -109,14 +109,14 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25AEF8:: @ 825AEF8 BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF0F:: @ 825AF0F setvar VAR_0x8004, 1 setvar VAR_0x8005, 3 - special sub_81A5E74 + special CallBattleFactoryFunction compare VAR_RESULT, 9999 goto_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF3E addvar VAR_RESULT, 1 setorcopyvar VAR_0x8006, VAR_RESULT setvar VAR_0x8004, 2 setvar VAR_0x8005, 3 - special sub_81A5E74 + special CallBattleFactoryFunction BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF3E:: @ 825AF3E call BattleFrontier_BattleFactoryBattleRoom_EventScript_241EBA @@ -235,24 +235,24 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_25B0E0:: @ 825B0E0 BattleFrontier_BattleFactoryBattleRoom_EventScript_25B105:: @ 825B105 setvar VAR_0x8004, 1 setvar VAR_0x8005, 3 - special sub_81A5E74 + special CallBattleFactoryFunction compare VAR_RESULT, 9999 goto_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF3E addvar VAR_RESULT, 1 setorcopyvar VAR_0x8006, VAR_RESULT setvar VAR_0x8004, 2 setvar VAR_0x8005, 3 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 1 setvar VAR_0x8005, 1 - special sub_81A5E74 + special CallBattleFactoryFunction compare VAR_RESULT, 9999 goto_eq BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF43 addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 1 setvar VAR_0x8005, 2 special CallFrontierUtilFunc diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc index 1a535c893..6ea24b81f 100644 --- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc @@ -30,19 +30,19 @@ BattleFrontier_BattleFactoryLobby_EventScript_25843A:: @ 825843A msgbox BattleFrontier_BattleFactoryLobby_Text_258ECA, 4 closemessage setvar VAR_0x8004, 8 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 3 setvar VAR_0x8006, 0 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 setvar VAR_0x8006, 0 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 0 @@ -77,7 +77,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2584C6:: @ 82584C6 special LoadPlayerParty setvar VAR_0x8004, 3 setvar VAR_0x8005, 0 - special sub_81A5E74 + special CallBattleFactoryFunction playse SE_SAVE waitse goto BattleFrontier_BattleFactoryLobby_EventScript_25853B @@ -93,10 +93,10 @@ BattleFrontier_BattleFactoryLobby_EventScript_258506:: @ 8258506 setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 3 setvar VAR_0x8005, 0 - special sub_81A5E74 + special CallBattleFactoryFunction playse SE_SAVE waitse @@ -128,7 +128,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258592:: @ 8258592 waitmessage setvar VAR_0x8004, 3 setvar VAR_0x8005, 1 - special sub_81A5E74 + special CallBattleFactoryFunction playse SE_SAVE waitse setvar VAR_0x8004, 2 @@ -193,7 +193,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258653:: @ 8258653 BattleFrontier_BattleFactoryLobby_EventScript_2586B9:: @ 82586B9 setvar VAR_TEMP_0, 0 setvar VAR_0x8004, 0 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 1 @@ -201,7 +201,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2586B9:: @ 82586B9 setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 1 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 3 setvar VAR_0x8006, 0 diff --git a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc index 5764025e0..d99fed1b2 100644 --- a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc @@ -32,23 +32,23 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259AF9:: @ 8259AF9 compare VAR_0x8006, 2 goto_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E69 setvar VAR_0x8004, 13 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 12 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 14 - special sub_81A5E74 + special CallBattleFactoryFunction setorcopyvar VAR_0x8005, VAR_RESULT setvar VAR_0x8004, 15 - special sub_81A5E74 + special CallBattleFactoryFunction setorcopyvar VAR_0x8006, VAR_RESULT call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E93 call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A004 msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A1C8, 4 fadescreen 1 setvar VAR_0x8004, 8 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 6 - special sub_81A5E74 + special CallBattleFactoryFunction waitstate BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259B74:: @ 8259B74 @@ -66,9 +66,9 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259B74:: @ 8259B74 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259BA5:: @ 8259BA5 setvar VAR_0x8004, 9 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 16 - special sub_81A5E74 + special CallBattleFactoryFunction msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A22D, 4 playfanfare MUS_ME_ASA waitfanfare @@ -165,12 +165,12 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66:: @ 8259D66 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98:: @ 8259D98 setvar VAR_0x8004, 12 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 14 - special sub_81A5E74 + special CallBattleFactoryFunction setorcopyvar VAR_0x8005, VAR_RESULT setvar VAR_0x8004, 15 - special sub_81A5E74 + special CallBattleFactoryFunction setorcopyvar VAR_0x8006, VAR_RESULT call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E93 call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A004 @@ -183,12 +183,12 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98:: @ 8259D98 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259DF2:: @ 8259DF2 fadescreen 1 setvar VAR_0x8004, 7 - special sub_81A5E74 + special CallBattleFactoryFunction waitstate compare VAR_RESULT, 1 goto_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259B74 setvar VAR_0x8004, 8 - special sub_81A5E74 + special CallBattleFactoryFunction msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AB6C, 4 goto BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259B74 @@ -227,7 +227,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E47:: @ 8259E47 waitmessage setvar VAR_0x8004, 3 setvar VAR_0x8005, 2 - special sub_81A5E74 + special CallBattleFactoryFunction playse SE_SAVE waitse fadescreen 1 @@ -239,7 +239,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E69:: @ 8259E69 special SavePlayerParty setvar VAR_0x8004, 10 setvar VAR_0x8005, 0 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 6 setvar VAR_0x8006, 1 @@ -381,39 +381,39 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A004:: @ 825A004 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A068:: @ 825A068 - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AAE6, 4 + msgbox Text_StyleUnrestrained, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A071:: @ 825A071 - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A9CE, 4 + msgbox Text_StyleTotalPreparation, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A07A:: @ 825A07A - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A8D9, 4 + msgbox Text_StyleSlowAndSteady, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A083:: @ 825A083 - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A912, 4 + msgbox Text_StyleEndurance, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A08C:: @ 825A08C - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A94C, 4 + msgbox Text_StyleHighRisk, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A095:: @ 825A095 - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AA16, 4 + msgbox Text_StyleWeakenFoe, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A09E:: @ 825A09E - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AAA7, 4 + msgbox Text_StyleImpossibleToPredict, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0A7:: @ 825A0A7 - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25A98C, 4 + msgbox Text_StyleDependsOnFlow, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B0:: @ 825A0B0 - msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AA5A, 4 + msgbox Text_StyleFlexible, 4 return BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9:: @ 825A0B9 @@ -642,39 +642,39 @@ BattleFrontier_BattleFactoryPreBattleRoom_Text_25A893: @ 825A893 .string "The TRAINER appears to have no clear\n" .string "favorites when it comes to type.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25A8D9: @ 825A8D9 +Text_StyleSlowAndSteady: @ 825A8D9 .string "The favorite battle style appears to\n" .string "be slow and steady.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25A912: @ 825A912 +Text_StyleEndurance: @ 825A912 .string "The favorite battle style appears to\n" .string "be one of endurance.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25A94C: @ 825A94C +Text_StyleHighRisk: @ 825A94C .string "The favorite battle style appears to\n" .string "be high risk, high return.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25A98C: @ 825A98C +Text_StyleDependsOnFlow: @ 825A98C .string "The favorite battle style appears to\n" .string "depend on the battle’s flow.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25A9CE: @ 825A9CE +Text_StyleTotalPreparation: @ 825A9CE .string "The favorite battle style appears to\n" .string "be one based on total preparation.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25AA16: @ 825AA16 +Text_StyleWeakenFoe: @ 825AA16 .string "The favorite battle style appears\n" .string "to be weakening the foe to start.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25AA5A: @ 825AA5A +Text_StyleFlexible: @ 825AA5A .string "The favorite battle style appears to\n" .string "be flexibly adaptable to the situation.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25AAA7: @ 825AAA7 +Text_StyleImpossibleToPredict: @ 825AAA7 .string "The favorite battle style appears to\n" .string "be impossible to predict.$" -BattleFrontier_BattleFactoryPreBattleRoom_Text_25AAE6: @ 825AAE6 +Text_StyleUnrestrained: @ 825AAE6 .string "The favorite battle style appears to\n" .string "be free-spirited and unrestrained.$" diff --git a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc index 5cfc4c88b..a179aec55 100644 --- a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc @@ -60,7 +60,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24F8BF:: @ 824F8BF applymovement 2, BattleFrontier_BattlePalaceBattleRoom_Movement_24FEA1 waitmovement 0 setvar VAR_0x8004, 5 - special sub_8195960 + special CallBattlePalaceFunction msgbox gStringVar4, 4 waitmessage call BattleFrontier_BattlePalaceBattleRoom_EventScript_24FDF7 @@ -189,7 +189,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB3F:: @ 824FB3F waitmessage setvar VAR_0x8004, 7 setvar VAR_0x8005, 2 - special sub_8195960 + special CallBattlePalaceFunction playse SE_SAVE waitse fadescreen 1 @@ -263,7 +263,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FCAA:: @ 824FCAA BattleFrontier_BattlePalaceBattleRoom_EventScript_24FCC7:: @ 824FCC7 setvar VAR_0x8004, 6 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 12 special CallFrontierUtilFunc compare VAR_RESULT, 0 @@ -306,7 +306,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FD67:: @ 824FD67 BattleFrontier_BattlePalaceBattleRoom_EventScript_24FD84:: @ 824FD84 setvar VAR_0x8004, 6 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 12 special CallFrontierUtilFunc compare VAR_RESULT, 2 diff --git a/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc index bd916e931..23bad0421 100644 --- a/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc @@ -13,7 +13,7 @@ BattleFrontier_BattlePalaceCorridor_EventScript_24F4B3:: @ 824F4B3 waitmovement 0 lockall setvar VAR_0x8004, 3 - special sub_8195960 + special CallBattlePalaceFunction compare VAR_RESULT, 0 call_if 1, BattleFrontier_BattlePalaceCorridor_EventScript_24F58B compare VAR_RESULT, 1 diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index 804fd7bce..82d3aa5cf 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -32,11 +32,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D7D0:: @ 824D7D0 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 setvar VAR_0x8006, 0 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 0 @@ -78,7 +78,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D873:: @ 824D873 setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_8195960 + special CallBattlePalaceFunction call BattleFrontier_BattlePalaceLobby_EventScript_24D8A1 msgbox BattleFrontier_BattlePalaceLobby_Text_24E0D8, 4 closemessage @@ -93,7 +93,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D8A1:: @ 824D8A1 special HealPlayerParty setvar VAR_0x8004, 7 setvar VAR_0x8005, 0 - special sub_8195960 + special CallBattlePalaceFunction playse SE_SAVE waitse call BattleFrontier_BattlePalaceLobby_EventScript_23E8E0 @@ -120,7 +120,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D908:: @ 824D908 waitmessage setvar VAR_0x8004, 7 setvar VAR_0x8005, 1 - special sub_8195960 + special CallBattlePalaceFunction playse SE_SAVE waitse setvar VAR_0x8004, 2 @@ -149,7 +149,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D956:: @ 824D956 BattleFrontier_BattlePalaceLobby_EventScript_24D968:: @ 824D968 setvar VAR_0x8004, 1 setvar VAR_0x8005, 0 - special sub_8195960 + special CallBattlePalaceFunction compare VAR_RESULT, 0 goto_if 5, BattleFrontier_BattlePalaceLobby_EventScript_24D817 special SavePlayerParty @@ -207,11 +207,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DA87:: @ 824DA87 setvar VAR_0x8005, 4 special CallFrontierUtilFunc setvar VAR_0x8004, 0 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 1 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 1 diff --git a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc index 4bdf3c80e..3b2921737 100644 --- a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc @@ -14,10 +14,10 @@ BattleFrontier_BattlePikeCorridor_EventScript_25C786:: @ 825C786 setvar VAR_0x8006, 1 special CallFrontierUtilFunc setvar VAR_0x8004, 20 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 24 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction applymovement 255, BattleFrontier_BattlePikeCorridor_Movement_25C80B applymovement 1, BattleFrontier_BattlePikeCorridor_Movement_25C812 waitmovement 0 diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 6bbb21bd1..6bdb7f848 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -27,18 +27,18 @@ BattleFrontier_BattlePikeLobby_EventScript_25B707:: @ 825B707 BattleFrontier_BattlePikeLobby_EventScript_25B710:: @ 825B710 special HealPlayerParty setvar VAR_0x8004, 27 - special sub_81A703C + special CallBattlePikeFunction lockall msgbox BattleFrontier_BattlePikeLobby_Text_25C2E0, 4 closemessage setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 setvar VAR_0x8006, 0 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 4 setvar VAR_0x8006, 0 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 0 @@ -70,21 +70,21 @@ BattleFrontier_BattlePikeLobby_EventScript_25B78D:: @ 825B78D special CallFrontierUtilFunc setvar VAR_0x8004, 1 setvar VAR_0x8005, 3 - special sub_81A703C + special CallBattlePikeFunction addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 3 copyvar VAR_0x8006, VAR_RESULT - special sub_81A703C + special CallBattlePikeFunction special LoadPlayerParty special HealPlayerParty setvar VAR_0x8004, 27 - special sub_81A703C + special CallBattlePikeFunction message BattleFrontier_BattlePikeLobby_Text_25C1DF waitmessage setvar VAR_0x8004, 8 setvar VAR_0x8005, 0 - special sub_81A703C + special CallBattlePikeFunction playse SE_SAVE waitse msgbox BattleFrontier_BattlePikeLobby_Text_25BE02, 4 @@ -106,14 +106,14 @@ BattleFrontier_BattlePikeLobby_EventScript_25B806:: @ 825B806 setvar VAR_0x8004, 2 setvar VAR_0x8005, 4 setvar VAR_0x8006, 0 - special sub_81A703C + special CallBattlePikeFunction special LoadPlayerParty special HealPlayerParty setvar VAR_0x8004, 27 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 8 setvar VAR_0x8005, 0 - special sub_81A703C + special CallBattlePikeFunction playse SE_SAVE waitse msgbox BattleFrontier_BattlePikeLobby_Text_25BE02, 4 @@ -177,7 +177,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B95C:: @ 825B95C setvar VAR_0x8005, 4 special CallFrontierUtilFunc setvar VAR_0x8004, 28 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 1 @@ -185,9 +185,9 @@ BattleFrontier_BattlePikeLobby_EventScript_25B95C:: @ 825B95C setvar VAR_0x8004, 2 setvar VAR_0x8005, 4 setvar VAR_0x8006, 1 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 26 - special sub_81A703C + special CallBattlePikeFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 3 setvar VAR_0x8006, 0 @@ -198,7 +198,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B95C:: @ 825B95C call BattleFrontier_BattlePikeLobby_EventScript_27134F setvar VAR_TEMP_0, 255 setvar VAR_0x8004, 26 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 0 goto_eq BattleFrontier_BattlePikeLobby_EventScript_25BA5C special SavePlayerParty diff --git a/data/maps/BattleFrontier_BattlePikeRandomRoom1/scripts.inc b/data/maps/BattleFrontier_BattlePikeRandomRoom1/scripts.inc index 6f7140f30..9709e4794 100644 --- a/data/maps/BattleFrontier_BattlePikeRandomRoom1/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRandomRoom1/scripts.inc @@ -12,7 +12,7 @@ BattleFrontier_BattlePikeRandomRoom1_MapScript2_25D167: @ 825D167 BattleFrontier_BattlePikeRandomRoom1_EventScript_25D171:: @ 825D171 setvar VAR_TEMP_0, 1 setvar VAR_0x8004, 5 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 0, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D1C6 case 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D50E @@ -29,7 +29,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D1C6:: @ 825D1C6 waitmovement 0 setvar VAR_0x8004, 21 setvar VAR_0x8005, 0 - special sub_81A703C + special CallBattlePikeFunction msgbox gStringVar4, 4 waitmessage closemessage @@ -65,7 +65,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D231:: @ 825D231 waitmovement 0 setvar VAR_0x8004, 21 setvar VAR_0x8005, 0 - special sub_81A703C + special CallBattlePikeFunction msgbox gStringVar4, 4 waitmessage closemessage @@ -103,7 +103,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D2BF:: @ 825D2BF applymovement 2, BattleFrontier_BattlePikeRandomRoom1_Movement_25D7DF waitmovement 0 setvar VAR_0x8004, 23 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 0, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D4DC case 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D4EA @@ -137,7 +137,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D2FB:: @ 825D2FB applymovement 1, BattleFrontier_BattlePikeRandomRoom1_Movement_25D7E7 waitmovement 0 setvar VAR_0x8004, 22 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 2, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D416 case 3, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D3BD @@ -219,12 +219,12 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D49D:: @ 825D49D waitmovement 0 setvar VAR_0x8004, 1 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT - special sub_81A703C + special CallBattlePikeFunction call BattleFrontier_BattlePikeRandomRoom1_EventScript_2C4144 waitstate end @@ -281,7 +281,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D53E:: @ 825D53E waitmovement 0 setvar VAR_0x8004, 21 setvar VAR_0x8005, 0 - special sub_81A703C + special CallBattlePikeFunction msgbox gStringVar4, 4 closemessage delay 16 @@ -289,7 +289,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D53E:: @ 825D53E waitmovement 0 setvar VAR_0x8004, 21 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction msgbox gStringVar4, 4 closemessage setvar VAR_0x8004, SPECIAL_BATTLE_PIKE_DOUBLE @@ -318,7 +318,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D605:: @ 825D605 applymovement 2, BattleFrontier_BattlePikeRandomRoom1_Movement_25D7AA waitmovement 0 setvar VAR_0x8004, 12 - special sub_81A703C + special CallBattlePikeFunction copyvar VAR_0x8004, VAR_RESULT compare VAR_0x8004, 0 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D643 @@ -336,7 +336,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D643:: @ 825D643 playmoncry SPECIES_KIRLIA, 0 waitmoncry setvar VAR_0x8004, 11 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 2 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D751 compare VAR_RESULT, 1 @@ -346,7 +346,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D643:: @ 825D643 compare VAR_RESULT, 4 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D766 setvar VAR_0x8004, 15 - special sub_81A703C + special CallBattlePikeFunction waitstate applymovement 1, BattleFrontier_BattlePikeRandomRoom1_Movement_25D7A2 waitmovement 0 @@ -373,13 +373,13 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D6D5:: @ 825D6D5 playmoncry SPECIES_DUSCLOPS, 0 waitmoncry setvar VAR_0x8004, 11 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 0 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D76D compare VAR_RESULT, 1 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D774 setvar VAR_0x8004, 15 - special sub_81A703C + special CallBattlePikeFunction waitstate applymovement 1, BattleFrontier_BattlePikeRandomRoom1_Movement_25D7A2 waitmovement 0 @@ -579,7 +579,7 @@ BattleFrontier_BattlePikeRandomRoom1_Movement_25D7EA: @ 825D7EA BattleFrontier_BattlePikeRandomRoom1_EventScript_25D7ED:: @ 825D7ED setvar VAR_0x8004, 5 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 2, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D81B case 3, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D831 @@ -589,7 +589,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D81B:: @ 825D81B lock faceplayer setvar VAR_0x8004, 14 - special sub_81A703C + special CallBattlePikeFunction msgbox gStringVar4, 4 waitmessage closemessage @@ -606,7 +606,7 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_25D831:: @ 825D831 BattleFrontier_BattlePikeRandomRoom1_EventScript_25D83E:: @ 825D83E setvar VAR_0x8004, 13 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 2 call_if 1, BattleFrontier_BattlePikeRandomRoom1_EventScript_25D881 compare VAR_RESULT, 1 diff --git a/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc b/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc index d1d968054..b00b41fd7 100644 --- a/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc @@ -12,7 +12,7 @@ BattleFrontier_BattlePikeRandomRoom3_MapScript2_25E42A: @ 825E42A BattleFrontier_BattlePikeRandomRoom3_EventScript_25E43C:: @ 825E43C setvar VAR_TEMP_0, 1 setvar VAR_0x8004, 6 - special sub_81A703C + special CallBattlePikeFunction end BattleFrontier_BattlePikeRandomRoom3_EventScript_25E44A:: @ 825E44A diff --git a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc index 6f5e8db1c..0ff9ff5db 100644 --- a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc @@ -37,7 +37,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25C8A4:: @ 825C8A4 waitmessage setvar VAR_0x8004, 8 setvar VAR_0x8005, 1 - special sub_81A703C + special CallBattlePikeFunction playse SE_SAVE waitse setvar VAR_0x8004, 2 @@ -139,7 +139,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25C9FD:: @ 825C9FD special LoadPlayerParty setvar VAR_0x8004, 8 setvar VAR_0x8005, 2 - special sub_81A703C + special CallBattlePikeFunction playse SE_SAVE waitse fadescreen 1 @@ -167,7 +167,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA5A:: @ 825CA5A BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA78:: @ 825CA78 setvar VAR_0x8004, 17 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 1 goto_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA91 setvar VAR_TEMP_5, 255 @@ -190,7 +190,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA97:: @ 825CA97 BattleFrontier_BattlePikeThreePathRoom_EventScript_25CABB:: @ 825CABB setvar VAR_0x8004, 19 - special sub_81A703C + special CallBattlePikeFunction compare VAR_RESULT, 4 goto_eq BattleFrontier_BattlePikeThreePathRoom_EventScript_25CBC2 lock @@ -210,7 +210,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB00:: @ 825CB00 BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB0A:: @ 825CB0A setvar VAR_0x8004, 18 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB39 case 1, BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB46 @@ -231,7 +231,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB53:: @ 825CB53 BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB60:: @ 825CB60 setvar VAR_0x8004, 19 - special sub_81A703C + special CallBattlePikeFunction switch VAR_RESULT case 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_25CB9A case 1, BattleFrontier_BattlePikeThreePathRoom_EventScript_25CBA4 diff --git a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc index 6ec39dfd2..8bbcef830 100644 --- a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc +++ b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc @@ -162,14 +162,14 @@ FallarborTown_BattleTentBattleRoom_EventScript_200AF3:: @ 8200AF3 waitstate setvar VAR_0x8004, 1 setvar VAR_0x8005, 1 - special sub_81A5238 + special CallBattleArenaFunction compare VAR_RESULT, 9999 goto_eq FallarborTown_BattleTentBattleRoom_EventScript_2009B3 addvar VAR_RESULT, 1 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT - special sub_81A5238 + special CallBattleArenaFunction FallarborTown_BattleTentBattleRoom_EventScript_200B43:: @ 8200B43 message FallarborTown_BattleTentBattleRoom_Text_257D17 diff --git a/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc b/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc index 833abdf99..6b63f13f8 100644 --- a/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc +++ b/data/maps/SlateportCity_BattleTentBattleRoom/scripts.inc @@ -42,7 +42,7 @@ SlateportCity_BattleTentBattleRoom_EventScript_2099BE:: @ 82099BE applymovement 3, SlateportCity_BattleTentBattleRoom_Movement_209A99 waitmovement 0 setvar VAR_0x8004, 11 - special sub_81A5E74 + special CallBattleFactoryFunction setobjectxyperm 2, 5, 1 removeobject 2 addobject 2 diff --git a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc index c2ef5e3da..57df51237 100644 --- a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc +++ b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc @@ -59,9 +59,9 @@ SlateportCity_BattleTentCorridor_EventScript_208EB4:: @ 8208EB4 SlateportCity_BattleTentCorridor_EventScript_208EEE:: @ 8208EEE setvar VAR_0x8004, 9 - special sub_81A5E74 + special CallBattleFactoryFunction setvar VAR_0x8004, 16 - special sub_81A5E74 + special CallBattleFactoryFunction msgbox SlateportCity_BattleTentCorridor_Text_25A22D, 4 playfanfare MUS_ME_ASA waitfanfare @@ -143,7 +143,7 @@ SlateportCity_BattleTentCorridor_EventScript_209044:: @ 8209044 special SavePlayerParty setvar VAR_0x8004, 10 setvar VAR_0x8005, 0 - special sub_81A5E74 + special CallBattleFactoryFunction goto SlateportCity_BattleTentCorridor_EventScript_208F0D SlateportCity_BattleTentCorridor_Movement_209059: @ 8209059 diff --git a/data/specials.inc b/data/specials.inc index 5c1653d49..5b2459805 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -210,7 +210,7 @@ gSpecials:: @ 81DBA64 def_special ShowLinkBattleRecords def_special IsEnoughForCostInVar0x8005 def_special SubtractMoneyFromVar0x8005 - def_special sub_80F972C + def_special ExecuteWhiteOut def_special sp0C8_whiteout_maybe def_special RotatingGate_InitPuzzle def_special RotatingGate_InitPuzzleAndGraphics @@ -245,12 +245,12 @@ gSpecials:: @ 81DBA64 def_special CallFrontierUtilFunc def_special sub_8161F74 def_special CallBattleDomeFunction - def_special sub_8195960 + def_special CallBattlePalaceFunction def_special CopyEReaderTrainerGreeting def_special DoSpecialTrainerBattle - def_special sub_81A5238 - def_special sub_81A5E74 - def_special sub_81A703C + def_special CallBattleArenaFunction + def_special CallBattleFactoryFunction + def_special CallBattlePikeFunction def_special sub_81A8E7C def_special StopMapMusic def_special sub_81B99B4 diff --git a/include/battle.h b/include/battle.h index f34364ea6..90bef24ac 100644 --- a/include/battle.h +++ b/include/battle.h @@ -498,10 +498,12 @@ struct BattleStruct struct BattleTv tv; u8 notSureWhatFieldLol[0x28]; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; - u8 field_298[8]; - u8 field_2A0; - u8 field_2A1; - u8 field_2A2; + s8 arenaMindPoints[2]; + s8 arenaSkillPoints[2]; + u16 arenaStartHp[2]; + u8 arenaLostPlayerMons; // Bits for party member, lost as in referee's decision, not by fainting. + u8 arenaLostOpponentMons; + u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon. }; #define GET_MOVE_TYPE(move, typeArg) \ diff --git a/include/battle_arena.h b/include/battle_arena.h new file mode 100644 index 000000000..bf305ea4e --- /dev/null +++ b/include/battle_arena.h @@ -0,0 +1,14 @@ +#ifndef GUARD_BATTLE_ARENA_H +#define GUARD_BATTLE_ARENA_H + +void CallBattleArenaFunction(void); +u8 BattleArena_ShowJudgmentWindow(u8 *state); +void BattleArena_InitPoints(void); +void BattleArena_AddMindPoints(u8 battler); +void BattleArena_AddSkillPoints(u8 battler); +void BattleArena_DeductMindPoints(u8 battler, u16 stringId); +void sub_81A586C(u8 battler); +void sub_81A5BF8(void); +void sub_81A5D44(void); + +#endif //GUARD_BATTLE_ARENA_H diff --git a/include/battle_controllers.h b/include/battle_controllers.h index b449bb501..ff5a629af 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -1,8 +1,6 @@ #ifndef GUARD_BATTLE_CONTROLLERS_H #define GUARD_BATTLE_CONTROLLERS_H -#include "battle.h" - enum { REQUEST_ALL_BATTLE, diff --git a/include/battle_factory.h b/include/battle_factory.h index 1b0e44943..2db041b06 100644 --- a/include/battle_factory.h +++ b/include/battle_factory.h @@ -1,7 +1,12 @@ #ifndef GUARD_BATTLE_FACTORY_H #define GUARD_BATTLE_FACTORY_H -void DoBattleFactorySelectScreen(void); -void DoBattleFactorySwapScreen(void); +void CallBattleFactoryFunction(void); +bool8 sub_81A6BF4(void); +u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1); +void FillFactoryBrainParty(void); +u8 sub_81A6F70(u8 battleMode, u8 lvlMode); +u32 GetAiScriptsInBattleFactory(void); +void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 moveArg, u8 moveSlot); #endif // GUARD_BATTLE_FACTORY_H diff --git a/include/battle_factory_screen.h b/include/battle_factory_screen.h new file mode 100644 index 000000000..86d6177f6 --- /dev/null +++ b/include/battle_factory_screen.h @@ -0,0 +1,7 @@ +#ifndef GUARD_BATTLE_FACTORY_SCREEN_H +#define GUARD_BATTLE_FACTORY_SCREEN_H + +void DoBattleFactorySelectScreen(void); +void DoBattleFactorySwapScreen(void); + +#endif // GUARD_BATTLE_FACTORY_SCREEN_H diff --git a/include/battle_interface.h b/include/battle_interface.h index 3145939d0..66a7f9828 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -1,8 +1,6 @@ #ifndef GUARD_BATTLE_INTERFACE_H #define GUARD_BATTLE_INTERFACE_H -#include "battle_controllers.h" - enum { HP_CURRENT, diff --git a/include/battle_pike.h b/include/battle_pike.h new file mode 100644 index 000000000..ada5b2441 --- /dev/null +++ b/include/battle_pike.h @@ -0,0 +1,9 @@ +#ifndef GUARD_BATTLE_PIKE_H +#define GUARD_BATTLE_PIKE_H + +void CallBattlePikeFunction(void); +u8 GetBattlePikeWildMonHeaderId(void); +bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate); +bool8 InBattlePike(void); + +#endif // GUARD_BATTLE_PIKE_H diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 9c4537363..a23fa6948 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -206,7 +206,7 @@ extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; extern const u8 BattleScript_ArenaTurnBeginning[]; extern const u8 BattleScript_82DB881[]; -extern const u8 BattleScript_82DB8F3[]; +extern const u8 BattleScript_ArenaDoJudgment[]; extern const u8 BattleScript_82DAA0B[]; extern const u8 BattleScript_AskIfWantsToForfeitMatch[]; extern const u8 BattleScript_PrintPlayerForfeited[]; diff --git a/include/battle_tower.h b/include/battle_tower.h index 5fe8d1190..90c22c982 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -21,7 +21,7 @@ struct BattleFrontierTrainer u16 speechBefore[6]; u16 speechWin[6]; u16 speechLose[6]; - const u16 *bfMonPool; + const u16 *monSets; }; struct FacilityMon @@ -52,7 +52,7 @@ u8 GetFrontierOpponentClass(u16 trainerId); void GetFrontierTrainerName(u8 *dst, u16 trainerId); void FillFrontierTrainerParty(u8 monsCount); void FillFrontierTrainersParties(u8 monsCount); -u16 RandomizeFacilityTrainerMonId(u16 trainerId); +u16 RandomizeFacilityTrainerMonSet(u16 trainerId); void FrontierSpeechToString(const u16 *words); void DoSpecialTrainerBattle(void); void CalcEmeraldBattleTowerChecksum(struct EmeraldBattleTowerRecord *record); diff --git a/include/berry.h b/include/berry.h index 1a8b7fa25..bef56ae41 100644 --- a/include/berry.h +++ b/include/berry.h @@ -1,6 +1,8 @@ #ifndef GUARD_BERRY_H #define GUARD_BERRY_H +#define BERRY_NONE 0 + enum { BERRY_FIRMNESS_UNKNOWN, @@ -21,6 +23,17 @@ enum FLAVOR_COUNT }; +enum +{ + BERRY_STAGE_NO_BERRY, // there is no tree planted and the soil is completely flat. + BERRY_STAGE_PLANTED, + BERRY_STAGE_SPROUTED, + BERRY_STAGE_TALLER, + BERRY_STAGE_FLOWERING, + BERRY_STAGE_BERRIES, + BERRY_STAGE_SPARKLING = 0xFF, +}; + #define NUM_BERRIES 44 extern const u8 *const gBerryTreeEventObjectGraphicsIdTablePointers[]; @@ -29,7 +42,6 @@ extern const u8 *const gBerryTreePaletteSlotTablePointers[]; void ClearEnigmaBerries(void); void SetEnigmaBerry(u8 *src); -u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry); bool32 IsEnigmaBerryValid(void); const struct Berry *GetBerryInfo(u8 berry); struct BerryTree *GetBerryTreeInfo(u8 id); @@ -37,28 +49,20 @@ bool32 EventObjectInteractionWaterBerryTree(void); bool8 IsPlayerFacingPlantedBerryTree(void); bool8 TryToWaterBerryTree(void); void ClearBerryTrees(void); -bool32 BerryTreeGrow(struct BerryTree *tree); void BerryTreeTimeUpdate(s32 minutes); void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle); void RemoveBerryTree(u8 id); u8 GetBerryTypeByBerryTreeId(u8 id); u8 GetStageByBerryTreeId(u8); u8 ItemIdToBerryType(u16 item); -u16 BerryTypeToItemId(u16 berry); void GetBerryNameByBerryType(u8 berry, u8 *string); void ResetBerryTreeSparkleFlag(u8 id); -u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree); -u8 GetNumStagesWateredByBerryTreeId(u8 id); -u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water); -u8 CalcBerryYield(struct BerryTree *tree); -u8 GetBerryCountByBerryTreeId(u8 id); -u16 GetStageDurationByBerryType(u8); void Bag_ChooseBerry(void); void EventObjectInteractionGetBerryTreeData(void); void EventObjectInteractionPlantBerryTree(void); void EventObjectInteractionPickBerryTree(void); void EventObjectInteractionRemoveBerryTree(void); -u8 PlayerHasBerries(void); +bool8 PlayerHasBerries(void); void ResetBerryTreeSparkleFlags(void); extern const struct Berry gBerries[]; diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index dc07fda6e..e8a2980a5 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -68,12 +68,19 @@ #define VARIOUS_GET_MOVE_TARGET 3 #define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 #define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 +#define VARIOUS_ARENA_JUDGMENT_WINDOW 9 +#define VARIOUS_ARENA_OPPONENT_MON_LOST 10 +#define VARIOUS_ARENA_PLAYER_MON_LOST 11 +#define VARIOUS_ARENA_BOTH_MONS_LOST 12 #define VARIOUS_EMIT_YESNOBOX 13 +#define VARIOUS_ARENA_JUDGMENT_STRING 16 +#define VARIOUS_ARENA_WAIT_STRING 17 #define VARIOUS_WAIT_CRY 18 #define VARIOUS_RETURN_OPPONENT_MON1 19 #define VARIOUS_RETURN_OPPONENT_MON2 20 #define VARIOUS_VOLUME_DOWN 21 #define VARIOUS_VOLUME_UP 22 +#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23 #define VARIOUS_SET_TELEPORT_OUTCOME 25 #define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h new file mode 100644 index 000000000..b93b98201 --- /dev/null +++ b/include/constants/field_effects.h @@ -0,0 +1,72 @@ +#ifndef GUARD_FIELD_EFFECT_CONSTANTS_H +#define GUARD_FIELD_EFFECT_CONSTANTS_H + +#define FLDEFF_EXCLAMATION_MARK_ICON 0 +#define FLDEFF_USE_CUT_ON_GRASS 1 +#define FLDEFF_USE_CUT_ON_TREE 2 +#define FLDEFF_SHADOW 3 +#define FLDEFF_TALL_GRASS 4 +#define FLDEFF_RIPPLE 5 +#define FLDEFF_FIELD_MOVE_SHOW_MON 6 +#define FLDEFF_ASH 7 +#define FLDEFF_SURF_BLOB 8 +#define FLDEFF_USE_SURF 9 +#define FLDEFF_DUST 10 +#define FLDEFF_USE_SECRET_POWER_CAVE 11 +#define FLDEFF_JUMP_TALL_GRASS 12 +#define FLDEFF_SAND_FOOTPRINTS 13 +#define FLDEFF_JUMP_BIG_SPLASH 14 +#define FLDEFF_SPLASH 15 +#define FLDEFF_JUMP_SMALL_SPLASH 16 +#define FLDEFF_LONG_GRASS 17 +#define FLDEFF_JUMP_LONG_GRASS 18 +#define FLDEFF_UNKNOWN_19 19 +#define FLDEFF_UNKNOWN_20 20 +#define FLDEFF_UNKNOWN_21 21 +#define FLDEFF_UNKNOWN_22 22 +#define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23 +#define FLDEFF_DEEP_SAND_FOOTPRINTS 24 +#define FLDEFF_POKECENTER_HEAL 25 +#define FLDEFF_USE_SECRET_POWER_TREE 26 +#define FLDEFF_USE_SECRET_POWER_SHRUB 27 +#define FLDEFF_TREE_DISGUISE 28 +#define FLDEFF_MOUNTAIN_DISGUISE 29 +#define FLDEFF_NPCFLY_OUT 30 +#define FLDEFF_USE_FLY 31 +#define FLDEFF_FLY_IN 32 +#define FLDEFF_QUESTION_MARK_ICON 33 +#define FLDEFF_FEET_IN_FLOWING_WATER 34 +#define FLDEFF_BIKE_TIRE_TRACKS 35 +#define FLDEFF_SAND_DISGUISE 36 +#define FLDEFF_USE_ROCK_SMASH 37 +#define FLDEFF_USE_DIG 38 +#define FLDEFF_SAND_PILE 39 +#define FLDEFF_USE_STRENGTH 40 +#define FLDEFF_SHORT_GRASS 41 +#define FLDEFF_HOT_SPRINGS_WATER 42 +#define FLDEFF_USE_WATERFALL 43 +#define FLDEFF_USE_DIVE 44 +#define FLDEFF_POKEBALL 45 +#define FLDEFF_HEART_ICON 46 +#define FLDEFF_NOP_47 47 +#define FLDEFF_NOP_48 48 +#define FLDEFF_POP_OUT_OF_ASH 49 +#define FLDEFF_LAVARIDGE_GYM_WARP 50 +#define FLDEFF_SWEET_SCENT 51 +#define FLDEFF_SAND_PILLAR 52 +#define FLDEFF_BUBBLES 53 +#define FLDEFF_SPARKLE 54 +#define FLDEFF_SECRET_POWER_CAVE 55 +#define FLDEFF_SECRET_POWER_TREE 56 +#define FLDEFF_SECRET_POWER_SHRUB 57 +#define FLDEFF_CUT_GRASS 58 +#define FLDEFF_FIELD_MOVE_SHOW_MON_INIT 59 +#define FLDEFF_USE_FLY_ANCIENT_TOMB 60 +#define FLDEFF_PCTURN_ON 61 +#define FLDEFF_HALL_OF_FAME_RECORD 62 +#define FLDEFF_USE_TELEPORT 63 +#define FLDEFF_64 64 +#define FLDEFF_65 65 +#define FLDEFF_66 66 + +#endif diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 6d38d072d..6515791c3 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -75,14 +75,14 @@ struct PairedPalettes struct LockedAnimEventObjects { - u8 eventObjectIds[NUM_EVENT_OBJECTS]; + u8 eventObjectIds[EVENT_OBJECTS_COUNT]; u8 count; }; extern const struct SpriteFrameImage gEventObjectPicTable_PechaBerryTree[]; extern const u8 gReflectionEffectPaletteMap[]; -void sub_808D438(void); +void ResetEventObjects(void); u8 GetMoveDirectionAnimNum(u8); u8 GetEventObjectIdByLocalIdAndMap(u8, u8, u8); bool8 TryGetEventObjectIdByLocalIdAndMap(u8, u8, u8, u8 *); @@ -180,9 +180,7 @@ u8 ZCoordToPriority(u8); void EventObjectUpdateZCoord(struct EventObject *pObject); void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8); bool8 IsZCoordMismatchAt(u8, s16, s16); -void UpdateEventObjectSpriteSubpriorityAndVisibility(struct Sprite *); void UnfreezeEventObject(struct EventObject *); -void oamt_npc_ministep_reset(struct Sprite *, u8, u8); u8 FindLockedEventObjectIndex(struct EventObject *); bool8 obj_npc_ministep(struct Sprite *sprite); bool8 sub_80976EC(struct Sprite *sprite); diff --git a/include/event_scripts.h b/include/event_scripts.h index 5b8b74d8b..dd0eca12f 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -528,4 +528,54 @@ extern const u8 MauvilleCity_PokemonCenter_1F_Text_290097[]; extern const u8 MauvilleCity_PokemonCenter_1F_Text_2900B5[]; extern const u8 MauvilleCity_PokemonCenter_1F_Text_2900CB[]; +extern const u8 EventScript_PlayerPCMale[]; +extern const u8 EventScript_PlayerPCFemale[]; +extern const u8 EventScript_SecretBasePC[]; +extern const u8 EventScript_RecordMixingSecretBasePC[]; +extern const u8 EventScript_SecretPower1[]; +extern const u8 EventScript_SecretPower2[]; +extern const u8 EventScript_PC[]; +extern const u8 EventScript_TestSignpostMsg[]; +extern const u8 EventScript_HiddenItemScript[]; +extern const u8 EventScript_2759F1[]; +extern const u8 EventScript_TV[]; +extern const u8 EventScript_ClosedSootopolisDoor[]; +extern const u8 SkyPillar_Outside_EventScript_2393F9[]; +extern const u8 EventScript_CableBoxResults[]; +extern const u8 EventScript_2A4BAC[]; +extern const u8 Route110_TrickHouseEntrance_EventScript_26A22A[]; +extern const u8 EventScript_RegionMap[]; +extern const u8 EventScript_RunningShoesManual[]; +extern const u8 EventScript_PictureBookShelf[]; +extern const u8 EventScript_BookShelf[]; +extern const u8 EventScript_PokemonCenterBookshelf[]; +extern const u8 EventScript_Vase[]; +extern const u8 EventScript_TrashCan[]; +extern const u8 EventScript_ShopShelf[]; +extern const u8 EventScript_Blueprint[]; +extern const u8 EventScript_WirelessBoxResults[]; +extern const u8 EventScript_CableBoxResults[]; +extern const u8 EventScript_Questionnaire[]; +extern const u8 EventScript_TrainerHillTimer[]; +extern const u8 EventScript_SecretBaseSandOrnament[]; +extern const u8 EventScript_SecretBaseShieldOrToyTV[]; +extern const u8 EventScript_UseSurf[]; +extern const u8 EventScript_UseWaterfall[]; +extern const u8 EventScript_CannotUseWaterfall[]; +extern const u8 EventScript_UseDive[]; +extern const u8 EventScript_UseDiveUnderwater[]; +extern const u8 EventScript_FallDownHole[]; +extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252BE8[]; +extern const u8 EventScript_Poison[]; +extern const u8 EventScript_EggHatch[]; +extern const u8 gUnknown_08273D1F[]; +extern const u8 IslandCave_EventScript_238EAF[]; +extern const u8 MauvilleCity_EventScript_1DF7BA[]; +extern const u8 Route119_EventScript_1F49EC[]; +extern const u8 LittlerootTown_ProfessorBirchsLab_EventScript_1FA4D6[]; +extern const u8 RustboroCity_Gym_EventScript_21307B[]; +extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224175[]; +extern const u8 SSTidalCorridor_EventScript_23C050[]; +extern const u8 gUnknown_082A8350[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_camera.h b/include/field_camera.h index fcc19ce9a..fdc4c5450 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -7,16 +7,16 @@ struct CameraObject { void (*callback)(struct CameraObject *); u32 spriteId; - s32 unk8; - s32 unkC; + s32 movementSpeedX; + s32 movementSpeedY; s32 x; s32 y; }; // Exported RAM declarations -extern struct CameraObject gUnknown_03005DD0; -extern u16 gUnknown_03005DEC; -extern u16 gUnknown_03005DE8; +extern struct CameraObject gFieldCamera; +extern u16 gTotalCameraPixelOffsetX; +extern u16 gTotalCameraPixelOffsetY; // Exported ROM declarations void DrawWholeMapView(void); diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 536f218a3..24adbe4b3 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -25,7 +25,7 @@ struct FieldInput void FieldClearPlayerInput(struct FieldInput *pStruct); void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys); -int sub_809C014(struct FieldInput *pStruct); +int ProcessPlayerFieldInput(struct FieldInput *pStruct); u8 *sub_80682A8(struct MapPosition *, u8, u8); void overworld_poison_timer_set(void); void RestartWildEncounterImmunitySteps(void); diff --git a/include/field_effect.h b/include/field_effect.h index 3fa39aae0..7620cedcd 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -1,85 +1,12 @@ #ifndef GUARD_FIELD_EFFECTS_H #define GUARD_FIELD_EFFECTS_H -#include "task.h" - extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[2]; extern const struct SpritePalette gNewGameBirchObjectPaletteInfo; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[2]; extern const struct SpriteTemplate gNewGameBirchObjectTemplate; extern const struct OamData gNewGameBirchOamAttributes; -enum FieldEffectScriptIdx -{ - FLDEFF_EXCLAMATION_MARK_ICON, - FLDEFF_USE_CUT_ON_GRASS, - FLDEFF_USE_CUT_ON_TREE, - FLDEFF_SHADOW, - FLDEFF_TALL_GRASS, - FLDEFF_RIPPLE, - FLDEFF_FIELD_MOVE_SHOW_MON, - FLDEFF_ASH, - FLDEFF_SURF_BLOB, - FLDEFF_USE_SURF, - FLDEFF_DUST, - FLDEFF_USE_SECRET_POWER_CAVE, - FLDEFF_JUMP_TALL_GRASS, - FLDEFF_SAND_FOOTPRINTS, - FLDEFF_JUMP_BIG_SPLASH, - FLDEFF_SPLASH, - FLDEFF_JUMP_SMALL_SPLASH, - FLDEFF_LONG_GRASS, - FLDEFF_JUMP_LONG_GRASS, - FLDEFF_UNKNOWN_19, - FLDEFF_UNKNOWN_20, - FLDEFF_UNKNOWN_21, - FLDEFF_UNKNOWN_22, - FLDEFF_BERRY_TREE_GROWTH_SPARKLE, - FLDEFF_DEEP_SAND_FOOTPRINTS, - FLDEFF_POKECENTER_HEAL, - FLDEFF_USE_SECRET_POWER_TREE, - FLDEFF_USE_SECRET_POWER_SHRUB, - FLDEFF_TREE_DISGUISE, - FLDEFF_MOUNTAIN_DISGUISE, - FLDEFF_NPCFLY_OUT, - FLDEFF_USE_FLY, - FLDEFF_FLY_IN, - FLDEFF_QUESTION_MARK_ICON, - FLDEFF_FEET_IN_FLOWING_WATER, - FLDEFF_BIKE_TIRE_TRACKS, - FLDEFF_SAND_DISGUISE, - FLDEFF_USE_ROCK_SMASH, - FLDEFF_USE_DIG, - FLDEFF_SAND_PILE, - FLDEFF_USE_STRENGTH, - FLDEFF_SHORT_GRASS, - FLDEFF_HOT_SPRINGS_WATER, - FLDEFF_USE_WATERFALL, - FLDEFF_USE_DIVE, - FLDEFF_POKEBALL, - FLDEFF_HEART_ICON, - FLDEFF_NOP_47, - FLDEFF_NOP_48, - FLDEFF_POP_OUT_OF_ASH, - FLDEFF_LAVARIDGE_GYM_WARP, - FLDEFF_SWEET_SCENT, - FLDEFF_SAND_PILLAR, - FLDEFF_BUBBLES, - FLDEFF_SPARKLE, - FLDEFF_SECRET_POWER_CAVE, - FLDEFF_SECRET_POWER_TREE, - FLDEFF_SECRET_POWER_SHRUB, - FLDEFF_CUT_GRASS, - FLDEFF_FIELD_MOVE_SHOW_MON_INIT, - FLDEFF_USE_FLY_ANCIENT_TOMB, - FLDEFF_PCTURN_ON, - FLDEFF_HALL_OF_FAME_RECORD, - FLDEFF_USE_TELEPORT, - FLDEFF_64, - FLDEFF_65, - FLDEFF_66, -}; - extern s32 gFieldEffectArguments[8]; extern void (*gPostMenuFieldCallback)(void); extern bool8 (*gFieldCallback2)(void); @@ -109,126 +36,6 @@ bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val); bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val); bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val); -void PokecenterHealEffect_0(struct Task *); -void PokecenterHealEffect_1(struct Task *); -void PokecenterHealEffect_2(struct Task *); -void PokecenterHealEffect_3(struct Task *); - -void HallOfFameRecordEffect_0(struct Task *); -void HallOfFameRecordEffect_1(struct Task *); -void HallOfFameRecordEffect_2(struct Task *); -void HallOfFameRecordEffect_3(struct Task *); - -void PokeballGlowEffect_0(struct Sprite *); -void PokeballGlowEffect_1(struct Sprite *); -void PokeballGlowEffect_2(struct Sprite *); -void PokeballGlowEffect_3(struct Sprite *); -void PokeballGlowEffect_4(struct Sprite *); -void PokeballGlowEffect_5(struct Sprite *); -void PokeballGlowEffect_6(struct Sprite *); -void PokeballGlowEffect_7(struct Sprite *); - -bool8 sub_80B6BCC(struct Task *); -bool8 sub_80B6C74(struct Task *); -bool8 sub_80B6C90(struct Task *); -bool8 sub_80B6D04(struct Task *); -bool8 sub_80B6DBC(struct Task *); -bool8 sub_80B6DD8(struct Task *); -bool8 sub_80B6E18(struct Task *); - -bool8 sub_80B6EC0(struct Task *); -bool8 sub_80B6EE0(struct Task *); -bool8 sub_80B6F50(struct Task *); -bool8 sub_80B6F74(struct Task *); -bool8 sub_80B6F84(struct Task *); -bool8 sub_80B6FA8(struct Task *); - -bool8 sub_80B7114(struct Task *); -bool8 sub_80B7190(struct Task *); -bool8 sub_80B71D0(struct Task *); -bool8 sub_80B7230(struct Task *); -bool8 sub_80B7270(struct Task *); -bool8 sub_80B72D0(struct Task *); -bool8 sub_80B72F4(struct Task *); - -bool8 sub_80B73D0(struct Task *, struct EventObject *); -bool8 waterfall_1_do_anim_probably(struct Task *, struct EventObject *); -bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct EventObject *); -bool8 sub_80B7450(struct Task *, struct EventObject *); -bool8 sub_80B7478(struct Task *, struct EventObject *); - -bool8 dive_1_lock(struct Task *); -bool8 dive_2_unknown(struct Task *); -bool8 dive_3_unknown(struct Task *); - -bool8 sub_80B764C(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7684(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B76B8(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7704(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B77F8(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7814(struct Task *, struct EventObject *, struct Sprite *); - -bool8 sub_80B78EC(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B791C(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7968(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B79BC(struct Task *, struct EventObject *, struct Sprite *); - -bool8 sub_80B7AE8(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7B18(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7B94(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7BCC(struct Task *, struct EventObject *, struct Sprite *); -bool8 sub_80B7BF4(struct Task *, struct EventObject *, struct Sprite *); - -void sub_80B7D14(struct Task *); -void sub_80B7D34(struct Task *); - -void sub_80B7EC4(struct Task *); -void sub_80B7EE8(struct Task *); - -void sub_80B8280(struct Task *); -void sub_80B830C(struct Task *); -void sub_80B8410(struct Task *); - -void sub_80B8584(struct Task *); -void sub_80B85F8(struct Task *); -void sub_80B8660(struct Task *); -void sub_80B86EC(struct Task *); -void sub_80B871C(struct Task *); -void sub_80B8770(struct Task *); -void overworld_bg_setup_2(struct Task *); - -void sub_80B88E4(struct Task *); -void sub_80B8920(struct Task *); -void sub_80B898C(struct Task *); -void sub_80B89DC(struct Task *); -void sub_80B8A0C(struct Task *); -void sub_80B8A44(struct Task *); -void sub_80B8A64(struct Task *); - -void sub_80B8DB4(struct Task *); -void sub_80B8E14(struct Task *); -void sub_80B8E60(struct Task *); -void sub_80B8EA8(struct Task *); -void sub_80B8F24(struct Task *); - -void sub_80B9204(struct Task *); -void sub_80B925C(struct Task *); -void sub_80B92A0(struct Task *); -void sub_80B92F8(struct Task *); -void sub_80B933C(struct Task *); -void sub_80B9390(struct Task *); -void sub_80B9418(struct Task *); -void sub_80B9474(struct Task *); -void sub_80B9494(struct Task *); - -void sub_80B9804(struct Task *); -void sub_80B98B8(struct Task *); -void sub_80B9924(struct Task *); -void sub_80B9978(struct Task *); -void sub_80B99F0(struct Task *); -void sub_80B9A28(struct Task *); -void sub_80B9A60(struct Task *); - void sub_80B9C28(s16*, u8); void sub_80B9C54(s16*, u8); void sub_80B9CDC(s16*, u8); diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 223350042..6022467e4 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -18,7 +18,7 @@ u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s void sub_8155F80(struct Sprite*); void UpdateShadowFieldEffect(struct Sprite*); void UpdateTallGrassFieldEffect(struct Sprite*); -void sub_81561D0(struct Sprite*); +void WaitFieldEffectSpriteAnim(struct Sprite*); void UpdateAshFieldEffect(struct Sprite*); void UpdateSurfBlobFieldEffect(struct Sprite*); void sub_8156194(struct Sprite*); diff --git a/include/field_poison.h b/include/field_poison.h index 6a1ba17f2..a23a93ca5 100644 --- a/include/field_poison.h +++ b/include/field_poison.h @@ -13,7 +13,7 @@ enum { FLDPSN_FNT }; -void sub_80F972C(void); -int DoPoisonFieldEffect(void); +void ExecuteWhiteOut(void); +s32 DoPoisonFieldEffect(void); #endif //GUARD_FIELD_POISON_H diff --git a/include/field_region_map.h b/include/field_region_map.h deleted file mode 100644 index d50f1265c..000000000 --- a/include/field_region_map.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GUARD_FIELD_REGION_MAP_H -#define GUARD_FIELD_REGION_MAP_H - -void FieldInitRegionMap(MainCallback callback); - -#endif // GUARD_FIELD_REGION_MAP_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 8287229ed..a50c79b43 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -35,6 +35,7 @@ bool8 sub_8088BF0(u16*, u16, u8); struct MapConnection *sub_8088950(u8 direction, int x, int y); bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection); bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset); +void save_serialize_map(void); void SpriteCB_PokeballGlow(struct Sprite *); void SpriteCB_PokecenterMonitor(struct Sprite *); diff --git a/include/fldeff_80F9BCC.h b/include/fldeff_80F9BCC.h index 87a20d290..027bb4273 100644 --- a/include/fldeff_80F9BCC.h +++ b/include/fldeff_80F9BCC.h @@ -11,7 +11,7 @@ void sub_80FA5E4(s16 id, s16 x, s16 y); void sub_80FA794(s16 x, s16 y); void CreateRecordMixingSprite(void); void DestroyRecordMixingSprite(void); -void overworld_poison_effect(void); +void FldeffPoison_Start(void); void sub_80FA970(s16); void sub_80FA9D0(void); bool8 sub_80FADE4(u16, u8); diff --git a/include/fldeff_teleport.h b/include/fldeff_teleport.h deleted file mode 100644 index 71fb64ad2..000000000 --- a/include/fldeff_teleport.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef GUARD_FLDEFF_TELEPORT_H -#define GUARD_FLDEFF_TELEPORT_H - -void hm_teleport_run_dp02scr(void); -void sub_817C94C(void); - -#endif // GUARD_FLDEFF_TELEPORT_H diff --git a/include/frontier_util.h b/include/frontier_util.h index cfc3a8af4..6b6a2ea39 100644 --- a/include/frontier_util.h +++ b/include/frontier_util.h @@ -15,6 +15,7 @@ u8 GetPlayerSymbolCountForFacility(u8 facility); void ShowRankingHallRecordsWindow(void); void ScrollRankingHallRecordsWindow(void); void ClearRankingHallRecords(void); +void sub_81A4C30(void); u8 GetFrontierBrainTrainerPicIndex(void); u8 GetFrontierBrainTrainerClass(void); void CopyFrontierBrainTrainerName(u8 *dst); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index bb120c62c..f6273e80d 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -1,8 +1,6 @@ #ifndef GUARD_GLOBAL_FIELDMAP_H #define GUARD_GLOBAL_FIELDMAP_H -#define NUM_EVENT_OBJECTS 16 - enum { CONNECTION_SOUTH = 1, @@ -228,14 +226,14 @@ struct EventObjectGraphicsInfo /*0x20*/ const union AffineAnimCmd *const *affineAnims; }; -#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) -#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) -#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) -#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) +#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) +#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) +#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) +#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) #define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) -#define PLAYER_AVATAR_FLAG_5 (1 << 5) -#define PLAYER_AVATAR_FLAG_6 (1 << 6) -#define PLAYER_AVATAR_FLAG_DASH (1 << 7) +#define PLAYER_AVATAR_FLAG_5 (1 << 5) +#define PLAYER_AVATAR_FLAG_6 (1 << 6) +#define PLAYER_AVATAR_FLAG_DASH (1 << 7) enum { @@ -311,7 +309,7 @@ struct Camera s32 y; }; -extern struct EventObject gEventObjects[NUM_EVENT_OBJECTS]; +extern struct EventObject gEventObjects[EVENT_OBJECTS_COUNT]; extern u8 gSelectedEventObject; extern struct MapHeader gMapHeader; extern struct PlayerAvatar gPlayerAvatar; diff --git a/include/global.h b/include/global.h index c2b139e7a..5a86d5daa 100644 --- a/include/global.h +++ b/include/global.h @@ -119,22 +119,22 @@ enum LanguageId #define GAME_LANGUAGE (LANGUAGE_ENGLISH) // capacities of various saveblock objects -#define DAYCARE_MON_COUNT 2 -#define POKEBLOCKS_COUNT 40 -#define EVENT_OBJECTS_COUNT 16 +#define DAYCARE_MON_COUNT 2 +#define POKEBLOCKS_COUNT 40 +#define EVENT_OBJECTS_COUNT 16 #define BERRY_TREES_COUNT 128 #define FLAGS_COUNT 300 #define VARS_COUNT 256 -#define MAIL_COUNT 16 -#define SECRET_BASES_COUNT 20 -#define TV_SHOWS_COUNT 25 -#define POKE_NEWS_COUNT 16 -#define PC_ITEMS_COUNT 50 -#define BAG_ITEMS_COUNT 30 -#define BAG_KEYITEMS_COUNT 30 -#define BAG_POKEBALLS_COUNT 16 -#define BAG_TMHM_COUNT 64 -#define BAG_BERRIES_COUNT 46 +#define MAIL_COUNT 16 +#define SECRET_BASES_COUNT 20 +#define TV_SHOWS_COUNT 25 +#define POKE_NEWS_COUNT 16 +#define PC_ITEMS_COUNT 50 +#define BAG_ITEMS_COUNT 30 +#define BAG_KEYITEMS_COUNT 30 +#define BAG_POKEBALLS_COUNT 16 +#define BAG_TMHM_COUNT 64 +#define BAG_BERRIES_COUNT 46 #define PYRAMID_BAG_ITEMS_COUNT 10 #define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. @@ -424,7 +424,8 @@ struct BattleFrontier /*0xD1C*/ u16 domeTotalChampionships[2][2]; /*0xD24*/ struct BattleDomeTrainer domeTrainers[DOME_TOURNAMENT_TRAINERS_COUNT]; /*0xD64*/ u16 domeMonIds[DOME_TOURNAMENT_TRAINERS_COUNT][3]; - /*0xD64*/ u16 field_DC4[2]; + /*0xDC4*/ u16 field_DC4; + /*0xDC6*/ u16 field_DC6; /*0xDC8*/ u16 palaceWinStreaks[2][2]; /*0xDD0*/ u16 palaceRecordWinStreaks[2][2]; /*0xDD8*/ u16 field_DD8; @@ -438,7 +439,10 @@ struct BattleFrontier /*0xE04*/ u16 pikeWinStreaks[2]; /*0xE08*/ u16 pikeRecordStreaks[2]; /*0xE0C*/ u16 pikeTotalStreaks[2]; - /*0xE10*/ u16 field_E10[5]; + /*0xE10*/ u8 field_E10_1:3; + /*0xE10*/ u8 field_E10_2:4; + /*0xE10*/ u8 field_E10_3:1; + /*0xE12*/ u16 field_E12[4]; /*0xE1A*/ u16 pyramidWinStreaks[2]; /*0xE1E*/ u16 pyramidRecordStreaks[2]; /*0xE1E*/ u16 field_E1F[5]; diff --git a/include/main.h b/include/main.h index 3de34de13..47b26b1c7 100644 --- a/include/main.h +++ b/include/main.h @@ -1,8 +1,6 @@ #ifndef GUARD_MAIN_H #define GUARD_MAIN_H -#include "global.h" - typedef void (*MainCallback)(void); typedef void (*IntrCallback)(void); typedef void (*IntrFunc)(void); diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 8301a22f2..e18639faf 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -77,7 +77,7 @@ bool8 MetatileBehavior_IsBerryTreeSoil(u8); bool8 MetatileBehavior_IsAshGrass(u8); bool8 MetatileBehavior_IsFootprints(u8); bool8 MetatileBehavior_IsBridge(u8); -u8 MetatileBehavior_GetBridgeSth(u8); +u8 MetatileBehavior_GetBridgeType(u8); u8 MetatileBehavior_8089510(u8); bool8 MetatileBehavior_IsLandWildEncounter(u8); bool8 MetatileBehavior_IsWaterWildEncounter(u8); diff --git a/include/overworld.h b/include/overworld.h index 3dce20ab2..6b38a8782 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -47,13 +47,13 @@ void Overworld_SetEventObjTemplateMovementType(u8 localId, u8 movementType); const struct MapLayout *GetMapLayout(void); void ApplyCurrentWarp(void); void set_warp2_warp3_to_neg_1(void); -void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -bool32 IsDummyWarp(struct WarpData *warp); +static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +static bool32 IsDummyWarp(struct WarpData *warp); struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum); struct MapHeader const *const GetDestinationWarpMapHeader(void); -void LoadCurrentMapData(void); -void LoadSaveblockMapHeader(void); -void SetPlayerCoordsFromWarp(void); +static void LoadCurrentMapData(void); +static void LoadSaveblockMapHeader(void); +static void SetPlayerCoordsFromWarp(void); void WarpIntoMap(void); void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId); @@ -67,7 +67,7 @@ void sub_8084D5C(s16 a1, s16 a2); void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void sub_8084E14(void); void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -void SetFixedDiveWarpAsDestination(void); +static void SetFixedDiveWarpAsDestination(void); void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void SetFixedHoleWarpAsDestination(s16 x, s16 y); void warp1_set_to_sav1w(void); @@ -75,7 +75,7 @@ void sub_8084F2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void sub_8084F6C(u8 a1); void sub_8084FAC(void); const struct MapConnection *GetMapConnection(u8 dir); -bool8 SetDiveWarp(u8 dir, u16 x, u16 y); +static bool8 SetDiveWarp(u8 dir, u16 x, u16 y); bool8 SetDiveWarpEmerge(u16 x, u16 y); bool8 SetDiveWarpDive(u16 x, u16 y); void mliX_load_map(u8 mapGroup, u8 mapNum); @@ -105,7 +105,7 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter); u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); u8 GetMapTypeByWarpData(struct WarpData *warp); u8 Overworld_GetMapTypeOfSaveblockLocation(void); -u8 get_map_light_from_warp0(void); +u8 GetLastUsedWarpMapType(void); bool8 is_map_type_1_2_3_5_or_6(u8 mapType); bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType); bool8 Overworld_MapTypeIsIndoors(u8 mapType); diff --git a/include/pokemon.h b/include/pokemon.h index 0155f7430..7cf043ba3 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -486,7 +486,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src); void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50); void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); -void CreateMonWithEVSpreadPersonalityOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); +void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void sub_80686FC(struct Pokemon *mon, struct UnknownPokemonStruct *dest); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 sub_80688F8(u8 caseId, u8 battlerId); diff --git a/ld_script.txt b/ld_script.txt index 4177268bf..0454dc86b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -259,12 +259,15 @@ SECTIONS { src/trainer_pokemon_sprites.o(.text); src/lilycove_lady.o(.text); src/battle_dome.o(.text); - src/battle_frontier_1.o(.text); + src/battle_palace.o(.text); asm/battle_frontier_1.o(.text); src/menu.o(.text); - src/battle_factory.o(.text); + src/battle_factory_screen.o(.text); src/apprentice.o(.text); src/frontier_util.o(.text); + src/battle_arena.o(.text); + src/battle_factory.o(.text); + src/battle_pike.o(.text); asm/battle_frontier_2.o(.text); src/item_menu.o(.text); src/list_menu.o(.text); @@ -564,12 +567,18 @@ SECTIONS { src/trainer_pokemon_sprites.o(.rodata); src/lilycove_lady.o(.rodata); src/battle_dome.o(.rodata); + src/battle_palace.o(.rodata); data/battle_frontier_1.o(.rodata); src/menu.o(.rodata); - src/battle_factory.o(.rodata); + src/battle_factory_screen.o(.rodata); src/apprentice.o(.rodata); src/frontier_util.o(.rodata); data/battle_frontier_2.o(.rodata); + src/battle_arena.o(.rodata); + src/battle_factory.o(.rodata); + data/battle_pike.o(.rodata); + src/battle_pike.o(.rodata); + data/battle_frontier_3.o(.rodata); src/item_menu.o(.rodata); src/list_menu.o(.rodata); src/save_location.o(.rodata); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index e89d308f5..3e7064eb5 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1,17 +1,18 @@ #include "global.h" -#include "battle_ai_script_commands.h" -#include "pokemon.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_factory.h" #include "battle_setup.h" +#include "item.h" +#include "pokemon.h" +#include "random.h" #include "recorded_battle.h" -#include "constants/species.h" +#include "util.h" #include "constants/abilities.h" -#include "random.h" -#include "item.h" +#include "constants/battle_ai.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" -#include "util.h" -#include "constants/battle_ai.h" +#include "constants/species.h" #define AI_ACTION_DONE 0x0001 #define AI_ACTION_FLEE 0x0002 @@ -44,8 +45,6 @@ AI scripts. extern const u8 *const gBattleAI_ScriptsTable[]; -extern u32 GetAiScriptsInBattleFactory(); - static u8 ChooseMoveOrAction_Singles(void); static u8 ChooseMoveOrAction_Doubles(void); static void RecordLastUsedMoveByTarget(void); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 40fffd6e5..71d0e8381 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1,13 +1,13 @@ #include "global.h" #include "battle.h" #include "battle_controllers.h" -#include "constants/abilities.h" -#include "constants/moves.h" #include "pokemon.h" -#include "constants/species.h" #include "random.h" #include "util.h" +#include "constants/abilities.h" #include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" // this file's functions static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng); diff --git a/src/battle_anim.c b/src/battle_anim.c index aa9637889..5c34d6a43 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1,21 +1,22 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" -#include "constants/battle_anim.h" -#include "sprite.h" -#include "contest.h" -#include "m4a.h" -#include "pokemon.h" +#include "battle_controllers.h" #include "battle_interface.h" -#include "task.h" +#include "bg.h" +#include "contest.h" #include "decompress.h" -#include "sound.h" -#include "graphics.h" #include "dma3.h" -#include "bg.h" #include "gpu_regs.h" -#include "palette.h" +#include "graphics.h" #include "main.h" +#include "m4a.h" +#include "palette.h" +#include "pokemon.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "constants/battle_anim.h" #define ANIM_SPRITE_INDEX_COUNT 8 diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c index ebe1718b7..d213e4831 100644 --- a/src/battle_anim_80A5C6C.c +++ b/src/battle_anim_80A5C6C.c @@ -1,21 +1,21 @@ #include "global.h" -#include "constants/battle_anim.h" -#include "constants/species.h" #include "battle.h" #include "battle_anim.h" +#include "bg.h" #include "contest.h" #include "data2.h" #include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "malloc.h" #include "palette.h" #include "pokemon_icon.h" #include "sprite.h" #include "task.h" #include "trig.h" #include "util.h" -#include "gpu_regs.h" -#include "bg.h" -#include "malloc.h" -#include "dma3.h" +#include "constants/battle_anim.h" +#include "constants/species.h" #define GET_UNOWN_LETTER(personality) (( \ (((personality & 0x03000000) >> 24) << 6) \ diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c index 89c945ca4..5401247b8 100644 --- a/src/battle_anim_80A9C70.c +++ b/src/battle_anim_80A9C70.c @@ -1,15 +1,15 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" -#include "constants/battle_anim.h" -#include "constants/rgb.h" -#include "util.h" #include "decompress.h" +#include "gpu_regs.h" #include "palette.h" #include "sprite.h" #include "task.h" #include "trig.h" -#include "gpu_regs.h" +#include "util.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 7b8eb4ed7..b49a6d03f 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -1,11 +1,11 @@ #include "global.h" #include "battle.h" -#include "constants/battle_anim.h" -#include "constants/species.h" #include "battle_anim.h" -#include "task.h" -#include "sound.h" #include "contest.h" +#include "sound.h" +#include "task.h" +#include "constants/battle_anim.h" +#include "constants/species.h" // this file's functions static void sub_8158B98(u8 taskId); diff --git a/src/battle_arena.c b/src/battle_arena.c new file mode 100644 index 000000000..4b47dcaf1 --- /dev/null +++ b/src/battle_arena.c @@ -0,0 +1,928 @@ +#include "global.h" +#include "battle.h" +#include "battle_arena.h" +#include "battle_message.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "bg.h" +#include "decompress.h" +#include "event_data.h" +#include "frontier_util.h" +#include "gpu_regs.h" +#include "item.h" +#include "m4a.h" +#include "overworld.h" +#include "palette.h" +#include "random.h" +#include "sound.h" +#include "text.h" +#include "util.h" +#include "constants/songs.h" +#include "constants/battle_string_ids.h" +#include "constants/battle_frontier.h" +#include "constants/moves.h" + +extern u16 gBattle_WIN0H; +extern u16 gBattle_WIN0V; + +extern const u32 gUnknown_08D854E8[]; +extern const u16 gUnknown_08D855E8[]; + +// This file's functions. +static void sub_81A58B4(void); +static void sub_81A5964(void); +static void sub_81A59FC(void); +static void sub_81A5AC4(void); +static void sub_81A5B08(void); +static void sub_81A5B88(void); +static void sub_81A5BE0(void); +static void SpriteCb_JudgmentIcon(struct Sprite *sprite); +static void ShowJudgmentSprite(u8 x, u8 y, u8 arg2, u8 battler); + +// Const rom data. +static const s8 sMindRatings[] = +{ + [MOVE_NONE] = 0, + [MOVE_POUND] = 1, + [MOVE_KARATE_CHOP] = 1, + [MOVE_DOUBLE_SLAP] = 1, + [MOVE_COMET_PUNCH] = 1, + [MOVE_MEGA_PUNCH] = 1, + [MOVE_PAY_DAY] = 1, + [MOVE_FIRE_PUNCH] = 1, + [MOVE_ICE_PUNCH] = 1, + [MOVE_THUNDER_PUNCH] = 1, + [MOVE_SCRATCH] = 1, + [MOVE_VICE_GRIP] = 1, + [MOVE_GUILLOTINE] = 1, + [MOVE_RAZOR_WIND] = 1, + [MOVE_SWORDS_DANCE] = 0, + [MOVE_CUT] = 1, + [MOVE_GUST] = 1, + [MOVE_WING_ATTACK] = 1, + [MOVE_WHIRLWIND] = 0, + [MOVE_FLY] = 1, + [MOVE_BIND] = 1, + [MOVE_SLAM] = 1, + [MOVE_VINE_WHIP] = 1, + [MOVE_STOMP] = 1, + [MOVE_DOUBLE_KICK] = 1, + [MOVE_MEGA_KICK] = 1, + [MOVE_JUMP_KICK] = 1, + [MOVE_ROLLING_KICK] = 1, + [MOVE_SAND_ATTACK] = 0, + [MOVE_HEADBUTT] = 1, + [MOVE_HORN_ATTACK] = 1, + [MOVE_FURY_ATTACK] = 1, + [MOVE_HORN_DRILL] = 1, + [MOVE_TACKLE] = 1, + [MOVE_BODY_SLAM] = 1, + [MOVE_WRAP] = 1, + [MOVE_TAKE_DOWN] = 1, + [MOVE_THRASH] = 1, + [MOVE_DOUBLE_EDGE] = 1, + [MOVE_TAIL_WHIP] = 0, + [MOVE_POISON_STING] = 1, + [MOVE_TWINEEDLE] = 1, + [MOVE_PIN_MISSILE] = 1, + [MOVE_LEER] = 0, + [MOVE_BITE] = 1, + [MOVE_GROWL] = 0, + [MOVE_ROAR] = 0, + [MOVE_SING] = 0, + [MOVE_SUPERSONIC] = 0, + [MOVE_SONIC_BOOM] = 1, + [MOVE_DISABLE] = 0, + [MOVE_ACID] = 1, + [MOVE_EMBER] = 1, + [MOVE_FLAMETHROWER] = 1, + [MOVE_MIST] = 0, + [MOVE_WATER_GUN] = 1, + [MOVE_HYDRO_PUMP] = 1, + [MOVE_SURF] = 1, + [MOVE_ICE_BEAM] = 1, + [MOVE_BLIZZARD] = 1, + [MOVE_PSYBEAM] = 1, + [MOVE_BUBBLE_BEAM] = 1, + [MOVE_AURORA_BEAM] = 1, + [MOVE_HYPER_BEAM] = 1, + [MOVE_PECK] = 1, + [MOVE_DRILL_PECK] = 1, + [MOVE_SUBMISSION] = 1, + [MOVE_LOW_KICK] = 1, + [MOVE_COUNTER] = 0, + [MOVE_SEISMIC_TOSS] = 1, + [MOVE_STRENGTH] = 1, + [MOVE_ABSORB] = 1, + [MOVE_MEGA_DRAIN] = 1, + [MOVE_LEECH_SEED] = 0, + [MOVE_GROWTH] = 0, + [MOVE_RAZOR_LEAF] = 1, + [MOVE_SOLAR_BEAM] = 1, + [MOVE_POISON_POWDER] = 0, + [MOVE_STUN_SPORE] = 0, + [MOVE_SLEEP_POWDER] = 0, + [MOVE_PETAL_DANCE] = 1, + [MOVE_STRING_SHOT] = 0, + [MOVE_DRAGON_RAGE] = 1, + [MOVE_FIRE_SPIN] = 1, + [MOVE_THUNDER_SHOCK] = 1, + [MOVE_THUNDERBOLT] = 1, + [MOVE_THUNDER_WAVE] = 0, + [MOVE_THUNDER] = 1, + [MOVE_ROCK_THROW] = 1, + [MOVE_EARTHQUAKE] = 1, + [MOVE_FISSURE] = 1, + [MOVE_DIG] = 1, + [MOVE_TOXIC] = 0, + [MOVE_CONFUSION] = 1, + [MOVE_PSYCHIC] = 1, + [MOVE_HYPNOSIS] = 0, + [MOVE_MEDITATE] = 0, + [MOVE_AGILITY] = 0, + [MOVE_QUICK_ATTACK] = 1, + [MOVE_RAGE] = 1, + [MOVE_TELEPORT] = 0, + [MOVE_NIGHT_SHADE] = 1, + [MOVE_MIMIC] = 0, + [MOVE_SCREECH] = 0, + [MOVE_DOUBLE_TEAM] = 0, + [MOVE_RECOVER] = 0, + [MOVE_HARDEN] = 0, + [MOVE_MINIMIZE] = 0, + [MOVE_SMOKESCREEN] = 0, + [MOVE_CONFUSE_RAY] = 0, + [MOVE_WITHDRAW] = 0, + [MOVE_DEFENSE_CURL] = 0, + [MOVE_BARRIER] = 0, + [MOVE_LIGHT_SCREEN] = 0, + [MOVE_HAZE] = 0, + [MOVE_REFLECT] = 0, + [MOVE_FOCUS_ENERGY] = 0, + [MOVE_BIDE] = 0, + [MOVE_METRONOME] = 0, + [MOVE_MIRROR_MOVE] = 0, + [MOVE_SELF_DESTRUCT] = 1, + [MOVE_EGG_BOMB] = 1, + [MOVE_LICK] = 1, + [MOVE_SMOG] = 1, + [MOVE_SLUDGE] = 1, + [MOVE_BONE_CLUB] = 1, + [MOVE_FIRE_BLAST] = 1, + [MOVE_WATERFALL] = 1, + [MOVE_CLAMP] = 1, + [MOVE_SWIFT] = 1, + [MOVE_SKULL_BASH] = 1, + [MOVE_SPIKE_CANNON] = 1, + [MOVE_CONSTRICT] = 1, + [MOVE_AMNESIA] = 0, + [MOVE_KINESIS] = 0, + [MOVE_SOFT_BOILED] = 0, + [MOVE_HI_JUMP_KICK] = 1, + [MOVE_GLARE] = 0, + [MOVE_DREAM_EATER] = 1, + [MOVE_POISON_GAS] = 0, + [MOVE_BARRAGE] = 1, + [MOVE_LEECH_LIFE] = 1, + [MOVE_LOVELY_KISS] = 0, + [MOVE_SKY_ATTACK] = 1, + [MOVE_TRANSFORM] = 0, + [MOVE_BUBBLE] = 1, + [MOVE_DIZZY_PUNCH] = 1, + [MOVE_SPORE] = 0, + [MOVE_FLASH] = 0, + [MOVE_PSYWAVE] = 1, + [MOVE_SPLASH] = 0, + [MOVE_ACID_ARMOR] = 0, + [MOVE_CRABHAMMER] = 1, + [MOVE_EXPLOSION] = 1, + [MOVE_FURY_SWIPES] = 1, + [MOVE_BONEMERANG] = 1, + [MOVE_REST] = 0, + [MOVE_ROCK_SLIDE] = 1, + [MOVE_HYPER_FANG] = 1, + [MOVE_SHARPEN] = 0, + [MOVE_CONVERSION] = 0, + [MOVE_TRI_ATTACK] = 1, + [MOVE_SUPER_FANG] = 1, + [MOVE_SLASH] = 1, + [MOVE_SUBSTITUTE] = 0, + [MOVE_STRUGGLE] = 1, + [MOVE_SKETCH] = 0, + [MOVE_TRIPLE_KICK] = 1, + [MOVE_THIEF] = 1, + [MOVE_SPIDER_WEB] = 0, + [MOVE_MIND_READER] = 0, + [MOVE_NIGHTMARE] = 0, + [MOVE_FLAME_WHEEL] = 1, + [MOVE_SNORE] = 1, + [MOVE_CURSE] = 0, + [MOVE_FLAIL] = 1, + [MOVE_CONVERSION_2] = 0, + [MOVE_AEROBLAST] = 1, + [MOVE_COTTON_SPORE] = 0, + [MOVE_REVERSAL] = 1, + [MOVE_SPITE] = 0, + [MOVE_POWDER_SNOW] = 1, + [MOVE_PROTECT] = -1, + [MOVE_MACH_PUNCH] = 1, + [MOVE_SCARY_FACE] = 0, + [MOVE_FAINT_ATTACK] = 1, + [MOVE_SWEET_KISS] = 0, + [MOVE_BELLY_DRUM] = 0, + [MOVE_SLUDGE_BOMB] = 1, + [MOVE_MUD_SLAP] = 1, + [MOVE_OCTAZOOKA] = 1, + [MOVE_SPIKES] = 0, + [MOVE_ZAP_CANNON] = 1, + [MOVE_FORESIGHT] = 0, + [MOVE_DESTINY_BOND] = 0, + [MOVE_PERISH_SONG] = 0, + [MOVE_ICY_WIND] = 1, + [MOVE_DETECT] = -1, + [MOVE_BONE_RUSH] = 1, + [MOVE_LOCK_ON] = 0, + [MOVE_OUTRAGE] = 1, + [MOVE_SANDSTORM] = 0, + [MOVE_GIGA_DRAIN] = 1, + [MOVE_ENDURE] = -1, + [MOVE_CHARM] = 0, + [MOVE_ROLLOUT] = 1, + [MOVE_FALSE_SWIPE] = 1, + [MOVE_SWAGGER] = 0, + [MOVE_MILK_DRINK] = 0, + [MOVE_SPARK] = 1, + [MOVE_FURY_CUTTER] = 1, + [MOVE_STEEL_WING] = 1, + [MOVE_MEAN_LOOK] = 0, + [MOVE_ATTRACT] = 0, + [MOVE_SLEEP_TALK] = 0, + [MOVE_HEAL_BELL] = 0, + [MOVE_RETURN] = 1, + [MOVE_PRESENT] = 1, + [MOVE_FRUSTRATION] = 1, + [MOVE_SAFEGUARD] = 0, + [MOVE_PAIN_SPLIT] = 0, + [MOVE_SACRED_FIRE] = 1, + [MOVE_MAGNITUDE] = 1, + [MOVE_DYNAMIC_PUNCH] = 1, + [MOVE_MEGAHORN] = 1, + [MOVE_DRAGON_BREATH] = 1, + [MOVE_BATON_PASS] = 0, + [MOVE_ENCORE] = 0, + [MOVE_PURSUIT] = 1, + [MOVE_RAPID_SPIN] = 1, + [MOVE_SWEET_SCENT] = 0, + [MOVE_IRON_TAIL] = 1, + [MOVE_METAL_CLAW] = 1, + [MOVE_VITAL_THROW] = 1, + [MOVE_MORNING_SUN] = 0, + [MOVE_SYNTHESIS] = 0, + [MOVE_MOONLIGHT] = 0, + [MOVE_HIDDEN_POWER] = 1, + [MOVE_CROSS_CHOP] = 1, + [MOVE_TWISTER] = 1, + [MOVE_RAIN_DANCE] = 0, + [MOVE_SUNNY_DAY] = 0, + [MOVE_CRUNCH] = 1, + [MOVE_MIRROR_COAT] = 0, + [MOVE_PSYCH_UP] = 0, + [MOVE_EXTREME_SPEED] = 1, + [MOVE_ANCIENT_POWER] = 1, + [MOVE_SHADOW_BALL] = 1, + [MOVE_FUTURE_SIGHT] = 1, + [MOVE_ROCK_SMASH] = 1, + [MOVE_WHIRLPOOL] = 1, + [MOVE_BEAT_UP] = 1, + [MOVE_FAKE_OUT] = -1, + [MOVE_UPROAR] = 1, + [MOVE_STOCKPILE] = 0, + [MOVE_SPIT_UP] = 1, + [MOVE_SWALLOW] = 0, + [MOVE_HEAT_WAVE] = 1, + [MOVE_HAIL] = 0, + [MOVE_TORMENT] = 0, + [MOVE_FLATTER] = 0, + [MOVE_WILL_O_WISP] = 0, + [MOVE_MEMENTO] = 0, + [MOVE_FACADE] = 1, + [MOVE_FOCUS_PUNCH] = 1, + [MOVE_SMELLING_SALT] = 1, + [MOVE_FOLLOW_ME] = 0, + [MOVE_NATURE_POWER] = 0, + [MOVE_CHARGE] = 0, + [MOVE_TAUNT] = 0, + [MOVE_HELPING_HAND] = 0, + [MOVE_TRICK] = 0, + [MOVE_ROLE_PLAY] = 0, + [MOVE_WISH] = 0, + [MOVE_ASSIST] = 0, + [MOVE_INGRAIN] = 0, + [MOVE_SUPERPOWER] = 1, + [MOVE_MAGIC_COAT] = 0, + [MOVE_RECYCLE] = 0, + [MOVE_REVENGE] = 1, + [MOVE_BRICK_BREAK] = 1, + [MOVE_YAWN] = 0, + [MOVE_KNOCK_OFF] = 1, + [MOVE_ENDEAVOR] = 1, + [MOVE_ERUPTION] = 1, + [MOVE_SKILL_SWAP] = 0, + [MOVE_IMPRISON] = 0, + [MOVE_REFRESH] = 0, + [MOVE_GRUDGE] = 0, + [MOVE_SNATCH] = 0, + [MOVE_SECRET_POWER] = 1, + [MOVE_DIVE] = 1, + [MOVE_ARM_THRUST] = 1, + [MOVE_CAMOUFLAGE] = 0, + [MOVE_TAIL_GLOW] = 0, + [MOVE_LUSTER_PURGE] = 1, + [MOVE_MIST_BALL] = 1, + [MOVE_FEATHER_DANCE] = 0, + [MOVE_TEETER_DANCE] = 0, + [MOVE_BLAZE_KICK] = 1, + [MOVE_MUD_SPORT] = 0, + [MOVE_ICE_BALL] = 1, + [MOVE_NEEDLE_ARM] = 1, + [MOVE_SLACK_OFF] = 0, + [MOVE_HYPER_VOICE] = 1, + [MOVE_POISON_FANG] = 1, + [MOVE_CRUSH_CLAW] = 1, + [MOVE_BLAST_BURN] = 1, + [MOVE_HYDRO_CANNON] = 1, + [MOVE_METEOR_MASH] = 1, + [MOVE_ASTONISH] = 1, + [MOVE_WEATHER_BALL] = 1, + [MOVE_AROMATHERAPY] = 0, + [MOVE_FAKE_TEARS] = 0, + [MOVE_AIR_CUTTER] = 1, + [MOVE_OVERHEAT] = 1, + [MOVE_ODOR_SLEUTH] = 0, + [MOVE_ROCK_TOMB] = 1, + [MOVE_SILVER_WIND] = 1, + [MOVE_METAL_SOUND] = 0, + [MOVE_GRASS_WHISTLE] = 0, + [MOVE_TICKLE] = 0, + [MOVE_COSMIC_POWER] = 0, + [MOVE_WATER_SPOUT] = 1, + [MOVE_SIGNAL_BEAM] = 1, + [MOVE_SHADOW_PUNCH] = 1, + [MOVE_EXTRASENSORY] = 1, + [MOVE_SKY_UPPERCUT] = 1, + [MOVE_SAND_TOMB] = 1, + [MOVE_SHEER_COLD] = 1, + [MOVE_MUDDY_WATER] = 1, + [MOVE_BULLET_SEED] = 1, + [MOVE_AERIAL_ACE] = 1, + [MOVE_ICICLE_SPEAR] = 1, + [MOVE_IRON_DEFENSE] = 0, + [MOVE_BLOCK] = 0, + [MOVE_HOWL] = 0, + [MOVE_DRAGON_CLAW] = 1, + [MOVE_FRENZY_PLANT] = 1, + [MOVE_BULK_UP] = 0, + [MOVE_BOUNCE] = 1, + [MOVE_MUD_SHOT] = 1, + [MOVE_POISON_TAIL] = 1, + [MOVE_COVET] = 1, + [MOVE_VOLT_TACKLE] = 1, + [MOVE_MAGICAL_LEAF] = 1, + [MOVE_WATER_SPORT] = 0, + [MOVE_CALM_MIND] = 0, + [MOVE_LEAF_BLADE] = 1, + [MOVE_DRAGON_DANCE] = 0, + [MOVE_ROCK_BLAST] = 1, + [MOVE_SHOCK_WAVE] = 1, + [MOVE_WATER_PULSE] = 1, + [MOVE_DOOM_DESIRE] = 1, + [MOVE_PSYCHO_BOOST] = 1, +}; + +static const struct OamData sOamData_8611F24 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_8611F2C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8611F34[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8611F3C[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8611F44[] = +{ + ANIMCMD_FRAME(12, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_8611F4C[] = +{ + sSpriteAnim_8611F2C, + sSpriteAnim_8611F34, + sSpriteAnim_8611F3C, + sSpriteAnim_8611F44 +}; + +static const struct SpriteTemplate sSpriteTemplate_JudgmentIcon = +{ + .tileTag = 0x3E8, + .paletteTag = 0xFFFF, + .oam = &sOamData_8611F24, + .anims = sSpriteAnimTable_8611F4C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_JudgmentIcon, +}; + +static const struct CompressedSpriteSheet gUnknown_08611F74[] = +{ + {gUnknown_08D854E8, 0x200, 0x3E8}, + {0} +}; + +static void (* const sArenaFunctions[])(void) = +{ + sub_81A58B4, + sub_81A5964, + sub_81A59FC, + sub_81A5AC4, + sub_81A5B08, + sub_81A5B88, + sub_81A5BE0, +}; + +static const u16 gUnknown_08611FA0[6] = +{ + 0x003f, 0x0040, 0x0041, 0x0043, 0x0042, 0x0046 +}; + +static const u16 gUnknown_08611FAC[9] = +{ + 0x00b3, 0x00b4, 0x00b7, 0x00c8, 0x00b9, 0x00bb, 0x00c4, 0x00c6, 0x00ba +}; + +// code +void CallBattleArenaFunction(void) +{ + sArenaFunctions[gSpecialVar_0x8004](); +} + +u8 BattleArena_ShowJudgmentWindow(u8 *state) +{ + s32 i; + u8 ret = 0; + switch (*state) + { + case 0: + BeginNormalPaletteFade(0x7FFFFF1C, 4, 0, 8, 0); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + LoadCompressedObjectPic(gUnknown_08611F74); + LoadCompressedPalette(gUnknown_08D855E8, 0x1F0, 0x20); + gBattle_WIN0H = 0xFF; + gBattle_WIN0V = 0x70; + (*state)++; + break; + case 1: + if (!gPaletteFade.active) + { + HandleBattleWindow(5, 0, 24, 13, 0); + (*state)++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + gBattleTextBuff1[0] = CHAR_0; + gBattleTextBuff1[1] = EOS; + gBattleTextBuff2[0] = CHAR_0; + gBattleTextBuff2[1] = EOS; + BattleStringExpandPlaceholdersToDisplayedString(gText_PlayerMon1Name); + BattlePutTextOnWindow(gDisplayedStringBattle, 15); + BattlePutTextOnWindow(gText_Vs, 16); + BattleStringExpandPlaceholdersToDisplayedString(gText_OpponentMon1Name); + BattlePutTextOnWindow(gDisplayedStringBattle, 17); + BattlePutTextOnWindow(gText_Mind, 18); + BattlePutTextOnWindow(gText_Skill, 19); + BattlePutTextOnWindow(gText_Body, 20); + BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); + BattlePutTextOnWindow(gDisplayedStringBattle, 21); + (*state)++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + for (i = 0; i < 8; i++) + { + u8 spriteId = CreateSprite(&sSpriteTemplate_JudgmentIcon, 0x40 + (i * 0x10), 84, 0); + StartSpriteAnim(&gSprites[spriteId], 3); + } + ret = 1; + (*state)++; + } + break; + case 4: + PlaySE(SE_HANTEI1); + ShowJudgmentSprite(80, 40, 0, 0); + ShowJudgmentSprite(160, 40, 0, 1); + BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); + BattlePutTextOnWindow(gDisplayedStringBattle, 21); + (*state)++; + ret = 1; + break; + case 5: + PlaySE(SE_HANTEI1); + ShowJudgmentSprite(80, 56, 1, 0); + ShowJudgmentSprite(160, 56, 1, 1); + BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); + BattlePutTextOnWindow(gDisplayedStringBattle, 21); + (*state)++; + ret = 1; + break; + case 6: + PlaySE(SE_HANTEI1); + ShowJudgmentSprite(80, 72, 2, 0); + ShowJudgmentSprite(160, 72, 2, 1); + BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement); + BattlePutTextOnWindow(gDisplayedStringBattle, 21); + (*state)++; + ret = 1; + break; + case 7: + PlaySE(SE_HANTEI2); + if (gBattleTextBuff1[0] > gBattleTextBuff2[0]) + { + ret = 2; + gBattleScripting.battler = 0; + } + else if (gBattleTextBuff1[0] < gBattleTextBuff2[0]) + { + ret = 3; + gBattleScripting.battler = 1; + } + else + { + ret = 4; + } + (*state)++; + break; + case 8: + (*state)++; + break; + case 9: + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + HandleBattleWindow(5, 0, 24, 13, WINDOW_CLEAR); + CopyBgTilemapBufferToVram(0); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + BeginNormalPaletteFade(0x7FFFFF1C, 4, 8, 0, 0); + (*state)++; + break; + case 10: + if (!gPaletteFade.active) + { + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + FreeSpriteTilesByTag(0x3E8); + ret = 1; + (*state)++; + } + break; + } + + return ret; +} + +static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler) +{ + s32 animNum = 0; + s32 pointsPlayer = 0; + s32 pointsOpponent = 0; + s8 *mindPoints = gBattleStruct->arenaMindPoints; + s8 *skillPoints = gBattleStruct->arenaSkillPoints; + u16 *hpAtStart = gBattleStruct->arenaStartHp; + + switch (category) + { + case 0: + pointsPlayer = mindPoints[battler]; + pointsOpponent = mindPoints[BATTLE_OPPOSITE(battler)]; + break; + case 1: + pointsPlayer = skillPoints[battler]; + pointsOpponent = skillPoints[BATTLE_OPPOSITE(battler)]; + break; + case 2: + pointsPlayer = (gBattleMons[battler].hp * 100) / hpAtStart[battler]; + pointsOpponent = (gBattleMons[BATTLE_OPPOSITE(battler)].hp * 100) / hpAtStart[BATTLE_OPPOSITE(battler)]; + break; + } + + if (pointsPlayer > pointsOpponent) + { + animNum = 2; + if (battler != 0) + gBattleTextBuff2[0] += 2; + else + gBattleTextBuff1[0] += 2; + } + else if (pointsPlayer == pointsOpponent) + { + animNum = 1; + if (battler != 0) + gBattleTextBuff2[0] += 1; + else + gBattleTextBuff1[0] += 1; + } + else + { + animNum = 0; + } + + pointsPlayer = CreateSprite(&sSpriteTemplate_JudgmentIcon, x, y, 0); + StartSpriteAnim(&gSprites[pointsPlayer], animNum); +} + +static void SpriteCb_JudgmentIcon(struct Sprite *sprite) +{ + if (gBattleCommunication[0] > 8) + DestroySprite(sprite); +} + +void BattleArena_InitPoints(void) +{ + s8 *mindPoints = gBattleStruct->arenaMindPoints; + s8 *skillPoints = gBattleStruct->arenaSkillPoints; + u16 *hpAtStart = gBattleStruct->arenaStartHp; + + mindPoints[0] = 0; + mindPoints[1] = 0; + skillPoints[0] = 0; + skillPoints[1] = 0; + hpAtStart[0] = gBattleMons[0].hp; + hpAtStart[1] = gBattleMons[1].hp; +} + +void BattleArena_AddMindPoints(u8 battler) +{ + s8 *mindPoints = gBattleStruct->arenaMindPoints; + + mindPoints[battler] += sMindRatings[gCurrentMove]; +} + +void BattleArena_AddSkillPoints(u8 battler) +{ + s8 *skillPoints = gBattleStruct->arenaSkillPoints; + + if (gHitMarker & HITMARKER_OBEYS) + { + u8 *failedMoveBits = &gBattleStruct->alreadyStatusedMoveAttempt; + if (*failedMoveBits & gBitTable[battler]) + { + *failedMoveBits &= ~(gBitTable[battler]); + skillPoints[battler] -= 2; + } + else if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + { + if (!(gMoveResultFlags & MOVE_RESULT_MISSED) || gBattleCommunication[6] != 1) + skillPoints[battler] -= 2; + } + else if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE && gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE) + { + skillPoints[battler] += 1; + } + else if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) + { + skillPoints[battler] += 2; + } + else if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE) + { + skillPoints[battler] -= 1; + } + else if (!gProtectStructs[battler].protected) + { + skillPoints[battler] += 1; + } + } +} + +void BattleArena_DeductMindPoints(u8 battler, u16 stringId) +{ + s8 *skillPoints = gBattleStruct->arenaSkillPoints; + + switch (stringId) + { + case STRINGID_PKMNSXMADEYUSELESS: + case STRINGID_PKMNSXMADEITINEFFECTIVE: + case STRINGID_PKMNSXPREVENTSFLINCHING: + case STRINGID_PKMNSXBLOCKSY2: + case STRINGID_PKMNSXPREVENTSYLOSS: + case STRINGID_PKMNSXMADEYINEFFECTIVE: + case STRINGID_PKMNSXPREVENTSBURNS: + case STRINGID_PKMNSXBLOCKSY: + case STRINGID_PKMNPROTECTEDBY: + case STRINGID_PKMNPREVENTSUSAGE: + case STRINGID_PKMNRESTOREDHPUSING: + case STRINGID_PKMNPREVENTSPARALYSISWITH: + case STRINGID_PKMNPREVENTSROMANCEWITH: + case STRINGID_PKMNPREVENTSPOISONINGWITH: + case STRINGID_PKMNPREVENTSCONFUSIONWITH: + case STRINGID_PKMNRAISEDFIREPOWERWITH: + case STRINGID_PKMNANCHORSITSELFWITH: + case STRINGID_PKMNPREVENTSSTATLOSSWITH: + case STRINGID_PKMNSTAYEDAWAKEUSING: + skillPoints[battler] -= 3; + break; + } +} + +void sub_81A586C(u8 battler) // Unused. +{ + u16 *hpAtStart = gBattleStruct->arenaStartHp; + + hpAtStart[battler] = gBattleMons[battler].hp; + if (hpAtStart[BATTLE_OPPOSITE(battler)] > gBattleMons[BATTLE_OPPOSITE(battler)].hp) + hpAtStart[BATTLE_OPPOSITE(battler)] = gBattleMons[BATTLE_OPPOSITE(battler)].hp; +} + +static void sub_81A58B4(void) +{ + bool32 isCurrent; + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (lvlMode != FRONTIER_LVL_50) + isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x80; + else + isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x40; + + if (!isCurrent) + gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; + + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +static void sub_81A5964(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DD8; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + break; + case 2: + if (lvlMode != FRONTIER_LVL_50) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x80; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x40; + break; + } +} + +static void sub_81A59FC(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_DD8 = gSpecialVar_0x8006; + break; + case 1: + gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = gSpecialVar_0x8006; + break; + case 2: + if (lvlMode != FRONTIER_LVL_50) + { + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= 0x80; + else + gSaveBlock2Ptr->frontier.field_CDC &= ~(0x80); + } + else + { + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= 0x40; + else + gSaveBlock2Ptr->frontier.field_CDC &= ~(0x40); + } + break; + } +} + +static void sub_81A5AC4(void) +{ + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + sub_81A4C30(); +} + +static void sub_81A5B08(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 41) + gSaveBlock2Ptr->frontier.field_DD8 = gUnknown_08611FAC[Random() % ARRAY_COUNT(gUnknown_08611FAC)]; + else + gSaveBlock2Ptr->frontier.field_DD8 = gUnknown_08611FA0[Random() % ARRAY_COUNT(gUnknown_08611FA0)]; +} + +static void sub_81A5B88(void) +{ + if (AddBagItem(gSaveBlock2Ptr->frontier.field_DD8, 1) == TRUE) + { + CopyItemName(gSaveBlock2Ptr->frontier.field_DD8, gStringVar1); + gSaveBlock2Ptr->frontier.field_DD8 = 0; + gSpecialVar_Result = TRUE; + } + else + { + gSpecialVar_Result = FALSE; + } +} + +static void sub_81A5BE0(void) +{ + GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); +} + +void sub_81A5BF8(void) +{ + u8 width = 27; + u8 palNum = 7; + + FillBgTilemapBufferRect(0, 0, 254, 14, 1, 6, palNum); + FillBgTilemapBufferRect(0, 0, 32, 14, 1, 6, palNum); + FillBgTilemapBufferRect(0, 0x31, 0, 14, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x33, 1, 14, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x34, 2, 14, width, 1, palNum); + width++; + FillBgTilemapBufferRect(0, 0x35, 28, 14, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x36, 29, 14, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x37, 0, 15, 1, 5, palNum); + FillBgTilemapBufferRect(0, 0x39, 1, 15, width, 5, palNum); + FillBgTilemapBufferRect(0, 0x3A, 29, 15, 1, 5, palNum); + FillBgTilemapBufferRect(0, 0x831, 0, 19, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x833, 1, 19, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x834, 2, 19, width - 2, 1, palNum); + FillBgTilemapBufferRect(0, 0x835, 28, 19, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x836, 29, 19, 1, 1, palNum); +} + +void sub_81A5D44(void) +{ + u8 width; + u8 height; + u8 palNum = 0; + + FillBgTilemapBufferRect(0, 3, 0, 14, 1, 1, palNum); + height = 4; + FillBgTilemapBufferRect(0, 4, 1, 14, 1, 1, palNum); + width = 27; + FillBgTilemapBufferRect(0, 5, 2, 14, width, 1, palNum); + FillBgTilemapBufferRect(0, 6, 28, 14, 1, 1, palNum); + FillBgTilemapBufferRect(0, 7, 29, 14, 1, 1, palNum); + FillBgTilemapBufferRect(0, 8, 0, 15, 1, height, palNum); + FillBgTilemapBufferRect(0, 9, 1, 15, 1, height, palNum); + FillBgTilemapBufferRect(0, 0xA, 2, 15, width, height, palNum); + FillBgTilemapBufferRect(0, 0xB, 28, 15, 1, height, palNum); + FillBgTilemapBufferRect(0, 0xC, 29, 15, 1, height, palNum); + FillBgTilemapBufferRect(0, 0xD, 0, 19, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0xE, 1, 19, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0xF, 2, 19, width, 1, palNum); + FillBgTilemapBufferRect(0, 0x10, 28, 19, 1, 1, palNum); + FillBgTilemapBufferRect(0, 0x11, 29, 19, 1, 1, palNum); +} diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 4fea3aca8..2b6a356dd 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1,30 +1,30 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" #include "battle_controllers.h" -#include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" -#include "battle_ai_script_commands.h" +#include "battle_message.h" +#include "battle_setup.h" #include "battle_tv.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" #include "link.h" -#include "util.h" #include "main.h" -#include "constants/songs.h" -#include "constants/trainers.h" -#include "sound.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "pokeball.h" -#include "data2.h" -#include "battle_setup.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 51e26b620..203883c27 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1,30 +1,30 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" #include "battle_controllers.h" -#include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" -#include "battle_ai_script_commands.h" +#include "battle_message.h" +#include "battle_setup.h" #include "battle_tv.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" #include "link.h" -#include "util.h" #include "main.h" -#include "constants/songs.h" -#include "constants/trainers.h" -#include "sound.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "pokeball.h" -#include "data2.h" -#include "battle_setup.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index b8b5bd3b8..54726229d 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1,34 +1,37 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" +#include "battle_arena.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" +#include "battle_setup.h" +#include "battle_tower.h" #include "battle_tv.h" -#include "battle_ai_script_commands.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" +#include "frontier_util.h" +#include "item.h" #include "link.h" -#include "util.h" #include "main.h" -#include "item.h" -#include "constants/items.h" -#include "constants/songs.h" -#include "sound.h" -#include "constants/moves.h" -#include "constants/trainers.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "random.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "random.h" -#include "pokeball.h" -#include "data2.h" -#include "battle_setup.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; @@ -38,11 +41,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); -extern void sub_81A57E4(u8 battlerId, u16 stringId); -extern u8 GetFrontierBrainTrainerPicIndex(void); extern u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId); -extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); -extern u8 GetEreaderTrainerFrontSpriteId(void); // this file's functions static void OpponentHandleGetMonData(void); @@ -1513,7 +1512,7 @@ static void OpponentHandlePrintString(void) BufferStringBattle(*stringId); BattlePutTextOnWindow(gDisplayedStringBattle, 0); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; - sub_81A57E4(gActiveBattler, *stringId); + BattleArena_DeductMindPoints(gActiveBattler, *stringId); } static void OpponentHandlePrintSelectionString(void) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 6bc6c6f49..ad5ae2059 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1,37 +1,38 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" +#include "battle_arena.h" #include "battle_controllers.h" -#include "battle_message.h" +#include "battle_dome.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" +#include "battle_message.h" +#include "battle_setup.h" #include "battle_tv.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" +#include "item.h" +#include "item_menu.h" #include "link.h" -#include "util.h" #include "main.h" -#include "item.h" -#include "constants/items.h" -#include "constants/songs.h" -#include "sound.h" -#include "constants/moves.h" -#include "constants/trainers.h" -#include "window.h" #include "m4a.h" #include "palette.h" -#include "task.h" -#include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "random.h" +#include "party_menu.h" #include "pokeball.h" -#include "data2.h" -#include "battle_setup.h" -#include "item_menu.h" +#include "pokemon.h" +#include "random.h" #include "recorded_battle.h" -#include "party_menu.h" -#include "battle_dome.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u8 gUnknown_0203CEE8; extern u8 gUnknown_0203CEE9; @@ -46,7 +47,6 @@ extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_81AABB0(void); -extern void sub_81A57E4(u8 battlerId, u16 stringId); extern void sub_81851A8(u8 *); // this file's functions @@ -2537,7 +2537,7 @@ static void PlayerHandlePrintString(void) BattlePutTextOnWindow(gDisplayedStringBattle, 0); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; BattleTv_SetDataBasedOnString(*stringId); - sub_81A57E4(gActiveBattler, *stringId); + BattleArena_DeductMindPoints(gActiveBattler, *stringId); } static void PlayerHandlePrintSelectionString(void) @@ -2600,9 +2600,11 @@ static void HandleChooseMoveAfterDma3(void) } } +// arenaMindPoints is used here as a placeholder for a timer. + static void PlayerChooseMoveInBattlePalace(void) { - if (--*(gBattleStruct->field_298 + gActiveBattler) == 0) + if (--*(gBattleStruct->arenaMindPoints + gActiveBattler) == 0) { gBattlePalaceMoveSelectionRngValue = gRngValue; BtlController_EmitTwoReturnValues(1, 10, ChooseMoveAndTargetInBattlePalace()); @@ -2614,7 +2616,7 @@ static void PlayerHandleChooseMove(void) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - *(gBattleStruct->field_298 + gActiveBattler) = 8; + *(gBattleStruct->arenaMindPoints + gActiveBattler) = 8; gBattlerControllerFuncs[gActiveBattler] = PlayerChooseMoveInBattlePalace; } else diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index e893d2f3d..3572c1c69 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1,30 +1,30 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" -#include "battle_ai_script_commands.h" -#include "pokemon.h" +#include "battle_setup.h" +#include "bg.h" +#include "data2.h" +#include "item_use.h" #include "link.h" -#include "util.h" #include "main.h" -#include "constants/songs.h" -#include "constants/trainers.h" -#include "sound.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "pokeball.h" -#include "data2.h" -#include "battle_setup.h" -#include "item_use.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 57eb6842e..72667649f 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1,32 +1,32 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" #include "battle_controllers.h" -#include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" -#include "battle_ai_script_commands.h" +#include "battle_message.h" +#include "battle_setup.h" #include "battle_tv.h" -#include "recorded_battle.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" +#include "item_use.h" #include "link.h" -#include "util.h" #include "main.h" -#include "constants/songs.h" -#include "constants/trainers.h" -#include "sound.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "recorded_battle.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "pokeball.h" -#include "data2.h" -#include "item_use.h" -#include "battle_setup.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index f6c19121d..b74d55cc8 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1,29 +1,29 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" -#include "battle_ai_script_commands.h" -#include "recorded_battle.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" +#include "item_use.h" #include "link.h" -#include "util.h" #include "main.h" -#include "constants/songs.h" -#include "sound.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "recorded_battle.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "pokeball.h" -#include "data2.h" -#include "item_use.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 148f13865..a7ea04515 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -1,27 +1,27 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_controllers.h" -#include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" -#include "pokemon.h" +#include "battle_message.h" +#include "bg.h" +#include "data2.h" +#include "item_menu.h" #include "link.h" -#include "util.h" #include "main.h" -#include "constants/songs.h" -#include "sound.h" -#include "window.h" #include "m4a.h" #include "palette.h" -#include "task.h" -#include "text.h" -#include "bg.h" -#include "reshow_battle_screen.h" #include "pokeball.h" -#include "data2.h" #include "pokeblock.h" -#include "item_menu.h" +#include "pokemon.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "task.h" +#include "text.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 80dd6d3bb..f7e9831a7 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -1,35 +1,35 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_controllers.h" -#include "battle_message.h" #include "battle_interface.h" -#include "battle_anim.h" -#include "constants/battle_anim.h" +#include "battle_message.h" +#include "battle_setup.h" #include "battle_tv.h" -#include "pokemon.h" +#include "bg.h" +#include "data2.h" +#include "item.h" +#include "item_menu.h" #include "link.h" -#include "util.h" #include "main.h" -#include "item.h" -#include "constants/items.h" -#include "constants/songs.h" -#include "sound.h" -#include "constants/moves.h" -#include "constants/trainers.h" -#include "window.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" +#include "pokeball.h" +#include "pokemon.h" +#include "random.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" -#include "string_util.h" -#include "bg.h" -#include "reshow_battle_screen.h" -#include "random.h" -#include "pokeball.h" -#include "data2.h" -#include "party_menu.h" -#include "battle_setup.h" -#include "item_menu.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/trainers.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 56ff34528..1c6942ead 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1,17 +1,17 @@ #include "global.h" #include "battle.h" +#include "battle_ai_script_commands.h" +#include "battle_anim.h" #include "battle_controllers.h" +#include "battle_message.h" #include "cable_club.h" #include "link.h" -#include "task.h" -#include "battle_ai_script_commands.h" -#include "battle_anim.h" #include "pokemon.h" -#include "constants/species.h" #include "recorded_battle.h" +#include "task.h" #include "util.h" #include "constants/abilities.h" -#include "battle_message.h" +#include "constants/species.h" extern u8 gUnknown_02022D08; extern u8 gUnknown_02022D09; diff --git a/src/battle_dome.c b/src/battle_dome.c index b39162dda..2a77da180 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2555,7 +2555,7 @@ static void InitDomeTrainers(void) s32 species[3]; s32 monTypesBits, monTypesCount; s32 trainerId; - s32 monTournamentId; + s32 monSetId; u16 *statSums; s32 *statValues; u8 ivs = 0; @@ -2618,20 +2618,20 @@ static void InitDomeTrainers(void) // Make sure the mon is valid. do { - monTournamentId = RandomizeFacilityTrainerMonId(trainerId); + monSetId = RandomizeFacilityTrainerMonSet(trainerId); for (k = 0; k < j; k++) { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k]; - if (checkingMonId == monTournamentId - || species[0] == gFacilityTrainerMons[monTournamentId].species - || species[1] == gFacilityTrainerMons[monTournamentId].species - || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) + s32 checkingMonSetId = gSaveBlock2Ptr->frontier.domeMonIds[i][k]; + if (checkingMonSetId == monSetId + || species[0] == gFacilityTrainerMons[monSetId].species + || species[1] == gFacilityTrainerMons[monSetId].species + || gFacilityTrainerMons[checkingMonSetId].itemTableId == gFacilityTrainerMons[monSetId].itemTableId) break; } } while (k != j); - gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monTournamentId; - species[j] = gFacilityTrainerMons[monTournamentId].species; + gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monSetId; + species[j] = gFacilityTrainerMons[monSetId].species; } gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; @@ -2828,7 +2828,7 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM u8 happiness = 0xFF; u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. u8 level = SetFacilityPtrsGetLevel(); - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], + CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId], gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].species, level, gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].nature, @@ -6143,7 +6143,7 @@ static void sub_8194F58(void) s32 species[3]; s32 monTypesBits; s32 trainerId; - s32 monTournamentId; + s32 monSetId; u8 lvlMode; u16 *statSums; s32 *statValues; @@ -6190,20 +6190,20 @@ static void sub_8194F58(void) // Make sure the mon is valid. do { - monTournamentId = RandomizeFacilityTrainerMonId(trainerId); + monSetId = RandomizeFacilityTrainerMonSet(trainerId); for (k = 0; k < j; k++) { s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k]; - if (checkingMonId == monTournamentId - || species[0] == gFacilityTrainerMons[monTournamentId].species - || species[1] == gFacilityTrainerMons[monTournamentId].species - || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) + if (checkingMonId == monSetId + || species[0] == gFacilityTrainerMons[monSetId].species + || species[1] == gFacilityTrainerMons[monSetId].species + || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monSetId].itemTableId) break; } } while (k != j); - gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monTournamentId; - species[j] = gFacilityTrainerMons[monTournamentId].species; + gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monSetId; + species[j] = gFacilityTrainerMons[monSetId].species; } gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; diff --git a/src/battle_factory.c b/src/battle_factory.c index d7a2939b3..37abf6add 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -1,4114 +1,863 @@ #include "global.h" #include "battle_factory.h" -#include "sprite.h" +#include "battle_factory_screen.h" #include "event_data.h" +#include "battle_setup.h" #include "overworld.h" -#include "random.h" +#include "frontier_util.h" #include "battle_tower.h" -#include "text.h" -#include "palette.h" -#include "task.h" -#include "main.h" -#include "malloc.h" -#include "bg.h" -#include "gpu_regs.h" -#include "string_util.h" -#include "international_string_util.h" -#include "window.h" -#include "data2.h" -#include "decompress.h" -#include "pokemon_summary_screen.h" -#include "sound.h" -#include "pokedex.h" -#include "util.h" -#include "trainer_pokemon_sprites.h" +#include "random.h" +#include "constants/species.h" +#include "constants/battle_ai.h" #include "constants/battle_frontier.h" -#include "constants/songs.h" -#include "constants/rgb.h" - -// Select_ refers to the first Pokemon selection screen where you choose 3 Pokemon. -// Swap_ refers to the consecutive selection screen where you can keep your Pokemon or swap one with beaten trainer's. - -#define MENU_SUMMARY 0 -#define MENU_RENT 1 -#define MENU_DESELECT 1 -#define MENU_OTHERS 2 -#define MENU_OPTIONS_COUNT 3 - -#define SELECTABLE_MONS_COUNT 6 +#include "constants/trainers.h" +#include "constants/moves.h" -#define TAG_PAL_BALL_GREY 0x64 -#define TAG_PAL_BALL_SELECTED 0x65 -#define TAG_PAL_66 0x66 -#define TAG_PAL_67 0x67 - -#define TAG_TILE_64 0x64 -#define TAG_TILE_65 0x65 -#define TAG_TILE_66 0x66 -#define TAG_TILE_67 0x67 -#define TAG_TILE_68 0x68 -#define TAG_TILE_69 0x69 -#define TAG_TILE_6A 0x6A -#define TAG_TILE_6B 0x6B -#define TAG_TILE_6C 0x6C -#define TAG_TILE_6D 0x6D - -struct FactorySelecteableMon -{ - u16 monSetId; - u16 spriteId; - u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon - struct Pokemon monData; -}; +extern u16 gUnknown_03006298[]; -struct UnkFactoryStruct -{ - u8 field0; - u8 field1; -}; - -struct FactorySelectMonsStruct -{ - u8 menuCursorPos; - u8 menuCursor1SpriteId; - u8 menuCursor2SpriteId; - u8 cursorPos; - u8 cursorSpriteId; - u8 selectingMonsState; - bool8 fromSummaryScreen; - u8 yesNoCursorPos; - u8 unused8; - struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; - struct UnkFactoryStruct unk294[3]; - bool8 unk2A0; - u8 fadeSpeciesNameTaskId; - bool8 unk2A2; - u16 unk2A4; - bool8 unk2A6; - u8 unk2A7; - u8 unk2A8; - u8 unk2A9; -}; - -// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. -#define ACTIONS_PLAYER_SCREEN 0 -#define ACTIONS_ENEMY_SCREEN 1 - -struct SwapActionIdAndFunc -{ - u8 id; - void (*func)(u8 taskId); -}; - -struct FactorySwapMonsStruct -{ - u8 menuCursorPos; - u8 menuCursor1SpriteId; - u8 menuCursor2SpriteId; - u8 cursorPos; - u8 cursorSpriteId; - u8 ballSpriteIds[3]; - u8 unk8[2][3]; - u8 unkE[2][2]; - u8 playerMonId; - u8 enemyMonId; - bool8 inEnemyScreen; - bool8 fromSummaryScreen; - u8 yesNoCursorPos; - u8 actionsCount; - const struct SwapActionIdAndFunc *actionsData; - u8 unused1C[4]; - bool8 monSwapped; - u8 fadeSpeciesNameTaskId; - bool8 unk22; - u16 unk24; - bool8 unk26; - u8 unk27; - u8 unk28; - u8 unk29; - struct UnkFactoryStruct unk2C; - bool8 unk30; -}; - -extern u8 (*gUnknown_030062E8)(void); -extern u8 gUnknown_0203CF20; - -extern const u16 gBattleFrontierHeldItems[]; extern const struct FacilityMon gBattleFrontierMons[]; extern const struct FacilityMon gSlateportBattleTentMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; -extern const u32 gUnknown_085B18AC[]; +extern const u16 gBattleFrontierHeldItems[]; -extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot); -extern u8 sub_81A6F70(u8 battleMode, u8 lvlMode); -extern u8 sub_81A6CA8(u8 arg0, u8 arg1); +// IWRAM bss +static IWRAM_DATA bool8 gUnknown_03001288; // This file's functions. -static void sub_819A44C(struct Sprite *sprite); -static void CB2_InitSelectScreen(void); -static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); -static void Select_InitMonsData(void); -static void Select_InitAllSprites(void); -static void Select_ShowSummaryMonSprite(void); -static void Select_PrintSelectMonString(void); -static void Select_PrintMonSpecies(void); -static void Select_PrintMonCategory(void); -static void Select_PrintRentalPkmnString(void); -static void Select_CopyMonsToPlayerParty(void); -static void sub_819C4B4(void); -static void Select_ShowYesNoOptions(void); -static void sub_819C568(void); -static void Select_ShowMenuOptions(void); -static void Select_PrintMenuOptions(void); -static void Select_PrintYesNoOptions(void); -static void Task_SelectFadeSpeciesName(u8 taskId); -static void sub_819C1D0(u8 taskId); -static void Task_HandleSelectionScreenChooseMons(u8 taskId); -static void Task_HandleSelectionScreenMenu(u8 taskId); -static void CreateFrontierFactorySelectableMons(u8 firstMonId); -static void CreateTentFactorySelectableMons(u8 firstMonId); -static void Select_SetBallSpritePaletteNum(u8 id); -static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1); -static void sub_819B958(u8 windowId); -static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen); -static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); -static u8 Select_RunMenuOptionFunc(void); -static u8 sub_819BC9C(void); -static u8 Select_OptionSummary(void); -static u8 Select_OptionOthers(void); -static u8 Select_OptionRentDeselect(void); -static bool32 Select_AreSpeciesValid(u16 monSetId); -static void Swap_DestroyAllSprites(void); -static void Swap_ShowYesNoOptions(void); -static void sub_819E8EC(void); -static void sub_819EAC0(void); -static void Swap_UpdateYesNoCursorPosition(s8 direction); -static void Swap_UpdateMenuCursorPosition(s8 direction); -static void sub_819EA64(u8 windowId); -static void sub_819D770(u8 taskId); -static void Task_HandleSwapScreenChooseMons(u8 taskId); -static void sub_819D588(u8 taskId); -static void sub_819F7B4(u8 taskId); -static void Swap_PrintOnInfoWindow(const u8 *str); -static void Swap_ShowMenuOptions(void); -static void Swap_PrintMenuOptions(void); -static void Swap_PrintYesNoOptions(void); -static void Swap_PrintMonSpecies(void); -static void Swap_PrintMonSpecies2(void); -static void Swap_PrintMonSpecies3(void); -static void Swap_PrintMonCategory(void); -static void Swap_InitAllSprites(void); -static void Swap_PrintPkmnSwap(void); -static void sub_819EADC(void); -static void sub_819EAF8(void); -static void CB2_InitSwapScreen(void); -static void Swap_ShowSummaryMonSprite(void); -static void Swap_UpdateActionCursorPosition(s8 direction); -static void Swap_UpdateBallCursorPosition(s8 direction); -static void Swap_RunMenuOptionFunc(u8 taskId); -static void sub_819F0CC(u8 taskId); -static void sub_819F114(u8 taskId); -static void sub_819F134(u8 taskId); -static void Swap_RunActionFunc(u8 taskId); -static void sub_819F69C(u8 taskId); -static void Task_SwapCantHaveSameMons(u8 taskId); -static void Swap_ShowMonSprite(void); -static void Swap_PrintActionStrings(void); -static void Swap_PrintActionStrings2(void); -static void Swap_PrintOneActionString(u8 which); -static void Swap_InitActions(u8 id); -static void sub_819E838(u8 arg0); -static bool8 Swap_AlreadyHasSameSpecies(u8 monId); -static void sub_819F600(struct Sprite *sprite); -static void Swap_ActionMon(u8 taskId); -static void Swap_ActionCancel(u8 taskId); -static void Swap_ActionPkmnForSwap(u8 taskId); - -// Ewram variables -static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSelectMonCardBgTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSelectMenuTilemapBuffer = NULL; -static EWRAM_DATA u8 *sSelectMonCardBgTilemapBuffer = NULL; -static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; -static EWRAM_DATA u8 *sSwapMenuTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSwapMonCardBgTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; -static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; - -// IWRAM bss -static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; -static IWRAM_DATA void (*sSwap_CurrentTableFunc)(u8 taskId); -static IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; +static void sub_81A5E94(void); +static void sub_81A5FA8(void); +static void sub_81A6054(void); +static void sub_81A613C(void); +static void nullsub_75(void); +static void nullsub_123(void); +static void sub_81A6188(void); +static void sub_81A6198(void); +static void sub_81A61A4(void); +static void sub_81A63CC(void); +static void sub_81A64C4(void); +static void sub_81A63B8(void); +static void sub_81A61B0(void); +static void sub_81A67EC(void); +static void sub_81A6A08(void); +static void sub_81A6AEC(void); +static void sub_81A6C1C(void); +static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2); +static u8 GetStyleForMove(u16 move); // Const rom data. -static const u16 gUnknown_0860F13C[] = INCBIN_U16("graphics/unknown/unknown_60F13C.gbapal"); -static const u16 gUnknown_0860F15C[] = INCBIN_U16("graphics/unknown/unknown_60F15C.gbapal"); -static const u16 gUnknown_0860F17C[] = INCBIN_U16("graphics/unknown/unknown_60F17C.gbapal"); -static const u8 gUnknown_0860F1BC[] = INCBIN_U8("graphics/unknown/unknown_60F1BC.4bpp"); -static const u8 gUnknown_0860F3BC[] = INCBIN_U8("graphics/unknown/unknown_60F3BC.4bpp"); -static const u8 gUnknown_0860F43C[] = INCBIN_U8("graphics/unknown/unknown_60F43C.4bpp"); -static const u8 gUnknown_0860F53C[] = INCBIN_U8("graphics/unknown/unknown_60F53C.4bpp"); -static const u8 gUnknown_0860F63C[] = INCBIN_U8("graphics/unknown/unknown_60F63C.4bpp"); -static const u8 gUnknown_0860F6BC[] = INCBIN_U8("graphics/unknown/unknown_60F6BC.4bpp"); -static const u8 gUnknown_0860F7BC[] = INCBIN_U8("graphics/unknown/unknown_60F7BC.4bpp"); -static const u8 gUnknown_0860F83C[] = INCBIN_U8("graphics/unknown/unknown_60F83C.4bpp"); -static const u8 gUnknown_0860F93C[] = INCBIN_U8("graphics/unknown/unknown_60F93C.4bpp"); -static const u8 gUnknown_0860FA3C[] = INCBIN_U8("graphics/unknown/unknown_60FA3C.4bpp"); -static const u8 gUnknown_0861023C[] = INCBIN_U8("graphics/unknown/unknown_61023C.bin"); -static const u8 gUnknown_0861033C[] = INCBIN_U8("graphics/unknown/unknown_61033C.4bpp"); -static const u16 gUnknown_0861039C[] = INCBIN_U16("graphics/unknown/unknown_61039C.gbapal"); - -static const struct SpriteSheet gUnknown_086103BC[] = -{ - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, - {}, -}; - -static const struct CompressedSpriteSheet gUnknown_086103E4[] = -{ - {gUnknown_085B18AC, 0x800, TAG_TILE_64}, - {}, -}; - -static const struct SpritePalette gUnknown_086103F4[] = -{ - {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, - {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, - {gUnknown_0860F17C, TAG_PAL_66}, - {gUnknown_0861039C, TAG_PAL_67}, - {}, -}; - -u8 static (* const sSelect_MenuOptionFuncs[])(void) = -{ - [MENU_SUMMARY] = Select_OptionSummary, - [MENU_RENT] /*Or Deselect*/ = Select_OptionRentDeselect, - [MENU_OTHERS] = Select_OptionOthers -}; - -static const struct BgTemplate sSelect_BgTemplates[] = -{ - { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 24, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 1, - .mapBaseIndex = 25, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 2, - .mapBaseIndex = 27, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, -}; - -static const struct WindowTemplate sSelect_WindowTemplates[] = -{ - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 2, - .width = 12, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x0001, - }, - { - .bg = 0, - .tilemapLeft = 19, - .tilemapTop = 2, - .width = 11, - .height = 2, - .paletteNum = 14, - .baseBlock = 0x0019, - }, - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 15, - .width = 20, - .height = 3, - .paletteNum = 15, - .baseBlock = 0x002f, - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 14, - .width = 8, - .height = 6, - .paletteNum = 15, - .baseBlock = 0x006b, - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 14, - .width = 8, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x009b, - }, - { - .bg = 0, - .tilemapLeft = 15, - .tilemapTop = 0, - .width = 15, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x00bb, - }, - DUMMY_WIN_TEMPLATE, -}; - -static const u16 gUnknown_0861046C[] = INCBIN_U16("graphics/unknown/unknown_61046C.gbapal"); - -static const u8 gUnknown_08610476[] = {0x00, 0x02, 0x00}; -static const u8 gUnknown_08610479[] = {0x00, 0x04, 0x00}; - -static const struct OamData gUnknown_0861047C = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct OamData gUnknown_08610484 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct OamData gUnknown_0861048C = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct OamData gUnknown_08610494 = -{ - .y = 0, - .affineMode = 3, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 1, -}; - -static const union AnimCmd gUnknown_0861049C[] = -{ - ANIMCMD_FRAME(0, 1), - ANIMCMD_END, -}; +static const u8 sRequiredMoveCounts[] = {3, 3, 3, 2, 2, 2, 2}; -static const union AnimCmd gUnknown_086104A4[] = +static const u16 sMoves_TotalPreparation[] = { - ANIMCMD_FRAME(0, 1), - ANIMCMD_END, + MOVE_SWORDS_DANCE, MOVE_GROWTH, MOVE_MEDITATE, MOVE_AGILITY, MOVE_DOUBLE_TEAM, MOVE_HARDEN, + MOVE_MINIMIZE, MOVE_WITHDRAW, MOVE_DEFENSE_CURL, MOVE_BARRIER, MOVE_FOCUS_ENERGY, MOVE_AMNESIA, + MOVE_ACID_ARMOR, MOVE_SHARPEN, MOVE_CONVERSION, MOVE_CONVERSION_2, MOVE_BELLY_DRUM, MOVE_PSYCH_UP, + MOVE_CHARGE, MOVE_SNATCH, MOVE_TAIL_GLOW, MOVE_COSMIC_POWER, MOVE_IRON_DEFENSE, MOVE_HOWL, MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DRAGON_DANCE, + 0 }; -static const union AnimCmd gUnknown_086104AC[] = +static const u16 sMoves_ImpossibleToPredict[] = { - ANIMCMD_FRAME(0, 30), - ANIMCMD_END, + MOVE_MIMIC, MOVE_METRONOME, MOVE_MIRROR_MOVE, MOVE_TRANSFORM, MOVE_SUBSTITUTE, MOVE_SKETCH, MOVE_CURSE, + MOVE_PRESENT, MOVE_FOLLOW_ME, MOVE_TRICK, MOVE_ROLE_PLAY, MOVE_ASSIST, MOVE_SKILL_SWAP, MOVE_CAMOUFLAGE, + 0 }; -static const union AnimCmd gUnknown_086104B4[] = +static const u16 sMoves_WeakeningTheFoe[] = { - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(0, 32), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, + MOVE_SAND_ATTACK, MOVE_TAIL_WHIP, MOVE_LEER, MOVE_GROWL, MOVE_STRING_SHOT, MOVE_SCREECH, MOVE_SMOKESCREEN, MOVE_KINESIS, + MOVE_FLASH, MOVE_COTTON_SPORE, MOVE_SPITE, MOVE_SCARY_FACE, MOVE_CHARM, MOVE_KNOCK_OFF, MOVE_SWEET_SCENT, MOVE_FEATHER_DANCE, + MOVE_FAKE_TEARS, MOVE_METAL_SOUND, MOVE_TICKLE, + 0 }; -static const union AnimCmd * const gUnknown_086104FC[] = +static const u16 sMoves_HighRiskHighReturn[] = { - gUnknown_0861049C, + MOVE_GUILLOTINE, MOVE_HORN_DRILL, MOVE_DOUBLE_EDGE, MOVE_HYPER_BEAM, MOVE_COUNTER, MOVE_FISSURE, + MOVE_BIDE, MOVE_SELF_DESTRUCT, MOVE_SKY_ATTACK, MOVE_EXPLOSION, MOVE_FLAIL, MOVE_REVERSAL, MOVE_DESTINY_BOND, + MOVE_PERISH_SONG, MOVE_PAIN_SPLIT, MOVE_MIRROR_COAT, MOVE_MEMENTO, MOVE_GRUDGE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_BLAST_BURN, MOVE_HYDRO_CANNON, MOVE_OVERHEAT, MOVE_FRENZY_PLANT, MOVE_PSYCHO_BOOST, MOVE_VOLT_TACKLE, + 0 }; -static const union AnimCmd * const gUnknown_08610500[] = +static const u16 sMoves_Endurance[] = { - gUnknown_086104A4, + MOVE_MIST, MOVE_RECOVER, MOVE_LIGHT_SCREEN, MOVE_HAZE, MOVE_REFLECT, MOVE_SOFT_BOILED, MOVE_REST, MOVE_PROTECT, + MOVE_DETECT, MOVE_ENDURE, MOVE_MILK_DRINK, MOVE_HEAL_BELL, MOVE_SAFEGUARD, MOVE_BATON_PASS, MOVE_MORNING_SUN, + MOVE_SYNTHESIS, MOVE_MOONLIGHT, MOVE_SWALLOW, MOVE_WISH, MOVE_INGRAIN, MOVE_MAGIC_COAT, MOVE_RECYCLE, MOVE_REFRESH, + MOVE_MUD_SPORT, MOVE_SLACK_OFF, MOVE_AROMATHERAPY, MOVE_WATER_SPORT, + 0 }; -static const union AnimCmd * const gUnknown_08610504[] = +static const u16 sMoves_SlowAndSteady[] = { - gUnknown_086104AC, - gUnknown_086104B4, + MOVE_SING, MOVE_SUPERSONIC, MOVE_DISABLE, MOVE_LEECH_SEED, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_HYPNOSIS, MOVE_CONFUSE_RAY, MOVE_GLARE, MOVE_POISON_GAS, MOVE_LOVELY_KISS, MOVE_SPORE, + MOVE_SPIDER_WEB, MOVE_SWEET_KISS, MOVE_SPIKES, MOVE_SWAGGER, MOVE_MEAN_LOOK, MOVE_ATTRACT, MOVE_ENCORE, MOVE_TORMENT, + MOVE_FLATTER, MOVE_WILL_O_WISP, MOVE_TAUNT, MOVE_YAWN, MOVE_IMPRISON, MOVE_SNATCH, MOVE_TEETER_DANCE, MOVE_GRASS_WHISTLE, MOVE_BLOCK, + 0 }; -static const union AffineAnimCmd gUnknown_0861050C[] = +static const u16 sMoves_DependsOnTheBattlesFlow[] = { - AFFINEANIMCMD_FRAME(5, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(16, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(32, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(64, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(128, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(256, 5, 0, 0), - AFFINEANIMCMD_END, + MOVE_SANDSTORM, MOVE_RAIN_DANCE, MOVE_SUNNY_DAY, MOVE_HAIL, MOVE_WEATHER_BALL, + 0 }; -static const union AffineAnimCmd gUnknown_0861056C[] = +static const u16 *const sMoveStyles[] = { - AFFINEANIMCMD_FRAME(128, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(64, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(32, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(16, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(5, 5, 0, 0), - AFFINEANIMCMD_END, + sMoves_TotalPreparation, + sMoves_SlowAndSteady, + sMoves_Endurance, + sMoves_HighRiskHighReturn, + sMoves_WeakeningTheFoe, + sMoves_ImpossibleToPredict, + sMoves_DependsOnTheBattlesFlow, }; -static const union AffineAnimCmd gUnknown_086105BC[] = +static void (* const gUnknown_08612120[])(void) = { - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_END, + sub_81A5E94, + sub_81A5FA8, + sub_81A6054, + sub_81A613C, + nullsub_75, + nullsub_123, + sub_81A6188, + sub_81A6198, + sub_81A61A4, + sub_81A63CC, + sub_81A64C4, + sub_81A63B8, + sub_81A61B0, + sub_81A67EC, + sub_81A6A08, + sub_81A6AEC, + sub_81A6C1C, }; -static const union AffineAnimCmd * const gUnknown_086105CC[] = +static const u32 gUnknown_08612164[][2] = { - gUnknown_0861050C, - gUnknown_0861056C, - gUnknown_086105BC, + {0x100, 0x200}, + {0x1000000, 0x2000000}, }; -static const struct SpriteTemplate gUnknown_086105D8 = +static const u32 gUnknown_08612174[][2] = { - .tileTag = TAG_TILE_64, - .paletteTag = TAG_PAL_BALL_GREY, - .oam = &gUnknown_0861047C, - .anims = gUnknown_08610504, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_819A44C + {0xfffffeff, 0xfffffdff}, + {0xfeffffff, 0xfdffffff}, }; -static const struct SpriteTemplate gUnknown_086105F0 = +static const u8 sFixedIVTable[][2] = { - .tileTag = TAG_TILE_65, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_08610484, - .anims = gUnknown_086104FC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy + {3, 6}, + {6, 9}, + {9, 12}, + {12, 15}, + {15, 18}, + {21, 31}, + {31, 31}, + {31, 31}, }; -static const struct SpriteTemplate gUnknown_08610608 = +static const u16 sMonsToChooseFrom[][2] = { - .tileTag = TAG_TILE_66, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_0861048C, - .anims = gUnknown_086104FC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy + {0x006e, 0x00c7}, + {0x00a2, 0x010a}, + {0x010b, 0x0173}, + {0x0174, 0x01d3}, + {0x01d4, 0x0233}, + {0x0234, 0x0293}, + {0x0294, 0x02f3}, + {0x0174, 0x0351}, + {0x0174, 0x01d3}, + {0x01d4, 0x0233}, + {0x0234, 0x0293}, + {0x0294, 0x02f3}, + {0x0174, 0x0371}, + {0x0174, 0x0371}, + {0x0174, 0x0371}, + {0x0174, 0x0371}, }; -static const struct SpriteTemplate gUnknown_08610620 = -{ - .tileTag = TAG_TILE_67, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_0861048C, - .anims = gUnknown_086104FC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -static const struct SpriteTemplate gUnknown_08610638 = -{ - .tileTag = TAG_TILE_6D, - .paletteTag = TAG_PAL_67, - .oam = &gUnknown_08610494, - .anims = gUnknown_08610500, - .images = NULL, - .affineAnims = gUnknown_086105CC, - .callback = SpriteCallbackDummy -}; - -static const struct SpriteSheet gUnknown_08610650[] = -{ - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, - {gUnknown_0860F63C, sizeof(gUnknown_0860F63C), TAG_TILE_68}, - {gUnknown_0860F6BC, sizeof(gUnknown_0860F6BC), TAG_TILE_69}, - {gUnknown_0860F7BC, 0x100, TAG_TILE_6A}, - {gUnknown_0860F83C, sizeof(gUnknown_0860F83C), TAG_TILE_6B}, - {gUnknown_0860F93C, sizeof(gUnknown_0860F93C), TAG_TILE_6C}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, - {}, -}; - -static const struct CompressedSpriteSheet gUnknown_086106A0[] = -{ - {gUnknown_085B18AC, 0x800, TAG_TILE_64}, - {}, -}; - -static const struct SpritePalette gUnknown_086106B0[] = -{ - {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, - {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, - {gUnknown_0860F17C, TAG_PAL_66}, - {gUnknown_0861039C, TAG_PAL_67}, - {}, -}; - -static const struct OamData gUnknown_086106D8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct OamData gUnknown_086106E0 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct OamData gUnknown_086106E8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct OamData gUnknown_086106F0 = -{ - .y = 0, - .affineMode = 3, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 1, -}; - -static const union AnimCmd gUnknown_086106F8[] = -{ - ANIMCMD_FRAME(0, 1), - ANIMCMD_END, -}; - -static const union AnimCmd gUnknown_08610700[] = -{ - ANIMCMD_FRAME(0, 1), - ANIMCMD_END, -}; - -static const union AnimCmd gUnknown_08610708[] = -{ - ANIMCMD_FRAME(0, 30), - ANIMCMD_END, -}; - -static const union AnimCmd gUnknown_08610710[] = -{ - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(0, 32), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; - -static const union AnimCmd * const gUnknown_08610758[] = -{ - gUnknown_086106F8, -}; - -static const union AnimCmd * const gUnknown_0861075C[] = -{ - gUnknown_08610700, -}; - -static const union AnimCmd * const gUnknown_08610760[] = -{ - gUnknown_08610708, - gUnknown_08610710, -}; - -static const union AffineAnimCmd gUnknown_08610768[] = -{ - AFFINEANIMCMD_FRAME(5, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(16, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(32, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(64, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(128, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(256, 5, 0, 0), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd gUnknown_086107C8[] = -{ - AFFINEANIMCMD_FRAME(128, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(64, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(32, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(16, 5, 0, 0), - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_FRAME(5, 5, 0, 0), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd gUnknown_08610818[] = -{ - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd * const gUnknown_08610828[] = -{ - gUnknown_08610768, - gUnknown_086107C8, - gUnknown_08610818, -}; - -static const struct SpriteTemplate gUnknown_08610834 = -{ - .tileTag = TAG_TILE_64, - .paletteTag = TAG_PAL_BALL_GREY, - .oam = &gUnknown_086106D8, - .anims = gUnknown_08610760, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_819A44C -}; - -static const struct SpriteTemplate gUnknown_0861084C = -{ - .tileTag = TAG_TILE_65, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E0, - .anims = gUnknown_08610758, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -static const struct SpriteTemplate gUnknown_08610864 = -{ - .tileTag = TAG_TILE_66, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E8, - .anims = gUnknown_08610758, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -static const struct SpriteTemplate gUnknown_0861087C = -{ - .tileTag = TAG_TILE_67, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E8, - .anims = gUnknown_08610758, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -static const struct SpriteTemplate gUnknown_08610894 = -{ - .tileTag = TAG_TILE_6D, - .paletteTag = TAG_PAL_67, - .oam = &gUnknown_086106F0, - .anims = gUnknown_0861075C, - .images = NULL, - .affineAnims = gUnknown_08610828, - .callback = SpriteCallbackDummy -}; - -void static (* const sSwap_MenuOptionFuncs[])(u8 taskId) = -{ - sub_819F114, - sub_819F0CC, - sub_819F134, -}; - -static const struct BgTemplate sSwap_BgTemplates[4] = -{ - { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 24, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 1, - .mapBaseIndex = 25, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 2, - .mapBaseIndex = 26, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 2, - .mapBaseIndex = 27, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, -}; - -static const struct WindowTemplate sSwap_WindowTemplates[] = -{ - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 2, - .width = 12, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x0001, - }, - { - .bg = 2, - .tilemapLeft = 19, - .tilemapTop = 2, - .width = 11, - .height = 2, - .paletteNum = 14, - .baseBlock = 0x0019, - }, - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 15, - .width = 20, - .height = 3, - .paletteNum = 15, - .baseBlock = 0x002f, - }, - { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 14, - .width = 9, - .height = 6, - .paletteNum = 15, - .baseBlock = 0x006b, - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 14, - .width = 8, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x00a1, - }, - { - .bg = 2, - .tilemapLeft = 21, - .tilemapTop = 15, - .width = 9, - .height = 5, - .paletteNum = 14, - .baseBlock = 0x006b, - }, - { - .bg = 2, - .tilemapLeft = 10, - .tilemapTop = 2, - .width = 4, - .height = 2, - .paletteNum = 14, - .baseBlock = 0x00c1, - }, - { - .bg = 0, - .tilemapLeft = 19, - .tilemapTop = 2, - .width = 11, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x00c9, - }, - { - .bg = 0, - .tilemapLeft = 15, - .tilemapTop = 0, - .width = 15, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x00df, - }, - DUMMY_WIN_TEMPLATE, -}; - -static const u16 gUnknown_08610918[] = {RGB_BLACK, RGB_BLACK, RGB_WHITE, RGB_BLACK, RGB_RED}; // Palette. -static const u8 gUnknown_08610922[] = {0x0, 0x02, 0x0}; -static const u8 gUnknown_08610925[] = {0x0, 0x04, 0x0}; - -static const struct SwapActionIdAndFunc sSwap_PlayerScreenActions[] = +// code +void CallBattleFactoryFunction(void) { - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {3, Swap_ActionCancel}, -}; + gUnknown_08612120[gSpecialVar_0x8004](); +} -static const struct SwapActionIdAndFunc sSwap_EnemyScreenActions[] = +static void sub_81A5E94(void) { - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {2, Swap_ActionPkmnForSwap}, - {3, Swap_ActionCancel}, -}; - -// gfx -extern const u8 gFrontierFactorySelectMenu_Gfx[]; -extern const u8 gFrontierFactorySelectMenu_Tilemap[]; -extern const u16 gFrontierFactorySelectMenu_Pal[]; - -// text -extern const u8 gText_RentalPkmn2[]; -extern const u8 gText_SelectFirstPkmn[]; -extern const u8 gText_SelectSecondPkmn[]; -extern const u8 gText_SelectThirdPkmn[]; -extern const u8 gText_TheseThreePkmnOkay[]; -extern const u8 gText_CantSelectSamePkmn[]; -extern const u8 gText_Summary[]; -extern const u8 gText_Rechoose[]; -extern const u8 gText_Deselect[]; -extern const u8 gText_Rent[]; -extern const u8 gText_Others2[]; -extern const u8 gText_Yes2[]; -extern const u8 gText_Yes3[]; -extern const u8 gText_No2[]; -extern const u8 gText_No3[]; -extern const u8 gText_QuitSwapping[]; -extern const u8 gText_AcceptThisPkmn[]; -extern const u8 gText_SelectPkmnToAccept[]; -extern const u8 gText_SelectPkmnToSwap[]; -extern const u8 gText_PkmnSwap[]; -extern const u8 gText_Swap[]; -extern const u8 gText_Summary2[]; -extern const u8 gText_PkmnForSwap[]; -extern const u8 gText_SamePkmnInPartyAlready[]; -extern const u8 gText_Cancel3[]; + u8 i; + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); -// code -static void sub_819A44C(struct Sprite *sprite) -{ - if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode])) { - if (sprite->animEnded) - { - if (sprite->data[0] != 0) - { - sprite->data[0]--; - } - else if (Random() % 5 == 0) - { - StartSpriteAnim(sprite, 0); - sprite->data[0] = 32; - } - else - { - StartSpriteAnim(sprite, 1); - } - } - else - { - StartSpriteAnimIfDifferent(sprite, 1); - } - } - else - { - StartSpriteAnimIfDifferent(sprite, 0); + gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = 0; } -} -static void Select_CB2(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTextPrinters(); - UpdatePaletteFade(); - RunTasks(); -} - -static void Select_VblankCb(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} + gUnknown_03001288 = FALSE; + for (i = 0; i < 6; i++) + gSaveBlock2Ptr->frontier.field_E70[i].monId |= 0xFFFF; + for (i = 0; i < 3; i++) + gUnknown_03006298[i] |= 0xFFFF; -void DoBattleFactorySelectScreen(void) -{ - sFactorySelectScreen = NULL; - SetMainCallback2(CB2_InitSelectScreen); + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; } -static void CB2_InitSelectScreen(void) +static void sub_81A5FA8(void) { - u8 taskId; + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - switch (gMain.state) + switch (gSpecialVar_0x8005) { - case 0: - if (sFactorySelectMons != NULL) - FREE_AND_SET_NULL(sFactorySelectMons); - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sSelect_BgTemplates, ARRAY_COUNT(sSelect_BgTemplates)); - InitWindows(sSelect_WindowTemplates); - DeactivateAllTextPrinters(); - gMain.state++; - break; case 1: - sSelectMenuTilesetBuffer = Alloc(0x440); - sSelectMonCardBgTilesetBuffer = AllocZeroed(0x440); - sSelectMenuTilemapBuffer = Alloc(0x800); - sSelectMonCardBgTilemapBuffer = AllocZeroed(0x800); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN1H, 0); - SetGpuReg(REG_OFFSET_WIN1V, 0); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0); - gMain.state++; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; break; case 2: - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - FreeAllSpritePalettes(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSelectMenuTilesetBuffer, 0x440); - CpuCopy16(gUnknown_0861033C, sSelectMonCardBgTilesetBuffer, 0x60); - LoadBgTiles(1, sSelectMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSelectMonCardBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, 0x800); - LoadBgTilemap(1, sSelectMenuTilemapBuffer, 0x800, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_0861046C, 0xF0, 8); - LoadPalette(gUnknown_0861046C, 0xE0, 10); - if (sFactorySelectScreen->fromSummaryScreen == TRUE) - gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; - LoadPalette(gUnknown_0861039C, 0x20, 4); - gMain.state++; + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode]) != 0); break; case 3: - SetBgTilemapBuffer(3, sSelectMonCardBgTilemapBuffer); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); - CopyBgTilemapBufferToVram(3); - gMain.state++; - break; - case 4: - LoadSpritePalettes(gUnknown_086103F4); - LoadSpriteSheets(gUnknown_086103BC); - LoadCompressedObjectPic(gUnknown_086103E4); - ShowBg(0); - ShowBg(1); - SetVBlankCallback(Select_VblankCb); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); - if (sFactorySelectScreen->fromSummaryScreen == TRUE) - { - Select_SetWinRegs(88, 152, 32, 96); - ShowBg(3); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - } - else - { - HideBg(3); - } - gMain.state++; - break; - case 5: - if (sFactorySelectScreen->fromSummaryScreen == TRUE) - sFactorySelectScreen->cursorPos = gUnknown_0203CF20; - Select_InitMonsData(); - Select_InitAllSprites(); - if (sFactorySelectScreen->fromSummaryScreen == TRUE) - Select_ShowSummaryMonSprite(); - gMain.state++; - break; - case 6: - Select_PrintSelectMonString(); - PutWindowTilemap(2); - gMain.state++; - break; - case 7: - Select_PrintMonCategory(); - PutWindowTilemap(5); - gMain.state++; - break; - case 8: - Select_PrintMonSpecies(); - PutWindowTilemap(1); - gMain.state++; - break; - case 9: - Select_PrintRentalPkmnString(); - PutWindowTilemap(0); - gMain.state++; - break; - case 10: - sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Task_SelectFadeSpeciesName, 0); - if (!sFactorySelectScreen->fromSummaryScreen) - { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 0; - taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); - gTasks[taskId].data[0] = 0; - } - else - { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 1; - sFactorySelectScreen->unk2A2 = FALSE; - taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); - gTasks[taskId].data[0] = 13; - } - SetMainCallback2(Select_CB2); + gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; break; } } -static void Select_InitMonsData(void) -{ - u8 i; - - if (sFactorySelectScreen != NULL) - return; - - sFactorySelectScreen = AllocZeroed(sizeof(*sFactorySelectScreen)); - sFactorySelectScreen->cursorPos = 0; - sFactorySelectScreen->selectingMonsState = 1; - sFactorySelectScreen->fromSummaryScreen = FALSE; - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - sFactorySelectScreen->mons[i].selectedId = 0; - - if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) - CreateFrontierFactorySelectableMons(0); - else - CreateTentFactorySelectableMons(0); -} - -static void Select_InitAllSprites(void) -{ - u8 i, cursorPos; - s16 x; - - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - { - sFactorySelectScreen->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); - gSprites[sFactorySelectScreen->mons[i].spriteId].data[0] = 0; - Select_SetBallSpritePaletteNum(i); - } - cursorPos = sFactorySelectScreen->cursorPos; - x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; - sFactorySelectScreen->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); - sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); - sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->menuCursor1SpriteId].centerToCornerVecY = 0; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].centerToCornerVecY = 0; -} - -static void Select_DestroyAllSprites(void) -{ - u8 i; - - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - DestroySprite(&gSprites[sFactorySelectScreen->mons[i].spriteId]); - - DestroySprite(&gSprites[sFactorySelectScreen->cursorSpriteId]); - DestroySprite(&gSprites[sFactorySelectScreen->menuCursor1SpriteId]); - DestroySprite(&gSprites[sFactorySelectScreen->menuCursor2SpriteId]); -} - -static void Select_UpdateBallCursorPosition(s8 direction) -{ - u8 cursorPos; - if (direction > 0) // Move cursor right. - { - if (sFactorySelectScreen->cursorPos != SELECTABLE_MONS_COUNT - 1) - sFactorySelectScreen->cursorPos++; - else - sFactorySelectScreen->cursorPos = 0; - } - else // Move cursor left. - { - if (sFactorySelectScreen->cursorPos != 0) - sFactorySelectScreen->cursorPos--; - else - sFactorySelectScreen->cursorPos = SELECTABLE_MONS_COUNT - 1; - } - - cursorPos = sFactorySelectScreen->cursorPos; - gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; -} - -static void Select_UpdateMenuCursorPosition(s8 direction) -{ - if (direction > 0) // Move cursor down. - { - if (sFactorySelectScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) - sFactorySelectScreen->menuCursorPos++; - else - sFactorySelectScreen->menuCursorPos = 0; - } - else // Move cursor up. - { - if (sFactorySelectScreen->menuCursorPos != 0) - sFactorySelectScreen->menuCursorPos--; - else - sFactorySelectScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; - } - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; -} - -static void Select_UpdateYesNoCursorPosition(s8 direction) -{ - if (direction > 0) // Move cursor down. - { - if (sFactorySelectScreen->yesNoCursorPos != 1) - sFactorySelectScreen->yesNoCursorPos++; - else - sFactorySelectScreen->yesNoCursorPos = 0; - } - else // Move cursor up. - { - if (sFactorySelectScreen->yesNoCursorPos != 0) - sFactorySelectScreen->yesNoCursorPos--; - else - sFactorySelectScreen->yesNoCursorPos = 1; - } - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->yesNoCursorPos * 16) + 112; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->yesNoCursorPos * 16) + 112; -} - -static void Select_HandleMonSelectionChange(void) -{ - u8 i, paletteNum; - u8 cursorPos = sFactorySelectScreen->cursorPos; - if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. - { - paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1) - { - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - { - if (sFactorySelectScreen->mons[i].selectedId == 2) - break; - } - if (i == SELECTABLE_MONS_COUNT) - return; - else - sFactorySelectScreen->mons[i].selectedId = 1; - } - sFactorySelectScreen->mons[cursorPos].selectedId = 0; - sFactorySelectScreen->selectingMonsState--; - } - else // Select a mon. - { - paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); - sFactorySelectScreen->mons[cursorPos].selectedId = sFactorySelectScreen->selectingMonsState; - sFactorySelectScreen->selectingMonsState++; - } - - gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; -} - -static void Select_SetBallSpritePaletteNum(u8 id) -{ - u8 palNum; - - if (sFactorySelectScreen->mons[id].selectedId) - palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); - else - palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - - gSprites[sFactorySelectScreen->mons[id].spriteId].oam.paletteNum = palNum; -} - -static void Task_FromSelectScreenToSummaryScreen(u8 taskId) +static void sub_81A6054(void) { - u8 i; - u8 currMonId; + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - switch (gTasks[taskId].data[0]) + switch (gSpecialVar_0x8005) { - case 6: - gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 7; - break; - case 7: - if (!gPaletteFade.active) - { - DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); - sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); - Select_DestroyAllSprites(); - FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilesetBuffer); - FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); - FreeAllWindowBuffers(); - gTasks[taskId].data[0] = 8; - } - break; - case 8: - sFactorySelectScreen->unk2A4 = gPlttBufferUnfaded[228]; - DestroyTask(taskId); - sFactorySelectScreen->fromSummaryScreen = TRUE; - currMonId = sFactorySelectScreen->cursorPos; - sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT); - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - sFactorySelectMons[i] = sFactorySelectScreen->mons[i].monData; - ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); + case 1: + gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; break; - } -} - -static void Task_CloseSelectionScreen(u8 taskId) -{ - if (sFactorySelectScreen->unk2A0 != TRUE) - { - switch (gTasks[taskId].data[0]) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0]++; - break; - case 1: - if (!UpdatePaletteFade()) - { - Select_CopyMonsToPlayerParty(); - DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); - Select_DestroyAllSprites(); - FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); - FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); - FREE_AND_SET_NULL(sFactorySelectScreen); - FreeAllWindowBuffers(); - SetMainCallback2(CB2_ReturnToFieldContinueScript); - DestroyTask(taskId); - } - break; - } - } -} - -static void Task_HandleSelectionScreenYesNo(u8 taskId) -{ - if (sFactorySelectScreen->unk2A0 != TRUE) - { - switch (gTasks[taskId].data[0]) - { - case 10: - sub_819C4B4(); - gTasks[taskId].data[0] = 4; - break; - case 4: - Select_ShowYesNoOptions(); - gTasks[taskId].data[0] = 5; - break; - case 5: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (sFactorySelectScreen->yesNoCursorPos == 0) - { - sub_819C568(); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSelectionScreen; - } - else - { - sub_819B958(4); - sub_819BC9C(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_819B958(4); - sub_819BC9C(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } - else if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - Select_UpdateYesNoCursorPosition(-1); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - Select_UpdateYesNoCursorPosition(1); - } - break; - } - } -} - -static void Task_HandleSelectionScreenMenu(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { case 2: - if (!sFactorySelectScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, FALSE); - gTasks[taskId].data[0] = 9; - break; - case 9: - if (sFactorySelectScreen->unk2A0 != TRUE) - { - Select_ShowMenuOptions(); - sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].data[0] = 3; - } + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_08612164[battleMode][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_08612174[battleMode][lvlMode]; break; case 3: - if (gMain.newKeys & A_BUTTON) + if (gUnknown_03001288 == TRUE) { - u8 retVal; - PlaySE(SE_SELECT); - retVal = Select_RunMenuOptionFunc(); - if (retVal == 1) - { - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } - else if (retVal == 2) - { - gTasks[taskId].data[0] = 10; - gTasks[taskId].func = Task_HandleSelectionScreenYesNo; - } - else if (retVal == 3) - { - gTasks[taskId].data[0] = 11; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } - else - { - gTasks[taskId].data[0] = 6; - gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - sub_819B958(3); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } - else if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - Select_UpdateMenuCursorPosition(-1); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - Select_UpdateMenuCursorPosition(1); + gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = gSpecialVar_0x8006; + gUnknown_03001288 = FALSE; } break; - case 12: - if (!gPaletteFade.active) - { - if (sFactorySelectScreen->fromSummaryScreen == TRUE) - { - gPlttBufferFaded[228] = sFactorySelectScreen->unk2A4; - gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; - } - sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].data[0] = 3; - } - break; - case 13: - Select_ShowMenuOptions(); - gTasks[taskId].data[0] = 12; - break; } } -static void Task_HandleSelectionScreenChooseMons(u8 taskId) +static void sub_81A613C(void) { - if (sFactorySelectScreen->unk2A0 != TRUE) - { - switch (gTasks[taskId].data[0]) - { - case 0: - if (!gPaletteFade.active) - { - gTasks[taskId].data[0] = 1; - sFactorySelectScreen->unk2A2 = TRUE; - } - break; - case 1: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sFactorySelectScreen->unk2A2 = FALSE; - gTasks[taskId].data[0] = 2; - gTasks[taskId].func = Task_HandleSelectionScreenMenu; - } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) - { - PlaySE(SE_SELECT); - Select_UpdateBallCursorPosition(-1); - Select_PrintMonCategory(); - Select_PrintMonSpecies(); - } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - { - PlaySE(SE_SELECT); - Select_UpdateBallCursorPosition(1); - Select_PrintMonCategory(); - Select_PrintMonSpecies(); - } - break; - case 11: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - Select_PrintSelectMonString(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - } - break; - } - } + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + sub_81A4C30(); } -static void CreateFrontierFactorySelectableMons(u8 firstMonId) +static void nullsub_75(void) { - u8 i, j = 0; - u8 ivs = 0; - u8 level = 0; - u8 happiness = 0; - u32 otId = 0; - u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u8 var_2C = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; - u8 var_28 = 0; - - gFacilityTrainerMons = gBattleFrontierMons; - if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - level = 100; - else - level = 50; - var_28 = sub_81A6F70(battleMode, lvlMode); - otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); - - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - { - u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; - sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; - if (i < var_28) - ivs = sub_81A6CA8(var_2C + 1, 0); - else - ivs = sub_81A6CA8(var_2C, 0); - CreateMonWithEVSpreadPersonalityOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, - gFacilityTrainerMons[monSetId].species, - level, - gFacilityTrainerMons[monSetId].nature, - ivs, - gFacilityTrainerMons[monSetId].evSpread, - otId); - happiness = 0; - for (j = 0; j < 4; j++) - SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); - } } -static void CreateTentFactorySelectableMons(u8 firstMonId) +static void nullsub_123(void) { - u8 i, j; - u8 ivs = 0; - u8 level = 30; - u8 happiness = 0; - u32 otId = 0; - gFacilityTrainerMons = gSlateportBattleTentMons; - otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); - - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - { - u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; - sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; - CreateMonWithEVSpreadPersonalityOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, - gFacilityTrainerMons[monSetId].species, - level, - gFacilityTrainerMons[monSetId].nature, - ivs, - gFacilityTrainerMons[monSetId].evSpread, - otId); - happiness = 0; - for (j = 0; j < 4; j++) - SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); - } } -static void Select_CopyMonsToPlayerParty(void) +static void sub_81A6188(void) { - u8 i, j; - - for (i = 0; i < 3; i++) - { - for (j = 0; j < SELECTABLE_MONS_COUNT; j++) - { - if (sFactorySelectScreen->mons[j].selectedId == i + 1) - { - gPlayerParty[i] = sFactorySelectScreen->mons[j].monData; - gSaveBlock2Ptr->frontier.field_E70[i].monId = sFactorySelectScreen->mons[j].monSetId; - gSaveBlock2Ptr->frontier.field_E70[i].personality = GetMonData(&gPlayerParty[i].box, MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.field_E70[i].abilityBit = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ALT_ABILITY, NULL); - gSaveBlock2Ptr->frontier.field_E70[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL); - break; - } - } - } - CalculatePlayerPartyCount(); + ZeroPlayerPartyMons(); + DoBattleFactorySelectScreen(); } -static void Select_ShowMenuOptions(void) +static void sub_81A6198(void) { - if (!sFactorySelectScreen->fromSummaryScreen) - sFactorySelectScreen->menuCursorPos = 0; - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.x = 176; - gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.x = 208; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = FALSE; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = FALSE; - - Select_PrintMenuOptions(); -} - -static void Select_ShowYesNoOptions(void) -{ - sFactorySelectScreen->yesNoCursorPos = 0; - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.x = 176; - gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = 112; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.x = 208; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = 112; - - gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = FALSE; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = FALSE; - - Select_PrintYesNoOptions(); -} - -static void sub_819B958(u8 windowId) -{ - gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; - gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; - FillWindowPixelBuffer(windowId, 0); - CopyWindowToVram(windowId, 2); - ClearWindowTilemap(windowId); -} - -static void Select_PrintRentalPkmnString(void) -{ - FillWindowPixelBuffer(0, 0); - AddTextPrinterParameterized(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); - CopyWindowToVram(0, 3); -} - -static void Select_PrintMonSpecies(void) -{ - u16 species; - u8 x; - u8 monId = sFactorySelectScreen->cursorPos; - - FillWindowPixelBuffer(1, 0); - species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); - StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610479, 0, gStringVar4); - CopyWindowToVram(1, 2); -} - -static void Select_PrintSelectMonString(void) -{ - const u8 *str = NULL; - - FillWindowPixelBuffer(2, 0); - if (sFactorySelectScreen->selectingMonsState == 1) - str = gText_SelectFirstPkmn; - else if (sFactorySelectScreen->selectingMonsState == 2) - str = gText_SelectSecondPkmn; - else if (sFactorySelectScreen->selectingMonsState == 3) - str = gText_SelectThirdPkmn; - else - str = gText_TheseThreePkmnOkay; - - AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); -} - -static void Select_PrintCantSelectSameMon(void) -{ - FillWindowPixelBuffer(2, 0); - AddTextPrinterParameterized(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + DoBattleFactorySwapScreen(); } -static void Select_PrintMenuOptions(void) +static void sub_81A61A4(void) { - u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; - - PutWindowTilemap(3); - FillWindowPixelBuffer(3, 0); - AddTextPrinterParameterized3(3, 1, 7, 1, gUnknown_08610476, 0, gText_Summary); - if (selectedId != 0) - AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Deselect); - else - AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Rent); - - AddTextPrinterParameterized3(3, 1, 7, 33, gUnknown_08610476, 0, gText_Others2); - CopyWindowToVram(3, 3); + gUnknown_03001288 = TRUE; } -static void Select_PrintYesNoOptions(void) +static void sub_81A61B0(void) { - PutWindowTilemap(4); - FillWindowPixelBuffer(4, 0); - AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610476, 0, gText_Yes2); - AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610476, 0, gText_No2); - CopyWindowToVram(4, 3); -} + s32 i, j, k; + u16 species[3]; + u16 heldItems[3]; + s32 firstMonId = 0; + u16 trainerId = 0; + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u32 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; + u32 challengeNum = winStreak / 7; + gFacilityTrainers = gBattleFrontierTrainers; -static u8 Select_RunMenuOptionFunc(void) -{ - gUnknown_030062E8 = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; - return gUnknown_030062E8(); -} - -static u8 Select_OptionRentDeselect(void) -{ - u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; - u16 monSetId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monSetId; - if (selectedId == 0 && !Select_AreSpeciesValid(monSetId)) + do { - Select_PrintCantSelectSameMon(); - sub_819B958(3); - return 3; - } - else - { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - Select_HandleMonSelectionChange(); - Select_PrintSelectMonString(); - sub_819B958(3); - if (sFactorySelectScreen->selectingMonsState > 3) - return 2; - else - return 1; - } -} - -static u8 sub_819BC9C(void) -{ - sub_819C568(); - Select_HandleMonSelectionChange(); - Select_PrintSelectMonString(); - sub_819B958(3); - if (sFactorySelectScreen->selectingMonsState > 3) - return 2; - else - return 1; -} - -static u8 Select_OptionSummary(void) -{ - return 0; -} - -static u8 Select_OptionOthers(void) -{ - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - sub_819B958(3); - return 1; -} - -static void Select_PrintMonCategory(void) -{ - u16 species; - u8 text[30]; - u8 x; - u8 monId = sFactorySelectScreen->cursorPos; - if (monId < SELECTABLE_MONS_COUNT) - { - PutWindowTilemap(5); - FillWindowPixelBuffer(5, 0); - species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); - CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(5, 1, text, x, 1, 0, NULL); - CopyWindowToVram(5, 2); - } -} - -static void Summary_ShowMonSprite(void) -{ - u8 monId = sFactorySelectScreen->cursorPos; - struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData; - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - - sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; - - sFactorySelectScreen->unk2A0 = FALSE; -} - -static void sub_819BE20(bool8 arg0) -{ - sFactorySelectScreen->unk2A0 = arg0; -} - -static void Select_ShowSummaryMonSprite(void) -{ - struct Pokemon *mon; - u16 species; - u32 personality, otId; - - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 2); - - mon = &sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monData; - species = GetMonData(mon, MON_DATA_SPECIES, NULL); - personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - - sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; - - gSprites[sFactorySelectScreen->unk294[1].field1].invisible = TRUE; -} - -static void Select_ShowChosenMonsSprites(void) -{ - u8 i, j; - - for (i = 0; i < 3; i++) - { - for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + trainerId = sub_8162548(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum); + for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { - if (sFactorySelectScreen->mons[j].selectedId == i + 1) - { - struct Pokemon *mon = &sFactorySelectScreen->mons[j].monData; - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - - sFactorySelectScreen->unk294[i].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecY = 0; + if (gSaveBlock2Ptr->frontier.field_CB4[i] == trainerId) break; - } } - } - sFactorySelectScreen->unk2A0 = FALSE; -} - -static void sub_819C040(struct Sprite *sprite) -{ - u8 taskId; - - if (sprite->affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) - { - sprite->invisible = TRUE; - gSprites[sFactorySelectScreen->unk294[0].field1].invisible = TRUE; - gSprites[sFactorySelectScreen->unk294[2].field1].invisible = TRUE; - - taskId = CreateTask(sub_819C1D0, 1); - gTasks[taskId].func(taskId); - - sprite->callback = SpriteCallbackDummy; - } -} + } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); -static void sub_819C100(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) - { - FreeOamMatrix(sprite->oam.matrixNum); - FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[0].field1].oam.matrixNum); - FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[2].field1].oam.matrixNum); + gTrainerBattleOpponent_A = trainerId; + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) + gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = trainerId; - sFactorySelectScreen->unk2A0 = FALSE; - - DestroySprite(&gSprites[sFactorySelectScreen->unk294[0].field1]); - DestroySprite(&gSprites[sFactorySelectScreen->unk294[2].field1]); - DestroySprite(sprite); - } -} - -static void sub_819C1D0(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + i = 0; + while (i != 3) { - case 0: - task->data[3] = 16; - task->data[24] = 224; // BUG: writing outside the array's bounds. - task->data[5] = 64; - task->data[8] = 65; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - break; - case 1: - ShowBg(3); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - break; - case 2: - task->data[5] -= 4; - task->data[8] += 4; - if (task->data[5] <= 32 || task->data[8] >= 96) - { - task->data[5] = 32; - task->data[8] = 96; - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] != 32) - return; - break; - default: - DestroyTask(taskId); - Select_ShowChosenMonsSprites(); - return; - } - task->data[0]++; -} + u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE); + if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN) + continue; -static void sub_819C2D4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[0]) - { - default: - HideBg(3); - gSprites[sFactorySelectScreen->unk294[1].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C100; - gSprites[sFactorySelectScreen->unk294[0].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->unk294[2].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[0].field1], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[2].field1], 1); - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - DestroyTask(taskId); - break; - case 0: - task->data[3] = 16; - task->data[24] = 224; // BUG: writing outside the array's bounds. - task->data[5] = 32; - task->data[8] = 96; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - task->data[0]++; - break; - case 1: - task->data[5] += 4; - task->data[8] -= 4; - if (task->data[5] >= 64 || task->data[8] <= 65) + for (j = 0; j < 6; j++) { - task->data[5] = 64; - task->data[8] = 65; + if (gFacilityTrainerMons[monSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[j].monId].species) + break; } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] == 64) - task->data[0]++; - break; - } -} + if (j != 6) + continue; -static void sub_819C4B4(void) -{ - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); - sFactorySelectScreen->unk294[0].field1 = CreateSprite(&gUnknown_08610638, 44, 64, 1); - sFactorySelectScreen->unk294[2].field1 = CreateSprite(&gUnknown_08610638, 196, 64, 1); - - gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C040; - gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + if (lvlMode == FRONTIER_LVL_50 && monSetId > 849) + continue; - sFactorySelectScreen->unk2A0 = TRUE; -} - -static void sub_819C568(void) -{ - u8 taskId; - - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[0].field0); - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[1].field0); - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[2].field0); - - taskId = CreateTask(sub_819C2D4, 1); - gTasks[taskId].func(taskId); - - sFactorySelectScreen->unk2A0 = TRUE; -} - -static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V) -{ - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(mWin0H, nWin0H)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(mWin0V, nWin0V)); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); -} - -static bool32 Select_AreSpeciesValid(u16 monSetId) -{ - u8 i, j; - u32 species = gFacilityTrainerMons[monSetId].species; - u8 selectState = sFactorySelectScreen->selectingMonsState; - - for (i = 1; i < selectState; i++) - { - for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + for (k = firstMonId; k < firstMonId + i; k++) { - if (sFactorySelectScreen->mons[j].selectedId == i) - { - if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monSetId].species == species) - return FALSE; - + if (species[k] == gFacilityTrainerMons[monSetId].species) break; - } } - } - - return TRUE; -} + if (k != firstMonId + i) + continue; -static void Task_SelectFadeSpeciesName(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 0: - sFactorySelectScreen->unk2A7 = 0; - sFactorySelectScreen->unk2A8 = 0; - sFactorySelectScreen->unk2A6 = TRUE; - gTasks[taskId].data[0] = 1; - break; - case 1: - if (sFactorySelectScreen->unk2A2) - { - if (sFactorySelectScreen->unk2A9) - { - gTasks[taskId].data[0] = 2; - } - else - { - sFactorySelectScreen->unk2A7++; - if (sFactorySelectScreen->unk2A7 > 6) - { - sFactorySelectScreen->unk2A7 = 0; - if (!sFactorySelectScreen->unk2A6) - sFactorySelectScreen->unk2A8--; - else - sFactorySelectScreen->unk2A8++; - } - BlendPalettes(0x4000, sFactorySelectScreen->unk2A8, 0); - if (sFactorySelectScreen->unk2A8 > 5) - { - sFactorySelectScreen->unk2A6 = FALSE; - } - else if (sFactorySelectScreen->unk2A8 == 0) - { - gTasks[taskId].data[0] = 2; - sFactorySelectScreen->unk2A6 = TRUE; - } - } - } - break; - case 2: - if (sFactorySelectScreen->unk2A9 > 14) + for (k = firstMonId; k < firstMonId + i; k++) { - sFactorySelectScreen->unk2A9 = 0; - gTasks[taskId].data[0] = 1; - } - else - { - sFactorySelectScreen->unk2A9++; + if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) + break; } - break; - } -} - -// Swap Screen's section begins here. - -static void Swap_CB2(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTextPrinters(); - UpdatePaletteFade(); - RunTasks(); -} - -static void Swap_VblankCb(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void CopySwappedMonData(void) -{ - u8 happiness; - - gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId]; - happiness = 0; - SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &happiness); - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].monId; - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].ivs; - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ALT_ABILITY, NULL); -} + if (k != firstMonId + i) + continue; -static void Task_FromSwapScreenToSummaryScreen(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 6: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 7; - break; - case 7: - if (!gPaletteFade.active) - { - DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); - sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); - Swap_DestroyAllSprites(); - FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); - FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); - FreeAllWindowBuffers(); - gTasks[taskId].data[0] = 8; - } - break; - case 8: - DestroyTask(taskId); - sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; - ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->cursorPos, 3 - 1, CB2_InitSwapScreen); - break; + species[i] = gFacilityTrainerMons[monSetId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]; + gUnknown_03006298[i] = monSetId; + i++; } } -static void Task_CloseSwapScreen(u8 taskId) +static void sub_81A63B8(void) { - if (sFactorySwapScreen->unk30 != TRUE) - { - switch (gTasks[taskId].data[0]) - { - case 0: - if (sFactorySwapScreen->monSwapped == TRUE) - { - gTasks[taskId].data[0]++; - gSpecialVar_Result = 0; - } - else - { - gTasks[taskId].data[0] = 2; - gSpecialVar_Result = 1; - } - break; - case 1: - if (sFactorySwapScreen->monSwapped == TRUE) - { - sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; - CopySwappedMonData(); - } - gTasks[taskId].data[0]++; - break; - case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0]++; - break; - case 3: - if (!UpdatePaletteFade()) - { - DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); - Swap_DestroyAllSprites(); - FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); - FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); - FREE_AND_SET_NULL(sFactorySwapScreen); - FreeAllWindowBuffers(); - SetMainCallback2(CB2_ReturnToFieldContinueScript); - DestroyTask(taskId); - } - break; - } - } + SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); } -static void Task_HandleSwapScreenYesNo(u8 taskId) +static void sub_81A63CC(void) { - u16 loPtr, hiPtr; - - if (sFactorySwapScreen->unk30 != TRUE) - { - switch (gTasks[taskId].data[0]) - { - case 4: - Swap_ShowYesNoOptions(); - gTasks[taskId].data[0] = 5; - break; - case 5: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (sFactorySwapScreen->yesNoCursorPos == 0) - { - gTasks[taskId].data[1] = 1; - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - else - { - gTasks[taskId].data[1] = 0; - sub_819EA64(4); - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = 0; - sub_819EA64(4); - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - else if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - Swap_UpdateYesNoCursorPosition(-1); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - Swap_UpdateYesNoCursorPosition(1); - } - break; - } - } -} + u8 i; -static void sub_819CBDC(u8 taskId) -{ - if (gTasks[taskId].data[1] == 1) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSwapScreen; - } + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) + gFacilityTrainerMons = gBattleFrontierMons; else - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; - } -} + gFacilityTrainerMons = gSlateportBattleTentMons; -static void sub_819CC24(u8 taskId) -{ - if (gTasks[taskId].data[0] == 0) + for (i = 0; i < 3; i++) { - Swap_PrintOnInfoWindow(gText_QuitSwapping); - sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CBDC); - gTasks[taskId].func = Task_HandleSwapScreenYesNo; + gSaveBlock2Ptr->frontier.field_E70[i + 3].monId = gUnknown_03006298[i]; + gSaveBlock2Ptr->frontier.field_E70[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); + gSaveBlock2Ptr->frontier.field_E70[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[i + 3].abilityBit = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ALT_ABILITY, NULL); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]); } } -static void sub_819CC74(u8 taskId) +static void sub_81A64C4(void) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - if (gTasks[taskId].data[1] == 1) + s32 i, j, k; + s32 count = 0; + u8 bits = 0; + u8 monLevel; + u16 monSetId; + u16 evs; + u8 ivs; + u8 friendship; + + if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_TENT) { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSwapScreen; + gFacilityTrainerMons = gSlateportBattleTentMons; + monLevel = 30; } else { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; - } -} - -static void sub_819CCD4(u8 taskId) -{ - if (gTasks[taskId].data[0] == 0) - { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); - sFactorySwapScreen->monSwapped = TRUE; - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CC74); - gTasks[taskId].func = Task_HandleSwapScreenYesNo; + gFacilityTrainerMons = gBattleFrontierMons; + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) + monLevel = 100; + else + monLevel = 50; } -} -static void Task_HandleSwapScreenMenu(u8 taskId) -{ - switch (gTasks[taskId].data[0]) + if (gSpecialVar_0x8005 < 2) { - case 2: - if (!sFactorySwapScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0] = 9; - break; - case 9: - if (sFactorySwapScreen->unk30 != TRUE) + ZeroPlayerPartyMons(); + for (i = 0; i < 3; i++) { - Swap_ShowMenuOptions(); - gTasks[taskId].data[0] = 3; - } - break; - case 3: - if (sFactorySwapScreen->unk30 != TRUE) - { - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - Swap_RunMenuOptionFunc(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; - } - else if (gMain.newAndRepeatedKeys & DPAD_UP) - { - Swap_UpdateMenuCursorPosition(-1); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - Swap_UpdateMenuCursorPosition(1); - } - } - break; - } -} + monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; + ivs = gSaveBlock2Ptr->frontier.field_E70[i].ivs; + CreateMon(&gPlayerParty[i], + gFacilityTrainerMons[monSetId].species, + monLevel, + ivs, + TRUE, gSaveBlock2Ptr->frontier.field_E70[i].personality, + 0, 0); -static void Task_HandleSwapScreenChooseMons(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 0: - if (!gPaletteFade.active) - { - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = 1; - } - break; - case 1: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sFactorySwapScreen->unk22 = FALSE; - Swap_PrintMonSpecies2(); - sub_819EAC0(); - Swap_RunActionFunc(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sFactorySwapScreen->unk22 = FALSE; - Swap_PrintMonSpecies2(); - sub_819EAC0(); - gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CC24); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].func = sub_819D588; - } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) - { - Swap_UpdateBallCursorPosition(-1); - Swap_PrintMonCategory(); - Swap_PrintMonSpecies(); - } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - { - Swap_UpdateBallCursorPosition(1); - Swap_PrintMonCategory(); - Swap_PrintMonSpecies(); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - Swap_UpdateActionCursorPosition(1); - Swap_PrintMonCategory(); - Swap_PrintMonSpecies(); - } - else if (gMain.newAndRepeatedKeys & DPAD_UP) - { - Swap_UpdateActionCursorPosition(-1); - Swap_PrintMonCategory(); - Swap_PrintMonSpecies(); - } - break; - } -} - -static void Task_SwapFadeSpeciesName(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 0: - sFactorySwapScreen->unk27 = 0; - sFactorySwapScreen->unk28 = 0; - sFactorySwapScreen->unk26 = TRUE; - gTasks[taskId].data[0] = 1; - break; - case 1: - if (sFactorySwapScreen->unk22) - { - if (sFactorySwapScreen->unk29) + count = 0; + bits = gFacilityTrainerMons[monSetId].evSpread; + for (j = 0; j < NUM_STATS; bits >>= 1, j++) { - gTasks[taskId].data[0] = 2; + if (bits & 1) + count++; } - else + + evs = MAX_TOTAL_EVS / count; + bits = 1; + for (j = 0; j < NUM_STATS; bits <<= 1, j++) { - sFactorySwapScreen->unk27++; - if (sFactorySwapScreen->unk27 > 6) - { - sFactorySwapScreen->unk27 = 0; - if (!sFactorySwapScreen->unk26) - sFactorySwapScreen->unk28--; - else - sFactorySwapScreen->unk28++; - } - BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); - if (sFactorySwapScreen->unk28 > 5) - { - sFactorySwapScreen->unk26 = FALSE; - } - else if (sFactorySwapScreen->unk28 == 0) - { - gTasks[taskId].data[0] = 2; - sFactorySwapScreen->unk26 = TRUE; - } + if (gFacilityTrainerMons[monSetId].evSpread & bits) + SetMonData(&gPlayerParty[i], MON_DATA_HP_EV + j, &evs); } + + CalculateMonStats(&gPlayerParty[i]); + friendship = 0; + for (k = 0; k < 4; k++) + SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k); + SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + SetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.field_E70[i].abilityBit); } - break; - case 2: - if (sFactorySwapScreen->unk29 > 14) - { - sFactorySwapScreen->unk29 = 0; - gTasks[taskId].data[0] = 1; - } - else - { - sFactorySwapScreen->unk29++; - } - break; } -} -static void Task_SwapFadeSpeciesName2(u8 taskId) -{ - switch (gTasks[taskId].data[0]) + switch (gSpecialVar_0x8005) { case 0: - sFactorySwapScreen->unk27 = 0; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[0]++; - break; - case 1: - LoadPalette(&gPlttBufferUnfaded[0xF0], 0xE0, 0xA); - gTasks[taskId].data[0]++; - break; case 2: - if (sFactorySwapScreen->unk28 > 15) + for (i = 0; i < 3; i++) { - gTasks[taskId].data[4] = 1; - gTasks[taskId].data[0]++; - } - sFactorySwapScreen->unk27++; - if (sFactorySwapScreen->unk27 > 3) - { - sFactorySwapScreen->unk27 = 0; - gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; - sFactorySwapScreen->unk28++; - } - BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); - break; - } -} + monSetId = gSaveBlock2Ptr->frontier.field_E70[i + 3].monId; + ivs = gSaveBlock2Ptr->frontier.field_E70[i + 3].ivs; + CreateMon(&gEnemyParty[i], + gFacilityTrainerMons[monSetId].species, + monLevel, + ivs, + TRUE, gSaveBlock2Ptr->frontier.field_E70[i + 3].personality, + 0, 0); -static void sub_819D12C(u8 taskId) -{ - s8 i; - u8 var_2C; - bool8 destroyTask; - - switch (gTasks[taskId].data[0]) - { - case 0: - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[0] = 1; - break; - case 1: - var_2C = 0; - for (i = 2; i >= 0; i--) - { - if (i != 2) + count = 0; + bits = gFacilityTrainerMons[monSetId].evSpread; + for (j = 0; j < NUM_STATS; bits >>= 1, j++) { - u8 posX = var_2C - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; - if (posX == 16 || gTasks[taskId].data[i + 2] == 1) - { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; - } - else if (posX > 16) - { - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[i + 1]].pos1.x - 48; - } - } - else - { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; + if (bits & 1) + count++; } - if (gTasks[taskId].data[i + 1] == 1) - { - if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x > (i * 48) + 72) - { - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = (i * 48) + 72; - destroyTask = TRUE; - } - else if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x == (i * 48) + 72) - { - destroyTask = TRUE; - } - else - { - destroyTask = FALSE; - } - } - else + evs = MAX_TOTAL_EVS / count; + bits = 1; + for (j = 0; j < NUM_STATS; bits <<= 1, j++) { - destroyTask = FALSE; + if (gFacilityTrainerMons[monSetId].evSpread & bits) + SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &evs); } - if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > 240) - { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; - if (sFactorySwapScreen->inEnemyScreen == TRUE) - gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); - else - gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - - gTasks[taskId].data[i + 1] = 1; - } + CalculateMonStats(&gEnemyParty[i]); + for (k = 0; k < 4; k++) + SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + SetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.field_E70[i + 3].abilityBit); } - if (destroyTask == TRUE) - DestroyTask(taskId); break; } } -static void sub_819D324(u8 taskId) +static void sub_81A67EC(void) { - u8 i, j; - s32 posX = 0; - s8 r4 = gTasks[taskId].data[3]; - bool8 r1; - s16 currPosX; - u8 taskId2; - - if (gTasks[taskId].data[2] == 1) - r4 *= -1; + s32 i, j; + u8 firstMonId; + u8 battleMode; + u8 lvlMode; + u8 challengeNum; + u8 factoryLvlMode; + u8 factoryBattleMode; + u8 var_40; + u16 monSetId; + u16 currSpecies; + u16 species[PARTY_SIZE]; + u16 monIds[PARTY_SIZE]; + u16 heldItems[PARTY_SIZE]; + + gFacilityTrainers = gBattleFrontierTrainers; + for (i = 0; i < PARTY_SIZE; i++) + { + species[i] = 0; + monIds[i] = 0; + heldItems[i] = 0; + } + lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) + factoryBattleMode = FRONTIER_MODE_DOUBLES; + else + factoryBattleMode = FRONTIER_MODE_SINGLES; - switch (gTasks[taskId].data[0]) + gFacilityTrainerMons = gBattleFrontierMons; + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) { - case 0: - currPosX = gSprites[sFactorySwapScreen->unk8[0][0]].pos1.x; - if (!gTasks[taskId].data[2]) - { - if (currPosX + r4 < 240) - { - r1 = TRUE; - } - else - { - r1 = FALSE; - posX = 240; - } - } - else - { - if (currPosX + r4 > 160) - { - r1 = TRUE; - } - else - { - r1 = FALSE; - posX = 160; - } - } - - if (r1 == TRUE) - { - for (i = 0; i < 3; i++) - { - for (j = 0; j < 2; j++) - gSprites[sFactorySwapScreen->unk8[j][i]].pos1.x += r4; - } - } - else - { - for (j = 0; j < 2; j++) - { - gSprites[sFactorySwapScreen->unk8[j][0]].pos1.x = posX; - gSprites[sFactorySwapScreen->unk8[j][1]].pos1.x = posX + 16; - gSprites[sFactorySwapScreen->unk8[j][2]].pos1.x = posX + 48; - } - taskId2 = gTasks[taskId].data[1]; - gTasks[taskId2].data[3] = 1; - DestroyTask(taskId); - } - break; - case 1: - currPosX = gSprites[sFactorySwapScreen->unkE[0][0]].pos1.x; - if (!gTasks[taskId].data[2]) - { - if (currPosX + r4 < 240) - { - r1 = TRUE; - } - else - { - r1 = FALSE; - posX = 240; - } - } - else - { - if (currPosX + r4 > 192) - { - r1 = TRUE; - } - else - { - r1 = FALSE; - posX = 192; - } - } - - if (r1 == TRUE) - { - for (i = 0; i < 2; i++) - { - for (j = 0; j < 2; j++) - gSprites[sFactorySwapScreen->unkE[j][i]].pos1.x += r4; - } - } - else - { - for (j = 0; j < 2; j++) - { - gSprites[sFactorySwapScreen->unkE[j][0]].pos1.x = posX; - gSprites[sFactorySwapScreen->unkE[j][1]].pos1.x = posX + 16; - } - taskId2 = gTasks[taskId].data[1]; - gTasks[taskId2].data[4] = 1; - DestroyTask(taskId); - } - break; + factoryLvlMode = FRONTIER_LVL_OPEN; + firstMonId = 0; } -} - -static void sub_819D588(u8 taskId) -{ - u8 anotherTaskId; - u16 loPtr, hiPtr; - - switch (gTasks[taskId].data[0]) + else { - case 0: - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); - Swap_PrintActionStrings(); - PutWindowTilemap(5); - gTasks[taskId].data[0]++; - break; - case 1: - sub_819EA64(3); - gTasks[taskId].data[0]++; - break; - case 2: - BeginNormalPaletteFade(0x4000, 0, 0, 0x10, gUnknown_0860F13C[37]); - gTasks[taskId].data[0]++; - break; - case 3: - if (!gPaletteFade.active) - { - FillWindowPixelBuffer(5, 0); - CopyWindowToVram(5, 2); - if (sFactorySwapScreen->inEnemyScreen == TRUE) - { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 0; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[2] = 5; - gTasks[taskId].data[0]++; - } - else - { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0] += 2; - } - } - break; - case 4: - if (gTasks[taskId].data[2] == 0) - { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0]++; - } - else - { - gTasks[taskId].data[2]--; - } - break; - case 5: - if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) - { - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - loPtr = gTasks[taskId].data[6]; - hiPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); - } - break; + factoryLvlMode = FRONTIER_LVL_50; + firstMonId = 0; } -} - -static void sub_819D770(u8 taskId) -{ - u8 anotherTaskId; - u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 == TRUE) - return; + var_40 = sub_81A6F70(factoryBattleMode, factoryLvlMode); - switch (gTasks[taskId].data[0]) + currSpecies = 0; + i = 0; + while (i != PARTY_SIZE) { - case 0: - if (sFactorySwapScreen->inEnemyScreen == TRUE) - { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 0; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[2] = 10; - gTasks[taskId].data[0]++; - } - else - { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0] += 2; - } - break; - case 1: - if (gTasks[taskId].data[2] == 0) - { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0]++; - } + if (i < var_40) + monSetId = GetMonSetId(factoryLvlMode, challengeNum, TRUE); else - { - gTasks[taskId].data[2]--; - } - break; - case 2: - if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) - { - gPlttBufferFaded[226] = gUnknown_0860F13C[37]; - Swap_PrintActionStrings(); - PutWindowTilemap(5); - gTasks[taskId].data[0]++; - } - break; - case 3: - BeginNormalPaletteFade(0x4000, 0, 0x10, 0, gUnknown_0860F13C[37]); - gTasks[taskId].data[0]++; - break; - case 4: - if (!gPaletteFade.active) - { - Swap_PrintOneActionString(0); - gTasks[taskId].data[0]++; - } - break; - case 5: - Swap_PrintOneActionString(1); - PutWindowTilemap(3); - gTasks[taskId].data[0]++; - break; - case 6: - FillWindowPixelBuffer(5, 0); - CopyWindowToVram(5, 2); - gTasks[taskId].data[0]++; - break; - case 7: - if (!sFactorySwapScreen->inEnemyScreen) - Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); - else - Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); - if (sFactorySwapScreen->cursorPos < 3) - gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; - Swap_PrintMonCategory(); - gTasks[taskId].data[0]++; - break; - case 8: - Swap_PrintMonSpecies3(); - sub_819EADC(); - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - loPtr = gTasks[taskId].data[6]; - hiPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); - break; - } -} + monSetId = GetMonSetId(factoryLvlMode, challengeNum, FALSE); -static void sub_819D9EC(u8 taskId) -{ - u8 i; - if (sFactorySwapScreen->unk30 == TRUE) - return; + if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN) + continue; - switch (gTasks[taskId].data[0]) - { - case 0: - Swap_PrintMonSpecies3(); - gTasks[taskId].data[0]++; - break; - case 1: - sub_819EADC(); - gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; - gTasks[taskId].data[0]++; - break; - case 2: - CreateTask(sub_819D12C, 0); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName2; - gTasks[taskId].data[0]++; - break; - case 3: - if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[4] == 1) + // Cannot have two pokemon of the same species. + for (j = firstMonId; j < firstMonId + i; j++) { - sub_819EAC0(); - if (!sFactorySwapScreen->inEnemyScreen) - { - Swap_InitActions(ACTIONS_ENEMY_SCREEN); - } - else + u16 monId = monIds[j]; + if (monId == monSetId) + break; + if (species[j] == gFacilityTrainerMons[monSetId].species) { - Swap_InitActions(ACTIONS_PLAYER_SCREEN); - for (i = 0; i < 3; i++) - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + if (currSpecies == 0) + currSpecies = gFacilityTrainerMons[monSetId].species; + else + break; } - gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName; - sFactorySwapScreen->unk27 = 0; - sFactorySwapScreen->unk28 = 6; - sFactorySwapScreen->unk26 = FALSE; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; - gTasks[taskId].data[0]++; } - break; - case 4: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; - break; - } -} - -static void Swap_InitStruct(void) -{ - if (sFactorySwapScreen == NULL) - { - sFactorySwapScreen = AllocZeroed(sizeof(*sFactorySwapScreen)); - sFactorySwapScreen->cursorPos = 0; - sFactorySwapScreen->unk30 = FALSE; - sFactorySwapScreen->fromSummaryScreen = FALSE; - } -} + if (j != firstMonId + i) + continue; -void DoBattleFactorySwapScreen(void) -{ - sFactorySwapScreen = NULL; - SetMainCallback2(CB2_InitSwapScreen); -} - -static void CB2_InitSwapScreen(void) -{ - u8 taskId; - - switch (gMain.state) - { - case 0: - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sSwap_BgTemplates, ARRAY_COUNT(sSwap_BgTemplates)); - InitWindows(sSwap_WindowTemplates); - DeactivateAllTextPrinters(); - gMain.state++; - break; - case 1: - sSwapMenuTilesetBuffer = Alloc(0x440); - sSwapMonCardBgTilesetBuffer = AllocZeroed(0x440); - sSwapMenuTilemapBuffer = Alloc(0x800); - sSwapMonCardBgTilemapBuffer = AllocZeroed(0x800); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN1H, 0); - SetGpuReg(REG_OFFSET_WIN1V, 0); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0); - gMain.state++; - break; - case 2: - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - FreeAllSpritePalettes(); - ResetAllPicSprites(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSwapMenuTilesetBuffer, 0x440); - CpuCopy16(gUnknown_0861033C, sSwapMonCardBgTilesetBuffer, 0x60); - LoadBgTiles(1, sSwapMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSwapMonCardBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, 0x800); - LoadBgTilemap(1, sSwapMenuTilemapBuffer, 0x800, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_08610918, 0xF0, sizeof(gUnknown_08610918)); - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); - LoadPalette(gUnknown_0861039C, 0x20, 4); - gMain.state++; - break; - case 3: - SetBgTilemapBuffer(3, sSwapMonCardBgTilemapBuffer); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); - CopyBgTilemapBufferToVram(3); - gMain.state++; - break; - case 4: - LoadSpritePalettes(gUnknown_086106B0); - LoadSpriteSheets(gUnknown_08610650); - LoadCompressedObjectPic(gUnknown_086106A0); - SetVBlankCallback(Swap_VblankCb); - gMain.state++; - break; - case 5: - if (sFactorySwapScreen->fromSummaryScreen == TRUE) - sFactorySwapScreen->cursorPos = gUnknown_0203CF20; - gMain.state++; - break; - case 6: - Swap_InitStruct(); - Swap_InitAllSprites(); - if (sFactorySwapScreen->fromSummaryScreen == TRUE) - Swap_ShowSummaryMonSprite(); - Swap_InitActions(ACTIONS_PLAYER_SCREEN); - gMain.state++; - break; - case 7: - Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); - PutWindowTilemap(2); - gMain.state++; - break; - case 8: - Swap_PrintMonCategory(); - PutWindowTilemap(8); - gMain.state++; - break; - case 9: - if (!sFactorySwapScreen->fromSummaryScreen) - Swap_PrintMonSpecies(); - PutWindowTilemap(1); - gMain.state++; - break; - case 10: - Swap_PrintPkmnSwap(); - PutWindowTilemap(0); - gMain.state++; - break; - case 11: - gMain.state++; - break; - case 12: - if (sFactorySwapScreen->fromSummaryScreen) - Swap_PrintMonSpecies2(); - gMain.state++; - break; - case 13: - Swap_PrintActionStrings2(); - PutWindowTilemap(3); - gMain.state++; - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - ShowBg(0); - ShowBg(1); - ShowBg(2); - if (sFactorySwapScreen->fromSummaryScreen == TRUE) + // Cannot have two same held items. + for (j = firstMonId; j < firstMonId + i; j++) { - ShowBg(3); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - } - else - { - HideBg(3); - } - gMain.state++; - break; - case 15: - sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Task_SwapFadeSpeciesName, 0); - if (!sFactorySwapScreen->fromSummaryScreen) - { - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 0; - taskId = CreateTask(Task_HandleSwapScreenChooseMons, 0); - gTasks[taskId].data[0] = 0; - } - else - { - sub_819EAF8(); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; - sFactorySwapScreen->unk22 = FALSE; - taskId = CreateTask(Task_HandleSwapScreenMenu, 0); - gTasks[taskId].data[0] = 2; + if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) + { + if (gFacilityTrainerMons[monSetId].species == currSpecies) + currSpecies = 0; + break; + } } - SetMainCallback2(Swap_CB2); - break; + if (j != firstMonId + i) + continue; + + gSaveBlock2Ptr->frontier.field_E70[i].monId = monSetId; + species[i] = gFacilityTrainerMons[monSetId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]; + monIds[i] = monSetId; + i++; } } -static void Swap_InitAllSprites(void) +static void sub_81A6A08(void) { u8 i; - u8 x; - struct SpriteTemplate spriteTemplate; - - spriteTemplate = gUnknown_08610834; - spriteTemplate.paletteTag = TAG_PAL_BALL_SELECTED; + u8 typesCount[18]; + u8 usedType[2]; + gFacilityTrainerMons = gBattleFrontierMons; + for (i = 0; i < NUMBER_OF_MON_TYPES; i++) + typesCount[i] = 0; for (i = 0; i < 3; i++) { - sFactorySwapScreen->ballSpriteIds[i] = CreateSprite(&spriteTemplate, (48 * i) + 72, 64, 1); - gSprites[sFactorySwapScreen->ballSpriteIds[i]].data[0] = 0; - } - sFactorySwapScreen->cursorSpriteId = CreateSprite(&gUnknown_0861084C, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); - sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610864, 176, 112, 0); - sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_0861087C, 176, 144, 0); - gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; - gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecY = 0; - - if (sFactorySwapScreen->fromSummaryScreen == TRUE) - x = 240; - else - x = 192; + u32 species = gFacilityTrainerMons[gUnknown_03006298[i]].species; - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_68; - sFactorySwapScreen->unk8[0][0] = CreateSprite(&spriteTemplate, 240, 120, 10); - - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_69; - sFactorySwapScreen->unk8[0][1] = CreateSprite(&spriteTemplate, 256, 120, 10); - sFactorySwapScreen->unk8[0][2] = CreateSprite(&spriteTemplate, 288, 120, 10); - - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_6A; - sFactorySwapScreen->unk8[1][0] = CreateSprite(&spriteTemplate, 240, 120, 1); - - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_6B; - sFactorySwapScreen->unk8[1][1] = CreateSprite(&spriteTemplate, 256, 120, 1); - spriteTemplate.tileTag = TAG_TILE_6C; - sFactorySwapScreen->unk8[1][2] = CreateSprite(&spriteTemplate, 288, 120, 1); - - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_68; - sFactorySwapScreen->unkE[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); - - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_69; - sFactorySwapScreen->unkE[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); - - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_6A; - sFactorySwapScreen->unkE[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); - - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_6C; - sFactorySwapScreen->unkE[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); - - for (i = 0; i < 2; i++) - { - gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecY = 0; - - gSprites[sFactorySwapScreen->unk8[i][0]].invisible = TRUE; - gSprites[sFactorySwapScreen->unk8[i][1]].invisible = TRUE; - gSprites[sFactorySwapScreen->unk8[i][2]].invisible = TRUE; - gSprites[sFactorySwapScreen->unkE[i][0]].invisible = TRUE; - gSprites[sFactorySwapScreen->unkE[i][1]].invisible = TRUE; + typesCount[gBaseStats[species].type1]++; + if (gBaseStats[species].type1 != gBaseStats[species].type2) + typesCount[gBaseStats[species].type2]++; } - gSprites[sFactorySwapScreen->unkE[0][0]].invisible = FALSE; - gSprites[sFactorySwapScreen->unkE[0][1]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][0]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][1]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][2]].invisible = FALSE; -} - -static void Swap_DestroyAllSprites(void) -{ - u8 i, j; - - for (i = 0; i < 3; i++) - DestroySprite(&gSprites[sFactorySwapScreen->ballSpriteIds[i]]); - DestroySprite(&gSprites[sFactorySwapScreen->cursorSpriteId]); - DestroySprite(&gSprites[sFactorySwapScreen->menuCursor1SpriteId]); - DestroySprite(&gSprites[sFactorySwapScreen->menuCursor2SpriteId]); - for (i = 0; i < 2; i++) - { - for (j = 0; j < 3; j++) - DestroySprite(&gSprites[sFactorySwapScreen->unk8[i][j]]); - } - for (i = 0; i < 2; i++) + usedType[0] = 0; + usedType[1] = 0; + for (i = 1; i < NUMBER_OF_MON_TYPES; i++) { - for (j = 0; j < 2; j++) - DestroySprite(&gSprites[sFactorySwapScreen->unkE[i][j]]); + if (typesCount[usedType[0]] < typesCount[i]) + usedType[0] = i; + else if (typesCount[usedType[0]] == typesCount[i]) + usedType[1] = i; } -} -static void Swap_HandleActionCursorChange(u8 cursorId) -{ - if (cursorId < 3) - { - gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; - sub_819E8EC(); - gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].pos1.x; - } + gSpecialVar_Result = gSpecialVar_Result; // Needed to match. Don't ask me why. + if (typesCount[usedType[0]] != 0 && (typesCount[usedType[0]] > typesCount[usedType[1]] || usedType[0] == usedType[1])) + gSpecialVar_Result = usedType[0]; else - { - gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; - sub_819E838(sFactorySwapScreen->actionsData[cursorId].id); - } + gSpecialVar_Result = NUMBER_OF_MON_TYPES; } -static void Swap_UpdateBallCursorPosition(s8 direction) +static void sub_81A6AEC(void) { - u8 cursorPos; - PlaySE(SE_SELECT); - if (direction > 0) // Move cursor right. - { - if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) - sFactorySwapScreen->cursorPos++; - else - sFactorySwapScreen->cursorPos = 0; - } - else // Move cursor left. - { - if (sFactorySwapScreen->cursorPos != 0) - sFactorySwapScreen->cursorPos--; - else - sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; - } - - cursorPos = sFactorySwapScreen->cursorPos; - Swap_HandleActionCursorChange(cursorPos); -} - -static void Swap_UpdateActionCursorPosition(s8 direction) -{ - u8 cursorPos; - PlaySE(SE_SELECT); - if (direction > 0) // Move cursor down. - { - if (sFactorySwapScreen->cursorPos < 3) - sFactorySwapScreen->cursorPos = 3; - else if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) - sFactorySwapScreen->cursorPos++; - else - sFactorySwapScreen->cursorPos = 0; - } - else // Move cursor up. - { - if (sFactorySwapScreen->cursorPos < 3) - sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; - else if (sFactorySwapScreen->cursorPos != 0) - sFactorySwapScreen->cursorPos--; - else - sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; - } - - cursorPos = sFactorySwapScreen->cursorPos; - Swap_HandleActionCursorChange(cursorPos); -} - -static void Swap_UpdateYesNoCursorPosition(s8 direction) -{ - if (direction > 0) // Move cursor down. - { - if (sFactorySwapScreen->yesNoCursorPos != 1) - sFactorySwapScreen->yesNoCursorPos++; - else - sFactorySwapScreen->yesNoCursorPos = 0; - } - else // Move cursor up. - { - if (sFactorySwapScreen->yesNoCursorPos != 0) - sFactorySwapScreen->yesNoCursorPos--; - else - sFactorySwapScreen->yesNoCursorPos = 1; - } - - gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->yesNoCursorPos * 16) + 112; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->yesNoCursorPos * 16) + 112; -} - -static void Swap_UpdateMenuCursorPosition(s8 direction) -{ - PlaySE(SE_SELECT); - if (direction > 0) // Move cursor down. - { - if (sFactorySwapScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) - sFactorySwapScreen->menuCursorPos++; - else - sFactorySwapScreen->menuCursorPos = 0; - } - else // Move cursor up. - { - if (sFactorySwapScreen->menuCursorPos != 0) - sFactorySwapScreen->menuCursorPos--; - else - sFactorySwapScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; - } - - gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; -} - -static void sub_819E838(u8 arg0) -{ - u8 i; + u8 i, j, count; + u8 stylePoints[8]; + count = 0; + gFacilityTrainerMons = gBattleFrontierMons; + for (i = 0; i < 8; i++) + stylePoints[i] = 0; for (i = 0; i < 3; i++) { - if (arg0 == 2) - { - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = FALSE; - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; - } - else if (arg0 == 3) + u16 monSetId = gUnknown_03006298[i]; + for (j = 0; j < 4; j++) { - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + u8 id = GetStyleForMove(gFacilityTrainerMons[monSetId].moves[j]); + stylePoints[id]++; } } -} -static void sub_819E8EC(void) -{ - u8 i; - - for (i = 0; i < 3; i++) + gSpecialVar_Result = 0; + for (i = 1; i < 8; i++) { - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + if (stylePoints[i] >= sRequiredMoveCounts[i - 1]) + { + gSpecialVar_Result = i; + count++; + } } + if (count > 2) + gSpecialVar_Result = 8; } -static void Swap_ShowMenuOptions(void) -{ - if (sFactorySwapScreen->fromSummaryScreen == TRUE) - sFactorySwapScreen->fromSummaryScreen = FALSE; - else - sFactorySwapScreen->menuCursorPos = 0; - - gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.x = 176; - gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.x = 208; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; - - gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = FALSE; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = FALSE; - - Swap_PrintMenuOptions(); -} - -static void Swap_ShowYesNoOptions(void) -{ - sFactorySwapScreen->yesNoCursorPos = 0; - - gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.x = 176; - gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = 112; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.x = 208; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = 112; - - gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = FALSE; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = FALSE; - - Swap_PrintYesNoOptions(); -} - -static void sub_819EA64(u8 windowId) -{ - gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; - gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; - FillWindowPixelBuffer(windowId, 0); - CopyWindowToVram(windowId, 2); - ClearWindowTilemap(windowId); -} - -static void sub_819EAC0(void) +static u8 GetStyleForMove(u16 move) { - PutWindowTilemap(1); - FillWindowPixelBuffer(1, 0); - CopyWindowToVram(1, 2); -} - -static void sub_819EADC(void) -{ - PutWindowTilemap(7); - FillWindowPixelBuffer(7, 0); - CopyWindowToVram(7, 2); -} - -static void sub_819EAF8(void) -{ - sub_819EAC0(); - PutWindowTilemap(5); - FillWindowPixelBuffer(5, 0); - CopyWindowToVram(5, 2); -} - -static void Swap_PrintPkmnSwap(void) -{ - FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gText_PkmnSwap, 2, 1, 0, NULL); - CopyWindowToVram(0, 3); -} - -static void Swap_PrintMonSpecies(void) -{ - u16 species; - u8 x; + const u16 *moves; + u8 i, j; - FillWindowPixelBuffer(1, 0); - if (sFactorySwapScreen->cursorPos > 2) + for (i = 0; i < ARRAY_COUNT(sMoveStyles); i++) { - CopyWindowToVram(1, 2); - } - else - { - u8 monId = sFactorySwapScreen->cursorPos; - if (!sFactorySwapScreen->inEnemyScreen) - species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); - else - species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4); - CopyWindowToVram(1, 3); + for (j = 0, moves = sMoveStyles[i]; moves[j] != 0; j++) + { + if (moves[j] == move) + return i + 1; + } } + return 0; } -static void Swap_PrintOnInfoWindow(const u8 *str) -{ - FillWindowPixelBuffer(2, 0); - AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); -} - -static void Swap_PrintMenuOptions(void) -{ - PutWindowTilemap(3); - FillWindowPixelBuffer(3, 0); - AddTextPrinterParameterized3(3, 1, 15, 1, gUnknown_08610922, 0, gText_Summary2); - AddTextPrinterParameterized3(3, 1, 15, 17, gUnknown_08610922, 0, gText_Swap); - AddTextPrinterParameterized3(3, 1, 15, 33, gUnknown_08610922, 0, gText_Rechoose); - CopyWindowToVram(3, 3); -} - -static void Swap_PrintYesNoOptions(void) -{ - PutWindowTilemap(4); - FillWindowPixelBuffer(4, 0); - AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610922, 0, gText_Yes3); - AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610922, 0, gText_No3); - CopyWindowToVram(4, 3); -} - -static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) +bool8 sub_81A6BF4(void) { - s32 x = GetStringRightAlignXOffset(0, str, 0x46); - AddTextPrinterParameterized3(windowId, 0, x, y, gUnknown_08610922, 0, str); + return (gMapHeader.mapLayoutId == 347 || gMapHeader.mapLayoutId == 348); } -static void Swap_PrintActionStrings(void) +static void sub_81A6C1C(void) { - FillWindowPixelBuffer(5, 0); - switch (sFactorySwapScreen->inEnemyScreen) - { - case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 0, 5); - case FALSE: - Swap_PrintActionString(gText_Cancel3, 24, 5); - break; - } - CopyWindowToVram(5, 3); -} + u8 i; -static void Swap_PrintActionStrings2(void) -{ - FillWindowPixelBuffer(3, 0); - switch (sFactorySwapScreen->inEnemyScreen) - { - case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 8, 3); - case FALSE: - Swap_PrintActionString(gText_Cancel3, 32, 3); - break; - } - CopyWindowToVram(3, 3); -} + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) + gFacilityTrainerMons = gBattleFrontierMons; + else + gFacilityTrainerMons = gSlateportBattleTentMons; -static void Swap_PrintOneActionString(u8 which) -{ - switch (which) + for (i = 0; i < 3; i++) { - case 0: - if (sFactorySwapScreen->inEnemyScreen == TRUE) - Swap_PrintActionString(gText_PkmnForSwap, 8, 3); - break; - case 1: - Swap_PrintActionString(gText_Cancel3, 32, 3); - break; + SetMonData(&gPlayerParty[i], + MON_DATA_HELD_ITEM, + &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[i].monId].itemTableId]); } - CopyWindowToVram(3, 3); } -static void Swap_PrintMonSpecies2(void) +u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1) { - u16 species; - u8 x; - u16 pal[5]; + u8 a1; + u8 a2 = (arg1 != 0) ? 1 : 0; - CpuCopy16(gUnknown_08610918, pal, 8); - if (!sFactorySwapScreen->fromSummaryScreen) - pal[4] = gPlttBufferFaded[228]; + if (arg0 > 8) + a1 = 7; else - pal[4] = sFactorySwapScreen->unk24; - LoadPalette(pal, 0xF0, 0xA); + a1 = arg0; - PutWindowTilemap(7); - FillWindowPixelBuffer(7, 0); - if (sFactorySwapScreen->cursorPos > 2) - { - CopyWindowToVram(7, 3); - } - else - { - u8 monId = sFactorySwapScreen->cursorPos; - if (!sFactorySwapScreen->inEnemyScreen) - species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); - else - species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(7, 1, x, 1, gUnknown_08610925, 0, gStringVar4); - CopyWindowToVram(7, 3); - } + return sFixedIVTable[a1][a2]; } -static void Swap_PrintMonSpecies3(void) +void FillFactoryBrainParty(void) { - u16 species; - u8 x; + s32 i, j, k; + u16 species[3]; + u16 heldItems[3]; + u8 friendship; + s32 monLevel; + u8 fixedIV; + u32 otId; - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); - CpuCopy16(gPlttBufferUnfaded + 240, gPlttBufferFaded + 224, 10); + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + fixedIV = GetFactoryMonFixedIV(challengeNum + 2, 0); + monLevel = SetFacilityPtrsGetLevel(); + i = 0; + otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); - if (sFactorySwapScreen->cursorPos > 2) + while (i != 3) { - CopyWindowToVram(1, 2); - } - else - { - u8 monId = sFactorySwapScreen->cursorPos; - if (!sFactorySwapScreen->inEnemyScreen) - species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); - else - species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - StringCopy(gStringVar4, gSpeciesNames[species]); - x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4); - CopyWindowToVram(1, 3); - } -} - -static void Swap_PrintMonCategory(void) -{ - u16 species; - u8 text[30]; - u8 x; - u8 monId = sFactorySwapScreen->cursorPos; + u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE); - FillWindowPixelBuffer(8, 0); - if (monId > 2) - { - CopyWindowToVram(8, 2); - } - else - { - PutWindowTilemap(8); - if (!sFactorySwapScreen->inEnemyScreen) - species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); - else - species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(8, 1, text, x, 1, 0, NULL); - CopyWindowToVram(8, 2); - } -} + if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN) + continue; + if (monLevel == 50 && monSetId > 849) + continue; -static void Swap_InitActions(u8 id) -{ - if (sFactorySwapScreen->fromSummaryScreen != TRUE) - { - switch (id) + for (j = 0; j < 6; j++) { - case ACTIONS_PLAYER_SCREEN: - sFactorySwapScreen->inEnemyScreen = FALSE; - sFactorySwapScreen->cursorPos = 0; - sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_PlayerScreenActions); - sFactorySwapScreen->actionsData = sSwap_PlayerScreenActions; - break; - case ACTIONS_ENEMY_SCREEN: - sFactorySwapScreen->inEnemyScreen = TRUE; - sFactorySwapScreen->cursorPos = 0; - sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_EnemyScreenActions); - sFactorySwapScreen->actionsData = sSwap_EnemyScreenActions; - break; + if (monSetId == gSaveBlock2Ptr->frontier.field_E70[j].monId) + break; } - } -} - -static void Swap_RunMenuOptionFunc(u8 taskId) -{ - sSwap_CurrentTableFunc = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; - sSwap_CurrentTableFunc(taskId); -} - -static void sub_819F0CC(u8 taskId) -{ - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819D9EC; -} + if (j != 6) + continue; -static void sub_819F114(u8 taskId) -{ - gTasks[taskId].data[0] = 6; - gTasks[taskId].func = Task_FromSwapScreenToSummaryScreen; -} - -static void sub_819F134(u8 taskId) -{ - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; -} - -static void Swap_RunActionFunc(u8 taskId) -{ - sSwap_CurrentTableFunc = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; - sSwap_CurrentTableFunc(taskId); -} + for (k = 0; k < i; k++) + { + if (species[k] == gFacilityTrainerMons[monSetId].species) + break; + } + if (k != i) + continue; -static void Swap_ActionCancel(u8 taskId) -{ - gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819CC24); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].func = sub_819D588; -} + for (k = 0; k < i; k++) + { + if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) + break; + } + if (k != i) + continue; -static void Swap_ActionPkmnForSwap(u8 taskId) -{ - gTasks[taskId].data[6] = (u32)(sub_819D9EC) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819D9EC); - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819D588; -} + species[i] = gFacilityTrainerMons[monSetId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]; + CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i], + gFacilityTrainerMons[monSetId].species, + monLevel, + gFacilityTrainerMons[monSetId].nature, + fixedIV, + gFacilityTrainerMons[monSetId].evSpread, + otId); -static void Swap_ActionMon(u8 taskId) -{ - if (!sFactorySwapScreen->inEnemyScreen) - { - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenMenu) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenMenu); - gTasks[taskId].data[5] = 2; - } - else if (Swap_AlreadyHasSameSpecies(sFactorySwapScreen->cursorPos) == TRUE) - { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = Task_SwapCantHaveSameMons; - return; - } - else - { - gTasks[taskId].data[6] = (u32)(sub_819CCD4) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819CCD4); - gTasks[taskId].data[5] = 0; + friendship = 0; + for (k = 0; k < 4; k++) + SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k); + SetMonData(&gEnemyParty[i], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + i++; } - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819D588; -} - -static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) -{ - *arg0 = CreateSprite(&gUnknown_08610894, 120, 64, 1); - gSprites[*arg0].callback = sub_819F600; - gSprites[*arg0].data[7] = swapScreen; - *arg1 = TRUE; } -static void Swap_ShowSummaryMonSprite(void) +static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2) { - struct Pokemon *mon; - u16 species; - u32 personality, otId; - - sFactorySwapScreen->unk2C.field1 = CreateSprite(&gUnknown_08610894, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->unk2C.field1], 2); - - mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; - species = GetMonData(mon, MON_DATA_SPECIES, NULL); - personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; - - gSprites[sFactorySwapScreen->unk2C.field1].invisible = TRUE; -} + u16 range, ret; + u16 adder; -static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) -{ - u8 taskId; - - FreeAndDestroyMonPicSprite(arg0.field0); - taskId = CreateTask(sub_819F7B4, 1); - gTasks[taskId].data[7] = swapScreen; - gTasks[taskId].data[6] = arg0.field1; - gTasks[taskId].func(taskId); - *arg1 = TRUE; -} - -static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1) -{ - FreeAndDestroyMonPicSprite(arg0.field0); - FreeOamMatrix(gSprites[arg0.field1].oam.matrixNum); - DestroySprite(&gSprites[arg0.field1]); - *arg1 = FALSE; -} - -static void Task_SwapCantHaveSameMons(u8 taskId) -{ - if (sFactorySwapScreen->unk30 == TRUE) - return; + if (lvlMode == FRONTIER_LVL_50) + adder = 0; + else + adder = 8; - switch (gTasks[taskId].data[0]) + if (challengeNum < 7) { - case 0: - Swap_PrintOnInfoWindow(gText_SamePkmnInPartyAlready); - sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].data[0]++; - break; - case 1: - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (arg2) { - PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0]++; + range = (sMonsToChooseFrom[adder + challengeNum + 1][1] - sMonsToChooseFrom[adder + challengeNum + 1][0]) + 1; + ret = Random() % range; + ret += sMonsToChooseFrom[adder + challengeNum + 1][0]; } - break; - case 2: - if (sFactorySwapScreen->unk30 != TRUE) + else { - FillWindowPixelBuffer(5, 0); - CopyWindowToVram(5, 2); - gTasks[taskId].data[0]++; + range = (sMonsToChooseFrom[adder + challengeNum][1] - sMonsToChooseFrom[adder + challengeNum][0]) + 1; + ret = Random() % range; + ret += sMonsToChooseFrom[adder + challengeNum][0]; } - break; - case 3: - Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); - gTasks[taskId].data[0]++; - break; - case 4: - Swap_PrintMonSpecies3(); - sub_819EADC(); - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - gTasks[taskId].func = Task_HandleSwapScreenChooseMons; - break; } -} - -static bool8 Swap_AlreadyHasSameSpecies(u8 monId) -{ - u8 i; - u16 species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - - for (i = 0; i < 3; i++) + else { - if (i != sFactorySwapScreen->playerMonId && (u16)(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL)) == species) - return TRUE; + u16 num = challengeNum; + if (num != 7) + num = 7; + range = (sMonsToChooseFrom[adder + num][1] - sMonsToChooseFrom[adder + num][0]) + 1; + ret = Random() % range; + ret += sMonsToChooseFrom[adder + num][0]; } - return FALSE; + + return ret; } -static void sub_819F600(struct Sprite *sprite) +u8 sub_81A6F70(u8 battleMode, u8 lvlMode) { - u8 taskId; + u8 ret; + u8 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; - if (sprite->affineAnimEnded) - { - sprite->invisible = TRUE; - taskId = CreateTask(sub_819F69C, 1); - gTasks[taskId].data[7] = sprite->data[7]; - gTasks[taskId].func(taskId); - sprite->callback = SpriteCallbackDummy; - } -} + if (rents < 15) + ret = 0; + else if (rents < 22) + ret = 1; + else if (rents < 29) + ret = 2; + else if (rents < 36) + ret = 3; + else if (rents < 43) + ret = 4; + else + ret = 5; -static void sub_819F654(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - FreeOamMatrix(sprite->oam.matrixNum); - if (sprite->data[7] == TRUE) - sFactorySwapScreen->unk30 = FALSE; - else - sub_819BE20(FALSE); - DestroySprite(sprite); - } + return ret; } -static void sub_819F69C(u8 taskId) +u32 GetAiScriptsInBattleFactory(void) { - struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (lvlMode == FRONTIER_LVL_TENT) { - case 0: - task->data[3] = 88; - task->data[24] = 152; // BUG: writing outside the array's bounds. - task->data[5] = 64; - task->data[8] = 65; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - break; - case 1: - ShowBg(3); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - break; - case 2: - task->data[5] -= 4; - task->data[8] += 4; - if (task->data[5] <= 32 || task->data[8] >= 96) - { - task->data[5] = 32; - task->data[8] = 96; - } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] != 32) - return; - break; - default: - DestroyTask(taskId); - // UB: Should not use the task after it has been deleted. - if (gTasks[taskId].data[7] == TRUE) - Swap_ShowMonSprite(); - else - Summary_ShowMonSprite(); - return; + return 0; } - task->data[0]++; -} - -static void sub_819F7B4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + else { - default: - HideBg(3); - gSprites[task->data[6]].data[7] = task->data[7]; - gSprites[task->data[6]].invisible = FALSE; - gSprites[task->data[6]].callback = sub_819F654; - StartSpriteAffineAnim(&gSprites[task->data[6]], 1); - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - DestroyTask(taskId); - break; - case 0: - task->data[3] = 88; - task->data[24] = 152; // BUG: writing outside the array's bounds. - task->data[5] = 32; - task->data[8] = 96; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - task->data[0]++; - break; - case 1: - task->data[5] += 4; - task->data[8] -= 4; - if (task->data[5] >= 64 || task->data[8] <= 65) - { - task->data[5] = 64; - task->data[8] = 65; - } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] == 64) - task->data[0]++; - break; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; + else if (challengeNum < 2) + return 0; + else if (challengeNum < 4) + return AI_SCRIPT_CHECK_BAD_MOVE; + else + return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; } } -static void Swap_ShowMonSprite(void) +void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 moveArg, u8 moveSlot) { - struct Pokemon *mon; - u16 species; - u32 personality, otId; - - if (!sFactorySwapScreen->inEnemyScreen) - mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; - else - mon = &gEnemyParty[sFactorySwapScreen->cursorPos]; - - species = GetMonData(mon, MON_DATA_SPECIES, NULL); - personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; - - sFactorySwapScreen->unk30 = FALSE; + u16 move = moveArg; + if (moveArg == MOVE_RETURN) + move = MOVE_FRUSTRATION; + SetMonMoveSlot(mon, move, moveSlot); } diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c new file mode 100644 index 000000000..255cf5aa1 --- /dev/null +++ b/src/battle_factory_screen.c @@ -0,0 +1,4111 @@ +#include "global.h" +#include "battle_factory_screen.h" +#include "battle_factory.h" +#include "sprite.h" +#include "event_data.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "text.h" +#include "palette.h" +#include "task.h" +#include "main.h" +#include "malloc.h" +#include "bg.h" +#include "gpu_regs.h" +#include "string_util.h" +#include "international_string_util.h" +#include "window.h" +#include "data2.h" +#include "decompress.h" +#include "pokemon_summary_screen.h" +#include "sound.h" +#include "pokedex.h" +#include "util.h" +#include "trainer_pokemon_sprites.h" +#include "constants/battle_frontier.h" +#include "constants/songs.h" +#include "constants/rgb.h" + +// Select_ refers to the first Pokemon selection screen where you choose 3 Pokemon. +// Swap_ refers to the consecutive selection screen where you can keep your Pokemon or swap one with beaten trainer's. + +#define MENU_SUMMARY 0 +#define MENU_RENT 1 +#define MENU_DESELECT 1 +#define MENU_OTHERS 2 +#define MENU_OPTIONS_COUNT 3 + +#define SELECTABLE_MONS_COUNT 6 + +#define TAG_PAL_BALL_GREY 0x64 +#define TAG_PAL_BALL_SELECTED 0x65 +#define TAG_PAL_66 0x66 +#define TAG_PAL_67 0x67 + +#define TAG_TILE_64 0x64 +#define TAG_TILE_65 0x65 +#define TAG_TILE_66 0x66 +#define TAG_TILE_67 0x67 +#define TAG_TILE_68 0x68 +#define TAG_TILE_69 0x69 +#define TAG_TILE_6A 0x6A +#define TAG_TILE_6B 0x6B +#define TAG_TILE_6C 0x6C +#define TAG_TILE_6D 0x6D + +struct FactorySelecteableMon +{ + u16 monSetId; + u16 spriteId; + u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon + struct Pokemon monData; +}; + +struct UnkFactoryStruct +{ + u8 field0; + u8 field1; +}; + +struct FactorySelectMonsStruct +{ + u8 menuCursorPos; + u8 menuCursor1SpriteId; + u8 menuCursor2SpriteId; + u8 cursorPos; + u8 cursorSpriteId; + u8 selectingMonsState; + bool8 fromSummaryScreen; + u8 yesNoCursorPos; + u8 unused8; + struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; + struct UnkFactoryStruct unk294[3]; + bool8 unk2A0; + u8 fadeSpeciesNameTaskId; + bool8 unk2A2; + u16 unk2A4; + bool8 unk2A6; + u8 unk2A7; + u8 unk2A8; + u8 unk2A9; +}; + +// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. +#define ACTIONS_PLAYER_SCREEN 0 +#define ACTIONS_ENEMY_SCREEN 1 + +struct SwapActionIdAndFunc +{ + u8 id; + void (*func)(u8 taskId); +}; + +struct FactorySwapMonsStruct +{ + u8 menuCursorPos; + u8 menuCursor1SpriteId; + u8 menuCursor2SpriteId; + u8 cursorPos; + u8 cursorSpriteId; + u8 ballSpriteIds[3]; + u8 unk8[2][3]; + u8 unkE[2][2]; + u8 playerMonId; + u8 enemyMonId; + bool8 inEnemyScreen; + bool8 fromSummaryScreen; + u8 yesNoCursorPos; + u8 actionsCount; + const struct SwapActionIdAndFunc *actionsData; + u8 unused1C[4]; + bool8 monSwapped; + u8 fadeSpeciesNameTaskId; + bool8 unk22; + u16 unk24; + bool8 unk26; + u8 unk27; + u8 unk28; + u8 unk29; + struct UnkFactoryStruct unk2C; + bool8 unk30; +}; + +extern u8 (*gUnknown_030062E8)(void); +extern u8 gUnknown_0203CF20; + +extern const u16 gBattleFrontierHeldItems[]; +extern const struct FacilityMon gBattleFrontierMons[]; +extern const struct FacilityMon gSlateportBattleTentMons[]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; +extern const u32 gUnknown_085B18AC[]; + +// This file's functions. +static void sub_819A44C(struct Sprite *sprite); +static void CB2_InitSelectScreen(void); +static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); +static void Select_InitMonsData(void); +static void Select_InitAllSprites(void); +static void Select_ShowSummaryMonSprite(void); +static void Select_PrintSelectMonString(void); +static void Select_PrintMonSpecies(void); +static void Select_PrintMonCategory(void); +static void Select_PrintRentalPkmnString(void); +static void Select_CopyMonsToPlayerParty(void); +static void sub_819C4B4(void); +static void Select_ShowYesNoOptions(void); +static void sub_819C568(void); +static void Select_ShowMenuOptions(void); +static void Select_PrintMenuOptions(void); +static void Select_PrintYesNoOptions(void); +static void Task_SelectFadeSpeciesName(u8 taskId); +static void sub_819C1D0(u8 taskId); +static void Task_HandleSelectionScreenChooseMons(u8 taskId); +static void Task_HandleSelectionScreenMenu(u8 taskId); +static void CreateFrontierFactorySelectableMons(u8 firstMonId); +static void CreateTentFactorySelectableMons(u8 firstMonId); +static void Select_SetBallSpritePaletteNum(u8 id); +static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1); +static void sub_819B958(u8 windowId); +static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen); +static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); +static u8 Select_RunMenuOptionFunc(void); +static u8 sub_819BC9C(void); +static u8 Select_OptionSummary(void); +static u8 Select_OptionOthers(void); +static u8 Select_OptionRentDeselect(void); +static bool32 Select_AreSpeciesValid(u16 monSetId); +static void Swap_DestroyAllSprites(void); +static void Swap_ShowYesNoOptions(void); +static void sub_819E8EC(void); +static void sub_819EAC0(void); +static void Swap_UpdateYesNoCursorPosition(s8 direction); +static void Swap_UpdateMenuCursorPosition(s8 direction); +static void sub_819EA64(u8 windowId); +static void sub_819D770(u8 taskId); +static void Task_HandleSwapScreenChooseMons(u8 taskId); +static void sub_819D588(u8 taskId); +static void sub_819F7B4(u8 taskId); +static void Swap_PrintOnInfoWindow(const u8 *str); +static void Swap_ShowMenuOptions(void); +static void Swap_PrintMenuOptions(void); +static void Swap_PrintYesNoOptions(void); +static void Swap_PrintMonSpecies(void); +static void Swap_PrintMonSpecies2(void); +static void Swap_PrintMonSpecies3(void); +static void Swap_PrintMonCategory(void); +static void Swap_InitAllSprites(void); +static void Swap_PrintPkmnSwap(void); +static void sub_819EADC(void); +static void sub_819EAF8(void); +static void CB2_InitSwapScreen(void); +static void Swap_ShowSummaryMonSprite(void); +static void Swap_UpdateActionCursorPosition(s8 direction); +static void Swap_UpdateBallCursorPosition(s8 direction); +static void Swap_RunMenuOptionFunc(u8 taskId); +static void sub_819F0CC(u8 taskId); +static void sub_819F114(u8 taskId); +static void sub_819F134(u8 taskId); +static void Swap_RunActionFunc(u8 taskId); +static void sub_819F69C(u8 taskId); +static void Task_SwapCantHaveSameMons(u8 taskId); +static void Swap_ShowMonSprite(void); +static void Swap_PrintActionStrings(void); +static void Swap_PrintActionStrings2(void); +static void Swap_PrintOneActionString(u8 which); +static void Swap_InitActions(u8 id); +static void sub_819E838(u8 arg0); +static bool8 Swap_AlreadyHasSameSpecies(u8 monId); +static void sub_819F600(struct Sprite *sprite); +static void Swap_ActionMon(u8 taskId); +static void Swap_ActionCancel(u8 taskId); +static void Swap_ActionPkmnForSwap(u8 taskId); + +// Ewram variables +static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSelectMonCardBgTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSelectMenuTilemapBuffer = NULL; +static EWRAM_DATA u8 *sSelectMonCardBgTilemapBuffer = NULL; +static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; +static EWRAM_DATA u8 *sSwapMenuTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSwapMonCardBgTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; +static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; + +// IWRAM bss +static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; +static IWRAM_DATA void (*sSwap_CurrentTableFunc)(u8 taskId); +static IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; + +// Const rom data. +static const u16 gUnknown_0860F13C[] = INCBIN_U16("graphics/unknown/unknown_60F13C.gbapal"); +static const u16 gUnknown_0860F15C[] = INCBIN_U16("graphics/unknown/unknown_60F15C.gbapal"); +static const u16 gUnknown_0860F17C[] = INCBIN_U16("graphics/unknown/unknown_60F17C.gbapal"); +static const u8 gUnknown_0860F1BC[] = INCBIN_U8("graphics/unknown/unknown_60F1BC.4bpp"); +static const u8 gUnknown_0860F3BC[] = INCBIN_U8("graphics/unknown/unknown_60F3BC.4bpp"); +static const u8 gUnknown_0860F43C[] = INCBIN_U8("graphics/unknown/unknown_60F43C.4bpp"); +static const u8 gUnknown_0860F53C[] = INCBIN_U8("graphics/unknown/unknown_60F53C.4bpp"); +static const u8 gUnknown_0860F63C[] = INCBIN_U8("graphics/unknown/unknown_60F63C.4bpp"); +static const u8 gUnknown_0860F6BC[] = INCBIN_U8("graphics/unknown/unknown_60F6BC.4bpp"); +static const u8 gUnknown_0860F7BC[] = INCBIN_U8("graphics/unknown/unknown_60F7BC.4bpp"); +static const u8 gUnknown_0860F83C[] = INCBIN_U8("graphics/unknown/unknown_60F83C.4bpp"); +static const u8 gUnknown_0860F93C[] = INCBIN_U8("graphics/unknown/unknown_60F93C.4bpp"); +static const u8 gUnknown_0860FA3C[] = INCBIN_U8("graphics/unknown/unknown_60FA3C.4bpp"); +static const u8 gUnknown_0861023C[] = INCBIN_U8("graphics/unknown/unknown_61023C.bin"); +static const u8 gUnknown_0861033C[] = INCBIN_U8("graphics/unknown/unknown_61033C.4bpp"); +static const u16 gUnknown_0861039C[] = INCBIN_U16("graphics/unknown/unknown_61039C.gbapal"); + +static const struct SpriteSheet gUnknown_086103BC[] = +{ + {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, + {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, + {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, + {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, + {}, +}; + +static const struct CompressedSpriteSheet gUnknown_086103E4[] = +{ + {gUnknown_085B18AC, 0x800, TAG_TILE_64}, + {}, +}; + +static const struct SpritePalette gUnknown_086103F4[] = +{ + {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, + {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, + {gUnknown_0860F17C, TAG_PAL_66}, + {gUnknown_0861039C, TAG_PAL_67}, + {}, +}; + +u8 static (* const sSelect_MenuOptionFuncs[])(void) = +{ + [MENU_SUMMARY] = Select_OptionSummary, + [MENU_RENT] /*Or Deselect*/ = Select_OptionRentDeselect, + [MENU_OTHERS] = Select_OptionOthers +}; + +static const struct BgTemplate sSelect_BgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 24, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 25, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate sSelect_WindowTemplates[] = +{ + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 2, + .width = 12, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x0001, + }, + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 2, + .width = 11, + .height = 2, + .paletteNum = 14, + .baseBlock = 0x0019, + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 20, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x002f, + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 14, + .width = 8, + .height = 6, + .paletteNum = 15, + .baseBlock = 0x006b, + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 14, + .width = 8, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x009b, + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 0, + .width = 15, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x00bb, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const u16 gUnknown_0861046C[] = INCBIN_U16("graphics/unknown/unknown_61046C.gbapal"); + +static const u8 gUnknown_08610476[] = {0x00, 0x02, 0x00}; +static const u8 gUnknown_08610479[] = {0x00, 0x04, 0x00}; + +static const struct OamData gUnknown_0861047C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_08610484 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_0861048C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_08610494 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 1, +}; + +static const union AnimCmd gUnknown_0861049C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_086104A4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_086104AC[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_086104B4[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(0, 32), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +static const union AnimCmd * const gUnknown_086104FC[] = +{ + gUnknown_0861049C, +}; + +static const union AnimCmd * const gUnknown_08610500[] = +{ + gUnknown_086104A4, +}; + +static const union AnimCmd * const gUnknown_08610504[] = +{ + gUnknown_086104AC, + gUnknown_086104B4, +}; + +static const union AffineAnimCmd gUnknown_0861050C[] = +{ + AFFINEANIMCMD_FRAME(5, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(16, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(32, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(64, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(128, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(256, 5, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_0861056C[] = +{ + AFFINEANIMCMD_FRAME(128, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(64, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(32, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(16, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(5, 5, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_086105BC[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd * const gUnknown_086105CC[] = +{ + gUnknown_0861050C, + gUnknown_0861056C, + gUnknown_086105BC, +}; + +static const struct SpriteTemplate gUnknown_086105D8 = +{ + .tileTag = TAG_TILE_64, + .paletteTag = TAG_PAL_BALL_GREY, + .oam = &gUnknown_0861047C, + .anims = gUnknown_08610504, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_819A44C +}; + +static const struct SpriteTemplate gUnknown_086105F0 = +{ + .tileTag = TAG_TILE_65, + .paletteTag = TAG_PAL_66, + .oam = &gUnknown_08610484, + .anims = gUnknown_086104FC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_08610608 = +{ + .tileTag = TAG_TILE_66, + .paletteTag = TAG_PAL_66, + .oam = &gUnknown_0861048C, + .anims = gUnknown_086104FC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_08610620 = +{ + .tileTag = TAG_TILE_67, + .paletteTag = TAG_PAL_66, + .oam = &gUnknown_0861048C, + .anims = gUnknown_086104FC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_08610638 = +{ + .tileTag = TAG_TILE_6D, + .paletteTag = TAG_PAL_67, + .oam = &gUnknown_08610494, + .anims = gUnknown_08610500, + .images = NULL, + .affineAnims = gUnknown_086105CC, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteSheet gUnknown_08610650[] = +{ + {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, + {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, + {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, + {gUnknown_0860F63C, sizeof(gUnknown_0860F63C), TAG_TILE_68}, + {gUnknown_0860F6BC, sizeof(gUnknown_0860F6BC), TAG_TILE_69}, + {gUnknown_0860F7BC, 0x100, TAG_TILE_6A}, + {gUnknown_0860F83C, sizeof(gUnknown_0860F83C), TAG_TILE_6B}, + {gUnknown_0860F93C, sizeof(gUnknown_0860F93C), TAG_TILE_6C}, + {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, + {}, +}; + +static const struct CompressedSpriteSheet gUnknown_086106A0[] = +{ + {gUnknown_085B18AC, 0x800, TAG_TILE_64}, + {}, +}; + +static const struct SpritePalette gUnknown_086106B0[] = +{ + {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, + {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, + {gUnknown_0860F17C, TAG_PAL_66}, + {gUnknown_0861039C, TAG_PAL_67}, + {}, +}; + +static const struct OamData gUnknown_086106D8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_086106E0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_086106E8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_086106F0 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 1, +}; + +static const union AnimCmd gUnknown_086106F8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_08610700[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_08610708[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_08610710[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(0, 32), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +static const union AnimCmd * const gUnknown_08610758[] = +{ + gUnknown_086106F8, +}; + +static const union AnimCmd * const gUnknown_0861075C[] = +{ + gUnknown_08610700, +}; + +static const union AnimCmd * const gUnknown_08610760[] = +{ + gUnknown_08610708, + gUnknown_08610710, +}; + +static const union AffineAnimCmd gUnknown_08610768[] = +{ + AFFINEANIMCMD_FRAME(5, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(16, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(32, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(64, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(128, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(256, 5, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_086107C8[] = +{ + AFFINEANIMCMD_FRAME(128, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(64, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(32, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(16, 5, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_FRAME(5, 5, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_08610818[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd * const gUnknown_08610828[] = +{ + gUnknown_08610768, + gUnknown_086107C8, + gUnknown_08610818, +}; + +static const struct SpriteTemplate gUnknown_08610834 = +{ + .tileTag = TAG_TILE_64, + .paletteTag = TAG_PAL_BALL_GREY, + .oam = &gUnknown_086106D8, + .anims = gUnknown_08610760, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_819A44C +}; + +static const struct SpriteTemplate gUnknown_0861084C = +{ + .tileTag = TAG_TILE_65, + .paletteTag = TAG_PAL_66, + .oam = &gUnknown_086106E0, + .anims = gUnknown_08610758, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_08610864 = +{ + .tileTag = TAG_TILE_66, + .paletteTag = TAG_PAL_66, + .oam = &gUnknown_086106E8, + .anims = gUnknown_08610758, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_0861087C = +{ + .tileTag = TAG_TILE_67, + .paletteTag = TAG_PAL_66, + .oam = &gUnknown_086106E8, + .anims = gUnknown_08610758, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate gUnknown_08610894 = +{ + .tileTag = TAG_TILE_6D, + .paletteTag = TAG_PAL_67, + .oam = &gUnknown_086106F0, + .anims = gUnknown_0861075C, + .images = NULL, + .affineAnims = gUnknown_08610828, + .callback = SpriteCallbackDummy +}; + +void static (* const sSwap_MenuOptionFuncs[])(u8 taskId) = +{ + sub_819F114, + sub_819F0CC, + sub_819F134, +}; + +static const struct BgTemplate sSwap_BgTemplates[4] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 24, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 25, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 26, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate sSwap_WindowTemplates[] = +{ + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 2, + .width = 12, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x0001, + }, + { + .bg = 2, + .tilemapLeft = 19, + .tilemapTop = 2, + .width = 11, + .height = 2, + .paletteNum = 14, + .baseBlock = 0x0019, + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 20, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x002f, + }, + { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 14, + .width = 9, + .height = 6, + .paletteNum = 15, + .baseBlock = 0x006b, + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 14, + .width = 8, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x00a1, + }, + { + .bg = 2, + .tilemapLeft = 21, + .tilemapTop = 15, + .width = 9, + .height = 5, + .paletteNum = 14, + .baseBlock = 0x006b, + }, + { + .bg = 2, + .tilemapLeft = 10, + .tilemapTop = 2, + .width = 4, + .height = 2, + .paletteNum = 14, + .baseBlock = 0x00c1, + }, + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 2, + .width = 11, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x00c9, + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 0, + .width = 15, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x00df, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const u16 gUnknown_08610918[] = {RGB_BLACK, RGB_BLACK, RGB_WHITE, RGB_BLACK, RGB_RED}; // Palette. +static const u8 gUnknown_08610922[] = {0x0, 0x02, 0x0}; +static const u8 gUnknown_08610925[] = {0x0, 0x04, 0x0}; + +static const struct SwapActionIdAndFunc sSwap_PlayerScreenActions[] = +{ + {1, Swap_ActionMon}, + {1, Swap_ActionMon}, + {1, Swap_ActionMon}, + {3, Swap_ActionCancel}, +}; + +static const struct SwapActionIdAndFunc sSwap_EnemyScreenActions[] = +{ + {1, Swap_ActionMon}, + {1, Swap_ActionMon}, + {1, Swap_ActionMon}, + {2, Swap_ActionPkmnForSwap}, + {3, Swap_ActionCancel}, +}; + +// gfx +extern const u8 gFrontierFactorySelectMenu_Gfx[]; +extern const u8 gFrontierFactorySelectMenu_Tilemap[]; +extern const u16 gFrontierFactorySelectMenu_Pal[]; + +// text +extern const u8 gText_RentalPkmn2[]; +extern const u8 gText_SelectFirstPkmn[]; +extern const u8 gText_SelectSecondPkmn[]; +extern const u8 gText_SelectThirdPkmn[]; +extern const u8 gText_TheseThreePkmnOkay[]; +extern const u8 gText_CantSelectSamePkmn[]; +extern const u8 gText_Summary[]; +extern const u8 gText_Rechoose[]; +extern const u8 gText_Deselect[]; +extern const u8 gText_Rent[]; +extern const u8 gText_Others2[]; +extern const u8 gText_Yes2[]; +extern const u8 gText_Yes3[]; +extern const u8 gText_No2[]; +extern const u8 gText_No3[]; +extern const u8 gText_QuitSwapping[]; +extern const u8 gText_AcceptThisPkmn[]; +extern const u8 gText_SelectPkmnToAccept[]; +extern const u8 gText_SelectPkmnToSwap[]; +extern const u8 gText_PkmnSwap[]; +extern const u8 gText_Swap[]; +extern const u8 gText_Summary2[]; +extern const u8 gText_PkmnForSwap[]; +extern const u8 gText_SamePkmnInPartyAlready[]; +extern const u8 gText_Cancel3[]; + +// code +static void sub_819A44C(struct Sprite *sprite) +{ + if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) + { + if (sprite->animEnded) + { + if (sprite->data[0] != 0) + { + sprite->data[0]--; + } + else if (Random() % 5 == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 32; + } + else + { + StartSpriteAnim(sprite, 1); + } + } + else + { + StartSpriteAnimIfDifferent(sprite, 1); + } + } + else + { + StartSpriteAnimIfDifferent(sprite, 0); + } +} + +static void Select_CB2(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} + +static void Select_VblankCb(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void DoBattleFactorySelectScreen(void) +{ + sFactorySelectScreen = NULL; + SetMainCallback2(CB2_InitSelectScreen); +} + +static void CB2_InitSelectScreen(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + if (sFactorySelectMons != NULL) + FREE_AND_SET_NULL(sFactorySelectMons); + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sSelect_BgTemplates, ARRAY_COUNT(sSelect_BgTemplates)); + InitWindows(sSelect_WindowTemplates); + DeactivateAllTextPrinters(); + gMain.state++; + break; + case 1: + sSelectMenuTilesetBuffer = Alloc(0x440); + sSelectMonCardBgTilesetBuffer = AllocZeroed(0x440); + sSelectMenuTilemapBuffer = Alloc(0x800); + sSelectMonCardBgTilemapBuffer = AllocZeroed(0x800); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSelectMenuTilesetBuffer, 0x440); + CpuCopy16(gUnknown_0861033C, sSelectMonCardBgTilesetBuffer, 0x60); + LoadBgTiles(1, sSelectMenuTilesetBuffer, 0x440, 0); + LoadBgTiles(3, sSelectMonCardBgTilesetBuffer, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, 0x800); + LoadBgTilemap(1, sSelectMenuTilemapBuffer, 0x800, 0); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); + LoadPalette(gUnknown_0861046C, 0xF0, 8); + LoadPalette(gUnknown_0861046C, 0xE0, 10); + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; + LoadPalette(gUnknown_0861039C, 0x20, 4); + gMain.state++; + break; + case 3: + SetBgTilemapBuffer(3, sSelectMonCardBgTilemapBuffer); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 4: + LoadSpritePalettes(gUnknown_086103F4); + LoadSpriteSheets(gUnknown_086103BC); + LoadCompressedObjectPic(gUnknown_086103E4); + ShowBg(0); + ShowBg(1); + SetVBlankCallback(Select_VblankCb); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + { + Select_SetWinRegs(88, 152, 32, 96); + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + } + else + { + HideBg(3); + } + gMain.state++; + break; + case 5: + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + sFactorySelectScreen->cursorPos = gUnknown_0203CF20; + Select_InitMonsData(); + Select_InitAllSprites(); + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + Select_ShowSummaryMonSprite(); + gMain.state++; + break; + case 6: + Select_PrintSelectMonString(); + PutWindowTilemap(2); + gMain.state++; + break; + case 7: + Select_PrintMonCategory(); + PutWindowTilemap(5); + gMain.state++; + break; + case 8: + Select_PrintMonSpecies(); + PutWindowTilemap(1); + gMain.state++; + break; + case 9: + Select_PrintRentalPkmnString(); + PutWindowTilemap(0); + gMain.state++; + break; + case 10: + sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Task_SelectFadeSpeciesName, 0); + if (!sFactorySelectScreen->fromSummaryScreen) + { + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 0; + taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); + gTasks[taskId].data[0] = 0; + } + else + { + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 1; + sFactorySelectScreen->unk2A2 = FALSE; + taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); + gTasks[taskId].data[0] = 13; + } + SetMainCallback2(Select_CB2); + break; + } +} + +static void Select_InitMonsData(void) +{ + u8 i; + + if (sFactorySelectScreen != NULL) + return; + + sFactorySelectScreen = AllocZeroed(sizeof(*sFactorySelectScreen)); + sFactorySelectScreen->cursorPos = 0; + sFactorySelectScreen->selectingMonsState = 1; + sFactorySelectScreen->fromSummaryScreen = FALSE; + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + sFactorySelectScreen->mons[i].selectedId = 0; + + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) + CreateFrontierFactorySelectableMons(0); + else + CreateTentFactorySelectableMons(0); +} + +static void Select_InitAllSprites(void) +{ + u8 i, cursorPos; + s16 x; + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + sFactorySelectScreen->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); + gSprites[sFactorySelectScreen->mons[i].spriteId].data[0] = 0; + Select_SetBallSpritePaletteNum(i); + } + cursorPos = sFactorySelectScreen->cursorPos; + x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; + sFactorySelectScreen->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); + sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); + sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].centerToCornerVecY = 0; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].centerToCornerVecY = 0; +} + +static void Select_DestroyAllSprites(void) +{ + u8 i; + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + DestroySprite(&gSprites[sFactorySelectScreen->mons[i].spriteId]); + + DestroySprite(&gSprites[sFactorySelectScreen->cursorSpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->menuCursor1SpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->menuCursor2SpriteId]); +} + +static void Select_UpdateBallCursorPosition(s8 direction) +{ + u8 cursorPos; + if (direction > 0) // Move cursor right. + { + if (sFactorySelectScreen->cursorPos != SELECTABLE_MONS_COUNT - 1) + sFactorySelectScreen->cursorPos++; + else + sFactorySelectScreen->cursorPos = 0; + } + else // Move cursor left. + { + if (sFactorySelectScreen->cursorPos != 0) + sFactorySelectScreen->cursorPos--; + else + sFactorySelectScreen->cursorPos = SELECTABLE_MONS_COUNT - 1; + } + + cursorPos = sFactorySelectScreen->cursorPos; + gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; +} + +static void Select_UpdateMenuCursorPosition(s8 direction) +{ + if (direction > 0) // Move cursor down. + { + if (sFactorySelectScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + sFactorySelectScreen->menuCursorPos++; + else + sFactorySelectScreen->menuCursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySelectScreen->menuCursorPos != 0) + sFactorySelectScreen->menuCursorPos--; + else + sFactorySelectScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + } + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; +} + +static void Select_UpdateYesNoCursorPosition(s8 direction) +{ + if (direction > 0) // Move cursor down. + { + if (sFactorySelectScreen->yesNoCursorPos != 1) + sFactorySelectScreen->yesNoCursorPos++; + else + sFactorySelectScreen->yesNoCursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySelectScreen->yesNoCursorPos != 0) + sFactorySelectScreen->yesNoCursorPos--; + else + sFactorySelectScreen->yesNoCursorPos = 1; + } + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->yesNoCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->yesNoCursorPos * 16) + 112; +} + +static void Select_HandleMonSelectionChange(void) +{ + u8 i, paletteNum; + u8 cursorPos = sFactorySelectScreen->cursorPos; + if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. + { + paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1) + { + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + if (sFactorySelectScreen->mons[i].selectedId == 2) + break; + } + if (i == SELECTABLE_MONS_COUNT) + return; + else + sFactorySelectScreen->mons[i].selectedId = 1; + } + sFactorySelectScreen->mons[cursorPos].selectedId = 0; + sFactorySelectScreen->selectingMonsState--; + } + else // Select a mon. + { + paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + sFactorySelectScreen->mons[cursorPos].selectedId = sFactorySelectScreen->selectingMonsState; + sFactorySelectScreen->selectingMonsState++; + } + + gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; +} + +static void Select_SetBallSpritePaletteNum(u8 id) +{ + u8 palNum; + + if (sFactorySelectScreen->mons[id].selectedId) + palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + else + palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + + gSprites[sFactorySelectScreen->mons[id].spriteId].oam.paletteNum = palNum; +} + +static void Task_FromSelectScreenToSummaryScreen(u8 taskId) +{ + u8 i; + u8 currMonId; + + switch (gTasks[taskId].data[0]) + { + case 6: + gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 7; + break; + case 7: + if (!gPaletteFade.active) + { + DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); + sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); + Select_DestroyAllSprites(); + FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); + FREE_AND_SET_NULL(sSelectMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); + FreeAllWindowBuffers(); + gTasks[taskId].data[0] = 8; + } + break; + case 8: + sFactorySelectScreen->unk2A4 = gPlttBufferUnfaded[228]; + DestroyTask(taskId); + sFactorySelectScreen->fromSummaryScreen = TRUE; + currMonId = sFactorySelectScreen->cursorPos; + sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT); + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + sFactorySelectMons[i] = sFactorySelectScreen->mons[i].monData; + ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); + break; + } +} + +static void Task_CloseSelectionScreen(u8 taskId) +{ + if (sFactorySelectScreen->unk2A0 != TRUE) + { + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0]++; + break; + case 1: + if (!UpdatePaletteFade()) + { + Select_CopyMonsToPlayerParty(); + DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); + Select_DestroyAllSprites(); + FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); + FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sFactorySelectScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); + } + break; + } + } +} + +static void Task_HandleSelectionScreenYesNo(u8 taskId) +{ + if (sFactorySelectScreen->unk2A0 != TRUE) + { + switch (gTasks[taskId].data[0]) + { + case 10: + sub_819C4B4(); + gTasks[taskId].data[0] = 4; + break; + case 4: + Select_ShowYesNoOptions(); + gTasks[taskId].data[0] = 5; + break; + case 5: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (sFactorySelectScreen->yesNoCursorPos == 0) + { + sub_819C568(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_CloseSelectionScreen; + } + else + { + sub_819B958(4); + sub_819BC9C(); + sFactorySelectScreen->unk2A2 = TRUE; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819B958(4); + sub_819BC9C(); + sFactorySelectScreen->unk2A2 = TRUE; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + Select_UpdateYesNoCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + Select_UpdateYesNoCursorPosition(1); + } + break; + } + } +} + +static void Task_HandleSelectionScreenMenu(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 2: + if (!sFactorySelectScreen->fromSummaryScreen) + sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, FALSE); + gTasks[taskId].data[0] = 9; + break; + case 9: + if (sFactorySelectScreen->unk2A0 != TRUE) + { + Select_ShowMenuOptions(); + sFactorySelectScreen->fromSummaryScreen = FALSE; + gTasks[taskId].data[0] = 3; + } + break; + case 3: + if (gMain.newKeys & A_BUTTON) + { + u8 retVal; + PlaySE(SE_SELECT); + retVal = Select_RunMenuOptionFunc(); + if (retVal == 1) + { + sFactorySelectScreen->unk2A2 = TRUE; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else if (retVal == 2) + { + gTasks[taskId].data[0] = 10; + gTasks[taskId].func = Task_HandleSelectionScreenYesNo; + } + else if (retVal == 3) + { + gTasks[taskId].data[0] = 11; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else + { + gTasks[taskId].data[0] = 6; + gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + sub_819B958(3); + sFactorySelectScreen->unk2A2 = TRUE; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + Select_UpdateMenuCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + Select_UpdateMenuCursorPosition(1); + } + break; + case 12: + if (!gPaletteFade.active) + { + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + { + gPlttBufferFaded[228] = sFactorySelectScreen->unk2A4; + gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; + } + sFactorySelectScreen->fromSummaryScreen = FALSE; + gTasks[taskId].data[0] = 3; + } + break; + case 13: + Select_ShowMenuOptions(); + gTasks[taskId].data[0] = 12; + break; + } +} + +static void Task_HandleSelectionScreenChooseMons(u8 taskId) +{ + if (sFactorySelectScreen->unk2A0 != TRUE) + { + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 1; + sFactorySelectScreen->unk2A2 = TRUE; + } + break; + case 1: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sFactorySelectScreen->unk2A2 = FALSE; + gTasks[taskId].data[0] = 2; + gTasks[taskId].func = Task_HandleSelectionScreenMenu; + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + PlaySE(SE_SELECT); + Select_UpdateBallCursorPosition(-1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + PlaySE(SE_SELECT); + Select_UpdateBallCursorPosition(1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); + } + break; + case 11: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + Select_PrintSelectMonString(); + sFactorySelectScreen->unk2A2 = TRUE; + gTasks[taskId].data[0] = 1; + } + break; + } + } +} + +static void CreateFrontierFactorySelectableMons(u8 firstMonId) +{ + u8 i, j = 0; + u8 ivs = 0; + u8 level = 0; + u8 happiness = 0; + u32 otId = 0; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + u8 var_28 = 0; + + gFacilityTrainerMons = gBattleFrontierMons; + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) + level = 100; + else + level = 50; + + var_28 = sub_81A6F70(battleMode, lvlMode); + otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; + sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; + if (i < var_28) + ivs = GetFactoryMonFixedIV(challengeNum + 1, 0); + else + ivs = GetFactoryMonFixedIV(challengeNum, 0); + CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, + gFacilityTrainerMons[monSetId].species, + level, + gFacilityTrainerMons[monSetId].nature, + ivs, + gFacilityTrainerMons[monSetId].evSpread, + otId); + happiness = 0; + for (j = 0; j < 4; j++) + SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + } +} + +static void CreateTentFactorySelectableMons(u8 firstMonId) +{ + u8 i, j; + u8 ivs = 0; + u8 level = 30; + u8 happiness = 0; + u32 otId = 0; + + gFacilityTrainerMons = gSlateportBattleTentMons; + otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; + sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; + CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, + gFacilityTrainerMons[monSetId].species, + level, + gFacilityTrainerMons[monSetId].nature, + ivs, + gFacilityTrainerMons[monSetId].evSpread, + otId); + happiness = 0; + for (j = 0; j < 4; j++) + SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + } +} + +static void Select_CopyMonsToPlayerParty(void) +{ + u8 i, j; + + for (i = 0; i < 3; i++) + { + for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + { + if (sFactorySelectScreen->mons[j].selectedId == i + 1) + { + gPlayerParty[i] = sFactorySelectScreen->mons[j].monData; + gSaveBlock2Ptr->frontier.field_E70[i].monId = sFactorySelectScreen->mons[j].monSetId; + gSaveBlock2Ptr->frontier.field_E70[i].personality = GetMonData(&gPlayerParty[i].box, MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[i].abilityBit = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ALT_ABILITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL); + break; + } + } + } + CalculatePlayerPartyCount(); +} + +static void Select_ShowMenuOptions(void) +{ + if (!sFactorySelectScreen->fromSummaryScreen) + sFactorySelectScreen->menuCursorPos = 0; + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = FALSE; + + Select_PrintMenuOptions(); +} + +static void Select_ShowYesNoOptions(void) +{ + sFactorySelectScreen->yesNoCursorPos = 0; + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = 112; + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = FALSE; + + Select_PrintYesNoOptions(); +} + +static void sub_819B958(u8 windowId) +{ + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; + FillWindowPixelBuffer(windowId, 0); + CopyWindowToVram(windowId, 2); + ClearWindowTilemap(windowId); +} + +static void Select_PrintRentalPkmnString(void) +{ + FillWindowPixelBuffer(0, 0); + AddTextPrinterParameterized(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); + CopyWindowToVram(0, 3); +} + +static void Select_PrintMonSpecies(void) +{ + u16 species; + u8 x; + u8 monId = sFactorySelectScreen->cursorPos; + + FillWindowPixelBuffer(1, 0); + species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610479, 0, gStringVar4); + CopyWindowToVram(1, 2); +} + +static void Select_PrintSelectMonString(void) +{ + const u8 *str = NULL; + + FillWindowPixelBuffer(2, 0); + if (sFactorySelectScreen->selectingMonsState == 1) + str = gText_SelectFirstPkmn; + else if (sFactorySelectScreen->selectingMonsState == 2) + str = gText_SelectSecondPkmn; + else if (sFactorySelectScreen->selectingMonsState == 3) + str = gText_SelectThirdPkmn; + else + str = gText_TheseThreePkmnOkay; + + AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(2, 2); +} + +static void Select_PrintCantSelectSameMon(void) +{ + FillWindowPixelBuffer(2, 0); + AddTextPrinterParameterized(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); + CopyWindowToVram(2, 2); +} + +static void Select_PrintMenuOptions(void) +{ + u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; + + PutWindowTilemap(3); + FillWindowPixelBuffer(3, 0); + AddTextPrinterParameterized3(3, 1, 7, 1, gUnknown_08610476, 0, gText_Summary); + if (selectedId != 0) + AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Deselect); + else + AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Rent); + + AddTextPrinterParameterized3(3, 1, 7, 33, gUnknown_08610476, 0, gText_Others2); + CopyWindowToVram(3, 3); +} + +static void Select_PrintYesNoOptions(void) +{ + PutWindowTilemap(4); + FillWindowPixelBuffer(4, 0); + AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610476, 0, gText_Yes2); + AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610476, 0, gText_No2); + CopyWindowToVram(4, 3); +} + +static u8 Select_RunMenuOptionFunc(void) +{ + gUnknown_030062E8 = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; + return gUnknown_030062E8(); +} + +static u8 Select_OptionRentDeselect(void) +{ + u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; + u16 monSetId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monSetId; + if (selectedId == 0 && !Select_AreSpeciesValid(monSetId)) + { + Select_PrintCantSelectSameMon(); + sub_819B958(3); + return 3; + } + else + { + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + Select_HandleMonSelectionChange(); + Select_PrintSelectMonString(); + sub_819B958(3); + if (sFactorySelectScreen->selectingMonsState > 3) + return 2; + else + return 1; + } +} + +static u8 sub_819BC9C(void) +{ + sub_819C568(); + Select_HandleMonSelectionChange(); + Select_PrintSelectMonString(); + sub_819B958(3); + if (sFactorySelectScreen->selectingMonsState > 3) + return 2; + else + return 1; +} + +static u8 Select_OptionSummary(void) +{ + return 0; +} + +static u8 Select_OptionOthers(void) +{ + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + sub_819B958(3); + return 1; +} + +static void Select_PrintMonCategory(void) +{ + u16 species; + u8 text[30]; + u8 x; + u8 monId = sFactorySelectScreen->cursorPos; + if (monId < SELECTABLE_MONS_COUNT) + { + PutWindowTilemap(5); + FillWindowPixelBuffer(5, 0); + species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); + CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); + x = GetStringRightAlignXOffset(1, text, 0x76); + AddTextPrinterParameterized(5, 1, text, x, 1, 0, NULL); + CopyWindowToVram(5, 2); + } +} + +static void Summary_ShowMonSprite(void) +{ + u8 monId = sFactorySelectScreen->cursorPos; + struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData; + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + + sFactorySelectScreen->unk2A0 = FALSE; +} + +static void sub_819BE20(bool8 arg0) +{ + sFactorySelectScreen->unk2A0 = arg0; +} + +static void Select_ShowSummaryMonSprite(void) +{ + struct Pokemon *mon; + u16 species; + u32 personality, otId; + + sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 2); + + mon = &sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monData; + species = GetMonData(mon, MON_DATA_SPECIES, NULL); + personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + + gSprites[sFactorySelectScreen->unk294[1].field1].invisible = TRUE; +} + +static void Select_ShowChosenMonsSprites(void) +{ + u8 i, j; + + for (i = 0; i < 3; i++) + { + for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + { + if (sFactorySelectScreen->mons[j].selectedId == i + 1) + { + struct Pokemon *mon = &sFactorySelectScreen->mons[j].monData; + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySelectScreen->unk294[i].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); + gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecY = 0; + break; + } + } + } + sFactorySelectScreen->unk2A0 = FALSE; +} + +static void sub_819C040(struct Sprite *sprite) +{ + u8 taskId; + + if (sprite->affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + { + sprite->invisible = TRUE; + gSprites[sFactorySelectScreen->unk294[0].field1].invisible = TRUE; + gSprites[sFactorySelectScreen->unk294[2].field1].invisible = TRUE; + + taskId = CreateTask(sub_819C1D0, 1); + gTasks[taskId].func(taskId); + + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_819C100(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + { + FreeOamMatrix(sprite->oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[0].field1].oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[2].field1].oam.matrixNum); + + sFactorySelectScreen->unk2A0 = FALSE; + + DestroySprite(&gSprites[sFactorySelectScreen->unk294[0].field1]); + DestroySprite(&gSprites[sFactorySelectScreen->unk294[2].field1]); + DestroySprite(sprite); + } +} + +static void sub_819C1D0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[3] = 16; + task->data[24] = 224; // BUG: writing outside the array's bounds. + task->data[5] = 64; + task->data[8] = 65; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + break; + case 1: + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + break; + case 2: + task->data[5] -= 4; + task->data[8] += 4; + if (task->data[5] <= 32 || task->data[8] >= 96) + { + task->data[5] = 32; + task->data[8] = 96; + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + if (task->data[5] != 32) + return; + break; + default: + DestroyTask(taskId); + Select_ShowChosenMonsSprites(); + return; + } + task->data[0]++; +} + +static void sub_819C2D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + default: + HideBg(3); + gSprites[sFactorySelectScreen->unk294[1].field1].invisible = FALSE; + gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C100; + gSprites[sFactorySelectScreen->unk294[0].field1].invisible = FALSE; + gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->unk294[2].field1].invisible = FALSE; + gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[0].field1], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[2].field1], 1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; + case 0: + task->data[3] = 16; + task->data[24] = 224; // BUG: writing outside the array's bounds. + task->data[5] = 32; + task->data[8] = 96; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + task->data[0]++; + break; + case 1: + task->data[5] += 4; + task->data[8] -= 4; + if (task->data[5] >= 64 || task->data[8] <= 65) + { + task->data[5] = 64; + task->data[8] = 65; + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + if (task->data[5] == 64) + task->data[0]++; + break; + } +} + +static void sub_819C4B4(void) +{ + sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); + sFactorySelectScreen->unk294[0].field1 = CreateSprite(&gUnknown_08610638, 44, 64, 1); + sFactorySelectScreen->unk294[2].field1 = CreateSprite(&gUnknown_08610638, 196, 64, 1); + + gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C040; + gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + + sFactorySelectScreen->unk2A0 = TRUE; +} + +static void sub_819C568(void) +{ + u8 taskId; + + FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[0].field0); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[1].field0); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[2].field0); + + taskId = CreateTask(sub_819C2D4, 1); + gTasks[taskId].func(taskId); + + sFactorySelectScreen->unk2A0 = TRUE; +} + +static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V) +{ + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(mWin0H, nWin0H)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(mWin0V, nWin0V)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); +} + +static bool32 Select_AreSpeciesValid(u16 monSetId) +{ + u8 i, j; + u32 species = gFacilityTrainerMons[monSetId].species; + u8 selectState = sFactorySelectScreen->selectingMonsState; + + for (i = 1; i < selectState; i++) + { + for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + { + if (sFactorySelectScreen->mons[j].selectedId == i) + { + if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monSetId].species == species) + return FALSE; + + break; + } + } + } + + return TRUE; +} + +static void Task_SelectFadeSpeciesName(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + sFactorySelectScreen->unk2A7 = 0; + sFactorySelectScreen->unk2A8 = 0; + sFactorySelectScreen->unk2A6 = TRUE; + gTasks[taskId].data[0] = 1; + break; + case 1: + if (sFactorySelectScreen->unk2A2) + { + if (sFactorySelectScreen->unk2A9) + { + gTasks[taskId].data[0] = 2; + } + else + { + sFactorySelectScreen->unk2A7++; + if (sFactorySelectScreen->unk2A7 > 6) + { + sFactorySelectScreen->unk2A7 = 0; + if (!sFactorySelectScreen->unk2A6) + sFactorySelectScreen->unk2A8--; + else + sFactorySelectScreen->unk2A8++; + } + BlendPalettes(0x4000, sFactorySelectScreen->unk2A8, 0); + if (sFactorySelectScreen->unk2A8 > 5) + { + sFactorySelectScreen->unk2A6 = FALSE; + } + else if (sFactorySelectScreen->unk2A8 == 0) + { + gTasks[taskId].data[0] = 2; + sFactorySelectScreen->unk2A6 = TRUE; + } + } + } + break; + case 2: + if (sFactorySelectScreen->unk2A9 > 14) + { + sFactorySelectScreen->unk2A9 = 0; + gTasks[taskId].data[0] = 1; + } + else + { + sFactorySelectScreen->unk2A9++; + } + break; + } +} + +// Swap Screen's section begins here. + +static void Swap_CB2(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} + +static void Swap_VblankCb(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void CopySwappedMonData(void) +{ + u8 happiness; + + gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId]; + happiness = 0; + SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &happiness); + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].monId; + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].ivs; + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ALT_ABILITY, NULL); +} + +static void Task_FromSwapScreenToSummaryScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 6: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 7; + break; + case 7: + if (!gPaletteFade.active) + { + DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); + sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); + Swap_DestroyAllSprites(); + FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); + FreeAllWindowBuffers(); + gTasks[taskId].data[0] = 8; + } + break; + case 8: + DestroyTask(taskId); + sFactorySwapScreen->fromSummaryScreen = TRUE; + sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; + ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->cursorPos, 3 - 1, CB2_InitSwapScreen); + break; + } +} + +static void Task_CloseSwapScreen(u8 taskId) +{ + if (sFactorySwapScreen->unk30 != TRUE) + { + switch (gTasks[taskId].data[0]) + { + case 0: + if (sFactorySwapScreen->monSwapped == TRUE) + { + gTasks[taskId].data[0]++; + gSpecialVar_Result = 0; + } + else + { + gTasks[taskId].data[0] = 2; + gSpecialVar_Result = 1; + } + break; + case 1: + if (sFactorySwapScreen->monSwapped == TRUE) + { + sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; + CopySwappedMonData(); + } + gTasks[taskId].data[0]++; + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0]++; + break; + case 3: + if (!UpdatePaletteFade()) + { + DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); + Swap_DestroyAllSprites(); + FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sFactorySwapScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); + } + break; + } + } +} + +static void Task_HandleSwapScreenYesNo(u8 taskId) +{ + u16 loPtr, hiPtr; + + if (sFactorySwapScreen->unk30 != TRUE) + { + switch (gTasks[taskId].data[0]) + { + case 4: + Swap_ShowYesNoOptions(); + gTasks[taskId].data[0] = 5; + break; + case 5: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (sFactorySwapScreen->yesNoCursorPos == 0) + { + gTasks[taskId].data[1] = 1; + hiPtr = gTasks[taskId].data[6]; + loPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + else + { + gTasks[taskId].data[1] = 0; + sub_819EA64(4); + hiPtr = gTasks[taskId].data[6]; + loPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gTasks[taskId].data[1] = 0; + sub_819EA64(4); + hiPtr = gTasks[taskId].data[6]; + loPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(1); + } + break; + } + } +} + +static void sub_819CBDC(u8 taskId) +{ + if (gTasks[taskId].data[1] == 1) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_CloseSwapScreen; + } + else + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + } +} + +static void sub_819CC24(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + Swap_PrintOnInfoWindow(gText_QuitSwapping); + sFactorySwapScreen->monSwapped = FALSE; + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; + gTasks[taskId].data[7] = (u32)(sub_819CBDC); + gTasks[taskId].func = Task_HandleSwapScreenYesNo; + } +} + +static void sub_819CC74(u8 taskId) +{ + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + if (gTasks[taskId].data[1] == 1) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_CloseSwapScreen; + } + else + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + } +} + +static void sub_819CCD4(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); + Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); + sFactorySwapScreen->monSwapped = TRUE; + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; + gTasks[taskId].data[7] = (u32)(sub_819CC74); + gTasks[taskId].func = Task_HandleSwapScreenYesNo; + } +} + +static void Task_HandleSwapScreenMenu(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 2: + if (!sFactorySwapScreen->fromSummaryScreen) + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); + gTasks[taskId].data[0] = 9; + break; + case 9: + if (sFactorySwapScreen->unk30 != TRUE) + { + Swap_ShowMenuOptions(); + gTasks[taskId].data[0] = 3; + } + break; + case 3: + if (sFactorySwapScreen->unk30 != TRUE) + { + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + Swap_RunMenuOptionFunc(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + sub_819EA64(3); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + Swap_UpdateMenuCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + Swap_UpdateMenuCursorPosition(1); + } + } + break; + } +} + +static void Task_HandleSwapScreenChooseMons(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + sFactorySwapScreen->unk22 = TRUE; + gTasks[taskId].data[0] = 1; + } + break; + case 1: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sFactorySwapScreen->unk22 = FALSE; + Swap_PrintMonSpecies2(); + sub_819EAC0(); + Swap_RunActionFunc(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sFactorySwapScreen->unk22 = FALSE; + Swap_PrintMonSpecies2(); + sub_819EAC0(); + gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 16; + gTasks[taskId].data[7] = (u32)(sub_819CC24); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].func = sub_819D588; + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + Swap_UpdateBallCursorPosition(-1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + Swap_UpdateBallCursorPosition(1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + Swap_UpdateActionCursorPosition(1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + Swap_UpdateActionCursorPosition(-1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + break; + } +} + +static void Task_SwapFadeSpeciesName(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->unk28 = 0; + sFactorySwapScreen->unk26 = TRUE; + gTasks[taskId].data[0] = 1; + break; + case 1: + if (sFactorySwapScreen->unk22) + { + if (sFactorySwapScreen->unk29) + { + gTasks[taskId].data[0] = 2; + } + else + { + sFactorySwapScreen->unk27++; + if (sFactorySwapScreen->unk27 > 6) + { + sFactorySwapScreen->unk27 = 0; + if (!sFactorySwapScreen->unk26) + sFactorySwapScreen->unk28--; + else + sFactorySwapScreen->unk28++; + } + BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); + if (sFactorySwapScreen->unk28 > 5) + { + sFactorySwapScreen->unk26 = FALSE; + } + else if (sFactorySwapScreen->unk28 == 0) + { + gTasks[taskId].data[0] = 2; + sFactorySwapScreen->unk26 = TRUE; + } + } + } + break; + case 2: + if (sFactorySwapScreen->unk29 > 14) + { + sFactorySwapScreen->unk29 = 0; + gTasks[taskId].data[0] = 1; + } + else + { + sFactorySwapScreen->unk29++; + } + break; + } +} + +static void Task_SwapFadeSpeciesName2(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + sFactorySwapScreen->unk27 = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[0]++; + break; + case 1: + LoadPalette(&gPlttBufferUnfaded[0xF0], 0xE0, 0xA); + gTasks[taskId].data[0]++; + break; + case 2: + if (sFactorySwapScreen->unk28 > 15) + { + gTasks[taskId].data[4] = 1; + gTasks[taskId].data[0]++; + } + sFactorySwapScreen->unk27++; + if (sFactorySwapScreen->unk27 > 3) + { + sFactorySwapScreen->unk27 = 0; + gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; + sFactorySwapScreen->unk28++; + } + BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); + break; + } +} + +static void sub_819D12C(u8 taskId) +{ + s8 i; + u8 var_2C; + bool8 destroyTask; + + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0] = 1; + break; + case 1: + var_2C = 0; + for (i = 2; i >= 0; i--) + { + if (i != 2) + { + u8 posX = var_2C - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + if (posX == 16 || gTasks[taskId].data[i + 2] == 1) + { + var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; + } + else if (posX > 16) + { + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[i + 1]].pos1.x - 48; + } + } + else + { + var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; + } + + if (gTasks[taskId].data[i + 1] == 1) + { + if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x > (i * 48) + 72) + { + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = (i * 48) + 72; + destroyTask = TRUE; + } + else if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x == (i * 48) + 72) + { + destroyTask = TRUE; + } + else + { + destroyTask = FALSE; + } + } + else + { + destroyTask = FALSE; + } + + if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > 240) + { + var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; + if (sFactorySwapScreen->inEnemyScreen == TRUE) + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + else + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + + gTasks[taskId].data[i + 1] = 1; + } + } + if (destroyTask == TRUE) + DestroyTask(taskId); + break; + } +} + +static void sub_819D324(u8 taskId) +{ + u8 i, j; + s32 posX = 0; + s8 r4 = gTasks[taskId].data[3]; + bool8 r1; + s16 currPosX; + u8 taskId2; + + if (gTasks[taskId].data[2] == 1) + r4 *= -1; + + switch (gTasks[taskId].data[0]) + { + case 0: + currPosX = gSprites[sFactorySwapScreen->unk8[0][0]].pos1.x; + if (!gTasks[taskId].data[2]) + { + if (currPosX + r4 < 240) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 240; + } + } + else + { + if (currPosX + r4 > 160) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 160; + } + } + + if (r1 == TRUE) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 2; j++) + gSprites[sFactorySwapScreen->unk8[j][i]].pos1.x += r4; + } + } + else + { + for (j = 0; j < 2; j++) + { + gSprites[sFactorySwapScreen->unk8[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->unk8[j][1]].pos1.x = posX + 16; + gSprites[sFactorySwapScreen->unk8[j][2]].pos1.x = posX + 48; + } + taskId2 = gTasks[taskId].data[1]; + gTasks[taskId2].data[3] = 1; + DestroyTask(taskId); + } + break; + case 1: + currPosX = gSprites[sFactorySwapScreen->unkE[0][0]].pos1.x; + if (!gTasks[taskId].data[2]) + { + if (currPosX + r4 < 240) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 240; + } + } + else + { + if (currPosX + r4 > 192) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 192; + } + } + + if (r1 == TRUE) + { + for (i = 0; i < 2; i++) + { + for (j = 0; j < 2; j++) + gSprites[sFactorySwapScreen->unkE[j][i]].pos1.x += r4; + } + } + else + { + for (j = 0; j < 2; j++) + { + gSprites[sFactorySwapScreen->unkE[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->unkE[j][1]].pos1.x = posX + 16; + } + taskId2 = gTasks[taskId].data[1]; + gTasks[taskId2].data[4] = 1; + DestroyTask(taskId); + } + break; + } +} + +static void sub_819D588(u8 taskId) +{ + u8 anotherTaskId; + u16 loPtr, hiPtr; + + switch (gTasks[taskId].data[0]) + { + case 0: + LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); + Swap_PrintActionStrings(); + PutWindowTilemap(5); + gTasks[taskId].data[0]++; + break; + case 1: + sub_819EA64(3); + gTasks[taskId].data[0]++; + break; + case 2: + BeginNormalPaletteFade(0x4000, 0, 0, 0x10, gUnknown_0860F13C[37]); + gTasks[taskId].data[0]++; + break; + case 3: + if (!gPaletteFade.active) + { + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); + if (sFactorySwapScreen->inEnemyScreen == TRUE) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 0; + gTasks[anotherTaskId].data[2] = 0; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[2] = 5; + gTasks[taskId].data[0]++; + } + else + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 1; + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 0; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0] += 2; + } + } + break; + case 4: + if (gTasks[taskId].data[2] == 0) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 0; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2]--; + } + break; + case 5: + if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + { + gTasks[taskId].data[0] = gTasks[taskId].data[5]; + loPtr = gTasks[taskId].data[6]; + hiPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + } + break; + } +} + +static void sub_819D770(u8 taskId) +{ + u8 anotherTaskId; + u16 loPtr, hiPtr; + if (sFactorySwapScreen->unk30 == TRUE) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (sFactorySwapScreen->inEnemyScreen == TRUE) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 0; + gTasks[anotherTaskId].data[2] = 1; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[2] = 10; + gTasks[taskId].data[0]++; + } + else + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 1; + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 1; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0] += 2; + } + break; + case 1: + if (gTasks[taskId].data[2] == 0) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 1; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2]--; + } + break; + case 2: + if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + { + gPlttBufferFaded[226] = gUnknown_0860F13C[37]; + Swap_PrintActionStrings(); + PutWindowTilemap(5); + gTasks[taskId].data[0]++; + } + break; + case 3: + BeginNormalPaletteFade(0x4000, 0, 0x10, 0, gUnknown_0860F13C[37]); + gTasks[taskId].data[0]++; + break; + case 4: + if (!gPaletteFade.active) + { + Swap_PrintOneActionString(0); + gTasks[taskId].data[0]++; + } + break; + case 5: + Swap_PrintOneActionString(1); + PutWindowTilemap(3); + gTasks[taskId].data[0]++; + break; + case 6: + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); + gTasks[taskId].data[0]++; + break; + case 7: + if (!sFactorySwapScreen->inEnemyScreen) + Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); + else + Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); + if (sFactorySwapScreen->cursorPos < 3) + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; + Swap_PrintMonCategory(); + gTasks[taskId].data[0]++; + break; + case 8: + Swap_PrintMonSpecies3(); + sub_819EADC(); + sFactorySwapScreen->unk22 = TRUE; + gTasks[taskId].data[0] = gTasks[taskId].data[5]; + loPtr = gTasks[taskId].data[6]; + hiPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + break; + } +} + +static void sub_819D9EC(u8 taskId) +{ + u8 i; + if (sFactorySwapScreen->unk30 == TRUE) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + Swap_PrintMonSpecies3(); + gTasks[taskId].data[0]++; + break; + case 1: + sub_819EADC(); + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; + gTasks[taskId].data[0]++; + break; + case 2: + CreateTask(sub_819D12C, 0); + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName2; + gTasks[taskId].data[0]++; + break; + case 3: + if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[4] == 1) + { + sub_819EAC0(); + if (!sFactorySwapScreen->inEnemyScreen) + { + Swap_InitActions(ACTIONS_ENEMY_SCREEN); + } + else + { + Swap_InitActions(ACTIONS_PLAYER_SCREEN); + for (i = 0; i < 3; i++) + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + } + gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName; + sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->unk28 = 6; + sFactorySwapScreen->unk26 = FALSE; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; + gTasks[taskId].data[0]++; + } + break; + case 4: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + break; + } +} + +static void Swap_InitStruct(void) +{ + if (sFactorySwapScreen == NULL) + { + sFactorySwapScreen = AllocZeroed(sizeof(*sFactorySwapScreen)); + sFactorySwapScreen->cursorPos = 0; + sFactorySwapScreen->unk30 = FALSE; + sFactorySwapScreen->fromSummaryScreen = FALSE; + } +} + +void DoBattleFactorySwapScreen(void) +{ + sFactorySwapScreen = NULL; + SetMainCallback2(CB2_InitSwapScreen); +} + +static void CB2_InitSwapScreen(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sSwap_BgTemplates, ARRAY_COUNT(sSwap_BgTemplates)); + InitWindows(sSwap_WindowTemplates); + DeactivateAllTextPrinters(); + gMain.state++; + break; + case 1: + sSwapMenuTilesetBuffer = Alloc(0x440); + sSwapMonCardBgTilesetBuffer = AllocZeroed(0x440); + sSwapMenuTilemapBuffer = Alloc(0x800); + sSwapMonCardBgTilemapBuffer = AllocZeroed(0x800); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + ResetAllPicSprites(); + CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSwapMenuTilesetBuffer, 0x440); + CpuCopy16(gUnknown_0861033C, sSwapMonCardBgTilesetBuffer, 0x60); + LoadBgTiles(1, sSwapMenuTilesetBuffer, 0x440, 0); + LoadBgTiles(3, sSwapMonCardBgTilesetBuffer, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, 0x800); + LoadBgTilemap(1, sSwapMenuTilemapBuffer, 0x800, 0); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); + LoadPalette(gUnknown_08610918, 0xF0, sizeof(gUnknown_08610918)); + LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); + LoadPalette(gUnknown_0861039C, 0x20, 4); + gMain.state++; + break; + case 3: + SetBgTilemapBuffer(3, sSwapMonCardBgTilemapBuffer); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 4: + LoadSpritePalettes(gUnknown_086106B0); + LoadSpriteSheets(gUnknown_08610650); + LoadCompressedObjectPic(gUnknown_086106A0); + SetVBlankCallback(Swap_VblankCb); + gMain.state++; + break; + case 5: + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + sFactorySwapScreen->cursorPos = gUnknown_0203CF20; + gMain.state++; + break; + case 6: + Swap_InitStruct(); + Swap_InitAllSprites(); + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + Swap_ShowSummaryMonSprite(); + Swap_InitActions(ACTIONS_PLAYER_SCREEN); + gMain.state++; + break; + case 7: + Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); + PutWindowTilemap(2); + gMain.state++; + break; + case 8: + Swap_PrintMonCategory(); + PutWindowTilemap(8); + gMain.state++; + break; + case 9: + if (!sFactorySwapScreen->fromSummaryScreen) + Swap_PrintMonSpecies(); + PutWindowTilemap(1); + gMain.state++; + break; + case 10: + Swap_PrintPkmnSwap(); + PutWindowTilemap(0); + gMain.state++; + break; + case 11: + gMain.state++; + break; + case 12: + if (sFactorySwapScreen->fromSummaryScreen) + Swap_PrintMonSpecies2(); + gMain.state++; + break; + case 13: + Swap_PrintActionStrings2(); + PutWindowTilemap(3); + gMain.state++; + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + { + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + } + else + { + HideBg(3); + } + gMain.state++; + break; + case 15: + sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Task_SwapFadeSpeciesName, 0); + if (!sFactorySwapScreen->fromSummaryScreen) + { + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 0; + taskId = CreateTask(Task_HandleSwapScreenChooseMons, 0); + gTasks[taskId].data[0] = 0; + } + else + { + sub_819EAF8(); + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; + sFactorySwapScreen->unk22 = FALSE; + taskId = CreateTask(Task_HandleSwapScreenMenu, 0); + gTasks[taskId].data[0] = 2; + } + SetMainCallback2(Swap_CB2); + break; + } +} + +static void Swap_InitAllSprites(void) +{ + u8 i; + u8 x; + struct SpriteTemplate spriteTemplate; + + spriteTemplate = gUnknown_08610834; + spriteTemplate.paletteTag = TAG_PAL_BALL_SELECTED; + + for (i = 0; i < 3; i++) + { + sFactorySwapScreen->ballSpriteIds[i] = CreateSprite(&spriteTemplate, (48 * i) + 72, 64, 1); + gSprites[sFactorySwapScreen->ballSpriteIds[i]].data[0] = 0; + } + sFactorySwapScreen->cursorSpriteId = CreateSprite(&gUnknown_0861084C, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); + sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610864, 176, 112, 0); + sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_0861087C, 176, 144, 0); + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecY = 0; + + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + x = 240; + else + x = 192; + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_68; + sFactorySwapScreen->unk8[0][0] = CreateSprite(&spriteTemplate, 240, 120, 10); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_69; + sFactorySwapScreen->unk8[0][1] = CreateSprite(&spriteTemplate, 256, 120, 10); + sFactorySwapScreen->unk8[0][2] = CreateSprite(&spriteTemplate, 288, 120, 10); + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_6A; + sFactorySwapScreen->unk8[1][0] = CreateSprite(&spriteTemplate, 240, 120, 1); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_6B; + sFactorySwapScreen->unk8[1][1] = CreateSprite(&spriteTemplate, 256, 120, 1); + spriteTemplate.tileTag = TAG_TILE_6C; + sFactorySwapScreen->unk8[1][2] = CreateSprite(&spriteTemplate, 288, 120, 1); + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_68; + sFactorySwapScreen->unkE[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_69; + sFactorySwapScreen->unkE[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_6A; + sFactorySwapScreen->unkE[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_6C; + sFactorySwapScreen->unkE[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); + + for (i = 0; i < 2; i++) + { + gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecY = 0; + + gSprites[sFactorySwapScreen->unk8[i][0]].invisible = TRUE; + gSprites[sFactorySwapScreen->unk8[i][1]].invisible = TRUE; + gSprites[sFactorySwapScreen->unk8[i][2]].invisible = TRUE; + gSprites[sFactorySwapScreen->unkE[i][0]].invisible = TRUE; + gSprites[sFactorySwapScreen->unkE[i][1]].invisible = TRUE; + } + + gSprites[sFactorySwapScreen->unkE[0][0]].invisible = FALSE; + gSprites[sFactorySwapScreen->unkE[0][1]].invisible = FALSE; + gSprites[sFactorySwapScreen->unk8[0][0]].invisible = FALSE; + gSprites[sFactorySwapScreen->unk8[0][1]].invisible = FALSE; + gSprites[sFactorySwapScreen->unk8[0][2]].invisible = FALSE; +} + +static void Swap_DestroyAllSprites(void) +{ + u8 i, j; + + for (i = 0; i < 3; i++) + DestroySprite(&gSprites[sFactorySwapScreen->ballSpriteIds[i]]); + DestroySprite(&gSprites[sFactorySwapScreen->cursorSpriteId]); + DestroySprite(&gSprites[sFactorySwapScreen->menuCursor1SpriteId]); + DestroySprite(&gSprites[sFactorySwapScreen->menuCursor2SpriteId]); + for (i = 0; i < 2; i++) + { + for (j = 0; j < 3; j++) + DestroySprite(&gSprites[sFactorySwapScreen->unk8[i][j]]); + } + for (i = 0; i < 2; i++) + { + for (j = 0; j < 2; j++) + DestroySprite(&gSprites[sFactorySwapScreen->unkE[i][j]]); + } +} + +static void Swap_HandleActionCursorChange(u8 cursorId) +{ + if (cursorId < 3) + { + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; + sub_819E8EC(); + gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].pos1.x; + } + else + { + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; + sub_819E838(sFactorySwapScreen->actionsData[cursorId].id); + } +} + +static void Swap_UpdateBallCursorPosition(s8 direction) +{ + u8 cursorPos; + PlaySE(SE_SELECT); + if (direction > 0) // Move cursor right. + { + if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) + sFactorySwapScreen->cursorPos++; + else + sFactorySwapScreen->cursorPos = 0; + } + else // Move cursor left. + { + if (sFactorySwapScreen->cursorPos != 0) + sFactorySwapScreen->cursorPos--; + else + sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; + } + + cursorPos = sFactorySwapScreen->cursorPos; + Swap_HandleActionCursorChange(cursorPos); +} + +static void Swap_UpdateActionCursorPosition(s8 direction) +{ + u8 cursorPos; + PlaySE(SE_SELECT); + if (direction > 0) // Move cursor down. + { + if (sFactorySwapScreen->cursorPos < 3) + sFactorySwapScreen->cursorPos = 3; + else if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) + sFactorySwapScreen->cursorPos++; + else + sFactorySwapScreen->cursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySwapScreen->cursorPos < 3) + sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; + else if (sFactorySwapScreen->cursorPos != 0) + sFactorySwapScreen->cursorPos--; + else + sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; + } + + cursorPos = sFactorySwapScreen->cursorPos; + Swap_HandleActionCursorChange(cursorPos); +} + +static void Swap_UpdateYesNoCursorPosition(s8 direction) +{ + if (direction > 0) // Move cursor down. + { + if (sFactorySwapScreen->yesNoCursorPos != 1) + sFactorySwapScreen->yesNoCursorPos++; + else + sFactorySwapScreen->yesNoCursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySwapScreen->yesNoCursorPos != 0) + sFactorySwapScreen->yesNoCursorPos--; + else + sFactorySwapScreen->yesNoCursorPos = 1; + } + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->yesNoCursorPos * 16) + 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->yesNoCursorPos * 16) + 112; +} + +static void Swap_UpdateMenuCursorPosition(s8 direction) +{ + PlaySE(SE_SELECT); + if (direction > 0) // Move cursor down. + { + if (sFactorySwapScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + sFactorySwapScreen->menuCursorPos++; + else + sFactorySwapScreen->menuCursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySwapScreen->menuCursorPos != 0) + sFactorySwapScreen->menuCursorPos--; + else + sFactorySwapScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + } + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; +} + +static void sub_819E838(u8 arg0) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (arg0 == 2) + { + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = FALSE; + if (i < 2) + gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + } + else if (arg0 == 3) + { + if (i < 2) + gSprites[sFactorySwapScreen->unkE[1][i]].invisible = FALSE; + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + } + } +} + +static void sub_819E8EC(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + if (i < 2) + gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + } +} + +static void Swap_ShowMenuOptions(void) +{ + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + sFactorySwapScreen->fromSummaryScreen = FALSE; + else + sFactorySwapScreen->menuCursorPos = 0; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = FALSE; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = FALSE; + + Swap_PrintMenuOptions(); +} + +static void Swap_ShowYesNoOptions(void) +{ + sFactorySwapScreen->yesNoCursorPos = 0; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = 112; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = FALSE; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = FALSE; + + Swap_PrintYesNoOptions(); +} + +static void sub_819EA64(u8 windowId) +{ + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; + FillWindowPixelBuffer(windowId, 0); + CopyWindowToVram(windowId, 2); + ClearWindowTilemap(windowId); +} + +static void sub_819EAC0(void) +{ + PutWindowTilemap(1); + FillWindowPixelBuffer(1, 0); + CopyWindowToVram(1, 2); +} + +static void sub_819EADC(void) +{ + PutWindowTilemap(7); + FillWindowPixelBuffer(7, 0); + CopyWindowToVram(7, 2); +} + +static void sub_819EAF8(void) +{ + sub_819EAC0(); + PutWindowTilemap(5); + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); +} + +static void Swap_PrintPkmnSwap(void) +{ + FillWindowPixelBuffer(0, 0x11); + AddTextPrinterParameterized(0, 1, gText_PkmnSwap, 2, 1, 0, NULL); + CopyWindowToVram(0, 3); +} + +static void Swap_PrintMonSpecies(void) +{ + u16 species; + u8 x; + + FillWindowPixelBuffer(1, 0); + if (sFactorySwapScreen->cursorPos > 2) + { + CopyWindowToVram(1, 2); + } + else + { + u8 monId = sFactorySwapScreen->cursorPos; + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4); + CopyWindowToVram(1, 3); + } +} + +static void Swap_PrintOnInfoWindow(const u8 *str) +{ + FillWindowPixelBuffer(2, 0); + AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(2, 2); +} + +static void Swap_PrintMenuOptions(void) +{ + PutWindowTilemap(3); + FillWindowPixelBuffer(3, 0); + AddTextPrinterParameterized3(3, 1, 15, 1, gUnknown_08610922, 0, gText_Summary2); + AddTextPrinterParameterized3(3, 1, 15, 17, gUnknown_08610922, 0, gText_Swap); + AddTextPrinterParameterized3(3, 1, 15, 33, gUnknown_08610922, 0, gText_Rechoose); + CopyWindowToVram(3, 3); +} + +static void Swap_PrintYesNoOptions(void) +{ + PutWindowTilemap(4); + FillWindowPixelBuffer(4, 0); + AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610922, 0, gText_Yes3); + AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610922, 0, gText_No3); + CopyWindowToVram(4, 3); +} + +static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) +{ + s32 x = GetStringRightAlignXOffset(0, str, 0x46); + AddTextPrinterParameterized3(windowId, 0, x, y, gUnknown_08610922, 0, str); +} + +static void Swap_PrintActionStrings(void) +{ + FillWindowPixelBuffer(5, 0); + switch (sFactorySwapScreen->inEnemyScreen) + { + case TRUE: + Swap_PrintActionString(gText_PkmnForSwap, 0, 5); + case FALSE: + Swap_PrintActionString(gText_Cancel3, 24, 5); + break; + } + CopyWindowToVram(5, 3); +} + +static void Swap_PrintActionStrings2(void) +{ + FillWindowPixelBuffer(3, 0); + switch (sFactorySwapScreen->inEnemyScreen) + { + case TRUE: + Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + case FALSE: + Swap_PrintActionString(gText_Cancel3, 32, 3); + break; + } + CopyWindowToVram(3, 3); +} + +static void Swap_PrintOneActionString(u8 which) +{ + switch (which) + { + case 0: + if (sFactorySwapScreen->inEnemyScreen == TRUE) + Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + break; + case 1: + Swap_PrintActionString(gText_Cancel3, 32, 3); + break; + } + CopyWindowToVram(3, 3); +} + +static void Swap_PrintMonSpecies2(void) +{ + u16 species; + u8 x; + u16 pal[5]; + + CpuCopy16(gUnknown_08610918, pal, 8); + if (!sFactorySwapScreen->fromSummaryScreen) + pal[4] = gPlttBufferFaded[228]; + else + pal[4] = sFactorySwapScreen->unk24; + LoadPalette(pal, 0xF0, 0xA); + + PutWindowTilemap(7); + FillWindowPixelBuffer(7, 0); + if (sFactorySwapScreen->cursorPos > 2) + { + CopyWindowToVram(7, 3); + } + else + { + u8 monId = sFactorySwapScreen->cursorPos; + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(7, 1, x, 1, gUnknown_08610925, 0, gStringVar4); + CopyWindowToVram(7, 3); + } +} + +static void Swap_PrintMonSpecies3(void) +{ + u16 species; + u8 x; + + LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); + CpuCopy16(gPlttBufferUnfaded + 240, gPlttBufferFaded + 224, 10); + + if (sFactorySwapScreen->cursorPos > 2) + { + CopyWindowToVram(1, 2); + } + else + { + u8 monId = sFactorySwapScreen->cursorPos; + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4); + CopyWindowToVram(1, 3); + } +} + +static void Swap_PrintMonCategory(void) +{ + u16 species; + u8 text[30]; + u8 x; + u8 monId = sFactorySwapScreen->cursorPos; + + FillWindowPixelBuffer(8, 0); + if (monId > 2) + { + CopyWindowToVram(8, 2); + } + else + { + PutWindowTilemap(8); + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); + x = GetStringRightAlignXOffset(1, text, 0x76); + AddTextPrinterParameterized(8, 1, text, x, 1, 0, NULL); + CopyWindowToVram(8, 2); + } +} + +static void Swap_InitActions(u8 id) +{ + if (sFactorySwapScreen->fromSummaryScreen != TRUE) + { + switch (id) + { + case ACTIONS_PLAYER_SCREEN: + sFactorySwapScreen->inEnemyScreen = FALSE; + sFactorySwapScreen->cursorPos = 0; + sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_PlayerScreenActions); + sFactorySwapScreen->actionsData = sSwap_PlayerScreenActions; + break; + case ACTIONS_ENEMY_SCREEN: + sFactorySwapScreen->inEnemyScreen = TRUE; + sFactorySwapScreen->cursorPos = 0; + sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_EnemyScreenActions); + sFactorySwapScreen->actionsData = sSwap_EnemyScreenActions; + break; + } + } +} + +static void Swap_RunMenuOptionFunc(u8 taskId) +{ + sSwap_CurrentTableFunc = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; + sSwap_CurrentTableFunc(taskId); +} + +static void sub_819F0CC(u8 taskId) +{ + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; + sub_819EA64(3); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819D9EC; +} + +static void sub_819F114(u8 taskId) +{ + gTasks[taskId].data[0] = 6; + gTasks[taskId].func = Task_FromSwapScreenToSummaryScreen; +} + +static void sub_819F134(u8 taskId) +{ + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + sub_819EA64(3); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; +} + +static void Swap_RunActionFunc(u8 taskId) +{ + sSwap_CurrentTableFunc = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; + sSwap_CurrentTableFunc(taskId); +} + +static void Swap_ActionCancel(u8 taskId) +{ + gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 0x10; + gTasks[taskId].data[7] = (u32)(sub_819CC24); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].func = sub_819D588; +} + +static void Swap_ActionPkmnForSwap(u8 taskId) +{ + gTasks[taskId].data[6] = (u32)(sub_819D9EC) >> 0x10; + gTasks[taskId].data[7] = (u32)(sub_819D9EC); + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819D588; +} + +static void Swap_ActionMon(u8 taskId) +{ + if (!sFactorySwapScreen->inEnemyScreen) + { + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenMenu) >> 0x10; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenMenu); + gTasks[taskId].data[5] = 2; + } + else if (Swap_AlreadyHasSameSpecies(sFactorySwapScreen->cursorPos) == TRUE) + { + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = Task_SwapCantHaveSameMons; + return; + } + else + { + gTasks[taskId].data[6] = (u32)(sub_819CCD4) >> 0x10; + gTasks[taskId].data[7] = (u32)(sub_819CCD4); + gTasks[taskId].data[5] = 0; + } + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819D588; +} + +static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) +{ + *arg0 = CreateSprite(&gUnknown_08610894, 120, 64, 1); + gSprites[*arg0].callback = sub_819F600; + gSprites[*arg0].data[7] = swapScreen; + *arg1 = TRUE; +} + +static void Swap_ShowSummaryMonSprite(void) +{ + struct Pokemon *mon; + u16 species; + u32 personality, otId; + + sFactorySwapScreen->unk2C.field1 = CreateSprite(&gUnknown_08610894, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->unk2C.field1], 2); + + mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; + species = GetMonData(mon, MON_DATA_SPECIES, NULL); + personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. + gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; + + gSprites[sFactorySwapScreen->unk2C.field1].invisible = TRUE; +} + +static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) +{ + u8 taskId; + + FreeAndDestroyMonPicSprite(arg0.field0); + taskId = CreateTask(sub_819F7B4, 1); + gTasks[taskId].data[7] = swapScreen; + gTasks[taskId].data[6] = arg0.field1; + gTasks[taskId].func(taskId); + *arg1 = TRUE; +} + +static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1) +{ + FreeAndDestroyMonPicSprite(arg0.field0); + FreeOamMatrix(gSprites[arg0.field1].oam.matrixNum); + DestroySprite(&gSprites[arg0.field1]); + *arg1 = FALSE; +} + +static void Task_SwapCantHaveSameMons(u8 taskId) +{ + if (sFactorySwapScreen->unk30 == TRUE) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + Swap_PrintOnInfoWindow(gText_SamePkmnInPartyAlready); + sFactorySwapScreen->monSwapped = FALSE; + gTasks[taskId].data[0]++; + break; + case 1: + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + gTasks[taskId].data[0]++; + } + break; + case 2: + if (sFactorySwapScreen->unk30 != TRUE) + { + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); + gTasks[taskId].data[0]++; + } + break; + case 3: + Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); + gTasks[taskId].data[0]++; + break; + case 4: + Swap_PrintMonSpecies3(); + sub_819EADC(); + sFactorySwapScreen->unk22 = TRUE; + gTasks[taskId].data[0] = gTasks[taskId].data[5]; + gTasks[taskId].func = Task_HandleSwapScreenChooseMons; + break; + } +} + +static bool8 Swap_AlreadyHasSameSpecies(u8 monId) +{ + u8 i; + u16 species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + + for (i = 0; i < 3; i++) + { + if (i != sFactorySwapScreen->playerMonId && (u16)(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL)) == species) + return TRUE; + } + return FALSE; +} + +static void sub_819F600(struct Sprite *sprite) +{ + u8 taskId; + + if (sprite->affineAnimEnded) + { + sprite->invisible = TRUE; + taskId = CreateTask(sub_819F69C, 1); + gTasks[taskId].data[7] = sprite->data[7]; + gTasks[taskId].func(taskId); + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_819F654(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + FreeOamMatrix(sprite->oam.matrixNum); + if (sprite->data[7] == TRUE) + sFactorySwapScreen->unk30 = FALSE; + else + sub_819BE20(FALSE); + DestroySprite(sprite); + } +} + +static void sub_819F69C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[3] = 88; + task->data[24] = 152; // BUG: writing outside the array's bounds. + task->data[5] = 64; + task->data[8] = 65; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + break; + case 1: + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + break; + case 2: + task->data[5] -= 4; + task->data[8] += 4; + if (task->data[5] <= 32 || task->data[8] >= 96) + { + task->data[5] = 32; + task->data[8] = 96; + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + if (task->data[5] != 32) + return; + break; + default: + DestroyTask(taskId); + // UB: Should not use the task after it has been deleted. + if (gTasks[taskId].data[7] == TRUE) + Swap_ShowMonSprite(); + else + Summary_ShowMonSprite(); + return; + } + task->data[0]++; +} + +static void sub_819F7B4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + default: + HideBg(3); + gSprites[task->data[6]].data[7] = task->data[7]; + gSprites[task->data[6]].invisible = FALSE; + gSprites[task->data[6]].callback = sub_819F654; + StartSpriteAffineAnim(&gSprites[task->data[6]], 1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; + case 0: + task->data[3] = 88; + task->data[24] = 152; // BUG: writing outside the array's bounds. + task->data[5] = 32; + task->data[8] = 96; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + task->data[0]++; + break; + case 1: + task->data[5] += 4; + task->data[8] -= 4; + if (task->data[5] >= 64 || task->data[8] <= 65) + { + task->data[5] = 64; + task->data[8] = 65; + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + if (task->data[5] == 64) + task->data[0]++; + break; + } +} + +static void Swap_ShowMonSprite(void) +{ + struct Pokemon *mon; + u16 species; + u32 personality, otId; + + if (!sFactorySwapScreen->inEnemyScreen) + mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; + else + mon = &gEnemyParty[sFactorySwapScreen->cursorPos]; + + species = GetMonData(mon, MON_DATA_SPECIES, NULL); + personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; + + sFactorySwapScreen->unk30 = FALSE; +} diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c deleted file mode 100644 index c53f10dca..000000000 --- a/src/battle_frontier_1.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "battle_setup.h" -#include "overworld.h" -#include "random.h" -#include "battle_tower.h" - -extern void SetBattleFacilityTrainerGfxId(u16, u8); - -extern void (* const gUnknown_0860DE50[])(void); -extern const u32 gUnknown_0860DE98[][2]; -extern const u32 gUnknown_0860DEA8[][2]; - -// code -void sub_8195960(void) -{ - gUnknown_0860DE50[gSpecialVar_0x8004](); -} - -void sub_8195980(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - gSaveBlock2Ptr->frontier.field_CA8 = 0; - gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; - gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; - - saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); - gTrainerBattleOpponent_A = 0; -} - -void sub_8195A38(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1]; - break; - case 1: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - break; - case 2: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); - break; - } -} - -void sub_8195AE4(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006; - break; - case 1: - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; - break; - case 2: - if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode]; - else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode]; - break; - } -} - -void sub_8195BB0(void) -{ - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 50) - gSpecialVar_Result = Random() % 3; - else if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 99) - gSpecialVar_Result = 3; - else - gSpecialVar_Result = 4; -} - -void sub_8195C20(void) -{ - gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); -} - -void sub_8195C50(void) -{ - if (gTrainerBattleOpponent_A < 300) - FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); -} - -/* -void sub_8195C7C(void) -{ - u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) - { - u16 wat = 0; - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; - if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode]) - wat = 1; - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][wat] != 0) - gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - } -} -*/ diff --git a/src/battle_interface.c b/src/battle_interface.c index d89d6164d..ec8a06094 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1610,7 +1610,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->field_2A0 & gBitTable[j]) // hmm...? + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & gBitTable[j]) { gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } @@ -1659,7 +1659,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->field_2A1 & gBitTable[j]) // hmm...? + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) // hmm...? { gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3; } diff --git a/src/battle_main.c b/src/battle_main.c index e08e12194..f6c01aee2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1,58 +1,58 @@ #include "global.h" #include "battle.h" -#include "recorded_battle.h" -#include "main.h" -#include "load_save.h" -#include "gpu_regs.h" -#include "scanline_effect.h" -#include "battle_setup.h" -#include "battle_scripts.h" +#include "battle_ai_script_commands.h" +#include "battle_arena.h" +#include "battle_controllers.h" #include "battle_interface.h" -#include "pokemon.h" -#include "palette.h" -#include "task.h" -#include "event_data.h" -#include "constants/species.h" +#include "battle_message.h" +#include "battle_scripts.h" +#include "battle_setup.h" +#include "battle_tower.h" #include "berry.h" -#include "text.h" +#include "bg.h" +#include "data2.h" +#include "decompress.h" +#include "dma3.h" +#include "event_data.h" +#include "evolution_scene.h" +#include "gpu_regs.h" +#include "international_string_util.h" #include "item.h" -#include "constants/items.h" -#include "constants/hold_effects.h" -#include "constants/trainers.h" #include "link.h" #include "link_rfu.h" -#include "bg.h" -#include "dma3.h" -#include "string_util.h" +#include "load_save.h" +#include "main.h" #include "malloc.h" -#include "event_data.h" #include "m4a.h" -#include "window.h" +#include "palette.h" +#include "party_menu.h" +#include "pokeball.h" +#include "pokedex.h" +#include "pokemon.h" #include "random.h" -#include "constants/songs.h" +#include "recorded_battle.h" +#include "roamer.h" +#include "safari_zone.h" +#include "scanline_effect.h" #include "sound.h" -#include "battle_message.h" #include "sprite.h" -#include "util.h" +#include "string_util.h" +#include "task.h" +#include "text.h" #include "trig.h" -#include "battle_ai_script_commands.h" -#include "constants/battle_move_effects.h" -#include "battle_controllers.h" -#include "pokedex.h" +#include "tv.h" +#include "util.h" +#include "window.h" #include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/battle_string_ids.h" +#include "constants/hold_effects.h" +#include "constants/items.h" #include "constants/moves.h" #include "constants/rgb.h" -#include "evolution_scene.h" -#include "roamer.h" -#include "tv.h" -#include "safari_zone.h" -#include "constants/battle_string_ids.h" -#include "data2.h" -#include "decompress.h" -#include "international_string_util.h" -#include "pokeball.h" -#include "party_menu.h" -#include "battle_tower.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/trainers.h" struct UnknownPokemonStruct4 { @@ -109,9 +109,7 @@ extern const u8 gText_Love[]; // functions extern void sub_81B9150(void); extern void sub_80B3AF8(u8 taskId); // cable club -extern void sub_81A56B4(void); // battle frontier 2 extern u8 sub_81A9E28(void); // battle frontier 2 -extern void sub_81A56E8(u8 battlerId); // battle frontier 2 extern void sub_81B8FB0(u8, u8); // party menu extern u8 pokemon_order_func(u8); // party menu extern bool8 InBattlePyramid(void); @@ -3085,8 +3083,8 @@ static void BattleStartClearSetData(void) gBattleResults.shinyWildMon = IsMonShiny(&gEnemyParty[0]); - gBattleStruct->field_2A0 = 0; - gBattleStruct->field_2A1 = 0; + gBattleStruct->arenaLostPlayerMons = 0; + gBattleStruct->arenaLostOpponentMons = 0; } void SwitchInClearSetData(void) @@ -3423,7 +3421,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) } if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - sub_81A56B4(); + BattleArena_InitPoints(); } gBattleMainFunc = BattleIntroDrawPartySummaryScreens; } @@ -5479,7 +5477,7 @@ static void HandleAction_UseMove(void) } if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - sub_81A56E8(gBattlerAttacker); + BattleArena_AddMindPoints(gBattlerAttacker); gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } diff --git a/src/battle_palace.c b/src/battle_palace.c new file mode 100644 index 000000000..d435f7e15 --- /dev/null +++ b/src/battle_palace.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "event_data.h" +#include "battle_setup.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "frontier_util.h" +#include "item.h" +#include "constants/items.h" + +// This file's functions. +static void sub_8195980(void); +static void sub_8195A38(void); +static void sub_8195AE4(void); +static void sub_8195BB0(void); +static void sub_8195C20(void); +static void sub_8195C50(void); +static void sub_8195C7C(void); +static void sub_8195CE4(void); +static void sub_8195D28(void); +static void sub_8195DB8(void); + +// Const rom data. +static void (* const sBattlePalaceFunctions[])(void) = +{ + sub_8195980, + sub_8195A38, + sub_8195AE4, + sub_8195BB0, + sub_8195C20, + sub_8195C50, + sub_8195C7C, + sub_8195CE4, + sub_8195D28, + sub_8195DB8, +}; + +static const u16 gUnknown_0860DE78[] = {ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, ITEM_CALCIUM, ITEM_CARBOS, ITEM_ZINC}; +static const u16 gUnknown_0860DE84[] = {ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, ITEM_LEFTOVERS, ITEM_MENTAL_HERB, ITEM_KINGS_ROCK, ITEM_FOCUS_BAND, ITEM_SCOPE_LENS, ITEM_CHOICE_BAND}; + +static const u32 gUnknown_0860DE98[][2] = +{ + {0x10, 0x20}, + {0x400000, 0x800000}, +}; + +static const u32 gUnknown_0860DEA8[][2] = +{ + {~0x10, ~0x20}, + {~0x400000, ~0x800000}, +}; + +// code +void CallBattlePalaceFunction(void) +{ + sBattlePalaceFunctions[gSpecialVar_0x8004](); +} + +static void sub_8195980(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; + + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +static void sub_8195A38(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC6; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + break; + case 2: + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); + break; + } +} + +static void sub_8195AE4(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_DC6 = gSpecialVar_0x8006; + break; + case 1: + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; + break; + case 2: + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode]; + break; + } +} + +static void sub_8195BB0(void) +{ + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 50) + gSpecialVar_Result = Random() % 3; + else if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 99) + gSpecialVar_Result = 3; + else + gSpecialVar_Result = 4; +} + +static void sub_8195C20(void) +{ + gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u; + SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); +} + +static void sub_8195C50(void) +{ + if (gTrainerBattleOpponent_A < 300) + FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); +} + +static void sub_8195C7C(void) +{ + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) + { + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; + + // Whatever GF planned to do here, they messed up big time. + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][(lvlMode > gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]) ? 1 : 0]) + gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + } +} + +static void sub_8195CE4(void) +{ + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + sub_81A4C30(); +} + +static void sub_8195D28(void) +{ + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 41) + gSaveBlock2Ptr->frontier.field_DC6 = gUnknown_0860DE84[Random() % ARRAY_COUNT(gUnknown_0860DE84)]; + else + gSaveBlock2Ptr->frontier.field_DC6 = gUnknown_0860DE78[Random() % ARRAY_COUNT(gUnknown_0860DE78)]; +} + +static void sub_8195DB8(void) +{ + if (AddBagItem(gSaveBlock2Ptr->frontier.field_DC6, 1) == TRUE) + { + CopyItemName(gSaveBlock2Ptr->frontier.field_DC6, gStringVar1); + gSaveBlock2Ptr->frontier.field_DC6 = 0; + gSpecialVar_Result = TRUE; + } + else + { + gSpecialVar_Result = FALSE; + } +} diff --git a/src/battle_pike.c b/src/battle_pike.c new file mode 100644 index 000000000..a0a50d86e --- /dev/null +++ b/src/battle_pike.c @@ -0,0 +1,1271 @@ +#include "global.h" +#include "battle_pike.h" +#include "event_data.h" +#include "frontier_util.h" +#include "fieldmap.h" +#include "save.h" +#include "battle.h" +#include "random.h" +#include "task.h" +#include "battle_tower.h" +#include "party_menu.h" +#include "malloc.h" +#include "palette.h" +#include "script.h" +#include "battle_setup.h" +#include "constants/event_objects.h" +#include "constants/battle_frontier.h" +#include "constants/abilities.h" +#include "constants/rgb.h" +#include "constants/trainers.h" +#include "constants/species.h" + +#define PIKE_ROOM_SINGLE_BATTLE 0 +#define PIKE_ROOM_HEAL_FULL 1 +#define PIKE_ROOM_NPC 2 +#define PIKE_ROOM_STATUS 3 +#define PIKE_ROOM_HEAL_PART 4 +#define PIKE_ROOM_WILD_MONS 5 +#define PIKE_ROOM_HARD_BATTLE 6 +#define PIKE_ROOM_DOUBLE_BATTLE 7 +#define PIKE_ROOM_BRAIN 8 + +// For the room with a status effect. +#define PIKE_STATUS_KIRLIA 0 +#define PIKE_STATUS_DUSCLOPS 1 + +struct Unk0861231C +{ + u16 unk0; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; +}; + +struct PikeWildMon +{ + u16 species; + u8 levelDelta; + u16 moves[4]; +}; + +extern const struct Unk0861231C gUnknown_0861231C[]; +extern const struct PikeWildMon *const *const gUnknown_08612314[2]; +extern const u16 gUnknown_086123E4[][6]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; + +// IWRAM bss +static IWRAM_DATA u8 sRoomType; +static IWRAM_DATA u8 sStatusMon; +static IWRAM_DATA bool8 sUnknown_0300128E; +static IWRAM_DATA u32 sStatusFlags; +static IWRAM_DATA u8 sUnknown_03001294; + +// This file's functions. +static void sub_81A705C(void); +static void sub_81A7140(void); +static void sub_81A7248(void); +static void sub_81A73B8(void); +static void sub_81A7070(void); +static void sub_81A73EC(void); +static void sub_81A7400(void); +static void sub_81A740C(void); +static void sub_81A7418(void); +static void nullsub_76(void); +static void nullsub_124(void); +static void sub_81A7468(void); +static void sub_81A74CC(void); +static void sub_81A74E0(void); +static void sub_81A7508(void); +static void sub_81A7580(void); +static void sub_81A8090(void); +static void sub_81A80DC(void); +static void sub_81A825C(void); +static void sub_81A827C(void); +static void sub_81A84B4(void); +static void sub_81A84EC(void); +static void sub_81A863C(void); +static void sub_81A8658(void); +static void sub_81A869C(void); +static void sub_81A86C0(void); +static void sub_81A8794(void); +static void sub_81A87E8(void); +static void sub_81A8830(void); +static u8 GetNextRoomType(void); +static void PrepareOneTrainer(bool8 difficult); +static u16 sub_81A7B58(void); +static void PrepareTwoTrainers(void); +static void TryHealMons(u8 healCount); +static void sub_81A7EE4(u8 taskId); +static bool8 AtLeastTwoAliveMons(void); +static u8 SpeciesToPikeMonId(u16 species); +static bool8 CanEncounterWildMon(u8 monLevel); +static u8 sub_81A8590(u8); +static bool8 sub_81A7D8C(struct Task *task); +static bool8 sub_81A7DE8(struct Task *task); + +// Const rom data. +static const u8 gUnknown_086125DC[][4] = +{ + {0x23, 0x46, 0x23, 0x01}, + {0x04, 0x09, 0x05, 0x00}, + {0x15, 0x2a, 0x15, 0x01}, + {0x1c, 0x38, 0x1c, 0x01}, + {0x15, 0x2a, 0x15, 0x01}, + {0x1c, 0x8c, 0x38, 0x01}, + {0x15, 0x46, 0x23, 0x00}, +}; + +static void (* const sBattlePikeFunctions[])(void) = +{ + sub_81A705C, + sub_81A7140, + sub_81A7248, + sub_81A73B8, + sub_81A7070, + sub_81A73EC, + sub_81A7400, + sub_81A740C, + sub_81A7418, + nullsub_76, + nullsub_124, + sub_81A7468, + sub_81A74CC, + sub_81A74E0, + sub_81A7508, + sub_81A7580, + sub_81A8090, + sub_81A80DC, + sub_81A825C, + sub_81A827C, + sub_81A84B4, + sub_81A84EC, + sub_81A863C, + sub_81A8658, + sub_81A869C, + sub_81A86C0, + sub_81A8794, + sub_81A87E8, + sub_81A8830 +}; + +static const u8 gUnknown_0861266C[] = {3, 3, 1, 0, 0, 2, 2, 1, 4}; + +static const u8 gUnknown_08612675[][3] = +{ + {2, 1, 0}, + {2, 0, 1}, + {1, 2, 0}, + {1, 0, 2}, + {0, 2, 1}, + {0, 1, 2}, +}; + +static bool8 (* const gUnknown_08612688[])(struct Task *) = +{ + sub_81A7D8C, sub_81A7DE8 +}; + +static const u32 gUnknown_08612690[] = {0x400, 0x800}; + +// code +void CallBattlePikeFunction(void) +{ + sBattlePikeFunctions[gSpecialVar_0x8004](); +} + +static void sub_81A705C(void) +{ + u8 roomType = GetNextRoomType(); + sRoomType = roomType; +} + +static void sub_81A7070(void) +{ + bool32 setPerson1, setPerson2; + u32 person1; + u16 person2; + + VarSet(VAR_OBJ_GFX_ID_0, EVENT_OBJ_GFX_LINK_RECEPTIONIST); + VarSet(VAR_OBJ_GFX_ID_1, EVENT_OBJ_GFX_DUSCLOPS); + setPerson1 = TRUE; + setPerson2 = FALSE; + person1 = 0; + person2 = 0; + + switch (sRoomType) + { + case PIKE_ROOM_SINGLE_BATTLE: + PrepareOneTrainer(FALSE); + setPerson1 = FALSE; + break; + case PIKE_ROOM_HEAL_FULL: + person1 = EVENT_OBJ_GFX_LINK_RECEPTIONIST; + break; + case PIKE_ROOM_NPC: + person1 = (u8)(sub_81A7B58()); + break; + case PIKE_ROOM_STATUS: + person1 = EVENT_OBJ_GFX_GENTLEMAN; + if (sStatusMon == PIKE_STATUS_DUSCLOPS) + person2 = EVENT_OBJ_GFX_DUSCLOPS; + else + person2 = EVENT_OBJ_GFX_KIRLIA; + setPerson2 = TRUE; + break; + case PIKE_ROOM_HEAL_PART: + person1 = EVENT_OBJ_GFX_GENTLEMAN; + break; + case PIKE_ROOM_WILD_MONS: + setPerson1 = FALSE; + break; + case PIKE_ROOM_HARD_BATTLE: + PrepareOneTrainer(TRUE); + person2 = EVENT_OBJ_GFX_LINK_RECEPTIONIST; + setPerson1 = FALSE; + setPerson2 = TRUE; + break; + case PIKE_ROOM_DOUBLE_BATTLE: + PrepareTwoTrainers(); + setPerson1 = FALSE; + break; + case PIKE_ROOM_BRAIN: + SetFrontierBrainEventObjGfx(FRONTIER_FACILITY_PIKE); + person2 = EVENT_OBJ_GFX_LINK_RECEPTIONIST; + setPerson1 = FALSE; + setPerson2 = TRUE; + break; + default: + return; + } + + if (setPerson1 == TRUE) + VarSet(VAR_OBJ_GFX_ID_0, person1); + if (setPerson2 == TRUE) + VarSet(VAR_OBJ_GFX_ID_1, person2); +} + +static void sub_81A7140(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E02; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeWinStreaks[gSaveBlock2Ptr->frontier.lvlMode]; + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode]; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeTotalStreaks[gSaveBlock2Ptr->frontier.lvlMode]; + break; + case 4: + if (lvlMode != FRONTIER_LVL_50) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x800; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x400; + break; + } +} + +static void sub_81A7248(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_E02 = gSpecialVar_0x8006; + break; + case 1: + if (gSpecialVar_0x8006 <= 9999) + gSaveBlock2Ptr->frontier.pikeWinStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006; + break; + case 2: + if (gSpecialVar_0x8006 <= 9999 && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006; + break; + case 3: + if (gSpecialVar_0x8006 <= 9999) + gSaveBlock2Ptr->frontier.pikeTotalStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006; + break; + case 4: + if (lvlMode != FRONTIER_LVL_50) + { + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= 0x800; + else + gSaveBlock2Ptr->frontier.field_CDC &= ~(0x800); + } + else + { + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= 0x400; + else + gSaveBlock2Ptr->frontier.field_CDC &= ~(0x400); + } + break; + } +} + +static void sub_81A73B8(void) +{ + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum >= 15) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; +} + +static void sub_81A73EC(void) +{ + gSpecialVar_Result = sRoomType; +} + +static void sub_81A7400(void) +{ + sUnknown_0300128E = TRUE; +} + +static void sub_81A740C(void) +{ + sUnknown_0300128E = FALSE; +} + +static void sub_81A7418(void) +{ + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + save_serialize_map(); + TrySavingData(SAVE_LINK); +} + +static void nullsub_76(void) +{ + +} + +static void nullsub_124(void) +{ + +} + +static void sub_81A7468(void) +{ + switch (sStatusFlags) + { + case STATUS1_FREEZE: + gSpecialVar_Result = 0; + break; + case STATUS1_BURN: + gSpecialVar_Result = 1; + break; + case STATUS1_TOXIC_POISON: + gSpecialVar_Result = 2; + break; + case STATUS1_PARALYSIS: + gSpecialVar_Result = 3; + break; + case STATUS1_SLEEP: + gSpecialVar_Result = 4; + break; + } +} + +static void sub_81A74CC(void) +{ + gSpecialVar_Result = sStatusMon; +} + +static void sub_81A74E0(void) +{ + u16 toHeal = (Random() % 2) + 1; + TryHealMons(toHeal); + gSpecialVar_Result = toHeal; +} + +static void sub_81A7508(void) +{ + s32 id; + + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 4) + id = gUnknown_0861231C[sUnknown_03001294].unk2; + else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 10) + id = gUnknown_0861231C[sUnknown_03001294].unk3; + else + id = gUnknown_0861231C[sUnknown_03001294].unk4; + + FrontierSpeechToString(gUnknown_086123E4[id]); +} + +static void sub_81A7580(void) +{ + CreateTask(sub_81A7EE4, 2); +} + +static void HealMon(struct Pokemon *mon) +{ + u8 i; + u16 hp; + u8 ppBonuses; + u8 data[4]; + + for (i = 0; i < 4; i++) + data[i] = 0; + + hp = GetMonData(mon, MON_DATA_MAX_HP); + data[0] = hp; + data[1] = hp >> 8; + SetMonData(mon, MON_DATA_HP, data); + + ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + for (i = 0; i < 4; i++) + { + u16 move = GetMonData(mon, MON_DATA_MOVE1 + i); + data[0] = CalculatePPWithBonus(move, ppBonuses, i); + SetMonData(mon, MON_DATA_PP1 + i, data); + } + + data[0] = 0; + data[1] = 0; + data[2] = 0; + data[3] = 0; + SetMonData(mon, MON_DATA_STATUS, data); +} + +static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status) +{ + u8 ability = GetMonAbility(mon); + bool8 ret = FALSE; + + switch (status) + { + case STATUS1_FREEZE: + if (ability == ABILITY_MAGMA_ARMOR) + ret = TRUE; + break; + case STATUS1_BURN: + if (ability == ABILITY_WATER_VEIL) + ret = TRUE; + break; + case STATUS1_PARALYSIS: + if (ability == ABILITY_LIMBER) + ret = TRUE; + break; + case STATUS1_SLEEP: + if (ability == ABILITY_INSOMNIA || ability == ABILITY_VITAL_SPIRIT) + ret = TRUE; + break; + case STATUS1_TOXIC_POISON: + if (ability == ABILITY_IMMUNITY) + ret = TRUE; + break; + } + return ret; +} + +static bool8 DoesTypePreventStatus(u16 species, u32 status) +{ + bool8 ret = FALSE; + + switch (status) + { + case STATUS1_TOXIC_POISON: + if (gBaseStats[species].type1 == TYPE_STEEL || gBaseStats[species].type1 == TYPE_POISON + || gBaseStats[species].type2 == TYPE_STEEL || gBaseStats[species].type2 == TYPE_POISON) + ret = TRUE; + break; + case STATUS1_FREEZE: + if (gBaseStats[species].type1 == TYPE_ICE || gBaseStats[species].type2 == TYPE_ICE) + ret = TRUE; + break; + case STATUS1_PARALYSIS: + if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type1 == TYPE_ELECTRIC + || gBaseStats[species].type2 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_ELECTRIC) + ret = TRUE; + break; + case STATUS1_BURN: + if (gBaseStats[species].type1 == TYPE_FIRE || gBaseStats[species].type2 == TYPE_FIRE) + ret = TRUE; + break; + case STATUS1_SLEEP: + break; + } + return ret; +} + +static bool8 TryInflictRandomStatus(void) +{ + u8 j, i; + u8 count; + u8 indices[3]; + u32 status; + u16 species; + bool8 statusChosen; + struct Pokemon *mon; + + for (i = 0; i < 3; i++) + indices[i] = i; + for (j = 0; j < 10; j++) + { + u8 temp, id; + + i = Random() % 3; + id = Random() % 3; + SWAP(indices[i], indices[id], temp); + } + + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 4) + count = 1; + else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 9) + count = 2; + else + count = 3; + + status = 0; + do + { + u8 rand; + + statusChosen = FALSE; + rand = Random() % 100; + + if (rand < 35) + sStatusFlags = STATUS1_TOXIC_POISON; + else if (rand < 60) + sStatusFlags = STATUS1_FREEZE; + else if (rand < 80) + sStatusFlags = STATUS1_PARALYSIS; + else if (rand < 90) + sStatusFlags = STATUS1_SLEEP; + else + sStatusFlags = STATUS1_BURN; + + if (status != sStatusFlags) + { + status = sStatusFlags; + j = 0; + for (i = 0; i < 3; i++) + { + mon = &gPlayerParty[indices[i]]; + if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0 + && GetMonData(mon, MON_DATA_HP) != 0) + { + j++; + species = GetMonData(mon, MON_DATA_SPECIES); + if (!DoesTypePreventStatus(species, sStatusFlags)) + { + statusChosen = TRUE; + break; + } + } + if (j == count) + break; + } + if (j == 0) + return FALSE; + } + } while (!statusChosen); + + switch (sStatusFlags) + { + case STATUS1_FREEZE: + sStatusMon = PIKE_STATUS_DUSCLOPS; + break; + case STATUS1_BURN: + if (Random() % 2 != 0) + sStatusMon = PIKE_STATUS_DUSCLOPS; + else + sStatusMon = PIKE_STATUS_KIRLIA; + break; + case STATUS1_PARALYSIS: + case STATUS1_SLEEP: + case STATUS1_TOXIC_POISON: + default: + sStatusMon = PIKE_STATUS_KIRLIA; + break; + } + + j = 0; + for (i = 0; i < 3; i++) + { + mon = &gPlayerParty[indices[i]]; + if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0 + && GetMonData(mon, MON_DATA_HP) != 0) + { + j++; + species = GetMonData(mon, MON_DATA_SPECIES); + if (!DoesAbilityPreventStatus(mon, sStatusFlags) && !DoesTypePreventStatus(species, sStatusFlags)) + SetMonData(mon, MON_DATA_STATUS, &sStatusFlags); + } + if (j == count) + break; + } + + return TRUE; +} + +static bool8 AtLeastOneHealthyMon(void) +{ + u8 i; + u8 healthyMonsCount; + u8 count; + + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 4) + count = 1; + else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 9) + count = 2; + else + count = 3; + + healthyMonsCount = 0; + for (i = 0; i < 3; i++) + { + struct Pokemon *mon = &gPlayerParty[i]; + if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0 + && GetMonData(mon, MON_DATA_HP) != 0) + { + healthyMonsCount++; + } + if (healthyMonsCount == count) + break; + } + + if (healthyMonsCount == 0) + return FALSE; + else + return TRUE; +} + +static u8 GetNextRoomType(void) +{ + u8 sp[8]; + u8 i; + u8 ret; + u8 var; + u8 count; + u8 *allocated; + u8 id; + + if (gSaveBlock2Ptr->frontier.field_E10_2 == PIKE_ROOM_BRAIN) + return gSaveBlock2Ptr->frontier.field_E10_2; + if (gSpecialVar_0x8007 == gSaveBlock2Ptr->frontier.field_E10_1) + { + if (gSaveBlock2Ptr->frontier.field_E10_2 == PIKE_ROOM_STATUS) + TryInflictRandomStatus(); + return gSaveBlock2Ptr->frontier.field_E10_2; + } + + for (i = 0; i < 8; i++) + sp[i] = 0; + + count = 8; + var = gUnknown_0861266C[gSaveBlock2Ptr->frontier.field_E10_2]; + for (i = 0; i < 8; i++) + { + if (gUnknown_0861266C[i] == var) + { + sp[i] = 1; + count--; + } + } + + if (sp[7] != 1 && !AtLeastTwoAliveMons()) + { + sp[7] = 1; + count--; + } + if (sp[3] != 1 && !AtLeastOneHealthyMon()) + { + sp[3] = 1; + count--; + } + if (gSaveBlock2Ptr->frontier.field_E10_3) + { + if (sp[1] != 1) + { + sp[1] = 1; + count--; + } + if (sp[4] != 1) + { + sp[4] = 1; + count--; + } + } + + allocated = AllocZeroed(count); + id = 0; + for (i = 0; i < 8; i++) + { + if (sp[i] == 0) + allocated[id++] = i; + } + + ret = allocated[Random() % count]; + free(allocated); + if (ret == PIKE_ROOM_STATUS) + TryInflictRandomStatus(); + + return ret; +} + +static u16 sub_81A7B58(void) +{ + sUnknown_03001294 = Random() % 25; + return gUnknown_0861231C[sUnknown_03001294].unk0; +} + +static u8 sub_81A7B84(void) +{ + return sUnknown_0300128E; +} + +bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) +{ + s32 i; + s32 monLevel; + u8 headerId = GetBattlePikeWildMonHeaderId(); + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + const struct PikeWildMon *const *const wildMons = gUnknown_08612314[lvlMode]; + u32 abilityBit; + s32 pikeMonId = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL); + pikeMonId = SpeciesToPikeMonId(pikeMonId); + + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) + { + monLevel = GetHighestLevelInPlayerParty(); + if (monLevel < 60) + { + monLevel = 60; + } + else + { + monLevel -= wildMons[headerId][pikeMonId].levelDelta; + if (monLevel < 60) + monLevel = 60; + } + } + else + { + monLevel = 50 - wildMons[headerId][pikeMonId].levelDelta; + } + + if (checkKeenEyeIntimidate == TRUE && !CanEncounterWildMon(monLevel)) + return FALSE; + + SetMonData(&gEnemyParty[0], + MON_DATA_EXP, + &gExperienceTables[gBaseStats[wildMons[headerId][pikeMonId].species].growthRate][monLevel]); + + if (gBaseStats[wildMons[headerId][pikeMonId].species].ability2) + abilityBit = Random() % 2; + else + abilityBit = 0; + SetMonData(&gEnemyParty[0], MON_DATA_ALT_ABILITY, &abilityBit); + for (i = 0; i < 4; i++) + SetMonMoveSlot(&gEnemyParty[0], wildMons[headerId][pikeMonId].moves[i], i); + + CalculateMonStats(&gEnemyParty[0]); + return TRUE; +} + +u8 GetBattlePikeWildMonHeaderId(void) +{ + u8 headerId; + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + + if (winStreak <= 280) + headerId = 0; + else if (winStreak <= 560) + headerId = 1; + else if (winStreak <= 840) + headerId = 2; + else + headerId = 3; + + return headerId; +} + +static void sub_81A7D54(u8 taskId) +{ + while (gUnknown_08612688[gTasks[taskId].data[0]](&gTasks[taskId])); +} + +static bool8 sub_81A7D8C(struct Task *task) +{ + if (task->data[6] == 0 || --task->data[6] == 0) + { + task->data[6] = task->data[1]; + task->data[7] += task->data[4]; + if (task->data[7] > 16) + task->data[7] = 16; + BlendPalettes(0xFFFFFFFF, task->data[7], RGB(11, 11, 11)); + } + + if (task->data[7] >= 16) + { + task->data[0]++; + task->data[6] = task->data[2]; + } + return FALSE; +} + +static bool8 sub_81A7DE8(struct Task *task) +{ + if (task->data[6] == 0 || --task->data[6] == 0) + { + task->data[6] = task->data[2]; + task->data[7] -= task->data[5]; + if (task->data[7] < 0) + task->data[7] = 0; + BlendPalettes(0xFFFFFFFF, task->data[7], RGB(11, 11, 11)); + } + + if (task->data[7] == 0) + { + if (--task->data[3] == 0) + { + DestroyTask(FindTaskIdByFunc(sub_81A7D54)); + } + else + { + task->data[6] = task->data[1]; + task->data[0] = 0; + } + } + return FALSE; +} + +static void sub_81A7E60(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) +{ + u8 taskId = CreateTask(sub_81A7D54, 3); + + gTasks[taskId].data[1] = a0; + gTasks[taskId].data[2] = a1; + gTasks[taskId].data[3] = a2; + gTasks[taskId].data[4] = a3; + gTasks[taskId].data[5] = a4; + gTasks[taskId].data[6] = a0; +} + +static bool8 sub_81A7EC4(void) +{ + if (FindTaskIdByFunc(sub_81A7D54) == 0xFF) + return TRUE; + else + return FALSE; +} + +static void sub_81A7EE4(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[0]++; + sub_81A7E60(0, 0, 3, 2, 2); + } + else + { + if (sub_81A7EC4()) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } + } +} + +static void TryHealMons(u8 healCount) +{ + u8 j, i, k; + u8 indices[3]; + + if (healCount == 0) + return; + + for (i = 0; i < 3; i++) + indices[i] = i; + for (k = 0; k < 10; k++) + { + u8 temp; + + i = Random() % 3; + j = Random() % 3; + SWAP(indices[i], indices[j], temp); + } + + for (i = 0; i < 3; i++) + { + bool32 canBeHealed = FALSE; + struct Pokemon *mon = &gPlayerParty[indices[i]]; + u16 curr = GetMonData(mon, MON_DATA_HP); + u16 max = GetMonData(mon, MON_DATA_MAX_HP); + if (curr < max) + { + canBeHealed = TRUE; + } + else if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) != 0) + { + canBeHealed = TRUE; + } + else + { + u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + for (j = 0; j < 4; j++) + { + u16 move = GetMonData(mon, MON_DATA_MOVE1 + j); + max = CalculatePPWithBonus(move, ppBonuses, j); + curr = GetMonData(mon, MON_DATA_PP1 + j); + if (curr < max) + { + canBeHealed = TRUE; + break; + } + } + } + + if (canBeHealed == TRUE) + { + HealMon(&gPlayerParty[indices[i]]); + if (--healCount == 0) + break; + } + } +} + +static void sub_81A8090(void) +{ + gSpecialVar_Result = InBattlePike(); +} + +bool8 InBattlePike(void) +{ + return (gMapHeader.mapLayoutId == 351 || gMapHeader.mapLayoutId == 352 + || gMapHeader.mapLayoutId == 358 || gMapHeader.mapLayoutId == 359); +} + +static void sub_81A80DC(void) +{ + u8 i, count, id; + u8 *allocated; + + gSpecialVar_Result = 0; + if (sub_81A8590(1)) + { + gSpecialVar_Result = 1; + gSaveBlock2Ptr->frontier.field_E10_1 = Random() % 6; + gSaveBlock2Ptr->frontier.field_E10_2 = PIKE_ROOM_BRAIN; + } + else + { + gSaveBlock2Ptr->frontier.field_E10_1 = Random() % 3; + if (gSaveBlock2Ptr->frontier.field_E10_3) + count = 6; + else + count = 8; + + allocated = AllocZeroed(count); + for (i = 0, id = 0; i < count; i++) + { + if (gSaveBlock2Ptr->frontier.field_E10_3) + { + if (i != PIKE_ROOM_HEAL_FULL && i != PIKE_ROOM_HEAL_PART) + allocated[id++] = i; + } + else + { + allocated[i] = i; + } + } + gSaveBlock2Ptr->frontier.field_E10_2 = allocated[Random() % count]; + free(allocated); + if (gSaveBlock2Ptr->frontier.field_E10_2 == PIKE_ROOM_STATUS && !AtLeastOneHealthyMon()) + gSaveBlock2Ptr->frontier.field_E10_2 = PIKE_ROOM_NPC; + if (gSaveBlock2Ptr->frontier.field_E10_2 == PIKE_ROOM_DOUBLE_BATTLE && !AtLeastTwoAliveMons()) + gSaveBlock2Ptr->frontier.field_E10_2 = PIKE_ROOM_NPC; + } +} + +static void sub_81A825C(void) +{ + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E10_1; +} + +static void sub_81A827C(void) +{ + gSpecialVar_Result = gUnknown_0861266C[gSaveBlock2Ptr->frontier.field_E10_2]; +} + +static void PrepareOneTrainer(bool8 difficult) +{ + s32 i; + u8 lvlMode; + u8 battleNum; + u16 challengeNum; + u16 trainerId; + + if (!difficult) + battleNum = 1; + else + battleNum = 6; + + lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + do + { + trainerId = sub_8162548(challengeNum, battleNum); + for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1; i++) + { + if (gSaveBlock2Ptr->frontier.field_CB4[i] == trainerId) + break; + } + } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1); + + gTrainerBattleOpponent_A = trainerId; + gFacilityTrainers = gBattleFrontierTrainers; + SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14) + gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; +} + +static void PrepareTwoTrainers(void) +{ + s32 i; + u16 trainerId; + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + + gFacilityTrainers = gBattleFrontierTrainers; + do + { + trainerId = sub_8162548(challengeNum, 1); + for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1; i++) + { + if (gSaveBlock2Ptr->frontier.field_CB4[i] == trainerId) + break; + } + } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1); + + gTrainerBattleOpponent_A = trainerId; + SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 14) + gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; + + do + { + trainerId = sub_8162548(challengeNum, 1); + for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) + { + if (gSaveBlock2Ptr->frontier.field_CB4[i] == trainerId) + break; + } + } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); + + gTrainerBattleOpponent_B = trainerId; + SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1); + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14) + gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = gTrainerBattleOpponent_B; +} + +static void sub_81A84B4(void) +{ + u8 i; + + for (i = 0; i < 14; i++) + gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF; +} + +static void sub_81A84EC(void) +{ + if (gSpecialVar_0x8005 == 0) + { + if (gTrainerBattleOpponent_A < TRAINER_RECORD_MIXING_FRIEND) + FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); + } + else if (gSpecialVar_0x8005 == 1) + { + if (gTrainerBattleOpponent_B < TRAINER_RECORD_MIXING_FRIEND) + FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_B].speechBefore); + } +} + +static bool8 AtLeastTwoAliveMons(void) +{ + struct Pokemon *mon; + u8 i, countDead; + + mon = &gPlayerParty[0]; + countDead = 0; + for (i = 0; i < 3; i++, mon++) + { + if (GetMonData(mon, MON_DATA_HP) == 0) + countDead++; + } + + if (countDead >= 2) + return FALSE; + else + return TRUE; +} + +static u8 sub_81A8590(u8 arg0) +{ + u8 symbolsCount; + + u8 var = 5; + u8 ret = 0; + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u16 wins = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + wins += arg0; + symbolsCount = GetPlayerSymbolCountForFacility(FRONTIER_FACILITY_PIKE); + + switch (symbolsCount) + { + case 0: + case 1: + if (wins == gUnknown_086125DC[var][symbolsCount] - gUnknown_086125DC[var][3]) + ret = symbolsCount + 1; + break; + case 2: + default: + if (wins == gUnknown_086125DC[var][0] - gUnknown_086125DC[var][3]) + ret = 3; + else if (wins == gUnknown_086125DC[var][1] - gUnknown_086125DC[var][3] + || (wins > gUnknown_086125DC[var][1] + && (wins - gUnknown_086125DC[var][1] + gUnknown_086125DC[var][3]) % gUnknown_086125DC[var][2] == 0)) + ret = 4; + break; + } + + return ret; +} + +static void sub_81A863C(void) +{ + gSpecialVar_Result = sub_81A8590(0); +} + +static void sub_81A8658(void) +{ + u8 toHealCount = gUnknown_08612675[gSaveBlock2Ptr->frontier.field_E10_1][gSpecialVar_0x8007]; + + TryHealMons(toHealCount); + gSpecialVar_Result = toHealCount; +} + +static void sub_81A869C(void) +{ + gSaveBlock2Ptr->frontier.field_E10_3 = gSpecialVar_0x8005; +} + +static void sub_81A86C0(void) +{ + u8 i, j; + + gSpecialVar_Result = TRUE; + for (i = 0; i < 3; i++) + { + bool32 canBeHealed = FALSE; + struct Pokemon *mon = &gPlayerParty[i]; + u16 curr = GetMonData(mon, MON_DATA_HP); + u16 max = GetMonData(mon, MON_DATA_MAX_HP); + if (curr >= max && pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0) + { + u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + for (j = 0; j < 4; j++) + { + u16 move = GetMonData(mon, MON_DATA_MOVE1 + j); + max = CalculatePPWithBonus(move, ppBonuses, j); + curr = GetMonData(mon, MON_DATA_PP1 + j); + if (curr < max) + { + canBeHealed = TRUE; + break; + } + } + } + else + { + canBeHealed = TRUE; + } + + if (canBeHealed == TRUE) + { + gSpecialVar_Result = FALSE; + break; + } + } +} + +static void sub_81A8794(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + s32 heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], + MON_DATA_HELD_ITEM); + gSaveBlock2Ptr->frontier.field_E12[i] = heldItem; + } +} + +static void sub_81A87E8(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + SetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], + MON_DATA_HELD_ITEM, + &gSaveBlock2Ptr->frontier.field_E12[i]); + } +} + +static void sub_81A8830(void) +{ + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612690[lvlMode])) + gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0; + + gTrainerBattleOpponent_A = 0; + gBattleOutcome = 0; +} + +static bool8 CanEncounterWildMon(u8 enemyMonLevel) +{ + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + { + u8 monAbility = GetMonAbility(&gPlayerParty[0]); + if (monAbility == ABILITY_KEEN_EYE || monAbility == ABILITY_INTIMIDATE) + { + u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL); + if (playerMonLevel > 5 && enemyMonLevel <= playerMonLevel - 5 && Random() % 2 == 0) + return FALSE; + } + } + + return TRUE; +} + +static u8 SpeciesToPikeMonId(u16 species) +{ + u8 ret; + + if (species == SPECIES_SEVIPER) + ret = 0; + else if (species == SPECIES_MILOTIC) + ret = 1; + else + ret = 2; + + return ret; +} diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index e0e35a69f..2225a3e55 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -1,35 +1,35 @@ #include "global.h" -#include "battle_pyramid_bag.h" -#include "main.h" +#include "battle.h" #include "battle_controllers.h" +#include "battle_pyramid_bag.h" #include "bg.h" +#include "decompress.h" +#include "event_data.h" #include "field_effect.h" #include "field_weather.h" +#include "graphics.h" #include "gpu_regs.h" +#include "international_string_util.h" +#include "item.h" +#include "item_icon.h" +#include "item_menu.h" +#include "item_use.h" +#include "list_menu.h" +#include "mail.h" +#include "main.h" #include "malloc.h" #include "menu.h" -#include "overworld.h" #include "menu_helpers.h" #include "overworld.h" #include "palette.h" #include "party_menu.h" +#include "task.h" +#include "text_window.h" #include "scanline_effect.h" #include "script.h" -#include "task.h" -#include "decompress.h" -#include "graphics.h" +#include "sound.h" #include "string_util.h" -#include "list_menu.h" #include "strings.h" -#include "item.h" -#include "sound.h" -#include "item_menu.h" -#include "mail.h" -#include "item_use.h" -#include "event_data.h" -#include "text_window.h" -#include "international_string_util.h" -#include "item_icon.h" #include "constants/items.h" #include "constants/rgb.h" #include "constants/songs.h" diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b652049c4..665ee3750 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -43,6 +43,8 @@ #include "battle_setup.h" #include "overworld.h" #include "party_menu.h" +#include "battle_arena.h" +#include "battle_pike.h" extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; @@ -54,20 +56,15 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM; extern const u8* const gBattleScriptsForMoveEffects[]; // functions -extern void sub_81A5718(u8 battlerId); // battle frontier 2 -extern void sub_81A56B4(void); // battle frontier 2 extern void ShowSelectMovePokemonSummaryScreen(struct Pokemon* party, u8 monPartyId, u8 monCount, void (*callback)(void), u16 move); // pokemon summary screen extern u8 sub_81C1B94(void); // pokemon summary screen extern void sub_81D388C(struct Pokemon* mon, void* statStoreLocation); // pokenav.s extern void sub_81D3640(u8 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5); // pokenav.s extern void sub_81D3784(u8 arg0, void* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4); // pokenav.s extern u8* GetMonNickname(struct Pokemon* mon, u8* dst); // party_menu -extern u8 sub_81A5258(u8* arg0); // battle frontier 2 -extern void sub_81A5BF8(void); // battle frontier 2 -extern void sub_81A5D44(void); // battle frontier 2 +extern u8 BattleArena_ShowJudgmentWindow(u8* arg0); // battle frontier 2 extern void sub_81B8E80(u8 battlerId, u8, u8); // party menu extern bool8 sub_81B1250(void); // ? -extern bool8 InBattlePike(void); extern bool8 InBattlePyramid(void); extern u16 GetBattlePyramidPickupItemId(void); extern u8 sub_813B21C(void); @@ -3549,7 +3546,7 @@ static void atk24(void) for (i = 0; i < 6; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->field_2A0 & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i]))) { HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); } @@ -3562,7 +3559,7 @@ static void atk24(void) for (HP_count = 0, i = 0; i < 6; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->field_2A1 & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) { HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); } @@ -4243,7 +4240,7 @@ static void atk3C_return(void) static void atk3D_end(void) { if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - sub_81A5718(gBattlerAttacker); + BattleArena_AddSkillPoints(gBattlerAttacker); gMoveResultFlags = 0; gActiveBattler = 0; @@ -5000,7 +4997,7 @@ static void atk4E_switchinanim(void) gBattlescriptCurrInstr += 3; if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - sub_81A56B4(); + BattleArena_InitPoints(); } static void atk4F_jumpifcantswitch(void) @@ -6697,34 +6694,34 @@ static void atk76_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = sUnknown_0831C4F8[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)]; } break; - case 9: - i = sub_81A5258(gBattleCommunication); + case VARIOUS_ARENA_JUDGMENT_WINDOW: + i = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]); if (i == 0) return; gBattleCommunication[1] = i; break; - case 10: + case VARIOUS_ARENA_OPPONENT_MON_LOST: gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(1); - gBattleStruct->field_2A1 |= gBitTable[gBattlerPartyIndexes[1]]; + gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; gDisableStructs[1].truantUnknownBit = 1; break; - case 11: + case VARIOUS_ARENA_PLAYER_MON_LOST: gBattleMons[0].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_x400000; - gBattleStruct->field_2A0 |= gBitTable[gBattlerPartyIndexes[0]]; + gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; gDisableStructs[0].truantUnknownBit = 1; break; - case 12: + case VARIOUS_ARENA_BOTH_MONS_LOST: gBattleMons[0].hp = 0; gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_FAINTED(1); gHitMarker |= HITMARKER_x400000; - gBattleStruct->field_2A0 |= gBitTable[gBattlerPartyIndexes[0]]; - gBattleStruct->field_2A1 |= gBitTable[gBattlerPartyIndexes[1]]; + gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; + gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; gDisableStructs[0].truantUnknownBit = 1; gDisableStructs[1].truantUnknownBit = 1; break; @@ -6738,11 +6735,11 @@ static void atk76_various(void) case 15: sub_81A5D44(); break; - case 16: + case VARIOUS_ARENA_JUDGMENT_STRING: BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]); BattlePutTextOnWindow(gDisplayedStringBattle, 0x16); break; - case 17: + case VARIOUS_ARENA_WAIT_STRING: if (IsTextPrinterActive(0x16)) return; break; @@ -6775,8 +6772,8 @@ static void atk76_various(void) case VARIOUS_VOLUME_UP: m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); break; - case 23: - gBattleStruct->field_2A2 |= gBitTable[gActiveBattler]; + case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: + gBattleStruct->alreadyStatusedMoveAttempt |= gBitTable[gActiveBattler]; break; case 24: if (sub_805725C(gActiveBattler)) diff --git a/src/battle_setup.c b/src/battle_setup.c index c18176706..18998e564 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -33,6 +33,7 @@ #include "field_weather.h" #include "battle_tower.h" #include "gym_leader_rematch.h" +#include "battle_pike.h" #include "constants/map_types.h" #include "constants/battle_frontier.h" @@ -54,7 +55,6 @@ struct TrainerBattleParameter }; extern bool8 InBattlePyramid(void); -extern bool8 InBattlePike(void); extern bool32 InTrainerHill(void); extern bool32 FieldPoisonEffectIsRunning(void); extern void RestartWildEncounterImmunitySteps(void); @@ -664,7 +664,7 @@ u8 BattleSetup_GetTerrainId(void) return BATTLE_TERRAIN_MOUNTAIN; if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) { - if (MetatileBehavior_GetBridgeSth(tileBehavior)) + if (MetatileBehavior_GetBridgeType(tileBehavior)) return BATTLE_TERRAIN_POND; if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) return BATTLE_TERRAIN_WATER; diff --git a/src/battle_tent.c b/src/battle_tent.c index f3aec1345..678222ff5 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -8,7 +8,7 @@ #include "battle_tower.h" #include "random.h" #include "item.h" -#include "battle_factory.h" +#include "battle_factory_screen.h" #include "frontier_util.h" #include "constants/items.h" #include "constants/region_map_sections.h" @@ -280,17 +280,17 @@ bool8 sub_81B9E94(void) && ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386))); } -// This function was written very...oddly. -#ifdef NONMATCHING static void sub_81B9EC0(void) { s32 i, j; - u16 currMonId = 0, currSpecies = 0; + u8 firstMonId; + u16 monSetId; + u16 currSpecies; u16 species[PARTY_SIZE]; u16 monIds[PARTY_SIZE]; u16 heldItems[PARTY_SIZE]; - s32 zero = 0; + firstMonId = 0; gFacilityTrainers = gSlateportBattleTentTrainers; for (i = 0; i < PARTY_SIZE; i++) { @@ -300,250 +300,56 @@ static void sub_81B9EC0(void) } gFacilityTrainerMons = gSlateportBattleTentMons; currSpecies = 0; - for (i = 0; i != PARTY_SIZE;) + i = 0; + while (i != PARTY_SIZE) { // Cannot have two pokemon of the same species. - currMonId = Random() % 70; - for (j = zero; j < i + zero; j++) + monSetId = Random() % 70; + for (j = firstMonId; j < firstMonId + i; j++) { - if (monIds[j] == currMonId) + u16 monId = monIds[j]; + if (monIds[j] == monSetId) break; - if (species[j] == gFacilityTrainerMons[currMonId].species) + if (species[j] == gFacilityTrainerMons[monSetId].species) { if (currSpecies == 0) - currSpecies = gFacilityTrainerMons[currMonId].species; + currSpecies = gFacilityTrainerMons[monSetId].species; else break; } } - if (j != i + zero) + if (j != i + firstMonId) continue; // Cannot have two same held items. - for (j = zero; j < i + zero; j++) + for (j = firstMonId; j < i + firstMonId; j++) { - if (heldItems[j] == 0) - continue; - if (heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId]) + if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) { - if (gFacilityTrainerMons[currMonId].species == currSpecies) + if (gFacilityTrainerMons[monSetId].species == currSpecies) currSpecies = 0; - else - break; + break; } } - if (j != i + zero) + if (j != i + firstMonId) continue; - gSaveBlock2Ptr->frontier.field_E70[i].monId = currMonId; - species[i] = gFacilityTrainerMons[currMonId].species; - heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId]; - monIds[i] = currMonId; + gSaveBlock2Ptr->frontier.field_E70[i].monId = monSetId; + species[i] = gFacilityTrainerMons[monSetId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]; + monIds[i] = monSetId; i++; } } -#else -NAKED -static void sub_81B9EC0(void) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x3C\n\ - ldr r1, =gFacilityTrainers\n\ - ldr r0, =gSlateportBattleTentTrainers\n\ - str r0, [r1]\n\ - add r0, sp, 0xC\n\ - mov r9, r0\n\ - mov r1, sp\n\ - adds r1, 0x18\n\ - str r1, [sp, 0x2C]\n\ - ldr r5, =gFacilityTrainerMons\n\ - ldr r4, =gSlateportBattleTentMons\n\ - movs r2, 0\n\ - adds r3, r1, 0\n\ - mov r1, r9\n\ - mov r0, sp\n\ - movs r6, 0x5\n\ - mov r8, r6\n\ -_081B9EEC:\n\ - strh r2, [r0]\n\ - strh r2, [r1]\n\ - strh r2, [r3]\n\ - adds r3, 0x2\n\ - adds r1, 0x2\n\ - adds r0, 0x2\n\ - movs r7, 0x1\n\ - negs r7, r7\n\ - add r8, r7\n\ - mov r6, r8\n\ - cmp r6, 0\n\ - bge _081B9EEC\n\ - str r4, [r5]\n\ - movs r7, 0\n\ - mov r10, r7\n\ - movs r0, 0\n\ - mov r8, r0\n\ - ldr r1, [sp, 0x2C]\n\ - str r1, [sp, 0x30]\n\ - mov r2, sp\n\ - str r2, [sp, 0x34]\n\ - lsls r6, r0, 1\n\ - str r6, [sp, 0x24]\n\ - add r6, r9\n\ - str r6, [sp, 0x28]\n\ -_081B9F1E:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x46\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - movs r2, 0\n\ - mov r7, r8\n\ - adds r6, r2, r7\n\ - cmp r2, r6\n\ - bge _081B9F7C\n\ - ldr r1, [sp, 0x28]\n\ - ldrh r0, [r1]\n\ - cmp r0, r5\n\ - beq _081B9F7C\n\ - ldr r0, =gFacilityTrainerMons\n\ - ldr r1, [r0]\n\ - lsls r0, r5, 4\n\ - adds r4, r0, r1\n\ - ldrh r7, [r4]\n\ - mov r12, r7\n\ - lsls r3, r2, 1\n\ - ldr r1, [sp, 0x24]\n\ - add r1, sp\n\ - str r6, [sp, 0x38]\n\ -_081B9F56:\n\ - ldrh r0, [r1]\n\ - cmp r0, r12\n\ - bne _081B9F66\n\ - mov r0, r10\n\ - cmp r0, 0\n\ - bne _081B9F7C\n\ - ldrh r7, [r4]\n\ - mov r10, r7\n\ -_081B9F66:\n\ - adds r3, 0x2\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - ldr r0, [sp, 0x38]\n\ - cmp r2, r0\n\ - bge _081B9F7C\n\ - mov r7, r9\n\ - adds r0, r7, r3\n\ - ldrh r0, [r0]\n\ - cmp r0, r5\n\ - bne _081B9F56\n\ -_081B9F7C:\n\ - cmp r2, r6\n\ - bne _081BA01C\n\ - movs r2, 0\n\ - cmp r2, r6\n\ - bge _081B9FD4\n\ - ldr r0, =gBattleFrontierHeldItems\n\ - mov r12, r0\n\ - ldr r7, =gFacilityTrainerMons\n\ - ldr r1, [sp, 0x24]\n\ - ldr r0, [sp, 0x2C]\n\ - adds r4, r1, r0\n\ -_081B9F92:\n\ - ldrh r3, [r4]\n\ - cmp r3, 0\n\ - beq _081B9FCC\n\ - ldr r1, [r7]\n\ - lsls r0, r5, 4\n\ - adds r1, r0, r1\n\ - ldrb r0, [r1, 0xA]\n\ - lsls r0, 1\n\ - add r0, r12\n\ - ldrh r0, [r0]\n\ - cmp r3, r0\n\ - bne _081B9FCC\n\ - ldrh r0, [r1]\n\ - cmp r0, r10\n\ - bne _081B9FD4\n\ - movs r1, 0\n\ - mov r10, r1\n\ - b _081B9FD4\n\ - .pool\n\ -_081B9FCC:\n\ - adds r4, 0x2\n\ - adds r2, 0x1\n\ - cmp r2, r6\n\ - blt _081B9F92\n\ -_081B9FD4:\n\ - cmp r2, r6\n\ - bne _081BA01C\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - mov r2, r8\n\ - lsls r3, r2, 1\n\ - adds r0, r3, r2\n\ - lsls r0, 2\n\ - adds r1, r0\n\ - movs r6, 0xE7\n\ - lsls r6, 4\n\ - adds r1, r6\n\ - strh r5, [r1]\n\ - ldr r0, =gFacilityTrainerMons\n\ - ldr r0, [r0]\n\ - lsls r1, r5, 4\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - ldr r7, [sp, 0x34]\n\ - strh r0, [r7]\n\ - ldr r2, =gBattleFrontierHeldItems\n\ - ldrb r0, [r1, 0xA]\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - ldr r1, [sp, 0x30]\n\ - strh r0, [r1]\n\ - add r3, r9\n\ - strh r5, [r3]\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x30]\n\ - adds r2, r7, 0\n\ - adds r2, 0x2\n\ - str r2, [sp, 0x34]\n\ - movs r6, 0x1\n\ - add r8, r6\n\ -_081BA01C:\n\ - mov r7, r8\n\ - cmp r7, 0x6\n\ - beq _081BA024\n\ - b _081B9F1E\n\ -_081BA024:\n\ - add sp, 0x3C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - "); -} -#endif // NONMATCHING static void sub_81BA040(void) { u16 trainerId; s32 i, j, k; - register const u16 *monSetsPool asm("r9"); // Fix me. Compiler insists on moving that variable into stack. + register const u16 *monSets asm("r9"); // Fix me. Compiler insists on moving that variable into stack. u16 species[3]; u16 heldItems[3]; - s32 monPoolCount = 0; + s32 setsCount = 0; gFacilityTrainers = gSlateportBattleTentTrainers; gFacilityTrainerMons = gSlateportBattleTentMons; @@ -561,21 +367,21 @@ static void sub_81BA040(void) } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); gTrainerBattleOpponent_A = trainerId; - while (gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool[monPoolCount] != 0xFFFF) - monPoolCount++; - if (monPoolCount > 8) + while (gFacilityTrainers[gTrainerBattleOpponent_A].monSets[setsCount] != 0xFFFF) + setsCount++; + if (setsCount > 8) break; - monPoolCount = 0; + setsCount = 0; } if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2) gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; - monSetsPool = gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool; + monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets; i = 0; while (i != 3) { - sRandMonSetId = monSetsPool[Random() % monPoolCount]; + sRandMonSetId = monSets[Random() % setsCount]; for (j = 0; j < 6; j++) { if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[j].monId].species) diff --git a/src/battle_tower.c b/src/battle_tower.c index e95eaf156..000a03a5b 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -21,6 +21,7 @@ #include "link.h" #include "field_message_box.h" #include "tv.h" +#include "battle_factory.h" #include "constants/battle_frontier.h" #include "constants/trainers.h" #include "constants/event_objects.h" @@ -29,19 +30,16 @@ extern u16 gUnknown_03006298[]; -extern void sub_81A6CD0(void); extern void sub_81A4C30(void); -extern u8 sub_81A6CA8(u8, u8); -extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot); extern const u8 *const *const gUnknown_085DD690[]; extern const u16 gBattleFrontierHeldItems[]; extern const u8 sRubyFacilityClassToEmerald[82][2]; extern const u16 gUnknown_085DFA46[]; -extern const struct FacilityMon gBattleFrontierMons[]; extern const struct FacilityMon gSlateportBattleTentMons[]; extern const struct FacilityMon gVerdanturfBattleTentMons[]; extern const struct FacilityMon gFallarborBattleTentMons[]; +extern const struct FacilityMon gBattleFrontierMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[]; extern const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[]; @@ -983,14 +981,14 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) u8 level = SetFacilityPtrsGetLevel(); u8 fixedIV = 0; u8 bfMonCount; - const u16 *bfMonPool = NULL; + const u16 *monSets = NULL; u32 otID = 0; if (trainerId < TRAINER_RECORD_MIXING_FRIEND) { // Normal battle frontier trainer. fixedIV = GetFrontierTrainerFixedIvs(trainerId); - bfMonPool = gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool; + monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets; } else if (trainerId == TRAINER_EREADER) { @@ -1028,20 +1026,20 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) // Attempt to fill the trainer's party with random Pokemon until 3 have been // successfully chosen. The trainer's party may not have duplicate pokemon species // or duplicate held items. - for (bfMonCount = 0; bfMonPool[bfMonCount] != 0xFFFF; bfMonCount++) + for (bfMonCount = 0; monSets[bfMonCount] != 0xFFFF; bfMonCount++) ; i = 0; otID = Random32(); while (i != monCount) { - u16 monPoolId = bfMonPool[Random() % bfMonCount]; - if ((level == 50 || level == 20) && monPoolId > 849) + u16 monSetId = monSets[Random() % bfMonCount]; + if ((level == 50 || level == 20) && monSetId > 849) continue; // Ensure this pokemon species isn't a duplicate. for (j = 0; j < i + firstMonId; j++) { - if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monPoolId].species) + if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monSetId].species) break; } if (j != i + firstMonId) @@ -1051,7 +1049,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) for (j = 0; j < i + firstMonId; j++) { if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monPoolId].itemTableId]) + && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) break; } if (j != i + firstMonId) @@ -1061,34 +1059,34 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) // because the species and held items were already checked directly above. for (j = 0; j < i; j++) { - if (chosenMonIndices[j] == monPoolId) + if (chosenMonIndices[j] == monSetId) break; } if (j != i) continue; - chosenMonIndices[i] = monPoolId; + chosenMonIndices[i] = monSetId; // Place the chosen pokemon into the trainer's party. - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[i + firstMonId], - gFacilityTrainerMons[monPoolId].species, + CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId], + gFacilityTrainerMons[monSetId].species, level, - gFacilityTrainerMons[monPoolId].nature, + gFacilityTrainerMons[monSetId].nature, fixedIV, - gFacilityTrainerMons[monPoolId].evSpread, + gFacilityTrainerMons[monSetId].evSpread, otID); friendship = 255; // Give the chosen pokemon its specified moves. for (j = 0; j < 4; j++) { - SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monPoolId].moves[j], j); - if (gFacilityTrainerMons[monPoolId].moves[j] == MOVE_FRUSTRATION) + SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monSetId].moves[j], j); + if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION) friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is. } SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monPoolId].itemTableId]); + SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); // The pokemon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. @@ -1129,27 +1127,27 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId) } } -u16 RandomizeFacilityTrainerMonId(u16 trainerId) +u16 RandomizeFacilityTrainerMonSet(u16 trainerId) { u8 level = SetFacilityPtrsGetLevel(); - const u16 *bfMonPool = gFacilityTrainers[trainerId].bfMonPool; + const u16 *monSets = gFacilityTrainers[trainerId].monSets; u8 bfMonCount = 0; - u32 monPoolId = bfMonPool[bfMonCount]; + u32 monSetId = monSets[bfMonCount]; - while (monPoolId != 0xFFFF) + while (monSetId != 0xFFFF) { bfMonCount++; - monPoolId = bfMonPool[bfMonCount]; - if (monPoolId == 0xFFFF) + monSetId = monSets[bfMonCount]; + if (monSetId == 0xFFFF) break; } do { - monPoolId = bfMonPool[Random() % bfMonCount]; - } while((level == 50 || level == 20) && monPoolId > 849); + monSetId = monSets[Random() % bfMonCount]; + } while((level == 50 || level == 20) && monSetId > 849); - return monPoolId; + return monSetId; } static void FillFactoryTrainerParty(void) @@ -1175,9 +1173,9 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][0] / 7; if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) - fixedIV = sub_81A6CA8(challengeNum, 0); + fixedIV = GetFactoryMonFixedIV(challengeNum, 0); else - fixedIV = sub_81A6CA8(challengeNum, 1); + fixedIV = GetFactoryMonFixedIV(challengeNum, 1); } else if (trainerId == TRAINER_EREADER) { @@ -1187,7 +1185,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - sub_81A6CD0(); + FillFactoryBrainParty(); return; } else @@ -1195,26 +1193,25 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) fixedIV = 31; } - level = SetFacilityPtrsGetLevel(); otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); for (i = 0; i < 3; i++) { - u16 poolId = gUnknown_03006298[i]; - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[firstMonId + i], - gFacilityTrainerMons[poolId].species, + u16 monSetId = gUnknown_03006298[i]; + CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i], + gFacilityTrainerMons[monSetId].species, level, - gFacilityTrainerMons[poolId].nature, + gFacilityTrainerMons[monSetId].nature, fixedIV, - gFacilityTrainerMons[poolId].evSpread, + gFacilityTrainerMons[monSetId].evSpread, otID); friendship = 0; for (j = 0; j < 4; j++) - SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[poolId].moves[j], j); + SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monSetId].moves[j], j); SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[poolId].itemTableId]); + SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); } } @@ -1228,25 +1225,25 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId) for (i = 0; i < 3; i++) { - u16 poolId = gUnknown_03006298[i]; - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[firstMonId + i], - gFacilityTrainerMons[poolId].species, + u16 monSetId = gUnknown_03006298[i]; + CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i], + gFacilityTrainerMons[monSetId].species, level, - gFacilityTrainerMons[poolId].nature, + gFacilityTrainerMons[monSetId].nature, fixedIV, - gFacilityTrainerMons[poolId].evSpread, + gFacilityTrainerMons[monSetId].evSpread, otID); friendship = 0; for (j = 0; j < 4; j++) { - SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[poolId].moves[j], j); - if (gFacilityTrainerMons[poolId].moves[j] == MOVE_FRUSTRATION) + SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monSetId].moves[j], j); + if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION) friendship = 0; } SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[poolId].itemTableId]); + SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); } } @@ -1609,7 +1606,7 @@ static void sub_81642A0(void) u32 spArray[5]; s32 r10; u16 trainerId; - u16 monPoolId; + u16 monSetId; u32 lvlMode, battleMode; s32 challengeNum; u32 species1, species2; @@ -1651,24 +1648,24 @@ static void sub_81642A0(void) { while (1) { - monPoolId = RandomizeFacilityTrainerMonId(trainerId); - if (j % 2 != 0 && gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_CB4[r10 - 1]].itemTableId == gFacilityTrainerMons[monPoolId].itemTableId) + monSetId = RandomizeFacilityTrainerMonSet(trainerId); + if (j % 2 != 0 && gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_CB4[r10 - 1]].itemTableId == gFacilityTrainerMons[monSetId].itemTableId) continue; for (k = 8; k < r10; k++) { - if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_CB4[k]].species == gFacilityTrainerMons[monPoolId].species) + if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_CB4[k]].species == gFacilityTrainerMons[monSetId].species) break; - if (species1 == gFacilityTrainerMons[monPoolId].species) + if (species1 == gFacilityTrainerMons[monSetId].species) break; - if (species2 == gFacilityTrainerMons[monPoolId].species) + if (species2 == gFacilityTrainerMons[monSetId].species) break; } if (k == r10) break; } - gSaveBlock2Ptr->frontier.field_CB4[r10] = monPoolId; + gSaveBlock2Ptr->frontier.field_CB4[r10] = monSetId; r10++; } } @@ -1749,7 +1746,7 @@ static void sub_81642A0(void) } } -static void sub_81646BC(u16 trainerId, u16 monPoolId) +static void sub_81646BC(u16 trainerId, u16 monSetId) { u16 move = 0; u16 species = 0; @@ -1759,8 +1756,8 @@ static void sub_81646BC(u16 trainerId, u16 monPoolId) { if (trainerId < TRAINER_RECORD_MIXING_FRIEND) { - move = gFacilityTrainerMons[monPoolId].moves[0]; - species = gFacilityTrainerMons[monPoolId].species; + move = gFacilityTrainerMons[monSetId].moves[0]; + species = gFacilityTrainerMons[monSetId].species; } else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { @@ -1787,7 +1784,7 @@ static void sub_81646BC(u16 trainerId, u16 monPoolId) static void sub_8164828(void) { s32 i, j, arrId; - s32 monPoolId; + s32 monSetId; s32 level = SetFacilityPtrsGetLevel(); u16 winStreak = GetCurrentFacilityWinStreak(); s32 challengeNum = winStreak / 7; @@ -1825,12 +1822,12 @@ static void sub_8164828(void) } break; case 1: - monPoolId = gSaveBlock2Ptr->frontier.field_CB4[8 + k * 2]; - sub_81646BC(trainerId, monPoolId); + monSetId = gSaveBlock2Ptr->frontier.field_CB4[8 + k * 2]; + sub_81646BC(trainerId, monSetId); break; case 2: - monPoolId = gSaveBlock2Ptr->frontier.field_CB4[9 + k * 2]; - sub_81646BC(trainerId, monPoolId); + monSetId = gSaveBlock2Ptr->frontier.field_CB4[9 + k * 2]; + sub_81646BC(trainerId, monSetId); break; case 3: gPartnerTrainerId = trainerId; @@ -2280,7 +2277,7 @@ static void FillPartnerParty(u16 trainerId) s32 i, j; u32 ivs, level; u32 friendship; - u16 monPoolId; + u16 monSetId; u32 otID; u8 trainerName[PLAYER_NAME_LENGTH + 1]; SetFacilityPtrsGetLevel(); @@ -2321,23 +2318,23 @@ static void FillPartnerParty(u16 trainerId) otID = Random32(); for (i = 0; i < 2; i++) { - monPoolId = gSaveBlock2Ptr->frontier.field_CB4[i + 18]; - CreateMonWithEVSpreadPersonalityOTID(&gPlayerParty[3 + i], - gFacilityTrainerMons[monPoolId].species, + monSetId = gSaveBlock2Ptr->frontier.field_CB4[i + 18]; + CreateMonWithEVSpreadNatureOTID(&gPlayerParty[3 + i], + gFacilityTrainerMons[monSetId].species, level, - gFacilityTrainerMons[monPoolId].nature, + gFacilityTrainerMons[monSetId].nature, ivs, - gFacilityTrainerMons[monPoolId].evSpread, + gFacilityTrainerMons[monSetId].evSpread, otID); friendship = 0xFF; for (j = 0; j < 4; j++) { - SetMonMoveSlot(&gPlayerParty[3 + i], gFacilityTrainerMons[monPoolId].moves[j], j); - if (gFacilityTrainerMons[monPoolId].moves[j] == MOVE_FRUSTRATION) + SetMonMoveSlot(&gPlayerParty[3 + i], gFacilityTrainerMons[monSetId].moves[j], j); + if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION) friendship = 0; } SetMonData(&gPlayerParty[3 + i], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gPlayerParty[3 + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monPoolId].itemTableId]); + SetMonData(&gPlayerParty[3 + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++) trainerName[j] = gFacilityTrainers[trainerId].trainerName[j]; SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_NAME, &trainerName); @@ -2689,19 +2686,19 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) u8 level = SetTentPtrsGetLevel(); u8 fixedIV = 0; u8 bfMonCount; - const u16 *bfMonPool = NULL; + const u16 *monSets = NULL; u32 otID = 0; - u16 monPoolId; + u16 monSetId; - bfMonPool = gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool; + monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets; bfMonCount = 0; - monPoolId = bfMonPool[bfMonCount]; - while (monPoolId != 0xFFFF) + monSetId = monSets[bfMonCount]; + while (monSetId != 0xFFFF) { bfMonCount++; - monPoolId = bfMonPool[bfMonCount]; - if (monPoolId == 0xFFFF) + monSetId = monSets[bfMonCount]; + if (monSetId == 0xFFFF) break; } @@ -2709,12 +2706,12 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) otID = Random32(); while (i != monCount) { - u16 monPoolId = bfMonPool[Random() % bfMonCount]; + u16 monSetId = monSets[Random() % bfMonCount]; // Ensure this pokemon species isn't a duplicate. for (j = 0; j < i + firstMonId; j++) { - if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monPoolId].species) + if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monSetId].species) break; } if (j != i + firstMonId) @@ -2724,7 +2721,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) for (j = 0; j < i + firstMonId; j++) { if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monPoolId].itemTableId]) + && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) break; } if (j != i + firstMonId) @@ -2734,34 +2731,34 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) // because the species and held items were already checked directly above. for (j = 0; j < i; j++) { - if (chosenMonIndices[j] == monPoolId) + if (chosenMonIndices[j] == monSetId) break; } if (j != i) continue; - chosenMonIndices[i] = monPoolId; + chosenMonIndices[i] = monSetId; // Place the chosen pokemon into the trainer's party. - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[i + firstMonId], - gFacilityTrainerMons[monPoolId].species, + CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId], + gFacilityTrainerMons[monSetId].species, level, - gFacilityTrainerMons[monPoolId].nature, + gFacilityTrainerMons[monSetId].nature, fixedIV, - gFacilityTrainerMons[monPoolId].evSpread, + gFacilityTrainerMons[monSetId].evSpread, otID); friendship = 255; // Give the chosen pokemon its specified moves. for (j = 0; j < 4; j++) { - SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monPoolId].moves[j], j); - if (gFacilityTrainerMons[monPoolId].moves[j] == MOVE_FRUSTRATION) + SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monSetId].moves[j], j); + if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION) friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is. } SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monPoolId].itemTableId]); + SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); // The pokemon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. diff --git a/src/battle_transition.c b/src/battle_transition.c index fc8c0eeee..759f15eee 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1,25 +1,25 @@ #include "global.h" #include "battle_transition.h" -#include "unk_transition.h" +#include "bg.h" +#include "decompress.h" +#include "field_camera.h" +#include "field_effect.h" +#include "gpu_regs.h" #include "main.h" +#include "malloc.h" #include "overworld.h" -#include "task.h" #include "palette.h" -#include "trig.h" -#include "field_effect.h" -#include "field_camera.h" #include "random.h" -#include "sprite.h" +#include "scanline_effect.h" #include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "unk_transition.h" +#include "util.h" +#include "constants/field_effects.h" #include "constants/songs.h" #include "constants/trainers.h" -#include "field_camera.h" -#include "scanline_effect.h" -#include "malloc.h" -#include "gpu_regs.h" -#include "decompress.h" -#include "bg.h" -#include "util.h" struct TransitionData { diff --git a/src/battle_util.c b/src/battle_util.c index 1aaffc053..6fb5f4bdc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1200,8 +1200,8 @@ bool8 HandleWishPerishSongOnTurnEnd(void) for (i = 0; i < 2; i++) CancelMultiTurnMoves(i); - gBattlescriptCurrInstr = BattleScript_82DB8F3; - BattleScriptExecute(BattleScript_82DB8F3); + gBattlescriptCurrInstr = BattleScript_ArenaDoJudgment; + BattleScriptExecute(BattleScript_ArenaDoJudgment); gBattleStruct->wishPerishSongState++; return TRUE; } diff --git a/src/berry.c b/src/berry.c index 66cf91409..7cd28d69f 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1,12 +1,13 @@ #include "global.h" #include "berry.h" -#include "main.h" -#include "item.h" -#include "constants/items.h" -#include "text.h" -#include "random.h" #include "event_data.h" #include "fieldmap.h" +#include "item.h" +#include "main.h" +#include "random.h" +#include "text.h" +#include "constants/event_object_movement_constants.h" +#include "constants/items.h" extern u8 EventObjectGetBerryTreeId(u8 eventObjectId); extern void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); @@ -18,6 +19,17 @@ extern u16 gSpecialVar_ItemId; extern const u8 BerryTreeScript[]; +static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry); +static bool32 BerryTreeGrow(struct BerryTree *tree); +static u16 BerryTypeToItemId(u16 berry); +static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree); +static u8 GetNumStagesWateredByBerryTreeId(u8 id); +static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water); +static u8 CalcBerryYield(struct BerryTree *tree); +static u8 GetBerryCountByBerryTreeId(u8 id); +static u16 GetStageDurationByBerryType(u8); + +//.rodata static const u8 sBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); static const u8 sBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); @@ -845,6 +857,7 @@ const struct UnkStruct_0858AB24 gUnknown_0858AB24[] = { const struct BerryTree gBlankBerryTree = {}; +//.text // unused void ClearEnigmaBerries(void) { @@ -860,7 +873,7 @@ void SetEnigmaBerry(u8 *src) dest[i] = src[i]; } -u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) +static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) { u32 i; u32 checksum; @@ -889,12 +902,12 @@ bool32 IsEnigmaBerryValid(void) const struct Berry *GetBerryInfo(u8 berry) { - if (berry == 0x2B && IsEnigmaBerryValid()) + if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) return (struct Berry*)(&gSaveBlock1Ptr->enigmaBerry.berry); else { - if (berry == 0 || berry > 0x2B) - berry = 1; + if (berry == BERRY_NONE || berry > ITEM_TO_BERRY(LAST_BERRY_INDEX)) + berry = ITEM_TO_BERRY(FIRST_BERRY_INDEX); return &gBerries[berry - 1]; } } @@ -910,16 +923,16 @@ bool32 EventObjectInteractionWaterBerryTree(void) switch (tree->stage) { - case 1: + case BERRY_STAGE_PLANTED: tree->watered1 = TRUE; break; - case 2: + case BERRY_STAGE_SPROUTED: tree->watered2 = TRUE; break; - case 3: + case BERRY_STAGE_TALLER: tree->watered3 = TRUE; break; - case 4: + case BERRY_STAGE_FLOWERING: tree->watered4 = TRUE; break; default: @@ -953,28 +966,28 @@ void ClearBerryTrees(void) gSaveBlock1Ptr->berryTrees[i] = gBlankBerryTree; } -bool32 BerryTreeGrow(struct BerryTree *tree) +static bool32 BerryTreeGrow(struct BerryTree *tree) { if (tree->growthSparkle) return FALSE; switch (tree->stage) { - case 0: + case BERRY_STAGE_NO_BERRY: return FALSE; - case 4: + case BERRY_STAGE_FLOWERING: tree->berryYield = CalcBerryYield(tree); - case 1: - case 2: - case 3: + case BERRY_STAGE_PLANTED: + case BERRY_STAGE_SPROUTED: + case BERRY_STAGE_TALLER: tree->stage++; break; - case 5: + case BERRY_STAGE_BERRIES: tree->watered1 = 0; tree->watered2 = 0; tree->watered3 = 0; tree->watered4 = 0; tree->berryYield = 0; - tree->stage = 2; + tree->stage = BERRY_STAGE_SPROUTED; if (++tree->regrowthCount == 10) *tree = gBlankBerryTree; break; @@ -1012,7 +1025,7 @@ void BerryTreeTimeUpdate(s32 minutes) tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); if (!BerryTreeGrow(tree)) break; - if (tree->stage == 5) + if (tree->stage == BERRY_STAGE_BERRIES) tree->minutesUntilNextStage *= 4; } } @@ -1028,7 +1041,7 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle) tree->berry = berry; tree->minutesUntilNextStage = GetStageDurationByBerryType(berry); tree->stage = stage; - if (stage == 5) + if (stage == BERRY_STAGE_BERRIES) { tree->berryYield = CalcBerryYield(tree); tree->minutesUntilNextStage *= 4; @@ -1064,7 +1077,7 @@ u8 ItemIdToBerryType(u16 item) return ITEM_TO_BERRY(item); } -u16 BerryTypeToItemId(u16 berry) +static u16 BerryTypeToItemId(u16 berry) { u16 item = berry - 1; @@ -1087,10 +1100,10 @@ void GetBerryCountStringByBerryType(u8 berry, u8* dest, u32 berryCount) void ResetBerryTreeSparkleFlag(u8 id) { - GetBerryTreeInfo(id)->growthSparkle = 0; + GetBerryTreeInfo(id)->growthSparkle = FALSE; } -u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) +static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) { u8 count = 0; @@ -1105,12 +1118,12 @@ u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) return count; } -u8 GetNumStagesWateredByBerryTreeId(u8 id) +static u8 GetNumStagesWateredByBerryTreeId(u8 id) { return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id)); } -u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) +static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) { u32 randMin; u32 randMax; @@ -1133,7 +1146,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) } } -u8 CalcBerryYield(struct BerryTree *tree) +static u8 CalcBerryYield(struct BerryTree *tree) { const struct Berry *berry = GetBerryInfo(tree->berry); u8 min = berry->minYield; @@ -1142,12 +1155,12 @@ u8 CalcBerryYield(struct BerryTree *tree) return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree)); } -u8 GetBerryCountByBerryTreeId(u8 id) +static u8 GetBerryCountByBerryTreeId(u8 id) { return gSaveBlock1Ptr->berryTrees[id].berryYield; } -u16 GetStageDurationByBerryType(u8 berry) +static u16 GetStageDurationByBerryType(u8 berry) { return GetBerryInfo(berry)->stageDuration * 60; } @@ -1156,18 +1169,18 @@ void EventObjectInteractionGetBerryTreeData(void) { u8 id; u8 berry; - u8 unk; + u8 localId; u8 group; u8 num; id = EventObjectGetBerryTreeId(gSelectedEventObject); berry = GetBerryTypeByBerryTreeId(id); ResetBerryTreeSparkleFlag(id); - unk = gSpecialVar_LastTalked; + localId = gSpecialVar_LastTalked; num = gSaveBlock1Ptr->location.mapNum; group = gSaveBlock1Ptr->location.mapGroup; - if (IsBerryTreeSparkling(unk, num, group)) - gSpecialVar_0x8004 = 0xFF; + if (IsBerryTreeSparkling(localId, num, group)) + gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING; else gSpecialVar_0x8004 = GetStageByBerryTreeId(id); gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id); @@ -1216,7 +1229,7 @@ void EventObjectInteractionRemoveBerryTree(void) sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -u8 PlayerHasBerries(void) +bool8 PlayerHasBerries(void) { return IsBagPocketNonEmpty(POCKET_BERRIES); } @@ -1238,7 +1251,7 @@ void ResetBerryTreeSparkleFlags(void) bottom = top + 8; for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { - if (gEventObjects[i].active && gEventObjects[i].movementType == 12) + if (gEventObjects[i].active && gEventObjects[i].movementType == MOVEMENT_TYPE_BERRY_TREE_GROWTH) { cam_left = gEventObjects[i].currentCoords.x; cam_top = gEventObjects[i].currentCoords.y; diff --git a/src/bike.c b/src/bike.c index 8ad771f51..b9d247c5d 100644 --- a/src/bike.c +++ b/src/bike.c @@ -3,13 +3,13 @@ #include "event_object_movement.h" #include "field_player_avatar.h" #include "fieldmap.h" -#include "constants/flags.h" #include "global.fieldmap.h" #include "metatile_behavior.h" #include "overworld.h" -#include "constants/songs.h" #include "sound.h" +#include "constants/flags.h" #include "constants/map_types.h" +#include "constants/songs.h" extern bool8 gBikeCyclingChallenge; extern u8 gBikeCollisions; diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 76394e937..b17ffad33 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -5,6 +5,7 @@ #include "script.h" #include "sound.h" #include "task.h" +#include "constants/field_effects.h" #include "constants/flags.h" #include "constants/maps.h" #include "constants/songs.h" diff --git a/src/data/field_event_obj/field_effect_objects.h b/src/data/field_event_obj/field_effect_objects.h index 33fe66fe2..82fde1769 100755 --- a/src/data/field_event_obj/field_effect_objects.h +++ b/src/data/field_event_obj/field_effect_objects.h @@ -91,7 +91,7 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Ripple[] = gFieldEffectObjectImageAnim_850CAE0, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = {0xFFFF, 0x1005, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Ripple, gFieldEffectObjectPicTable_Ripple, gDummySpriteAffineAnimTable, sub_81561D0}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = {0xFFFF, 0x1005, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Ripple, gFieldEffectObjectPicTable_Ripple, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Ash[] = { overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 0), @@ -124,25 +124,25 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_SurfBlob[] = { overworld_frame(gFieldEffectObjectPic_SurfBlob, 4, 4, 2), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CB94[] = +const union AnimCmd gSurfBlobAnim_FaceSouth[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CB9C[] = +const union AnimCmd gSurfBlobAnim_FaceNorth[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_JUMP(0), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CBA4[] = +const union AnimCmd gSurfBlobAnim_FaceWest[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_JUMP(0), }; -const union AnimCmd gFieldEffectObjectImageAnim_850CBAC[] = +const union AnimCmd gSurfBlobAnim_FaceEast[] = { ANIMCMD_FRAME(2, 1, .hFlip = TRUE), ANIMCMD_JUMP(0), @@ -150,10 +150,10 @@ const union AnimCmd gFieldEffectObjectImageAnim_850CBAC[] = const union AnimCmd *const gFieldEffectObjectImageAnimTable_SurfBlob[] = { - gFieldEffectObjectImageAnim_850CB94, - gFieldEffectObjectImageAnim_850CB9C, - gFieldEffectObjectImageAnim_850CBA4, - gFieldEffectObjectImageAnim_850CBAC, + gSurfBlobAnim_FaceSouth, + gSurfBlobAnim_FaceNorth, + gSurfBlobAnim_FaceWest, + gSurfBlobAnim_FaceEast, }; const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = {0xFFFF, 0xFFFF, &gEventObjectBaseOam_32x32, gFieldEffectObjectImageAnimTable_SurfBlob, gFieldEffectObjectPicTable_SurfBlob, gDummySpriteAffineAnimTable, UpdateSurfBlobFieldEffect}; @@ -562,7 +562,7 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown17[] = gFieldEffectObjectImageAnim_850D05C, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17 = {0xFFFF, 0x1005, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown17, gFieldEffectObjectPicTable_Unknown17, gDummySpriteAffineAnimTable, sub_81561D0}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17 = {0xFFFF, 0x1005, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown17, gFieldEffectObjectPicTable_Unknown17, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown18[] = { overworld_frame(gFieldEffectObjectPic_Unknown18, 2, 2, 0), @@ -587,7 +587,7 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown18[] = gFieldEffectObjectImageAnim_850D0C0, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18 = {0xFFFF, 0x1005, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown18, gFieldEffectObjectPicTable_Unknown18, gDummySpriteAffineAnimTable, sub_81561D0}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18 = {0xFFFF, 0x1005, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown18, gFieldEffectObjectPicTable_Unknown18, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown19[] = { overworld_frame(gFieldEffectObjectPic_Unknown19, 2, 2, 0), @@ -610,7 +610,7 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown19[] = gFieldEffectObjectImageAnim_850D118, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19 = {0xFFFF, 0x1004, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown19, gFieldEffectObjectPicTable_Unknown19, gDummySpriteAffineAnimTable, sub_81561D0}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19 = {0xFFFF, 0x1004, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown19, gFieldEffectObjectPicTable_Unknown19, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown29[] = { overworld_frame(gFieldEffectObjectPic_Unknown29, 2, 1, 0), @@ -656,7 +656,7 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown20[] = gFieldEffectObjectImageAnim_850D1AC, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20 = {0xFFFF, 0x1004, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown20, gFieldEffectObjectPicTable_Unknown20, gDummySpriteAffineAnimTable, sub_81561D0}; +const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20 = {0xFFFF, 0x1004, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown20, gFieldEffectObjectPicTable_Unknown20, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const union AffineAnimCmd gFieldEffectObjectRotScalAnim_850D1E4[] = { @@ -733,7 +733,7 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_BerryTreeGrowthSpark gFieldEffectObjectImageAnim_850D2D4, }; -const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle, gFieldEffectObjectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, sub_81561D0}; +const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_BerryTreeGrowthSparkle, gFieldEffectObjectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectObjectPicTable_TreeDisguise[] = { overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 0), diff --git a/src/decoration.c b/src/decoration.c index de85df968..eb85b4f5c 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1347,12 +1347,12 @@ void sub_8128060(u8 taskId) void ConfigureCameraObjectForPlacingDecoration(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor) { - sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.spriteId].data[0]; - gUnknown_03005DD0.spriteId = gpu_pal_decompress_alloc_tag_and_upload(data, decor); - gSprites[gUnknown_03005DD0.spriteId].oam.priority = 1; - gSprites[gUnknown_03005DD0.spriteId].callback = sub_81292D0; - gSprites[gUnknown_03005DD0.spriteId].pos1.x = gUnknown_085A7250[data->decoration->shape].x; - gSprites[gUnknown_03005DD0.spriteId].pos1.y = gUnknown_085A7250[data->decoration->shape].y; + sDecor_CameraSpriteObjectIdx1 = gSprites[gFieldCamera.spriteId].data[0]; + gFieldCamera.spriteId = gpu_pal_decompress_alloc_tag_and_upload(data, decor); + gSprites[gFieldCamera.spriteId].oam.priority = 1; + gSprites[gFieldCamera.spriteId].callback = sub_81292D0; + gSprites[gFieldCamera.spriteId].pos1.x = gUnknown_085A7250[data->decoration->shape].x; + gSprites[gFieldCamera.spriteId].pos1.y = gUnknown_085A7250[data->decoration->shape].y; } void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphicsDataBuffer *data) @@ -1374,7 +1374,7 @@ void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphic } gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1; DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]); - sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.spriteId; + sDecor_CameraSpriteObjectIdx1 = gFieldCamera.spriteId; } void sub_812826C(u8 taskId) @@ -2293,9 +2293,9 @@ bool8 sub_81299AC(u8 taskId) void SetUpPuttingAwayDecorationPlayerAvatar(void) { GetPlayerFacingDirection(); - sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.spriteId].data[0]; + sDecor_CameraSpriteObjectIdx1 = gSprites[gFieldCamera.spriteId].data[0]; sub_812A39C(); - gUnknown_03005DD0.spriteId = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0); + gFieldCamera.spriteId = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0); if (gSaveBlock2Ptr->playerGender == MALE) { sDecor_CameraSpriteObjectIdx2 = AddPseudoEventObject(0xC1, SpriteCallbackDummy, 0x88, 0x48, 0); @@ -2306,7 +2306,7 @@ void SetUpPuttingAwayDecorationPlayerAvatar(void) } gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1; DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]); - sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.spriteId; + sDecor_CameraSpriteObjectIdx1 = gFieldCamera.spriteId; gSprites[sDecor_CameraSpriteObjectIdx1].oam.priority = 1; } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 57f72b284..93be006ea 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -18,10 +18,12 @@ #include "random.h" #include "rom_818CFC8.h" #include "sprite.h" +#include "task.h" #include "trainer_see.h" #include "util.h" #include "constants/event_object_movement_constants.h" #include "constants/event_objects.h" +#include "constants/field_effects.h" // this file was known as evobjmv.c in Game Freak's original source @@ -42,7 +44,7 @@ static bool8 IsCoordOutsideEventObjectMovementRange(struct EventObject *, s16, s static bool8 IsMetatileDirectionallyImpassable(struct EventObject *, s16, s16, u8); static bool8 DoesObjectCollideWithObjectAt(struct EventObject *, s16, s16); static void sub_8096530(struct EventObject *, struct Sprite *); -static void npc_update_obj_anim_flag(struct EventObject *, struct Sprite *); +static void UpdateEventObjSpriteVisibility(struct EventObject *, struct Sprite *); static void EventObjectUpdateMetatileBehaviors(struct EventObject*); static void GetGroundEffectFlags_Reflection(struct EventObject*, u32*); static void GetGroundEffectFlags_TallGrassOnSpawn(struct EventObject*, u32*); @@ -73,7 +75,7 @@ static void sub_8097D68(struct Sprite*); static void ApplyLevitateMovement(u8); static bool8 MovementType_Disguise_Callback(struct EventObject *, struct Sprite *); static bool8 MovementType_Hidden_Callback(struct EventObject *, struct Sprite *); -static void sub_808D450(void); +static void CreateReflectionEffectSprites(void); static u8 GetEventObjectIdByLocalId(u8); static u8 GetEventObjectIdByLocalIdAndMapInternal(u8, u8, u8); static bool8 GetAvailableEventObjectId(u16, u8, u8, u8 *); @@ -84,7 +86,7 @@ static void UpdateEventObjectVisibility(struct EventObject *, struct Sprite *); static void MakeObjectTemplateFromEventObjectTemplate(struct EventObjectTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetEventObjectMovingCameraOffset(s16 *, s16 *); static struct EventObjectTemplate *GetEventObjectTemplateByLocalIdAndMap(u8, u8, u8); -static void sub_808E894(u16); +static void LoadEventObjectPalette(u16); static void RemoveEventObjectIfOutsideView(struct EventObject *); static void sub_808E1B8(u8, s16, s16); static void SetPlayerAvatarEventObjectIdAndObjectId(u8, u8); @@ -100,6 +102,8 @@ static void CameraObject_2(struct Sprite *); static struct EventObjectTemplate *FindEventObjectTemplateByLocalId(u8 localId, struct EventObjectTemplate *templates, u8 count); static void ClearEventObjectMovement(struct EventObject *, struct Sprite *); static void EventObjectSetSingleMovement(struct EventObject *, struct Sprite *, u8); +static void oamt_npc_ministep_reset(struct Sprite *, u8, u8); +static void UpdateEventObjectSpriteSubpriorityAndVisibility(struct Sprite *); const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; @@ -625,7 +629,6 @@ const u16 gObjectPaletteTags3[] = { EVENT_OBJ_PAL_TAG_7, }; - const u16 *const gObjectPaletteTagSets[] = { gObjectPaletteTags0, gObjectPaletteTags1, @@ -1078,19 +1081,19 @@ static void ClearAllEventObjects(void) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) ClearEventObject(&gEventObjects[i]); } -void sub_808D438(void) +void ResetEventObjects(void) { ClearLinkPlayerEventObjects(); ClearAllEventObjects(); ClearPlayerAvatarInfo(); - sub_808D450(); + CreateReflectionEffectSprites(); } -static void sub_808D450(void) +static void CreateReflectionEffectSprites(void) { u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31); gSprites[spriteId].oam.affineMode = 1; @@ -1108,7 +1111,7 @@ static void sub_808D450(void) u8 GetFirstInactiveEventObjectId(void) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (!gEventObjects[i].active) break; @@ -1119,7 +1122,7 @@ u8 GetFirstInactiveEventObjectId(void) u8 GetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) { - if (localId < 0xff) + if (localId < 0xFF) { return GetEventObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId); } @@ -1129,7 +1132,7 @@ u8 GetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) bool8 TryGetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u8 *eventObjectId) { *eventObjectId = GetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroupId); - if (*eventObjectId == NUM_EVENT_OBJECTS) + if (*eventObjectId == EVENT_OBJECTS_COUNT) return TRUE; else return FALSE; @@ -1138,7 +1141,7 @@ bool8 TryGetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u u8 GetEventObjectIdByXY(s16 x, s16 y) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (gEventObjects[i].active && gEventObjects[i].currentCoords.x == x && gEventObjects[i].currentCoords.y == y) break; @@ -1150,25 +1153,25 @@ u8 GetEventObjectIdByXY(s16 x, s16 y) static u8 GetEventObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapGroupId) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (gEventObjects[i].active && gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroupId) return i; } - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } static u8 GetEventObjectIdByLocalId(u8 localId) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (gEventObjects[i].active && gEventObjects[i].localId == localId) return i; } - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } // This function has the same nonmatching quirk as in Ruby/Sapphire. @@ -1183,7 +1186,7 @@ static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template, // mapNum and mapGroup are in the wrong registers (r7/r6 instead of r6/r7) if (GetAvailableEventObjectId(template->localId, mapNum, mapGroup, &eventObjectId)) { - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } eventObject = &gEventObjects[eventObjectId]; ClearEventObject(eventObject); @@ -1387,24 +1390,24 @@ static NAKED u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *tem u8 Unref_TryInitLocalEventObject(u8 localId) { u8 i; - u8 nObjects; + u8 eventObjectCount; struct EventObjectTemplate *template; if (gMapHeader.events != NULL) { if (InBattlePyramid()) { - nObjects = sub_81AAA40(); + eventObjectCount = sub_81AAA40(); } else if (InTrainerHill()) { - nObjects = 2; + eventObjectCount = 2; } else { - nObjects = gMapHeader.events->eventObjectCount; + eventObjectCount = gMapHeader.events->eventObjectCount; } - for (i = 0; i < nObjects; i++) + for (i = 0; i < eventObjectCount; i++) { template = &gSaveBlock1Ptr->eventObjectTemplates[i]; if (template->localId == localId && !FlagGet(template->flagId)) @@ -1413,7 +1416,7 @@ u8 Unref_TryInitLocalEventObject(u8 localId) } } } - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 *eventObjectId) @@ -1425,14 +1428,14 @@ static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 * { u8 i = 0; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (!gEventObjects[i].active) break; if (gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroup) return TRUE; } - if (i >= NUM_EVENT_OBJECTS) + if (i >= EVENT_OBJECTS_COUNT) return TRUE; *eventObjectId = i; do @@ -1440,7 +1443,7 @@ static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 * if (gEventObjects[i].active && gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroup) return TRUE; i++; - } while (i < NUM_EVENT_OBJECTS); + } while (i < EVENT_OBJECTS_COUNT); return FALSE; } @@ -1472,7 +1475,7 @@ void RemoveAllEventObjectsExceptPlayer(void) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (i != gPlayerAvatar.eventObjectId) RemoveEventObject(&gEventObjects[i]); @@ -1481,16 +1484,16 @@ void RemoveAllEventObjectsExceptPlayer(void) static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { + u8 spriteId; + u8 paletteSlot; + u8 eventObjectId; + struct Sprite *sprite; struct EventObject *eventObject; const struct EventObjectGraphicsInfo *graphicsInfo; - struct Sprite *sprite; - u8 eventObjectId; - u8 paletteSlot; - u8 spriteId; eventObjectId = InitEventObjectStateFromTemplate(eventObjectTemplate, mapNum, mapGroup); - if (eventObjectId == NUM_EVENT_OBJECTS) - return NUM_EVENT_OBJECTS; + if (eventObjectId == EVENT_OBJECTS_COUNT) + return EVENT_OBJECTS_COUNT; eventObject = &gEventObjects[eventObjectId]; graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); @@ -1508,7 +1511,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl paletteSlot -= 16; sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); } - if (eventObject->movementType == 0x4c) + if (eventObject->movementType == MOVEMENT_TYPE_INVISIBLE) { eventObject->invisible = TRUE; } @@ -1517,7 +1520,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl if (spriteId == MAX_SPRITES) { gEventObjects[eventObjectId].active = FALSE; - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } sprite = &gSprites[spriteId]; sub_8092FF0(eventObject->currentCoords.x + cameraX, eventObject->currentCoords.y + cameraY, &sprite->pos1.x, &sprite->pos1.y); @@ -1541,21 +1544,20 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl static u8 TrySpawnEventObject(struct EventObjectTemplate *eventObjectTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { - const struct EventObjectGraphicsInfo *graphicsInfo; + u8 eventObjectId; struct SpriteTemplate spriteTemplate; - const struct SubspriteTable *subspriteTables; struct SpriteFrameImage spriteFrameImage; - u8 eventObjectId; + const struct EventObjectGraphicsInfo *graphicsInfo; + const struct SubspriteTable *subspriteTables = NULL; - subspriteTables = NULL; graphicsInfo = GetEventObjectGraphicsInfo(eventObjectTemplate->graphicsId); MakeObjectTemplateFromEventObjectTemplate(eventObjectTemplate, &spriteTemplate, &subspriteTables); spriteFrameImage.size = graphicsInfo->size; spriteTemplate.images = &spriteFrameImage; eventObjectId = TrySetupEventObjectSprite(eventObjectTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY); - if (eventObjectId == NUM_EVENT_OBJECTS) + if (eventObjectId == EVENT_OBJECTS_COUNT) { - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } gSprites[gEventObjects[eventObjectId].spriteId].images = graphicsInfo->images; if (subspriteTables != NULL) @@ -1603,29 +1605,29 @@ u8 show_sprite(u8 localId, u8 mapNum, u8 mapGroup) eventObjectTemplate = GetEventObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); if (eventObjectTemplate == NULL) { - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } GetEventObjectMovingCameraOffset(&cameraX, &cameraY); return TrySpawnEventObject(eventObjectTemplate, mapNum, mapGroup, cameraX, cameraY); } -static void MakeObjectTemplateFromEventObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) +static void MakeObjectTemplateFromEventObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { - const struct EventObjectGraphicsInfo *gfxInfo = GetEventObjectGraphicsInfo(graphicsId); + const struct EventObjectGraphicsInfo *graphicsInfo = GetEventObjectGraphicsInfo(graphicsId); - sprTemplate->tileTag = gfxInfo->tileTag; - sprTemplate->paletteTag = gfxInfo->paletteTag1; - sprTemplate->oam = gfxInfo->oam; - sprTemplate->anims = gfxInfo->anims; - sprTemplate->images = gfxInfo->images; - sprTemplate->affineAnims = gfxInfo->affineAnims; - sprTemplate->callback = callback; - *subspriteTables = gfxInfo->subspriteTables; + spriteTemplate->tileTag = graphicsInfo->tileTag; + spriteTemplate->paletteTag = graphicsInfo->paletteTag1; + spriteTemplate->oam = graphicsInfo->oam; + spriteTemplate->anims = graphicsInfo->anims; + spriteTemplate->images = graphicsInfo->images; + spriteTemplate->affineAnims = graphicsInfo->affineAnims; + spriteTemplate->callback = callback; + *subspriteTables = graphicsInfo->subspriteTables; } -static void MakeObjectTemplateFromEventObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) +static void MakeObjectTemplateFromEventObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { - MakeObjectTemplateFromEventObjectGraphicsInfo(graphicsId, sMovementTypeCallbacks[callbackIndex], sprTemplate, subspriteTables); + MakeObjectTemplateFromEventObjectGraphicsInfo(graphicsId, sMovementTypeCallbacks[callbackIndex], spriteTemplate, subspriteTables); } static void MakeObjectTemplateFromEventObjectTemplate(struct EventObjectTemplate *eventObjectTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) @@ -1638,37 +1640,37 @@ u8 AddPseudoEventObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x struct SpriteTemplate *spriteTemplate; const struct SubspriteTable *subspriteTables; struct Sprite *sprite; - u8 spriteIdx; + u8 spriteId; spriteTemplate = malloc(sizeof(struct SpriteTemplate)); MakeObjectTemplateFromEventObjectGraphicsInfo(graphicsId, callback, spriteTemplate, &subspriteTables); - if (spriteTemplate->paletteTag != 0xffff) + if (spriteTemplate->paletteTag != 0xFFFF) { - sub_808E894(spriteTemplate->paletteTag); + LoadEventObjectPalette(spriteTemplate->paletteTag); } - spriteIdx = CreateSprite(spriteTemplate, x, y, subpriority); + spriteId = CreateSprite(spriteTemplate, x, y, subpriority); free(spriteTemplate); - if (spriteIdx != MAX_SPRITES && subspriteTables != NULL) + if (spriteId != MAX_SPRITES && subspriteTables != NULL) { - sprite = &gSprites[spriteIdx]; + sprite = &gSprites[spriteId]; SetSubspriteTables(sprite, subspriteTables); sprite->subspriteMode = 2; } - return spriteIdx; + return spriteId; } u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction) { - const struct EventObjectGraphicsInfo *graphicsInfo; - struct SpriteTemplate spriteTemplate; - const struct SubspriteTable *subspriteTables; u8 spriteId; struct Sprite *sprite; + struct SpriteTemplate spriteTemplate; + const struct SubspriteTable *subspriteTables; + const struct EventObjectGraphicsInfo *graphicsInfo; graphicsInfo = GetEventObjectGraphicsInfo(graphicsId); MakeObjectTemplateFromEventObjectGraphicsInfo(graphicsId, UpdateEventObjectSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables); - *(u16 *)&spriteTemplate.paletteTag = 0xffff; + *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; x += 7; y += 7; sub_80930E0(&x, &y, 8, 16); @@ -1710,20 +1712,14 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction) void TrySpawnEventObjects(s16 cameraX, s16 cameraY) { u8 i; - s16 left; - s16 right; - s16 top; - s16 bottom; u8 objectCount; - s16 npcX; - s16 npcY; if (gMapHeader.events != NULL) { - left = gSaveBlock1Ptr->pos.x - 2; - right = gSaveBlock1Ptr->pos.x + 17; - top = gSaveBlock1Ptr->pos.y; - bottom = gSaveBlock1Ptr->pos.y + 16; + s16 left = gSaveBlock1Ptr->pos.x - 2; + s16 right = gSaveBlock1Ptr->pos.x + 17; + s16 top = gSaveBlock1Ptr->pos.y; + s16 bottom = gSaveBlock1Ptr->pos.y + 16; if (InBattlePyramid()) { @@ -1741,8 +1737,8 @@ void TrySpawnEventObjects(s16 cameraX, s16 cameraY) for (i = 0; i < objectCount; i++) { struct EventObjectTemplate *template = &gSaveBlock1Ptr->eventObjectTemplates[i]; - npcX = template->x + 7; - npcY = template->y + 7; + s16 npcX = template->x + 7; + s16 npcY = template->y + 7; if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX && !FlagGet(template->flagId)) @@ -1753,12 +1749,10 @@ void TrySpawnEventObjects(s16 cameraX, s16 cameraY) void RemoveEventObjectsOutsideView(void) { - u8 i; - u8 j; + u8 i, j; bool8 isActiveLinkPlayer; - struct EventObject *eventObject; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { for (j = 0, isActiveLinkPlayer = FALSE; j < ARRAY_COUNT(gLinkPlayerEventObjects); j++) { @@ -1767,7 +1761,7 @@ void RemoveEventObjectsOutsideView(void) } if (!isActiveLinkPlayer) { - eventObject = &gEventObjects[i]; + struct EventObject *eventObject = &gEventObjects[i]; if (eventObject->active && !eventObject->isPlayer) RemoveEventObjectIfOutsideView(eventObject); @@ -1777,21 +1771,16 @@ void RemoveEventObjectsOutsideView(void) static void RemoveEventObjectIfOutsideView(struct EventObject *eventObject) { - s16 left; - s16 right; - s16 top; - s16 bottom; - - left = gSaveBlock1Ptr->pos.x - 2; - right = gSaveBlock1Ptr->pos.x + 17; - top = gSaveBlock1Ptr->pos.y; - bottom = gSaveBlock1Ptr->pos.y + 16; + s16 left = gSaveBlock1Ptr->pos.x - 2; + s16 right = gSaveBlock1Ptr->pos.x + 17; + s16 top = gSaveBlock1Ptr->pos.y; + s16 bottom = gSaveBlock1Ptr->pos.y + 16; if (eventObject->currentCoords.x >= left && eventObject->currentCoords.x <= right - && eventObject->currentCoords.y >= top && eventObject->currentCoords.y <= bottom) + && eventObject->currentCoords.y >= top && eventObject->currentCoords.y <= bottom) return; if (eventObject->initialCoords.x >= left && eventObject->initialCoords.x <= right - && eventObject->initialCoords.y >= top && eventObject->initialCoords.y <= bottom) + && eventObject->initialCoords.y >= top && eventObject->initialCoords.y <= bottom) return; RemoveEventObject(eventObject); } @@ -1801,26 +1790,26 @@ void sub_808E16C(s16 x, s16 y) u8 i; ClearPlayerAvatarInfo(); - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (gEventObjects[i].active) { sub_808E1B8(i, x, y); } } - sub_808D450(); + CreateReflectionEffectSprites(); } static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y) { u8 spriteId; u8 paletteSlot; + struct Sprite *sprite; struct EventObject *eventObject; + struct SpriteTemplate spriteTemplate; + struct SpriteFrameImage spriteFrameImage; const struct SubspriteTable *subspriteTables; const struct EventObjectGraphicsInfo *graphicsInfo; - struct SpriteFrameImage spriteFrameImage; - struct SpriteTemplate spriteTemplate; - struct Sprite *sprite; #define i spriteId for (i = 0; i < ARRAY_COUNT(gLinkPlayerEventObjects); i++) @@ -1838,7 +1827,7 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y) spriteFrameImage.size = graphicsInfo->size; MakeObjectTemplateFromEventObjectGraphicsInfoWithCallbackIndex(eventObject->graphicsId, eventObject->movementType, &spriteTemplate, &subspriteTables); spriteTemplate.images = &spriteFrameImage; - *(u16 *)&spriteTemplate.paletteTag = 0xffff; + *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { @@ -1853,7 +1842,7 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y) paletteSlot -= 16; sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); } - *(u16 *)&spriteTemplate.paletteTag = 0xffff; + *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; spriteId = CreateSprite(&spriteTemplate, 0, 0, 0); if (spriteId != MAX_SPRITES) { @@ -1864,7 +1853,7 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y) sprite->pos1.x += 8; sprite->pos1.y += 16 + sprite->centerToCornerVecY; sprite->images = graphicsInfo->images; - if (eventObject->movementType == 0x0b) + if (eventObject->movementType == MOVEMENT_TYPE_PLAYER) { SetPlayerAvatarEventObjectIdAndObjectId(eventObjectId, spriteId); eventObject->warpArrowSpriteId = CreateWarpArrowSprite(); @@ -1877,7 +1866,7 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y) sprite->coordOffsetEnabled = TRUE; sprite->data[0] = eventObjectId; eventObject->spriteId = spriteId; - if (!eventObject->inanimate && eventObject->movementType != 0x0b) + if (!eventObject->inanimate && eventObject->movementType != MOVEMENT_TYPE_PLAYER) { StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObject->facingDirection)); } @@ -1888,7 +1877,7 @@ static void sub_808E1B8(u8 eventObjectId, s16 x, s16 y) static void sub_808E38C(struct EventObject *eventObject) { - eventObject->singleMovementActive = 0; + eventObject->singleMovementActive = FALSE; eventObject->triggerGroundEffectsOnMove = TRUE; eventObject->hasShadow = FALSE; eventObject->hasReflection = FALSE; @@ -1983,7 +1972,7 @@ void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction) EventObjectTurn(&gEventObjects[playerAvatar->eventObjectId], direction); } -/*static*/ void get_berry_tree_graphics(struct EventObject *eventObject, struct Sprite *sprite) +static void get_berry_tree_graphics(struct EventObject *eventObject, struct Sprite *sprite) { u8 berryStage; u8 berryId; @@ -1996,7 +1985,7 @@ void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction) eventObject->invisible = FALSE; sprite->invisible = FALSE; berryId = GetBerryTypeByBerryTreeId(eventObject->trainerRange_berryTreeId) - 1; - berryStage -= 1; + berryStage--; if (berryId >= NUM_BERRIES) { berryId = 0; @@ -2059,7 +2048,7 @@ void sub_808E75C(s16 x, s16 y) struct EventObject *eventObject; eventObjectId = GetEventObjectIdByXY(x, y); - if (eventObjectId != NUM_EVENT_OBJECTS) + if (eventObjectId != EVENT_OBJECTS_COUNT) { eventObject = &gEventObjects[eventObjectId]; eventObject->triggerGroundEffectsOnMove = TRUE; @@ -2113,42 +2102,40 @@ void FreeAndReserveObjectSpritePalettes(void) gReservedSpritePaletteCount = 12; } -static void sub_808E894(u16 paletteTag) +static void LoadEventObjectPalette(u16 paletteTag) { - u16 paletteSlot; + u16 i = FindEventObjectPaletteIndexByTag(paletteTag); - paletteSlot = FindEventObjectPaletteIndexByTag(paletteTag); - if (paletteSlot != EVENT_OBJ_PAL_TAG_NONE) // always true + if (i != EVENT_OBJ_PAL_TAG_NONE) // always true { - sub_808E8F4(&sEventObjectSpritePalettes[paletteSlot]); + sub_808E8F4(&sEventObjectSpritePalettes[i]); } } -void sub_808E8C0(u16 *paletteTags) +void Unused_LoadEventObjectPaletteSet(u16 *paletteTags) { u8 i; for (i = 0; paletteTags[i] != EVENT_OBJ_PAL_TAG_NONE; i++) { - sub_808E894(paletteTags[i]); + LoadEventObjectPalette(paletteTags[i]); } } static u8 sub_808E8F4(const struct SpritePalette *spritePalette) { - if (IndexOfSpritePaletteTag(spritePalette->tag) != 0xff) + if (IndexOfSpritePaletteTag(spritePalette->tag) != 0xFF) { - return 0xff; + return 0xFF; } return LoadSpritePalette(spritePalette); } void PatchObjectPalette(u16 paletteTag, u8 paletteSlot) { - u16 paletteIdx; + u8 paletteIndex = FindEventObjectPaletteIndexByTag(paletteTag); - paletteIdx = FindEventObjectPaletteIndexByTag(paletteTag); - LoadPalette(sEventObjectSpritePalettes[paletteIdx].data, 16 * paletteSlot + 256, 0x20); + LoadPalette(sEventObjectSpritePalettes[paletteIndex].data, 16 * paletteSlot + 0x100, 0x20); } void PatchObjectPaletteRange(const u16 *paletteTags, u8 minSlot, u8 maxSlot) @@ -2172,7 +2159,7 @@ static u8 FindEventObjectPaletteIndexByTag(u16 tag) return i; } } - return 0xff; + return 0xFF; } void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot) @@ -2227,7 +2214,7 @@ void ShiftEventObjectCoords(struct EventObject *eventObject, s16 x, s16 y) eventObject->currentCoords.y = y; } -/*static*/ void SetEventObjectCoords(struct EventObject *eventObject, s16 x, s16 y) +static void SetEventObjectCoords(struct EventObject *eventObject, s16 x, s16 y) { eventObject->previousCoords.x = x; eventObject->previousCoords.y = y; @@ -2282,7 +2269,7 @@ void UpdateEventObjectCoordsForCameraUpdate(void) { dx = gCamera.x; dy = gCamera.y; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (gEventObjects[i].active) { @@ -2300,7 +2287,8 @@ void UpdateEventObjectCoordsForCameraUpdate(void) u8 GetEventObjectIdByXYZ(u16 x, u16 y, u8 z) { u8 i; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { if (gEventObjects[i].active) { @@ -2310,7 +2298,7 @@ u8 GetEventObjectIdByXYZ(u16 x, u16 y, u8 z) } } } - return NUM_EVENT_OBJECTS; + return EVENT_OBJECTS_COUNT; } static bool8 EventObjectDoesZCoordMatch(struct EventObject *eventObject, u8 z) @@ -2331,9 +2319,8 @@ void UpdateEventObjectsForCameraUpdate(s16 x, s16 y) u8 AddCameraObject(u8 linkedSpriteId) { - u8 spriteId; + u8 spriteId = CreateSprite(&gCameraSpriteTemplate, 0, 0, 4); - spriteId = CreateSprite(&gCameraSpriteTemplate, 0, 0, 4); gSprites[spriteId].invisible = TRUE; gSprites[spriteId].data[0] = linkedSpriteId; return spriteId; @@ -2358,11 +2345,9 @@ static void CameraObject_0(struct Sprite *sprite) static void CameraObject_1(struct Sprite *sprite) { - s16 x; - s16 y; + s16 x = gSprites[sprite->data[0]].pos1.x; + s16 y = gSprites[sprite->data[0]].pos1.y; - y = gSprites[sprite->data[0]].pos1.y; - x = gSprites[sprite->data[0]].pos1.x; sprite->data[2] = x - sprite->pos1.x; sprite->data[3] = y - sprite->pos1.y; sprite->pos1.x = x; @@ -2379,13 +2364,13 @@ static void CameraObject_2(struct Sprite *sprite) static struct Sprite *FindCameraObject(void) { - u8 spriteId; + u8 i; - for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + for (i = 0; i < MAX_SPRITES; i++) { - if (gSprites[spriteId].inUse && gSprites[spriteId].callback == ObjectCB_CameraObject) + if (gSprites[i].inUse && gSprites[i].callback == ObjectCB_CameraObject) { - return &gSprites[spriteId]; + return &gSprites[i]; } } return NULL; @@ -2454,7 +2439,7 @@ u8 CreateCopySpriteAt(struct Sprite *sprite, s16 x, s16 y, u8 subpriority) { s16 i; - for (i = MAX_SPRITES - 1; i > -1; i --) + for (i = MAX_SPRITES - 1; i > -1; i--) { if (!gSprites[i].inUse) { @@ -2978,10 +2963,8 @@ u8 GetLimitedVectorDirection_SouthWestEast(s16 dx, s16 dy, s16 absdx, s16 absdy) u8 TryGetTrainerEncounterDirection(struct EventObject *eventObject, u8 movementType) { - s16 dx; - s16 dy; - s16 absdx; - s16 absdy; + s16 dx, dy; + s16 absdx, absdy; if (!EventObjectIsTrainerAndCloseToPlayer(eventObject)) { @@ -4449,7 +4432,7 @@ bool8 CopyablePlayerMovement_GoSpeed1(struct EventObject *eventObject, struct Sp { EventObjectSetSingleMovement(eventObject, sprite, GetFaceDirectionMovementAction(direction)); } - eventObject->singleMovementActive = 1; + eventObject->singleMovementActive = TRUE; sprite->data[1] = 2; return TRUE; } @@ -4468,7 +4451,7 @@ bool8 CopyablePlayerMovement_GoSpeed2(struct EventObject *eventObject, struct Sp { EventObjectSetSingleMovement(eventObject, sprite, GetFaceDirectionMovementAction(direction)); } - eventObject->singleMovementActive = 1; + eventObject->singleMovementActive = TRUE; sprite->data[1] = 2; return TRUE; } @@ -4487,7 +4470,7 @@ bool8 CopyablePlayerMovement_Slide(struct EventObject *eventObject, struct Sprit { EventObjectSetSingleMovement(eventObject, sprite, GetFaceDirectionMovementAction(direction)); } - eventObject->singleMovementActive = 1; + eventObject->singleMovementActive = TRUE; sprite->data[1] = 2; return TRUE; } @@ -4499,7 +4482,7 @@ bool8 cph_IM_DIFFERENT(struct EventObject *eventObject, struct Sprite *sprite, u direction = playerDirection; direction = state_to_direction(gInitialMovementTypeFacingDirections[eventObject->movementType], eventObject->directionSequenceIndex, direction); EventObjectSetSingleMovement(eventObject, sprite, GetJumpInPlaceMovementAction(direction)); - eventObject->singleMovementActive = 1; + eventObject->singleMovementActive = TRUE; sprite->data[1] = 2; return TRUE; } @@ -4518,7 +4501,7 @@ bool8 CopyablePlayerMovement_GoSpeed4(struct EventObject *eventObject, struct Sp { EventObjectSetSingleMovement(eventObject, sprite, GetFaceDirectionMovementAction(direction)); } - eventObject->singleMovementActive = 1; + eventObject->singleMovementActive = TRUE; sprite->data[1] = 2; return TRUE; } @@ -4539,7 +4522,7 @@ bool8 CopyablePlayerMovement_Jump(struct EventObject *eventObject, struct Sprite { EventObjectSetSingleMovement(eventObject, sprite, GetFaceDirectionMovementAction(direction)); } - eventObject->singleMovementActive = 1; + eventObject->singleMovementActive = TRUE; sprite->data[1] = 2; return TRUE; } @@ -4951,7 +4934,7 @@ static bool8 DoesObjectCollideWithObjectAt(struct EventObject *eventObject, s16 u8 i; struct EventObject *curObject; - for (i = 0; i < NUM_EVENT_OBJECTS; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { curObject = &gEventObjects[i]; if (curObject->active && curObject != eventObject) @@ -5022,8 +5005,8 @@ void sub_8092FF0(s16 x, s16 y, s16 *dest_x, s16 *dest_y) { *dest_x = (x - gSaveBlock1Ptr->pos.x) << 4; *dest_y = (y - gSaveBlock1Ptr->pos.y) << 4; - *dest_x -= gUnknown_03005DEC; - *dest_y -= gUnknown_03005DE8; + *dest_x -= gTotalCameraPixelOffsetX; + *dest_y -= gTotalCameraPixelOffsetY; } void sub_8093038(s16 x, s16 y, s16 *dest_x, s16 *dest_y) @@ -5031,21 +5014,21 @@ void sub_8093038(s16 x, s16 y, s16 *dest_x, s16 *dest_y) s16 dx; s16 dy; - dx = -gUnknown_03005DEC - gUnknown_03005DD0.x; - dy = -gUnknown_03005DE8 - gUnknown_03005DD0.y; - if (gUnknown_03005DD0.x > 0) + dx = -gTotalCameraPixelOffsetX - gFieldCamera.x; + dy = -gTotalCameraPixelOffsetY - gFieldCamera.y; + if (gFieldCamera.x > 0) { dx += 0x10; } - if (gUnknown_03005DD0.x < 0) + if (gFieldCamera.x < 0) { dx -= 0x10; } - if (gUnknown_03005DD0.y > 0) + if (gFieldCamera.y > 0) { dy += 0x10; } - if (gUnknown_03005DD0.y < 0) + if (gFieldCamera.y < 0) { dy -= 0x10; } @@ -5064,19 +5047,19 @@ static void GetEventObjectMovingCameraOffset(s16 *x, s16 *y) { *x = 0; *y = 0; - if (gUnknown_03005DD0.x > 0) + if (gFieldCamera.x > 0) { (*x)++; } - if (gUnknown_03005DD0.x < 0) + if (gFieldCamera.x < 0) { (*x) --; } - if (gUnknown_03005DD0.y > 0) + if (gFieldCamera.y > 0) { (*y)++; } - if (gUnknown_03005DD0.y < 0) + if (gFieldCamera.y < 0) { (*y) --; } @@ -5332,7 +5315,7 @@ void npc_apply_direction(struct EventObject *eventObject, struct Sprite *sprite, ShiftEventObjectCoords(eventObject, x, y); oamt_npc_ministep_reset(sprite, direction, speed); sprite->animPaused = FALSE; - if (gLockedAnimEventObjects != NULL && FindLockedEventObjectIndex(eventObject) != NUM_EVENT_OBJECTS) + if (gLockedAnimEventObjects != NULL && FindLockedEventObjectIndex(eventObject) != EVENT_OBJECTS_COUNT) { sprite->animPaused = TRUE; } @@ -7435,7 +7418,7 @@ bool8 MovementAction_AcroWheelieMoveLeft_Step1(struct EventObject *eventObject, bool8 MovementAction_AcroWheelieMoveRight_Step0(struct EventObject *eventObject, struct Sprite *sprite) { - sub_8096200(eventObject, sprite, DIR_EAST, 1); + sub_8096200(eventObject, sprite, DIR_EAST, 1); return MovementAction_AcroWheelieMoveRight_Step1(eventObject, sprite); } @@ -7490,7 +7473,7 @@ bool8 MovementAction_AcroEndWheelieMoveUp_Step1(struct EventObject *eventObject, bool8 MovementAction_AcroEndWheelieMoveLeft_Step0(struct EventObject *eventObject, struct Sprite *sprite) { - sub_8096330(eventObject, sprite, DIR_WEST, 1); + sub_8096330(eventObject, sprite, DIR_WEST, 1); return MovementAction_AcroEndWheelieMoveLeft_Step1(eventObject, sprite); } @@ -7506,7 +7489,7 @@ bool8 MovementAction_AcroEndWheelieMoveLeft_Step1(struct EventObject *eventObjec bool8 MovementAction_AcroEndWheelieMoveRight_Step0(struct EventObject *eventObject, struct Sprite *sprite) { - sub_8096330(eventObject, sprite, DIR_EAST, 1); + sub_8096330(eventObject, sprite, DIR_EAST, 1); return MovementAction_AcroEndWheelieMoveRight_Step1(eventObject, sprite); } @@ -7578,15 +7561,13 @@ static void TryEnableEventObjectAnim(struct EventObject *eventObject, struct Spr static void UpdateEventObjectVisibility(struct EventObject *eventObject, struct Sprite *sprite) { sub_8096530(eventObject, sprite); - npc_update_obj_anim_flag(eventObject, sprite); + UpdateEventObjSpriteVisibility(eventObject, sprite); } static void sub_8096530(struct EventObject *eventObject, struct Sprite *sprite) { - u16 x; - u16 y; - u16 x2; - u16 y2; + u16 x, y; + u16 x2, y2; const struct EventObjectGraphicsInfo *graphicsInfo; eventObject->offScreen = FALSE; @@ -7615,7 +7596,7 @@ static void sub_8096530(struct EventObject *eventObject, struct Sprite *sprite) } } -static void npc_update_obj_anim_flag(struct EventObject *eventObject, struct Sprite *sprite) +static void UpdateEventObjSpriteVisibility(struct EventObject *eventObject, struct Sprite *sprite) { sprite->invisible = FALSE; if (eventObject->invisible || eventObject->offScreen) @@ -7624,7 +7605,7 @@ static void npc_update_obj_anim_flag(struct EventObject *eventObject, struct Spr } } -/*static*/ void GetAllGroundEffectFlags_OnSpawn(struct EventObject *eventObj, u32 *flags) +static void GetAllGroundEffectFlags_OnSpawn(struct EventObject *eventObj, u32 *flags) { EventObjectUpdateMetatileBehaviors(eventObj); GetGroundEffectFlags_Reflection(eventObj, flags); @@ -7650,7 +7631,7 @@ static void GetAllGroundEffectFlags_OnBeginStep(struct EventObject *eventObj, u3 GetGroundEffectFlags_HotSprings(eventObj, flags); } -/*static*/ void GetAllGroundEffectFlags_OnFinishStep(struct EventObject *eventObj, u32 *flags) +static void GetAllGroundEffectFlags_OnFinishStep(struct EventObject *eventObj, u32 *flags) { EventObjectUpdateMetatileBehaviors(eventObj); GetGroundEffectFlags_ShallowFlowingWater(eventObj, flags); @@ -7930,7 +7911,7 @@ u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) return 0; } -void EventObjectSetSpriteOamTableForLongGrass(struct EventObject *eventObj, struct Sprite *sprite) +static void SetEventObjectSpriteOamTableForLongGrass(struct EventObject *eventObj, struct Sprite *sprite) { if (eventObj->disableCoveringGroundEffects) return; @@ -7983,7 +7964,7 @@ static const u8 sEventObjectPriorities_08376070[] = { 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, }; -void EventObjectUpdateZCoordAndPriority(struct EventObject *eventObj, struct Sprite *sprite) +void UpdateEventObjectZCoordAndPriority(struct EventObject *eventObj, struct Sprite *sprite) { if (eventObj->fixedPriority) return; @@ -8206,7 +8187,11 @@ void GroundEffect_JumpOnTallGrass(struct EventObject *eventObj, struct Sprite *s FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); spriteId = FindTallGrassFieldEffectSpriteId( - eventObj->localId, eventObj->mapNum, eventObj->mapGroup, eventObj->currentCoords.x, eventObj->currentCoords.y); + eventObj->localId, + eventObj->mapNum, + eventObj->mapGroup, + eventObj->currentCoords.x, + eventObj->currentCoords.y); if (spriteId == MAX_SPRITES) GroundEffect_SpawnOnTallGrass(eventObj, sprite); @@ -8288,7 +8273,7 @@ static void (*const sGroundEffectFuncs[])(struct EventObject *eventObj, struct S GroundEffect_Seaweed }; -/*static*/ void DoFlaggedGroundEffects(struct EventObject *eventObj, struct Sprite *sprite, u32 flags) +static void DoFlaggedGroundEffects(struct EventObject *eventObj, struct Sprite *sprite, u32 flags) { u8 i; @@ -8329,9 +8314,9 @@ static void DoGroundEffects_OnSpawn(struct EventObject *eventObj, struct Sprite if (eventObj->triggerGroundEffectsOnMove) { flags = 0; - EventObjectUpdateZCoordAndPriority(eventObj, sprite); + UpdateEventObjectZCoordAndPriority(eventObj, sprite); GetAllGroundEffectFlags_OnSpawn(eventObj, &flags); - EventObjectSetSpriteOamTableForLongGrass(eventObj, sprite); + SetEventObjectSpriteOamTableForLongGrass(eventObj, sprite); DoFlaggedGroundEffects(eventObj, sprite, flags); eventObj->triggerGroundEffectsOnMove = 0; eventObj->disableCoveringGroundEffects = 0; @@ -8345,9 +8330,9 @@ static void DoGroundEffects_OnBeginStep(struct EventObject *eventObj, struct Spr if (eventObj->triggerGroundEffectsOnMove) { flags = 0; - EventObjectUpdateZCoordAndPriority(eventObj, sprite); + UpdateEventObjectZCoordAndPriority(eventObj, sprite); GetAllGroundEffectFlags_OnBeginStep(eventObj, &flags); - EventObjectSetSpriteOamTableForLongGrass(eventObj, sprite); + SetEventObjectSpriteOamTableForLongGrass(eventObj, sprite); filters_out_some_ground_effects(eventObj, &flags); DoFlaggedGroundEffects(eventObj, sprite, flags); eventObj->triggerGroundEffectsOnMove = 0; @@ -8362,9 +8347,9 @@ static void DoGroundEffects_OnFinishStep(struct EventObject *eventObj, struct Sp if (eventObj->triggerGroundEffectsOnStop) { flags = 0; - EventObjectUpdateZCoordAndPriority(eventObj, sprite); + UpdateEventObjectZCoordAndPriority(eventObj, sprite); GetAllGroundEffectFlags_OnFinishStep(eventObj, &flags); - EventObjectSetSpriteOamTableForLongGrass(eventObj, sprite); + SetEventObjectSpriteOamTableForLongGrass(eventObj, sprite); FilterOutStepOnPuddleGroundEffectIfJumping(eventObj, &flags); DoFlaggedGroundEffects(eventObj, sprite, flags); eventObj->triggerGroundEffectsOnStop = 0; @@ -8397,11 +8382,11 @@ void FreezeEventObjects(void) FreezeEventObject(&gEventObjects[i]); } -void FreezeEventObjectsExceptOne(u8 a1) +void FreezeEventObjectsExceptOne(u8 eventObjectId) { u8 i; for (i = 0; i < EVENT_OBJECTS_COUNT; i++) - if (i != a1 && gEventObjects[i].active && i != gPlayerAvatar.eventObjectId) + if (i != eventObjectId && gEventObjects[i].active && i != gPlayerAvatar.eventObjectId) FreezeEventObject(&gEventObjects[i]); } @@ -8423,44 +8408,44 @@ void UnfreezeEventObjects(void) UnfreezeEventObject(&gEventObjects[i]); } -void Step1(struct Sprite *sprite, u8 dir) +static void Step1(struct Sprite *sprite, u8 dir) { sprite->pos1.x += sDirectionToVectors[dir].x; sprite->pos1.y += sDirectionToVectors[dir].y; } -void Step2(struct Sprite *sprite, u8 dir) +static void Step2(struct Sprite *sprite, u8 dir) { sprite->pos1.x += 2 * (u16) sDirectionToVectors[dir].x; sprite->pos1.y += 2 * (u16) sDirectionToVectors[dir].y; } -void Step3(struct Sprite *sprite, u8 dir) +static void Step3(struct Sprite *sprite, u8 dir) { sprite->pos1.x += 2 * (u16) sDirectionToVectors[dir].x + (u16) sDirectionToVectors[dir].x; sprite->pos1.y += 2 * (u16) sDirectionToVectors[dir].y + (u16) sDirectionToVectors[dir].y; } -void Step4(struct Sprite *sprite, u8 dir) +static void Step4(struct Sprite *sprite, u8 dir) { sprite->pos1.x += 4 * (u16) sDirectionToVectors[dir].x; sprite->pos1.y += 4 * (u16) sDirectionToVectors[dir].y; } -void Step8(struct Sprite *sprite, u8 dir) +static void Step8(struct Sprite *sprite, u8 dir) { sprite->pos1.x += 8 * (u16) sDirectionToVectors[dir].x; sprite->pos1.y += 8 * (u16) sDirectionToVectors[dir].y; } -void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) +static void oamt_npc_ministep_reset(struct Sprite *sprite, u8 direction, u8 a3) { - sprite->data[3] = a2; + sprite->data[3] = direction; sprite->data[4] = a3; sprite->data[5] = 0; } -typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); +typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 direction); static const SpriteStepFunc gUnknown_0850E6C4[] = { Step1, @@ -8540,9 +8525,9 @@ bool8 obj_npc_ministep(struct Sprite *sprite) return TRUE; } -void sub_80976DC(struct Sprite *sprite, u8 a2) +void sub_80976DC(struct Sprite *sprite, u8 direction) { - sprite->data[3] = a2; + sprite->data[3] = direction; sprite->data[4] = 0; sprite->data[5] = 0; } @@ -8563,7 +8548,7 @@ bool8 sub_80976EC(struct Sprite *sprite) return FALSE; } -const s8 gUnknown_0850E772[] = { +static const s8 gUnknown_0850E772[] = { 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, @@ -8575,7 +8560,7 @@ const s8 gUnknown_0850E772[] = { 0, 1, 0, 0, 0, 0, 0, 0, }; -const s8 gUnknown_0850E7BA[] = { +static const s8 gUnknown_0850E7BA[] = { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, @@ -8745,7 +8730,7 @@ u8 sub_80978E4(struct Sprite *sprite) return v2; } -void SetMovementDelay(struct Sprite *sprite, s16 timer) +static void SetMovementDelay(struct Sprite *sprite, s16 timer) { sprite->data[3] = timer; } @@ -8760,11 +8745,11 @@ static bool8 WaitForMovementDelay(struct Sprite *sprite) return FALSE; } -void SetAndStartSpriteAnim(struct Sprite *sprite, u8 a2, u8 a3) +void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex) { - sprite->animNum = a2; - sprite->animPaused = 0 ; - SeekSpriteAnim(sprite, a3); + sprite->animNum = animNum; + sprite->animPaused = FALSE; + SeekSpriteAnim(sprite, animCmdIndex); } bool8 SpriteAnimEnded(struct Sprite *sprite) @@ -8802,7 +8787,7 @@ void UpdateEventObjectSpriteVisibility(struct Sprite *sprite, bool8 invisible) sprite->invisible = TRUE; } -void UpdateEventObjectSpriteSubpriorityAndVisibility(struct Sprite *sprite) +static void UpdateEventObjectSpriteSubpriorityAndVisibility(struct Sprite *sprite) { sub_8097D68(sprite); SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); @@ -8849,15 +8834,15 @@ void sub_8097BB4(u8 var1, u8 graphicsId) if(spriteId != MAX_SPRITES) { struct Sprite *sprite = &gSprites[spriteId]; - const struct EventObjectGraphicsInfo *gfxInfo = GetEventObjectGraphicsInfo(graphicsId); + const struct EventObjectGraphicsInfo *graphicsInfo = GetEventObjectGraphicsInfo(graphicsId); u16 tileNum = sprite->oam.tileNum; - sprite->oam = *gfxInfo->oam; + sprite->oam = *graphicsInfo->oam; sprite->oam.tileNum = tileNum; - sprite->oam.paletteNum = gfxInfo->paletteSlot; - sprite->images = gfxInfo->images; + sprite->oam.paletteNum = graphicsInfo->paletteSlot; + sprite->images = graphicsInfo->images; - if(gfxInfo->subspriteTables == NULL) + if(graphicsInfo->subspriteTables == NULL) { sprite->subspriteTables = NULL; sprite->subspriteTableNum = 0; @@ -8865,7 +8850,7 @@ void sub_8097BB4(u8 var1, u8 graphicsId) } else { - SetSubspriteTables(sprite, gfxInfo->subspriteTables); + SetSubspriteTables(sprite, graphicsInfo->subspriteTables); sprite->subspriteMode = 2; } StartSpriteAnim(sprite, 0); @@ -8990,9 +8975,9 @@ void DoShadowFieldEffect(struct EventObject *eventObject) static void DoRippleFieldEffect(struct EventObject *eventObject, struct Sprite *sprite) { - const struct EventObjectGraphicsInfo *gfxInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); + const struct EventObjectGraphicsInfo *graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); gFieldEffectArguments[0] = sprite->pos1.x; - gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; + gFieldEffectArguments[1] = sprite->pos1.y + (graphicsInfo->height >> 1) - 2; gFieldEffectArguments[2] = 151; gFieldEffectArguments[3] = 3; FieldEffectStart(FLDEFF_RIPPLE); diff --git a/src/field_camera.c b/src/field_camera.c index e8900e06a..b976cf2ff 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -15,71 +15,71 @@ EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE; // Static type declarations -struct FieldCameraUnknownStruct +struct FieldCameraOffset { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - bool8 unk4; + u8 xPixelOffset; + u8 yPixelOffset; + u8 xTileOffset; + u8 yTileOffset; + bool8 copyBGToVRAM; }; // static functions -static void RedrawMapSliceNorth(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout); -static void RedrawMapSliceSouth(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout); -static void RedrawMapSliceEast(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout); -static void RedrawMapSliceWest(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout); -static s32 MapPosToBgTilemapOffset(struct FieldCameraUnknownStruct *a, s32 x, s32 y); +static void RedrawMapSliceNorth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); +static void RedrawMapSliceSouth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); +static void RedrawMapSliceEast(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); +static void RedrawMapSliceWest(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout); +static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *a, s32 x, s32 y); static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLayout); static void DrawMetatileAt(const struct MapLayout *mapLayout, u16, int, int); static void DrawMetatile(s32 a, u16 *b, u16 c); static void CameraPanningCB_PanAhead(void); // IWRAM bss vars -static IWRAM_DATA struct FieldCameraUnknownStruct gUnknown_03000E20; -static IWRAM_DATA s16 gUnknown_03000E28; -static IWRAM_DATA s16 gUnknown_03000E2A; +static IWRAM_DATA struct FieldCameraOffset sFieldCameraOffset; +static IWRAM_DATA s16 sHorizontalCameraPan; +static IWRAM_DATA s16 sVerticalCameraPan; static IWRAM_DATA u8 gUnknown_03000E2C; -static IWRAM_DATA void (*gUnknown_03000E30)(void); +static IWRAM_DATA void (*sFieldCameraPanningCallback)(void); -struct CameraObject gUnknown_03005DD0; -u16 gUnknown_03005DE8; -u16 gUnknown_03005DEC; +struct CameraObject gFieldCamera; +u16 gTotalCameraPixelOffsetY; +u16 gTotalCameraPixelOffsetX; // text -static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraUnknownStruct *a) +static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset) { - a->unk2 = 0; - a->unk3 = 0; - a->unk0 = 0; - a->unk1 = 0; - a->unk4 = TRUE; + cameraOffset->xTileOffset = 0; + cameraOffset->yTileOffset = 0; + cameraOffset->xPixelOffset = 0; + cameraOffset->yPixelOffset = 0; + cameraOffset->copyBGToVRAM = TRUE; } -static void tilemap_move_something(struct FieldCameraUnknownStruct *a, u32 b, u32 c) +static void tilemap_move_something(struct FieldCameraOffset *cameraOffset, u32 b, u32 c) { - a->unk2 += b; - a->unk2 %= 32; - a->unk3 += c; - a->unk3 %= 32; + cameraOffset->xTileOffset += b; + cameraOffset->xTileOffset %= 32; + cameraOffset->yTileOffset += c; + cameraOffset->yTileOffset %= 32; } -static void coords8_add(struct FieldCameraUnknownStruct *a, u32 b, u32 c) +static void coords8_add(struct FieldCameraOffset *cameraOffset, u32 b, u32 c) { - a->unk0 += b; - a->unk1 += c; + cameraOffset->xPixelOffset += b; + cameraOffset->yPixelOffset += c; } void move_tilemap_camera_to_upper_left_corner(void) { - move_tilemap_camera_to_upper_left_corner_(&gUnknown_03000E20); + move_tilemap_camera_to_upper_left_corner_(&sFieldCameraOffset); } void FieldUpdateBgTilemapScroll(void) { u32 r4, r5; - r5 = gUnknown_03000E20.unk0 + gUnknown_03000E28; - r4 = gUnknown_03000E2A + gUnknown_03000E20.unk1 + 8; + r5 = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan; + r4 = sVerticalCameraPan + sFieldCameraOffset.yPixelOffset + 8; SetGpuReg(REG_OFFSET_BG1HOFS, r5); SetGpuReg(REG_OFFSET_BG1VOFS, r4); @@ -91,14 +91,14 @@ void FieldUpdateBgTilemapScroll(void) void sub_8089C08(s16 *a, s16 *b) { - *a = gUnknown_03000E20.unk0 + gUnknown_03000E28; - *b = gUnknown_03000E20.unk1 + gUnknown_03000E2A + 8; + *a = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan; + *b = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8; } void DrawWholeMapView(void) { DrawWholeMapViewInternal(gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y, gMapHeader.mapLayout); - gUnknown_03000E20.unk4 = TRUE; + sFieldCameraOffset.copyBGToVRAM = TRUE; } static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLayout) @@ -110,13 +110,13 @@ static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLa for (i = 0; i < 32; i += 2) { - temp = gUnknown_03000E20.unk3 + i; + temp = sFieldCameraOffset.yTileOffset + i; if (temp >= 32) temp -= 32; r6 = temp * 32; for (j = 0; j < 32; j += 2) { - temp = gUnknown_03000E20.unk2 + j; + temp = sFieldCameraOffset.xTileOffset + j; if (temp >= 32) temp -= 32; DrawMetatileAt(mapLayout, r6 + temp, x + j / 2, y + i / 2); @@ -124,112 +124,112 @@ static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLa } } -static void RedrawMapSlicesForCameraUpdate(struct FieldCameraUnknownStruct *a, int x, int y) +static void RedrawMapSlicesForCameraUpdate(struct FieldCameraOffset *cameraOffset, int x, int y) { const struct MapLayout *mapLayout = gMapHeader.mapLayout; if (x > 0) - RedrawMapSliceWest(a, mapLayout); + RedrawMapSliceWest(cameraOffset, mapLayout); if (x < 0) - RedrawMapSliceEast(a, mapLayout); + RedrawMapSliceEast(cameraOffset, mapLayout); if (y > 0) - RedrawMapSliceNorth(a, mapLayout); + RedrawMapSliceNorth(cameraOffset, mapLayout); if (y < 0) - RedrawMapSliceSouth(a, mapLayout); - a->unk4 = TRUE; + RedrawMapSliceSouth(cameraOffset, mapLayout); + cameraOffset->copyBGToVRAM = TRUE; } -static void RedrawMapSliceNorth(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout) +static void RedrawMapSliceNorth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout) { u8 i; u8 temp; u32 r7; - temp = a->unk3 + 28; + temp = cameraOffset->yTileOffset + 28; if (temp >= 32) temp -= 32; r7 = temp * 32; for (i = 0; i < 32; i += 2) { - temp = a->unk2 + i; + temp = cameraOffset->xTileOffset + i; if (temp >= 32) temp -= 32; DrawMetatileAt(mapLayout, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y + 14); } } -static void RedrawMapSliceSouth(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout) +static void RedrawMapSliceSouth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout) { u8 i; u8 temp; - u32 r7 = a->unk3 * 32; + u32 r7 = cameraOffset->yTileOffset * 32; for (i = 0; i < 32; i += 2) { - temp = a->unk2 + i; + temp = cameraOffset->xTileOffset + i; if (temp >= 32) temp -= 32; DrawMetatileAt(mapLayout, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y); } } -static void RedrawMapSliceEast(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout) +static void RedrawMapSliceEast(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout) { u8 i; u8 temp; - u32 r6 = a->unk2; + u32 r6 = cameraOffset->xTileOffset; for (i = 0; i < 32; i += 2) { - temp = a->unk3 + i; + temp = cameraOffset->yTileOffset + i; if (temp >= 32) temp -= 32; DrawMetatileAt(mapLayout, temp * 32 + r6, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y + i / 2); } } -static void RedrawMapSliceWest(struct FieldCameraUnknownStruct *a, const struct MapLayout *mapLayout) +static void RedrawMapSliceWest(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout) { u8 i; u8 temp; - u8 r5 = a->unk2 + 28; + u8 r5 = cameraOffset->xTileOffset + 28; if (r5 >= 32) r5 -= 32; for (i = 0; i < 32; i += 2) { - temp = a->unk3 + i; + temp = cameraOffset->yTileOffset + i; if (temp >= 32) temp -= 32; DrawMetatileAt(mapLayout, temp * 32 + r5, gSaveBlock1Ptr->pos.x + 14, gSaveBlock1Ptr->pos.y + i / 2); } } -void CurrentMapDrawMetatileAt(int a, int b) +void CurrentMapDrawMetatileAt(int x, int y) { - int offset = MapPosToBgTilemapOffset(&gUnknown_03000E20, a, b); + int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y); if (offset >= 0) { - DrawMetatileAt(gMapHeader.mapLayout, offset, a, b); - gUnknown_03000E20.unk4 = TRUE; + DrawMetatileAt(gMapHeader.mapLayout, offset, x, y); + sFieldCameraOffset.copyBGToVRAM = TRUE; } } void DrawDoorMetatileAt(int x, int y, u16 *arr) { - int offset = MapPosToBgTilemapOffset(&gUnknown_03000E20, x, y); + int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y); if (offset >= 0) { DrawMetatile(1, arr, offset); - gUnknown_03000E20.unk4 = TRUE; + sFieldCameraOffset.copyBGToVRAM = TRUE; } } -static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 b, int c, int d) +static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x, int y) { - u16 metatileId = MapGridGetMetatileIdAt(c, d); + u16 metatileId = MapGridGetMetatileIdAt(x, y); u16 *metatiles; if (metatileId > NUM_METATILES_TOTAL) @@ -241,60 +241,69 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 b, int c, int metatiles = mapLayout->secondaryTileset->metatiles; metatileId -= NUM_METATILES_IN_PRIMARY; } - DrawMetatile(MapGridGetMetatileLayerTypeAt(c, d), metatiles + metatileId * 8, b); + DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * 8, offset); } -static void DrawMetatile(s32 a, u16 *b, u16 c) +static void DrawMetatile(s32 metatileLayerType, u16 *metatiles, u16 offset) { - switch (a) + switch (metatileLayerType) { - case 2: - gBGTilemapBuffers3[c] = b[0]; - gBGTilemapBuffers3[c + 1] = b[1]; - gBGTilemapBuffers3[c + 0x20] = b[2]; - gBGTilemapBuffers3[c + 0x21] = b[3]; - - gBGTilemapBuffers1[c] = 0; - gBGTilemapBuffers1[c + 1] = 0; - gBGTilemapBuffers1[c + 0x20] = 0; - gBGTilemapBuffers1[c + 0x21] = 0; - - gBGTilemapBuffers2[c] = b[4]; - gBGTilemapBuffers2[c + 1] = b[5]; - gBGTilemapBuffers2[c + 0x20] = b[6]; - gBGTilemapBuffers2[c + 0x21] = b[7]; + case 2: // LAYER_TYPE_ + // Draw metatile's bottom layer to the bottom background layer. + gBGTilemapBuffers3[offset] = metatiles[0]; + gBGTilemapBuffers3[offset + 1] = metatiles[1]; + gBGTilemapBuffers3[offset + 0x20] = metatiles[2]; + gBGTilemapBuffers3[offset + 0x21] = metatiles[3]; + + // Draw transparent tiles to the middle background layer. + gBGTilemapBuffers1[offset] = 0; + gBGTilemapBuffers1[offset + 1] = 0; + gBGTilemapBuffers1[offset + 0x20] = 0; + gBGTilemapBuffers1[offset + 0x21] = 0; + + // Draw metatile's top layer to the top background layer. + gBGTilemapBuffers2[offset] = metatiles[4]; + gBGTilemapBuffers2[offset + 1] = metatiles[5]; + gBGTilemapBuffers2[offset + 0x20] = metatiles[6]; + gBGTilemapBuffers2[offset + 0x21] = metatiles[7]; break; - case 1: - gBGTilemapBuffers3[c] = b[0]; - gBGTilemapBuffers3[c + 1] = b[1]; - gBGTilemapBuffers3[c + 0x20] = b[2]; - gBGTilemapBuffers3[c + 0x21] = b[3]; - - gBGTilemapBuffers1[c] = b[4]; - gBGTilemapBuffers1[c + 1] = b[5]; - gBGTilemapBuffers1[c + 0x20] = b[6]; - gBGTilemapBuffers1[c + 0x21] = b[7]; - - gBGTilemapBuffers2[c] = 0; - gBGTilemapBuffers2[c + 1] = 0; - gBGTilemapBuffers2[c + 0x20] = 0; - gBGTilemapBuffers2[c + 0x21] = 0; + case 1: // LAYER_TYPE_COVERED_BY_OBJECTS + // Draw metatile's bottom layer to the bottom background layer. + gBGTilemapBuffers3[offset] = metatiles[0]; + gBGTilemapBuffers3[offset + 1] = metatiles[1]; + gBGTilemapBuffers3[offset + 0x20] = metatiles[2]; + gBGTilemapBuffers3[offset + 0x21] = metatiles[3]; + + // Draw metatile's top layer to the middle background layer. + gBGTilemapBuffers1[offset] = metatiles[4]; + gBGTilemapBuffers1[offset + 1] = metatiles[5]; + gBGTilemapBuffers1[offset + 0x20] = metatiles[6]; + gBGTilemapBuffers1[offset + 0x21] = metatiles[7]; + + // Draw transparent tiles to the top background layer. + gBGTilemapBuffers2[offset] = 0; + gBGTilemapBuffers2[offset + 1] = 0; + gBGTilemapBuffers2[offset + 0x20] = 0; + gBGTilemapBuffers2[offset + 0x21] = 0; break; - case 0: - gBGTilemapBuffers3[c] = 0x3014; - gBGTilemapBuffers3[c + 1] = 0x3014; - gBGTilemapBuffers3[c + 0x20] = 0x3014; - gBGTilemapBuffers3[c + 0x21] = 0x3014; - - gBGTilemapBuffers1[c] = b[0]; - gBGTilemapBuffers1[c + 1] = b[1]; - gBGTilemapBuffers1[c + 0x20] = b[2]; - gBGTilemapBuffers1[c + 0x21] = b[3]; - - gBGTilemapBuffers2[c] = b[4]; - gBGTilemapBuffers2[c + 1] = b[5]; - gBGTilemapBuffers2[c + 0x20] = b[6]; - gBGTilemapBuffers2[c + 0x21] = b[7]; + case 0: // LAYER_TYPE_NORMAL + // Draw garbage to the bottom background layer. + gBGTilemapBuffers3[offset] = 0x3014; + gBGTilemapBuffers3[offset + 1] = 0x3014; + gBGTilemapBuffers3[offset + 0x20] = 0x3014; + gBGTilemapBuffers3[offset + 0x21] = 0x3014; + + // Draw metatile's bottom layer to the middle background layer. + gBGTilemapBuffers1[offset] = metatiles[0]; + gBGTilemapBuffers1[offset + 1] = metatiles[1]; + gBGTilemapBuffers1[offset + 0x20] = metatiles[2]; + gBGTilemapBuffers1[offset + 0x21] = metatiles[3]; + + // Draw metatile's top layer to the top background layer, which covers event object sprites. + gBGTilemapBuffers2[offset] = metatiles[4]; + gBGTilemapBuffers2[offset + 1] = metatiles[5]; + gBGTilemapBuffers2[offset + 0x20] = metatiles[6]; + gBGTilemapBuffers2[offset + 0x21] = metatiles[7]; break; } schedule_bg_copy_tilemap_to_vram(1); @@ -302,51 +311,51 @@ static void DrawMetatile(s32 a, u16 *b, u16 c) schedule_bg_copy_tilemap_to_vram(3); } -static s32 MapPosToBgTilemapOffset(struct FieldCameraUnknownStruct *a, s32 x, s32 y) +static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *cameraOffset, s32 x, s32 y) { x -= gSaveBlock1Ptr->pos.x; x *= 2; if (x >= 32 || x < 0) return -1; - x = x + a->unk2; + x = x + cameraOffset->xTileOffset; if (x >= 32) x -= 32; y = (y - gSaveBlock1Ptr->pos.y) * 2; if (y >= 32 || y < 0) return -1; - y = y + a->unk3; + y = y + cameraOffset->yTileOffset; if (y >= 32) y -= 32; return y * 32 + x; } -static void CameraUpdateCallback(struct CameraObject *a) +static void CameraUpdateCallback(struct CameraObject *fieldCamera) { - if (a->spriteId != 0) + if (fieldCamera->spriteId != 0) { - a->unk8 = gSprites[a->spriteId].data[2]; - a->unkC = gSprites[a->spriteId].data[3]; + fieldCamera->movementSpeedX = gSprites[fieldCamera->spriteId].data[2]; + fieldCamera->movementSpeedY = gSprites[fieldCamera->spriteId].data[3]; } } void ResetCameraUpdateInfo(void) { - gUnknown_03005DD0.unk8 = 0; - gUnknown_03005DD0.unkC = 0; - gUnknown_03005DD0.x = 0; - gUnknown_03005DD0.y = 0; - gUnknown_03005DD0.spriteId = 0; - gUnknown_03005DD0.callback = NULL; + gFieldCamera.movementSpeedX = 0; + gFieldCamera.movementSpeedY = 0; + gFieldCamera.x = 0; + gFieldCamera.y = 0; + gFieldCamera.spriteId = 0; + gFieldCamera.callback = NULL; } -u32 InitCameraUpdateCallback(u8 a) +u32 InitCameraUpdateCallback(u8 trackedSpriteId) { - if (gUnknown_03005DD0.spriteId != 0) - DestroySprite(&gSprites[gUnknown_03005DD0.spriteId]); - gUnknown_03005DD0.spriteId = AddCameraObject(a); - gUnknown_03005DD0.callback = CameraUpdateCallback; + if (gFieldCamera.spriteId != 0) + DestroySprite(&gSprites[gFieldCamera.spriteId]); + gFieldCamera.spriteId = AddCameraObject(trackedSpriteId); + gFieldCamera.callback = CameraUpdateCallback; return 0; } @@ -354,54 +363,54 @@ void CameraUpdate(void) { int deltaX; int deltaY; - int r0; - int r1; - int r7; - int r8; - - if (gUnknown_03005DD0.callback != NULL) - gUnknown_03005DD0.callback(&gUnknown_03005DD0); - r7 = gUnknown_03005DD0.unk8; - r8 = gUnknown_03005DD0.unkC; + int curMovementOffsetY; + int curMovementOffsetX; + int movementSpeedX; + int movementSpeedY; + + if (gFieldCamera.callback != NULL) + gFieldCamera.callback(&gFieldCamera); + movementSpeedX = gFieldCamera.movementSpeedX; + movementSpeedY = gFieldCamera.movementSpeedY; deltaX = 0; deltaY = 0; - r1 = gUnknown_03005DD0.x; - r0 = gUnknown_03005DD0.y; + curMovementOffsetX = gFieldCamera.x; + curMovementOffsetY = gFieldCamera.y; - if (r1 == 0 && r7 != 0) + if (curMovementOffsetX == 0 && movementSpeedX != 0) { - if (r7 > 0) + if (movementSpeedX > 0) deltaX = 1; else deltaX = -1; } - if (r0 == 0 && r8 != 0) + if (curMovementOffsetY == 0 && movementSpeedY != 0) { - if (r8 > 0) + if (movementSpeedY > 0) deltaY = 1; else deltaY = -1; } - if (r1 != 0 && r1 == -r7) + if (curMovementOffsetX != 0 && curMovementOffsetX == -movementSpeedX) { - if (r7 > 0) + if (movementSpeedX > 0) deltaX = 1; else deltaX = -1; } - if (r0 != 0 && r0 == -r8) + if (curMovementOffsetY != 0 && curMovementOffsetY == -movementSpeedY) { - if (r8 > 0) + if (movementSpeedY > 0) deltaX = 1; else deltaX = -1; } - gUnknown_03005DD0.x += r7; - gUnknown_03005DD0.x = gUnknown_03005DD0.x - 16 * (gUnknown_03005DD0.x / 16); - gUnknown_03005DD0.y += r8; - gUnknown_03005DD0.y = gUnknown_03005DD0.y - 16 * (gUnknown_03005DD0.y / 16); + gFieldCamera.x += movementSpeedX; + gFieldCamera.x = gFieldCamera.x - 16 * (gFieldCamera.x / 16); + gFieldCamera.y += movementSpeedY; + gFieldCamera.y = gFieldCamera.y - 16 * (gFieldCamera.y / 16); if (deltaX != 0 || deltaY != 0) { @@ -409,50 +418,50 @@ void CameraUpdate(void) UpdateEventObjectsForCameraUpdate(deltaX, deltaY); RotatingGatePuzzleCameraUpdate(deltaX, deltaY); ResetBerryTreeSparkleFlags(); - tilemap_move_something(&gUnknown_03000E20, deltaX * 2, deltaY * 2); - RedrawMapSlicesForCameraUpdate(&gUnknown_03000E20, deltaX * 2, deltaY * 2); + tilemap_move_something(&sFieldCameraOffset, deltaX * 2, deltaY * 2); + RedrawMapSlicesForCameraUpdate(&sFieldCameraOffset, deltaX * 2, deltaY * 2); } - coords8_add(&gUnknown_03000E20, r7, r8); - gUnknown_03005DEC -= r7; - gUnknown_03005DE8 -= r8; + coords8_add(&sFieldCameraOffset, movementSpeedX, movementSpeedY); + gTotalCameraPixelOffsetX -= movementSpeedX; + gTotalCameraPixelOffsetY -= movementSpeedY; } -void camera_move_and_redraw(int a, int b) //unused +void MoveCameraAndRedrawMap(int deltaX, int deltaY) //unused { - CameraMove(a, b); - UpdateEventObjectsForCameraUpdate(a, b); + CameraMove(deltaX, deltaY); + UpdateEventObjectsForCameraUpdate(deltaX, deltaY); DrawWholeMapView(); - gUnknown_03005DEC -= a * 16; - gUnknown_03005DE8 -= b * 16; + gTotalCameraPixelOffsetX -= deltaX * 16; + gTotalCameraPixelOffsetY -= deltaY * 16; } void SetCameraPanningCallback(void (*a)(void)) { - gUnknown_03000E30 = a; + sFieldCameraPanningCallback = a; } void SetCameraPanning(s16 a, s16 b) { - gUnknown_03000E28 = a; - gUnknown_03000E2A = b + 32; + sHorizontalCameraPan = a; + sVerticalCameraPan = b + 32; } void InstallCameraPanAheadCallback(void) { - gUnknown_03000E30 = CameraPanningCB_PanAhead; + sFieldCameraPanningCallback = CameraPanningCB_PanAhead; gUnknown_03000E2C = 0; - gUnknown_03000E28 = 0; - gUnknown_03000E2A = 32; + sHorizontalCameraPan = 0; + sVerticalCameraPan = 32; } void UpdateCameraPanning(void) { - if (gUnknown_03000E30 != NULL) - gUnknown_03000E30(); + if (sFieldCameraPanningCallback != NULL) + sFieldCameraPanningCallback(); //Update sprite offset of overworld objects - gSpriteCoordOffsetX = gUnknown_03005DEC - gUnknown_03000E28; - gSpriteCoordOffsetY = gUnknown_03005DE8 - gUnknown_03000E2A - 8; + gSpriteCoordOffsetX = gTotalCameraPixelOffsetX - sHorizontalCameraPan; + gSpriteCoordOffsetY = gTotalCameraPixelOffsetY - sVerticalCameraPan - 8; } static void CameraPanningCB_PanAhead(void) @@ -480,22 +489,21 @@ static void CameraPanningCB_PanAhead(void) var = GetPlayerMovementDirection(); if (var == 2) { - if (gUnknown_03000E2A > -8) - gUnknown_03000E2A -= 2; + if (sVerticalCameraPan > -8) + sVerticalCameraPan -= 2; } else if (var == 1) { - if (gUnknown_03000E2A < 72) - gUnknown_03000E2A += 2; + if (sVerticalCameraPan < 72) + sVerticalCameraPan += 2; } - else if (gUnknown_03000E2A < 32) + else if (sVerticalCameraPan < 32) { - gUnknown_03000E2A += 2; + sVerticalCameraPan += 2; } - else if (gUnknown_03000E2A > 32) + else if (sVerticalCameraPan > 32) { - gUnknown_03000E2A -= 2; + sVerticalCameraPan -= 2; } } } - diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 738826020..c52f5190f 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -5,6 +5,7 @@ #include "daycare.h" #include "event_data.h" #include "event_object_movement.h" +#include "event_scripts.h" #include "fieldmap.h" #include "field_control_avatar.h" #include "field_fadetransition.h" @@ -37,57 +38,6 @@ static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0; u8 gSelectedEventObject; -//scripts -extern const u8 EventScript_PlayerPCMale[]; -extern const u8 EventScript_PlayerPCFemale[]; -extern const u8 EventScript_SecretBasePC[]; -extern const u8 EventScript_RecordMixingSecretBasePC[]; -extern const u8 EventScript_SecretPower1[]; -extern const u8 EventScript_SecretPower2[]; -extern const u8 EventScript_PC[]; -extern const u8 EventScript_TestSignpostMsg[]; -extern const u8 EventScript_HiddenItemScript[]; -extern const u8 EventScript_2759F1[]; -extern const u8 EventScript_TV[]; -extern const u8 EventScript_ClosedSootopolisDoor[]; -extern const u8 SkyPillar_Outside_EventScript_2393F9[]; -extern const u8 EventScript_CableBoxResults[]; -extern const u8 EventScript_2A4BAC[]; -extern const u8 Route110_TrickHouseEntrance_EventScript_26A22A[]; -extern const u8 EventScript_RegionMap[]; -extern const u8 EventScript_RunningShoesManual[]; -extern const u8 EventScript_PictureBookShelf[]; -extern const u8 EventScript_BookShelf[]; -extern const u8 EventScript_PokemonCenterBookshelf[]; -extern const u8 EventScript_Vase[]; -extern const u8 EventScript_TrashCan[]; -extern const u8 EventScript_ShopShelf[]; -extern const u8 EventScript_Blueprint[]; -extern const u8 EventScript_WirelessBoxResults[]; -extern const u8 EventScript_CableBoxResults[]; -extern const u8 EventScript_Questionnaire[]; -extern const u8 EventScript_TrainerHillTimer[]; -extern const u8 EventScript_SecretBaseSandOrnament[]; -extern const u8 EventScript_SecretBaseShieldOrToyTV[]; -extern const u8 EventScript_UseSurf[]; -extern const u8 EventScript_UseWaterfall[]; -extern const u8 EventScript_CannotUseWaterfall[]; -extern const u8 EventScript_UseDive[]; -extern const u8 EventScript_UseDiveUnderwater[]; -extern const u8 EventScript_FallDownHole[]; -extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252BE8[]; -extern const u8 EventScript_Poison[]; -extern const u8 EventScript_EggHatch[]; -extern const u8 gUnknown_08273D1F[]; -extern const u8 IslandCave_EventScript_238EAF[]; -extern const u8 MauvilleCity_EventScript_1DF7BA[]; -extern const u8 Route119_EventScript_1F49EC[]; -extern const u8 LittlerootTown_ProfessorBirchsLab_EventScript_1FA4D6[]; -extern const u8 RustboroCity_Gym_EventScript_21307B[]; -extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224175[]; -extern const u8 SSTidalCorridor_EventScript_23C050[]; -extern const u8 gUnknown_082A8350[]; - static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); static u16 GetPlayerCurMetatileBehavior(int); @@ -179,7 +129,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) input->dpadDirection = DIR_EAST; } -int sub_809C014(struct FieldInput *input) +int ProcessPlayerFieldInput(struct FieldInput *input) { struct MapPosition position; u8 playerDirection; @@ -558,8 +508,7 @@ static bool8 TryStartCoordEventScript(struct MapPosition *position) static bool8 TryStartMiscWalkingScripts(u16 metatileBehavior) { - s16 x; - s16 y; + s16 x, y; if (MetatileBehavior_IsCrackedFloorHole(metatileBehavior)) { diff --git a/src/field_door.c b/src/field_door.c index fe9de01fd..c197aca14 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -1,13 +1,13 @@ #include "global.h" +#include "event_data.h" #include "field_door.h" #include "field_camera.h" #include "fieldmap.h" #include "metatile_behavior.h" -#include "event_data.h" -#include "constants/songs.h" +#include "task.h" #include "constants/flags.h" #include "constants/maps.h" -#include "task.h" +#include "constants/songs.h" bool8 sub_808A964(void); diff --git a/src/field_effect.c b/src/field_effect.c index 467acb367..2ec5edf1e 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1,10 +1,10 @@ #include "global.h" -#include "field_effect.h" -#include "trainer_pokemon_sprites.h" #include "decompress.h" +#include "event_object_movement.h" #include "field_camera.h" +#include "field_control_avatar.h" +#include "field_effect.h" #include "field_effect_helpers.h" -#include "event_object_movement.h" #include "field_player_avatar.h" #include "field_screen.h" #include "field_weather.h" @@ -22,8 +22,11 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "trainer_pokemon_sprites.h" #include "trig.h" #include "util.h" +#include "constants/field_effects.h" +#include "constants/event_object_movement_constants.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -33,13 +36,213 @@ EWRAM_DATA s32 gFieldEffectArguments[8] = {0}; // Static type declarations +static void Task_PokecenterHeal(u8 taskId); +static void PokecenterHealEffect_0(struct Task *); +static void PokecenterHealEffect_1(struct Task *); +static void PokecenterHealEffect_2(struct Task *); +static void PokecenterHealEffect_3(struct Task *); + +static void Task_HallOfFameRecord(u8 taskId); +static void HallOfFameRecordEffect_0(struct Task *); +static void HallOfFameRecordEffect_1(struct Task *); +static void HallOfFameRecordEffect_2(struct Task *); +static void HallOfFameRecordEffect_3(struct Task *); + +static u8 CreatePokeballGlowSprite(s16, s16, s16, u16); +static void SpriteCB_PokeballGlowEffect(struct Sprite *); +static void PokeballGlowEffect_0(struct Sprite *); +static void PokeballGlowEffect_1(struct Sprite *); +static void PokeballGlowEffect_2(struct Sprite *); +static void PokeballGlowEffect_3(struct Sprite *); +static void PokeballGlowEffect_4(struct Sprite *); +static void PokeballGlowEffect_5(struct Sprite *); +static void PokeballGlowEffect_6(struct Sprite *); +static void PokeballGlowEffect_7(struct Sprite *); + +static u8 PokecenterHealEffectHelper(s16, s16); +static void HallOfFameRecordEffectHelper(s16, s16, s16, u8); + +static void mapldr_080842E8(void); +static void task00_8084310(u8); +static void mapldr_08084390(void); +static void c3_080843F8(u8); + +static void sub_80B6B94(u8); +static bool8 sub_80B6BCC(struct Task *); +static bool8 sub_80B6C74(struct Task *); +static bool8 sub_80B6C90(struct Task *); +static bool8 sub_80B6D04(struct Task *); +static bool8 sub_80B6DBC(struct Task *); +static bool8 sub_80B6DD8(struct Task *); +static bool8 sub_80B6E18(struct Task *); + +static void sub_80B6E88(u8); +static bool8 sub_80B6EC0(struct Task *); +static bool8 sub_80B6EE0(struct Task *); +static bool8 sub_80B6F50(struct Task *); +static bool8 sub_80B6F74(struct Task *); +static bool8 sub_80B6F84(struct Task *); +static bool8 sub_80B6FA8(struct Task *); + +static void sub_80B6FB8(struct Task *); +static void sub_80B7004(struct Task *); +static void sub_80B7050(void); +static void sub_80B7060(void); +static void sub_80B70B4(void); +static void sub_80B70DC(u8); + +static bool8 sub_80B7114(struct Task *); +static bool8 sub_80B7190(struct Task *); +static bool8 sub_80B71D0(struct Task *); +static bool8 sub_80B7230(struct Task *); +static bool8 sub_80B7270(struct Task *); +static bool8 sub_80B72D0(struct Task *); +static bool8 sub_80B72F4(struct Task *); + +static void sub_80B7384(u8); +static bool8 sub_80B73D0(struct Task *, struct EventObject *); +static bool8 waterfall_1_do_anim_probably(struct Task *, struct EventObject *); +static bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct EventObject *); +static bool8 sub_80B7450(struct Task *, struct EventObject *); +static bool8 sub_80B7478(struct Task *, struct EventObject *); + +static void Task_Dive(u8); +static bool8 dive_1_lock(struct Task *); +static bool8 dive_2_unknown(struct Task *); +static bool8 dive_3_unknown(struct Task *); + +static void sub_80B75F0(u8); +static bool8 sub_80B764C(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7684(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B76B8(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7704(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B77F8(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7814(struct Task *, struct EventObject *, struct Sprite *); + +static void mapldr_080851BC(void); +static void sub_80B7890(u8); + +static bool8 sub_80B78EC(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B791C(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7968(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B79BC(struct Task *, struct EventObject *, struct Sprite *); + +static void sub_80B7A8C(u8); + +static bool8 sub_80B7AE8(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7B18(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7B94(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7BCC(struct Task *, struct EventObject *, struct Sprite *); +static bool8 sub_80B7BF4(struct Task *, struct EventObject *, struct Sprite *); + +static void DoEscapeRopeFieldEffect(u8); +static void EscapeRopeFieldEffect_Step0(struct Task *); +static void EscapeRopeFieldEffect_Step1(struct Task *); + +static void mapldr_080859D4(void); +static void sub_80B7E94(u8); + +static void sub_80B7EC4(struct Task *); +static void sub_80B7EE8(struct Task *); + +static void ExecuteTeleportFieldEffectTask(u8); +static void TeleportFieldEffectTask1(struct Task*); +static void TeleportFieldEffectTask2(struct Task*); +static void TeleportFieldEffectTask3(struct Task*); +static void TeleportFieldEffectTask4(struct Task*); + +static void mapldr_08085D88(void); +static void sub_80B8250(u8); + +static void sub_80B8280(struct Task *); +static void sub_80B830C(struct Task *); +static void sub_80B8410(struct Task *); + +static void sub_80B8554(u8); +static void sub_80B8584(struct Task *); +static void sub_80B85F8(struct Task *); +static void sub_80B8660(struct Task *); +static void sub_80B86EC(struct Task *); +static void sub_80B871C(struct Task *); +static void sub_80B8770(struct Task *); +static void overworld_bg_setup_2(struct Task *); + +static void sub_80B880C(void); +static void sub_80B8874(u16); + +static void sub_80B88B4(u8); +static void sub_80B88E4(struct Task *); +static void sub_80B8920(struct Task *); +static void sub_80B898C(struct Task *); +static void sub_80B89DC(struct Task *); +static void sub_80B8A0C(struct Task *); +static void sub_80B8A44(struct Task *); +static void sub_80B8A64(struct Task *); + +static void sub_80B8AE0(void); +static void sub_80B8B28(struct Task *); +static bool8 sub_80B8B38(struct Task *); +static bool8 sub_80B8BF0(struct Task *); + +static u8 sub_80B8C60(u32, u32, u32); +static void sub_80B8CC0(struct Sprite *); +static void sub_80B8D04(struct Sprite *); +static void sub_80B8D20(struct Sprite *); + +static void sub_80B8D84(u8); +static void sub_80B8DB4(struct Task *); +static void sub_80B8E14(struct Task *); +static void sub_80B8E60(struct Task *); +static void sub_80B8EA8(struct Task *); +static void sub_80B8F24(struct Task *); + +static void sub_80B9128(struct Sprite *); + +static void sub_80B91D4(u8); +static void sub_80B9204(struct Task *); +static void sub_80B925C(struct Task *); +static void sub_80B92A0(struct Task *); +static void sub_80B92F8(struct Task *); +static void sub_80B933C(struct Task *); +static void sub_80B9390(struct Task *); +static void sub_80B9418(struct Task *); +static void sub_80B9474(struct Task *); +static void sub_80B9494(struct Task *); + +static u8 sub_80B94C4(void); +static u8 sub_80B9508(u8); +static void sub_80B9524(u8); +static void sub_80B9560(u8, u8); +static void sub_80B957C(struct Sprite *); +static void sub_80B963C(struct Sprite *); + +static void sub_80B97D4(u8); +static void sub_80B9804(struct Task *); +static void sub_80B98B8(struct Task *); +static void sub_80B9924(struct Task *); +static void sub_80B9978(struct Task *); +static void sub_80B99F0(struct Task *); +static void sub_80B9A28(struct Task *); +static void sub_80B9A60(struct Task *); + +static void sub_80B9BE8(u8 taskId); +static void sub_80B9DB8(struct Sprite* sprite); +static void sub_80B9EDC(u8 taskId); + // Static RAM declarations static IWRAM_DATA u8 sActiveList[32]; -// Static ROM declarations +// External declarations extern u8 *gFieldEffectScriptPointers[]; +extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; +extern void sub_81555D8(u8, u8); +extern void pal_fill_for_maplights(void); +extern void sub_80E1558(u8); +extern void sub_80E1570(void); +extern bool8 sub_80E1584(void); +extern void sub_80AF0B4(void); // .rodata const u32 gNewGameBirchPic[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); @@ -322,9 +525,9 @@ bool8 (*const gUnknown_0855C460[])(struct Task *, struct EventObject *, struct S sub_80B7BF4, }; -void (*const gUnknown_0855C474[])(struct Task *) = { - sub_80B7D14, - sub_80B7D34, +void (*const gEscapeRopeFieldEffectFuncs[])(struct Task *) = { + EscapeRopeFieldEffect_Step0, + EscapeRopeFieldEffect_Step1, }; // .text @@ -807,10 +1010,6 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) } #endif -void Task_PokecenterHeal(u8 taskId); -u8 CreatePokeballGlowSprite(s16, s16, s16, u16); -u8 PokecenterHealEffectHelper(s16, s16); - bool8 FldEff_PokecenterHeal(void) { u8 nPokemon; @@ -826,21 +1025,21 @@ bool8 FldEff_PokecenterHeal(void) return FALSE; } -void Task_PokecenterHeal(u8 taskId) +static void Task_PokecenterHeal(u8 taskId) { struct Task *task; task = &gTasks[taskId]; gUnknown_0855C364[task->data[0]](task); } -void PokecenterHealEffect_0(struct Task *task) +static void PokecenterHealEffect_0(struct Task *task) { task->data[0]++; task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1); task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); } -void PokecenterHealEffect_1(struct Task *task) +static void PokecenterHealEffect_1(struct Task *task) { if (gSprites[task->data[6]].data[0] > 1) { @@ -849,7 +1048,7 @@ void PokecenterHealEffect_1(struct Task *task) } } -void PokecenterHealEffect_2(struct Task *task) +static void PokecenterHealEffect_2(struct Task *task) { if (gSprites[task->data[6]].data[0] > 4) { @@ -857,7 +1056,7 @@ void PokecenterHealEffect_2(struct Task *task) } } -void PokecenterHealEffect_3(struct Task *task) +static void PokecenterHealEffect_3(struct Task *task) { if (gSprites[task->data[6]].data[0] > 6) { @@ -867,9 +1066,6 @@ void PokecenterHealEffect_3(struct Task *task) } } -void Task_HallOfFameRecord(u8 taskId); -void HallOfFameRecordEffectHelper(s16, s16, s16, u8); - bool8 FldEff_HallOfFameRecord(void) { u8 nPokemon; @@ -883,14 +1079,14 @@ bool8 FldEff_HallOfFameRecord(void) return FALSE; } -void Task_HallOfFameRecord(u8 taskId) +static void Task_HallOfFameRecord(u8 taskId) { struct Task *task; task = &gTasks[taskId]; gUnknown_0855C374[task->data[0]](task); } -void HallOfFameRecordEffect_0(struct Task *task) +static void HallOfFameRecordEffect_0(struct Task *task) { u8 taskId; task->data[0]++; @@ -903,7 +1099,7 @@ void HallOfFameRecordEffect_0(struct Task *task) HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1); } -void HallOfFameRecordEffect_1(struct Task *task) +static void HallOfFameRecordEffect_1(struct Task *task) { if (gSprites[task->data[6]].data[0] > 1) { @@ -912,7 +1108,7 @@ void HallOfFameRecordEffect_1(struct Task *task) } } -void HallOfFameRecordEffect_2(struct Task *task) +static void HallOfFameRecordEffect_2(struct Task *task) { if (gSprites[task->data[6]].data[0] > 4) { @@ -920,7 +1116,7 @@ void HallOfFameRecordEffect_2(struct Task *task) } } -void HallOfFameRecordEffect_3(struct Task *task) +static void HallOfFameRecordEffect_3(struct Task *task) { if (gSprites[task->data[6]].data[0] > 6) { @@ -930,9 +1126,8 @@ void HallOfFameRecordEffect_3(struct Task *task) } } -void SpriteCB_PokeballGlowEffect(struct Sprite *); -u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) +static u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) { u8 spriteId; struct Sprite *sprite; @@ -946,12 +1141,12 @@ u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) return spriteId; } -void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) +static void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) { gUnknown_0855C384[sprite->data[0]](sprite); } -void PokeballGlowEffect_0(struct Sprite *sprite) +static void PokeballGlowEffect_0(struct Sprite *sprite) { u8 endSpriteId; if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) @@ -971,7 +1166,7 @@ void PokeballGlowEffect_0(struct Sprite *sprite) } } -void PokeballGlowEffect_1(struct Sprite *sprite) +static void PokeballGlowEffect_1(struct Sprite *sprite) { if ((--sprite->data[1]) == 0) { @@ -986,7 +1181,7 @@ void PokeballGlowEffect_1(struct Sprite *sprite) } } -void PokeballGlowEffect_2(struct Sprite *sprite) +static void PokeballGlowEffect_2(struct Sprite *sprite) { u8 phase; if ((--sprite->data[1]) == 0) @@ -1016,7 +1211,7 @@ void PokeballGlowEffect_2(struct Sprite *sprite) } } -void PokeballGlowEffect_3(struct Sprite *sprite) +static void PokeballGlowEffect_3(struct Sprite *sprite) { u8 phase; if ((--sprite->data[1]) == 0) @@ -1038,7 +1233,7 @@ void PokeballGlowEffect_3(struct Sprite *sprite) MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]); } -void PokeballGlowEffect_4(struct Sprite *sprite) +static void PokeballGlowEffect_4(struct Sprite *sprite) { if ((--sprite->data[1]) == 0) { @@ -1046,12 +1241,12 @@ void PokeballGlowEffect_4(struct Sprite *sprite) } } -void PokeballGlowEffect_5(struct Sprite *sprite) +static void PokeballGlowEffect_5(struct Sprite *sprite) { sprite->data[0]++; } -void PokeballGlowEffect_6(struct Sprite *sprite) +static void PokeballGlowEffect_6(struct Sprite *sprite) { if (sprite->data[5] == 0 || IsFanfareTaskInactive()) { @@ -1059,7 +1254,7 @@ void PokeballGlowEffect_6(struct Sprite *sprite) } } -void PokeballGlowEffect_7(struct Sprite *sprite) +static void PokeballGlowEffect_7(struct Sprite *sprite) { } @@ -1071,7 +1266,7 @@ void SpriteCB_PokeballGlow(struct Sprite *sprite) } } -u8 PokecenterHealEffectHelper(s16 x, s16 y) +static u8 PokecenterHealEffectHelper(s16 x, s16 y) { u8 spriteIdAtEnd; struct Sprite *sprite; @@ -1097,7 +1292,7 @@ void SpriteCB_PokecenterMonitor(struct Sprite *sprite) } } -void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) +static void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) { u8 spriteIdAtEnd; if (!a3) @@ -1129,10 +1324,6 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) } } -void mapldr_080842E8(void); -void mapldr_08084390(void); -void task00_8084310(u8); -void c3_080843F8(u8); void sub_80B69DC(void) { @@ -1140,7 +1331,7 @@ void sub_80B69DC(void) gFieldCallback = mapldr_080842E8; } -void mapldr_080842E8(void) +static void mapldr_080842E8(void) { pal_fill_black(); CreateTask(task00_8084310, 0); @@ -1149,7 +1340,7 @@ void mapldr_080842E8(void) gFieldCallback = NULL; } -void task00_8084310(u8 taskId) +static void task00_8084310(u8 taskId) { struct Task *task; task = &gTasks[taskId]; @@ -1177,7 +1368,7 @@ void task00_8084310(u8 taskId) } } -void mapldr_08084390(void) +static void mapldr_08084390(void) { Overworld_PlaySpecialMapMusic(); pal_fill_black(); @@ -1192,7 +1383,7 @@ void mapldr_08084390(void) gFieldCallback = NULL; } -void c3_080843F8(u8 taskId) +static void c3_080843F8(u8 taskId) { struct Task *task; task = &gTasks[taskId]; @@ -1213,11 +1404,6 @@ void c3_080843F8(u8 taskId) } } -extern void pal_fill_for_maplights(void); -void sub_80B6B94(u8); -extern void CameraObjectReset2(void); -extern void CameraObjectReset1(void); - void sub_80B6B68(void) { Overworld_PlaySpecialMapMusic(); @@ -1228,14 +1414,14 @@ void sub_80B6B68(void) gFieldCallback = NULL; } -void sub_80B6B94(u8 taskId) +static void sub_80B6B94(u8 taskId) { struct Task *task; task = &gTasks[taskId]; while (gUnknown_0855C3C8[task->data[0]](task)); // return code signifies whether to continue blocking here } -bool8 sub_80B6BCC(struct Task *task) // gUnknown_0855C3C8[0] +static bool8 sub_80B6BCC(struct Task *task) // gUnknown_0855C3C8[0] { struct EventObject *playerObject; struct Sprite *playerSprite; @@ -1253,7 +1439,7 @@ bool8 sub_80B6BCC(struct Task *task) // gUnknown_0855C3C8[0] return TRUE; } -bool8 sub_80B6C74(struct Task *task) // gUnknown_0855C3C8[1] +static bool8 sub_80B6C74(struct Task *task) // gUnknown_0855C3C8[1] { if (IsWeatherNotFadingIn()) { @@ -1262,7 +1448,7 @@ bool8 sub_80B6C74(struct Task *task) // gUnknown_0855C3C8[1] return FALSE; } -bool8 sub_80B6C90(struct Task *task) // gUnknown_0855C3C8[2] +static bool8 sub_80B6C90(struct Task *task) // gUnknown_0855C3C8[2] { struct Sprite *sprite; s16 centerToCornerVecY; @@ -1277,7 +1463,7 @@ bool8 sub_80B6C90(struct Task *task) // gUnknown_0855C3C8[2] return FALSE; } -bool8 sub_80B6D04(struct Task *task) +static bool8 sub_80B6D04(struct Task *task) { struct EventObject *eventObject; struct Sprite *sprite; @@ -1311,7 +1497,7 @@ bool8 sub_80B6D04(struct Task *task) return FALSE; } -bool8 sub_80B6DBC(struct Task *task) +static bool8 sub_80B6DBC(struct Task *task) { task->data[0]++; task->data[1] = 4; @@ -1320,7 +1506,7 @@ bool8 sub_80B6DBC(struct Task *task) return TRUE; } -bool8 sub_80B6DD8(struct Task *task) +static bool8 sub_80B6DD8(struct Task *task) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1336,7 +1522,7 @@ bool8 sub_80B6DD8(struct Task *task) return FALSE; } -bool8 sub_80B6E18(struct Task *task) +static bool8 sub_80B6E18(struct Task *task) { gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); @@ -1347,19 +1533,6 @@ bool8 sub_80B6E18(struct Task *task) return FALSE; } -void sub_80B6E88(u8); -extern void sub_80E1558(u8); -extern void sub_80AF0B4(void); - -void sub_80B6FB8(struct Task *); -void sub_80B7004(struct Task *); -void sub_80B7050(void); -void sub_80B7060(void); -bool8 BGMusicStopped(void); -void sub_80B70B4(void); -void sub_80E1570(void); -void sub_80B70DC(u8); - void sub_80B6E4C(u8 a0, u8 priority) { u8 taskId; @@ -1371,14 +1544,14 @@ void sub_80B6E4C(u8 a0, u8 priority) } } -void sub_80B6E88(u8 taskId) +static void sub_80B6E88(u8 taskId) { struct Task *task; task = &gTasks[taskId]; while (gUnknown_0855C3E4[task->data[0]](task)); } -bool8 sub_80B6EC0(struct Task *task) +static bool8 sub_80B6EC0(struct Task *task) { FreezeEventObjects(); CameraObjectReset2(); @@ -1387,7 +1560,7 @@ bool8 sub_80B6EC0(struct Task *task) return FALSE; } -bool8 sub_80B6EE0(struct Task *task) +static bool8 sub_80B6EE0(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -1406,7 +1579,7 @@ bool8 sub_80B6EE0(struct Task *task) return FALSE; } -bool8 sub_80B6F50(struct Task *task) +static bool8 sub_80B6F50(struct Task *task) { sub_80B6FB8(task); if (task->data[2] > 3) @@ -1417,14 +1590,14 @@ bool8 sub_80B6F50(struct Task *task) return FALSE; } -bool8 sub_80B6F74(struct Task *task) +static bool8 sub_80B6F74(struct Task *task) { sub_80B6FB8(task); sub_80B7060(); return FALSE; } -bool8 sub_80B6F84(struct Task *task) +static bool8 sub_80B6F84(struct Task *task) { sub_80B7004(task); if (task->data[2] > 3) @@ -1435,14 +1608,14 @@ bool8 sub_80B6F84(struct Task *task) return FALSE; } -bool8 sub_80B6FA8(struct Task *task) +static bool8 sub_80B6FA8(struct Task *task) { sub_80B7004(task); sub_80B7060(); return FALSE; } -void sub_80B6FB8(struct Task *task) +static void sub_80B6FB8(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1455,7 +1628,7 @@ void sub_80B6FB8(struct Task *task) } } -void sub_80B7004(struct Task *task) +static void sub_80B7004(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1468,13 +1641,13 @@ void sub_80B7004(struct Task *task) } } -void sub_80B7050(void) +static void sub_80B7050(void) { music_something(); sub_80AF0B4(); } -void sub_80B7060(void) +static void sub_80B7060(void) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1486,7 +1659,7 @@ void sub_80B7060(void) } } -void sub_80B70B4(void) +static void sub_80B70B4(void) { Overworld_PlaySpecialMapMusic(); pal_fill_for_maplights(); @@ -1495,14 +1668,14 @@ void sub_80B70B4(void) gFieldCallback = NULL; } -void sub_80B70DC(u8 taskId) +static void sub_80B70DC(u8 taskId) { struct Task *task; task = &gTasks[taskId]; while (gUnknown_0855C3FC[task->data[0]](task)); } -bool8 sub_80B7114(struct Task *task) +static bool8 sub_80B7114(struct Task *task) { struct EventObject *eventObject; s16 x; @@ -1527,7 +1700,7 @@ bool8 sub_80B7114(struct Task *task) return TRUE; } -bool8 sub_80B7190(struct Task *task) +static bool8 sub_80B7190(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1537,7 +1710,7 @@ bool8 sub_80B7190(struct Task *task) return FALSE; } -bool8 sub_80B71D0(struct Task *task) +static bool8 sub_80B71D0(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1557,7 +1730,7 @@ bool8 sub_80B71D0(struct Task *task) return FALSE; } -bool8 sub_80B7230(struct Task *task) +static bool8 sub_80B7230(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1567,7 +1740,7 @@ bool8 sub_80B7230(struct Task *task) return FALSE; } -bool8 sub_80B7270(struct Task *task) +static bool8 sub_80B7270(struct Task *task) { struct Sprite *sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1587,9 +1760,7 @@ bool8 sub_80B7270(struct Task *task) return FALSE; } -extern bool8 sub_80E1584(void); - -bool8 sub_80B72D0(struct Task *task) +static bool8 sub_80B72D0(struct Task *task) { if (sub_80E1584()) { @@ -1600,7 +1771,7 @@ bool8 sub_80B72D0(struct Task *task) return TRUE; } -bool8 sub_80B72F4(struct Task *task) +static bool8 sub_80B72F4(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -1614,8 +1785,6 @@ bool8 sub_80B72F4(struct Task *task) return FALSE; } -void sub_80B7384(u8); - bool8 FldEff_UseWaterfall(void) { u8 taskId; @@ -1625,12 +1794,12 @@ bool8 FldEff_UseWaterfall(void) return FALSE; } -void sub_80B7384(u8 taskId) +static void sub_80B7384(u8 taskId) { while (gUnknown_0855C418[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId])); } -bool8 sub_80B73D0(struct Task *task, struct EventObject *eventObject) +static bool8 sub_80B73D0(struct Task *task, struct EventObject *eventObject) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; @@ -1638,7 +1807,7 @@ bool8 sub_80B73D0(struct Task *task, struct EventObject *eventObject) return FALSE; } -bool8 waterfall_1_do_anim_probably(struct Task *task, struct EventObject *eventObject) +static bool8 waterfall_1_do_anim_probably(struct Task *task, struct EventObject *eventObject) { ScriptContext2_Enable(); if (!EventObjectIsMovementOverridden(eventObject)) @@ -1651,7 +1820,7 @@ bool8 waterfall_1_do_anim_probably(struct Task *task, struct EventObject *eventO return FALSE; } -bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct EventObject *eventObject) +static bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct EventObject *eventObject) { if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { @@ -1661,14 +1830,14 @@ bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct EventObjec return TRUE; } -bool8 sub_80B7450(struct Task *task, struct EventObject *eventObject) +static bool8 sub_80B7450(struct Task *task, struct EventObject *eventObject) { EventObjectSetHeldMovement(eventObject, GetWalkSlowMovementAction(DIR_NORTH)); task->data[0]++; return FALSE; } -bool8 sub_80B7478(struct Task *task, struct EventObject *eventObject) +static bool8 sub_80B7478(struct Task *task, struct EventObject *eventObject) { if (!EventObjectClearHeldMovementIfFinished(eventObject)) { @@ -1686,9 +1855,6 @@ bool8 sub_80B7478(struct Task *task, struct EventObject *eventObject) return FALSE; } -void Task_Dive(u8); -extern int dive_warp(struct MapPosition *, u16); - bool8 FldEff_UseDive(void) { u8 taskId; @@ -1704,14 +1870,14 @@ void Task_Dive(u8 taskId) while (gUnknown_0855C42C[gTasks[taskId].data[0]](&gTasks[taskId])); } -bool8 dive_1_lock(struct Task *task) +static bool8 dive_1_lock(struct Task *task) { gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } -bool8 dive_2_unknown(struct Task *task) +static bool8 dive_2_unknown(struct Task *task) { ScriptContext2_Enable(); gFieldEffectArguments[0] = task->data[15]; @@ -1720,7 +1886,7 @@ bool8 dive_2_unknown(struct Task *task) return FALSE; } -bool8 dive_3_unknown(struct Task *task) +static bool8 dive_3_unknown(struct Task *task) { struct MapPosition mapPosition; PlayerGetDestCoords(&mapPosition.x, &mapPosition.y); @@ -1733,20 +1899,17 @@ bool8 dive_3_unknown(struct Task *task) return FALSE; } -void sub_80B75F0(u8); -void mapldr_080851BC(void); - void sub_80B75D8(u8 priority) { CreateTask(sub_80B75F0, priority); } -void sub_80B75F0(u8 taskId) +static void sub_80B75F0(u8 taskId) { while (gUnknown_0855C438[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 sub_80B764C(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B764C(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { FreezeEventObjects(); CameraObjectReset2(); @@ -1758,7 +1921,7 @@ bool8 sub_80B764C(struct Task *task, struct EventObject *eventObject, struct Spr return TRUE; } -bool8 sub_80B7684(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7684(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1771,7 +1934,7 @@ bool8 sub_80B7684(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B76B8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B76B8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { sprite->pos2.y = 0; task->data[3] = 1; @@ -1785,7 +1948,7 @@ bool8 sub_80B76B8(struct Task *task, struct EventObject *eventObject, struct Spr return TRUE; } -bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { s16 centerToCornerVecY; SetCameraPanning(0, task->data[1]); @@ -1828,7 +1991,7 @@ bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B77F8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B77F8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { music_something(); sub_80AF0B4(); @@ -1836,7 +1999,7 @@ bool8 sub_80B77F8(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B7814(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7814(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1848,9 +2011,7 @@ bool8 sub_80B7814(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -void sub_80B7890(u8); - -void mapldr_080851BC(void) +static void mapldr_080851BC(void) { Overworld_PlaySpecialMapMusic(); pal_fill_for_maplights(); @@ -1859,12 +2020,12 @@ void mapldr_080851BC(void) CreateTask(sub_80B7890, 0); } -void sub_80B7890(u8 taskId) +static void sub_80B7890(u8 taskId) { while (gUnknown_0855C450[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 sub_80B78EC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B78EC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { CameraObjectReset2(); FreezeEventObjects(); @@ -1874,7 +2035,7 @@ bool8 sub_80B78EC(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B791C(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B791C(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (IsWeatherNotFadingIn()) { @@ -1888,7 +2049,7 @@ bool8 sub_80B791C(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B7968(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7968(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { sprite = &gSprites[task->data[1]]; if (sprite->animCmdIndex > 1) @@ -1902,7 +2063,7 @@ bool8 sub_80B7968(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B79BC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B79BC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (EventObjectClearHeldMovementIfFinished(eventObject)) { @@ -1914,8 +2075,6 @@ bool8 sub_80B79BC(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; - u8 FldEff_LavaridgeGymWarp(void) { u8 spriteId; @@ -1934,19 +2093,17 @@ void sub_80B7A58(struct Sprite *sprite) } } -void sub_80B7A8C(u8); - void sub_80B7A74(u8 priority) { CreateTask(sub_80B7A8C, priority); } -void sub_80B7A8C(u8 taskId) +static void sub_80B7A8C(u8 taskId) { while(gUnknown_0855C460[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 sub_80B7AE8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7AE8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { FreezeEventObjects(); CameraObjectReset2(); @@ -1956,7 +2113,7 @@ bool8 sub_80B7AE8(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B7B18(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7B18(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (EventObjectClearHeldMovementIfFinished(eventObject)) { @@ -1978,7 +2135,7 @@ bool8 sub_80B7B18(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B7B94(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7B94(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (gSprites[task->data[1]].animCmdIndex == 2) { @@ -1988,7 +2145,7 @@ bool8 sub_80B7B94(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -bool8 sub_80B7BCC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7BCC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) { @@ -1999,10 +2156,7 @@ bool8 sub_80B7BCC(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -void sub_80B7CE4(u8); -void mapldr_080859D4(void); - -bool8 sub_80B7BF4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) +static bool8 sub_80B7BF4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -2032,29 +2186,29 @@ void sub_80B7CAC(struct Sprite *sprite) } } -void sub_80B7CC8(void) +void StartEscapeRopeFieldEffect(void) { ScriptContext2_Enable(); FreezeEventObjects(); - CreateTask(sub_80B7CE4, 0x50); + CreateTask(DoEscapeRopeFieldEffect, 0x50); } -void sub_80B7CE4(u8 taskId) +static void DoEscapeRopeFieldEffect(u8 taskId) { - gUnknown_0855C474[gTasks[taskId].data[0]](&gTasks[taskId]); + gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B7D14(struct Task *task) +static void EscapeRopeFieldEffect_Step0(struct Task *task) { task->data[0]++; task->data[14] = 64; task->data[15] = GetPlayerFacingDirection(); } -void sub_80B7D34(struct Task *task) +static void EscapeRopeFieldEffect_Step1(struct Task *task) { struct EventObject *eventObject; - u8 spinDirections[5] = {1, 3, 4, 2, 1}; + u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; if (task->data[14] != 0 && (--task->data[14]) == 0) { music_something(); @@ -2070,7 +2224,7 @@ void sub_80B7D34(struct Task *task) WarpIntoMap(); gFieldCallback = mapldr_080859D4; SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_80B7CE4)); + DestroyTask(FindTaskIdByFunc(DoEscapeRopeFieldEffect)); } else if (task->data[1] == 0 || (--task->data[1]) == 0) { EventObjectSetHeldMovement(eventObject, GetFaceDirectionMovementAction(spinDirections[eventObject->facingDirection])); @@ -2088,9 +2242,7 @@ void (*const gUnknown_0855C484[])(struct Task *) = { sub_80B7EE8 }; -void sub_80B7E94(u8); - -void mapldr_080859D4(void) +static void mapldr_080859D4(void) { Overworld_PlaySpecialMapMusic(); pal_fill_for_maplights(); @@ -2101,12 +2253,12 @@ void mapldr_080859D4(void) CreateTask(sub_80B7E94, 0); } -void sub_80B7E94(u8 taskId) +static void sub_80B7E94(u8 taskId) { gUnknown_0855C484[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B7EC4(struct Task *task) +static void sub_80B7EC4(struct Task *task) { if (IsWeatherNotFadingIn()) { @@ -2115,7 +2267,7 @@ void sub_80B7EC4(struct Task *task) } } -void sub_80B7EE8(struct Task *task) +static void sub_80B7EE8(struct Task *task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; struct EventObject *eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -2143,13 +2295,6 @@ void sub_80B7EE8(struct Task *task) eventObject->invisible ^= 1; } -static void ExecuteTeleportFieldEffectTask(u8); -static void TeleportFieldEffectTask1(struct Task*); -static void TeleportFieldEffectTask2(struct Task*); -static void TeleportFieldEffectTask3(struct Task*); -static void TeleportFieldEffectTask4(struct Task*); -static void mapldr_08085D88(void); - void CreateTeleportFieldEffectTask(void) { CreateTask(ExecuteTeleportFieldEffectTask, 0); @@ -2245,8 +2390,6 @@ static void TeleportFieldEffectTask4(struct Task *task) } } -void sub_80B8250(u8); - static void mapldr_08085D88(void) { Overworld_PlaySpecialMapMusic(); @@ -2265,12 +2408,12 @@ void (*const gUnknown_0855C49C[])(struct Task *) = { sub_80B8410 }; -void sub_80B8250(u8 taskId) +static void sub_80B8250(u8 taskId) { gUnknown_0855C49C[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B8280(struct Task *task) +static void sub_80B8280(struct Task *task) { struct Sprite *sprite; s16 centerToCornerVecY; @@ -2289,7 +2432,7 @@ void sub_80B8280(struct Task *task) } } -void sub_80B830C(struct Task *task) +static void sub_80B830C(struct Task *task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; struct EventObject *eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -2328,7 +2471,7 @@ void sub_80B830C(struct Task *task) } } -void sub_80B8410(struct Task *task) +static void sub_80B8410(struct Task *task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; struct EventObject *eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -2346,13 +2489,6 @@ void sub_80B8410(struct Task *task) } } -void sub_80B8554(u8); -void sub_80B88B4(u8); -u8 sub_80B8C60(u32, u32, u32); -void sub_80B880C(void); -void sub_80B8874(u16); -void sub_80B8CC0(struct Sprite *); - bool8 FldEff_FieldMoveShowMon(void) { u8 taskId; @@ -2391,12 +2527,12 @@ void (*const gUnknown_0855C4A8[])(struct Task *) = { overworld_bg_setup_2, }; -void sub_80B8554(u8 taskId) +static void sub_80B8554(u8 taskId) { gUnknown_0855C4A8[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B8584(struct Task *task) +static void sub_80B8584(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; @@ -2413,7 +2549,7 @@ void sub_80B8584(struct Task *task) task->data[0]++; } -void sub_80B85F8(struct Task *task) +static void sub_80B85F8(struct Task *task) { u16 offset; u16 delta; @@ -2426,7 +2562,7 @@ void sub_80B85F8(struct Task *task) task->data[0]++; } -void sub_80B8660(struct Task *task) +static void sub_80B8660(struct Task *task) { s16 v0; s16 v2; @@ -2459,7 +2595,7 @@ void sub_80B8660(struct Task *task) } } -void sub_80B86EC(struct Task *task) +static void sub_80B86EC(struct Task *task) { task->data[5] -= 16; if (gSprites[task->data[15]].data[7]) @@ -2468,7 +2604,7 @@ void sub_80B86EC(struct Task *task) } } -void sub_80B871C(struct Task *task) +static void sub_80B871C(struct Task *task) { s16 v2; s16 v3; @@ -2492,7 +2628,7 @@ void sub_80B871C(struct Task *task) } } -void sub_80B8770(struct Task *task) +static void sub_80B8770(struct Task *task) { u16 bg0cnt; bg0cnt = (REG_BG0CNT >> 8) << 11; @@ -2504,7 +2640,7 @@ void sub_80B8770(struct Task *task) task->data[0]++; } -void overworld_bg_setup_2(struct Task *task) +static void overworld_bg_setup_2(struct Task *task) { IntrCallback callback; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); @@ -2515,7 +2651,7 @@ void overworld_bg_setup_2(struct Task *task) DestroyTask(FindTaskIdByFunc(sub_80B8554)); } -void sub_80B880C(void) +static void sub_80B880C(void) { struct Task *task; IntrCallback callback; @@ -2530,7 +2666,7 @@ void sub_80B880C(void) SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]); } -void sub_80B8874(u16 offs) +static void sub_80B8874(u16 offs) { u16 i; u16 *dest; @@ -2541,11 +2677,6 @@ void sub_80B8874(u16 offs) } } -void sub_80B8AE0(void); -bool8 sub_80B8B38(struct Task *); -void sub_80B8B28(struct Task *); -bool8 sub_80B8BF0(struct Task *); - void (*const gUnknown_0855C4C4[])(struct Task *) = { sub_80B88E4, sub_80B8920, @@ -2556,12 +2687,12 @@ void (*const gUnknown_0855C4C4[])(struct Task *) = { sub_80B8A64, }; -void sub_80B88B4(u8 taskId) +static void sub_80B88B4(u8 taskId) { gUnknown_0855C4C4[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B88E4(struct Task *task) +static void sub_80B88E4(struct Task *task) { SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); @@ -2570,7 +2701,7 @@ void sub_80B88E4(struct Task *task) task->data[0]++; } -void sub_80B8920(struct Task *task) +static void sub_80B8920(struct Task *task) { u16 offset; u16 delta; @@ -2583,7 +2714,7 @@ void sub_80B8920(struct Task *task) task->data[0]++; } -void sub_80B898C(struct Task *task) +static void sub_80B898C(struct Task *task) { if (sub_80B8B38(task)) { @@ -2595,7 +2726,7 @@ void sub_80B898C(struct Task *task) sub_80B8B28(task); } -void sub_80B89DC(struct Task *task) +static void sub_80B89DC(struct Task *task) { sub_80B8B28(task); if (gSprites[task->data[15]].data[7]) @@ -2604,7 +2735,7 @@ void sub_80B89DC(struct Task *task) } } -void sub_80B8A0C(struct Task *task) +static void sub_80B8A0C(struct Task *task) { sub_80B8B28(task); task->data[3] = task->data[1] & 7; @@ -2614,7 +2745,7 @@ void sub_80B8A0C(struct Task *task) task->data[0]++; } -void sub_80B8A44(struct Task *task) +static void sub_80B8A44(struct Task *task) { sub_80B8B28(task); if (sub_80B8BF0(task)) @@ -2623,7 +2754,7 @@ void sub_80B8A44(struct Task *task) } } -void sub_80B8A64(struct Task *task) +static void sub_80B8A64(struct Task *task) { IntrCallback intrCallback; u16 bg0cnt; @@ -2637,7 +2768,7 @@ void sub_80B8A64(struct Task *task) DestroyTask(FindTaskIdByFunc(sub_80B88B4)); } -void sub_80B8AE0(void) +static void sub_80B8AE0(void) { IntrCallback intrCallback; struct Task *task; @@ -2648,14 +2779,14 @@ void sub_80B8AE0(void) SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); } -void sub_80B8B28(struct Task *task) +static void sub_80B8B28(struct Task *task) { task->data[1] -= 16; task->data[3] += 16; } #ifdef NONMATCHING -bool8 sub_80B8B38(struct Task *task) +static bool8 sub_80B8B38(struct Task *task) { u16 i; u16 srcOffs; @@ -2682,7 +2813,7 @@ bool8 sub_80B8B38(struct Task *task) } #else NAKED -bool8 sub_80B8B38(struct Task *task) +static bool8 sub_80B8B38(struct Task *task) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -2782,7 +2913,7 @@ bool8 sub_80B8B38(struct Task *task) } #endif -bool8 sub_80B8BF0(struct Task *task) +static bool8 sub_80B8BF0(struct Task *task) { u16 i; u16 dstOffs; @@ -2806,7 +2937,7 @@ bool8 sub_80B8BF0(struct Task *task) return FALSE; } -u8 sub_80B8C60(u32 a0, u32 a1, u32 a2) +static u8 sub_80B8C60(u32 a0, u32 a1, u32 a2) { u16 v0; u8 monSprite; @@ -2822,9 +2953,7 @@ u8 sub_80B8C60(u32 a0, u32 a1, u32 a2) return monSprite; } -void sub_80B8D04(struct Sprite *); - -void sub_80B8CC0(struct Sprite *sprite) +static void sub_80B8CC0(struct Sprite *sprite) { if ((sprite->pos1.x -= 20) <= 0x78) { @@ -2841,9 +2970,7 @@ void sub_80B8CC0(struct Sprite *sprite) } } -void sub_80B8D20(struct Sprite *); - -void sub_80B8D04(struct Sprite *sprite) +static void sub_80B8D04(struct Sprite *sprite) { if ((--sprite->data[1]) == 0) { @@ -2851,7 +2978,7 @@ void sub_80B8D04(struct Sprite *sprite) } } -void sub_80B8D20(struct Sprite *sprite) +static void sub_80B8D20(struct Sprite *sprite) { if (sprite->pos1.x < -0x40) { @@ -2862,8 +2989,6 @@ void sub_80B8D20(struct Sprite *sprite) } } -void sub_80B8D84(u8); - u8 FldEff_UseSurf(void) { u8 taskId; @@ -2882,12 +3007,12 @@ void (*const gUnknown_0855C4E0[])(struct Task *) = { sub_80B8F24, }; -void sub_80B8D84(u8 taskId) +static void sub_80B8D84(u8 taskId) { gUnknown_0855C4E0[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B8DB4(struct Task *task) +static void sub_80B8DB4(struct Task *task) { ScriptContext2_Enable(); FreezeEventObjects(); @@ -2898,19 +3023,19 @@ void sub_80B8DB4(struct Task *task) task->data[0]++; } -void sub_80B8E14(struct Task *task) +static void sub_80B8E14(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; if (!EventObjectIsMovementOverridden(eventObject) || EventObjectClearHeldMovementIfFinished(eventObject)) { sub_808C114(); - EventObjectSetHeldMovement(eventObject, 0x39); + EventObjectSetHeldMovement(eventObject, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; } } -void sub_80B8E60(struct Task *task) +static void sub_80B8E60(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -2922,7 +3047,7 @@ void sub_80B8E60(struct Task *task) } } -void sub_80B8EA8(struct Task *task) +static void sub_80B8EA8(struct Task *task) { struct EventObject *eventObject; if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) @@ -2939,7 +3064,7 @@ void sub_80B8EA8(struct Task *task) } } -void sub_80B8F24(struct Task *task) +static void sub_80B8F24(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -3129,8 +3254,6 @@ _080B9050:\n\ } #endif // NONMATCHING -void sub_80B9128(struct Sprite *); - u8 FldEff_NPCFlyOut(void) { u8 spriteId; @@ -3145,7 +3268,7 @@ u8 FldEff_NPCFlyOut(void) return spriteId; } -void sub_80B9128(struct Sprite *sprite) +static void sub_80B9128(struct Sprite *sprite) { struct Sprite *npcSprite; sprite->pos2.x = Cos(sprite->data[2], 0x8c); @@ -3166,15 +3289,6 @@ void sub_80B9128(struct Sprite *sprite) } } -void sub_80B91D4(u8); -extern void sub_81555D8(u8, u8); -u8 sub_80B94C4(void); -bool8 sub_80B9508(u8); -void sub_80B9524(u8); -void sub_80B9560(u8, u8); -void sub_80B957C(struct Sprite *); -void sub_80B963C(struct Sprite *); - u8 FldEff_UseFly(void) { u8 taskId; @@ -3195,12 +3309,12 @@ void (*const gUnknown_0855C4F4[])(struct Task *) = { sub_80B9494, }; -void sub_80B91D4(u8 taskId) +static void sub_80B91D4(u8 taskId) { gUnknown_0855C4F4[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B9204(struct Task *task) +static void sub_80B9204(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -3210,12 +3324,12 @@ void sub_80B9204(struct Task *task) gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(1); sub_808C114(); - EventObjectSetHeldMovement(eventObject, 0x39); + EventObjectSetHeldMovement(eventObject, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; } } -void sub_80B925C(struct Task *task) +static void sub_80B925C(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -3227,7 +3341,7 @@ void sub_80B925C(struct Task *task) } } -void sub_80B92A0(struct Task *task) +static void sub_80B92A0(struct Task *task) { struct EventObject *eventObject; if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) @@ -3243,18 +3357,18 @@ void sub_80B92A0(struct Task *task) } } -void sub_80B92F8(struct Task *task) +static void sub_80B92F8(struct Task *task) { if (sub_80B9508(task->data[1])) { task->data[0]++; task->data[2] = 16; SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); - EventObjectSetHeldMovement(&gEventObjects[gPlayerAvatar.eventObjectId], 0x02); + EventObjectSetHeldMovement(&gEventObjects[gPlayerAvatar.eventObjectId], MOVEMENT_ACTION_FACE_LEFT); } } -void sub_80B933C(struct Task *task) +static void sub_80B933C(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -3266,7 +3380,7 @@ void sub_80B933C(struct Task *task) } } -void sub_80B9390(struct Task *task) +static void sub_80B9390(struct Task *task) { struct EventObject *eventObject; if ((++task->data[2]) >= 8) @@ -3275,7 +3389,7 @@ void sub_80B9390(struct Task *task) EventObjectSetGraphicsId(eventObject, GetPlayerAvatarGraphicsIdByStateId(0x03)); StartSpriteAnim(&gSprites[eventObject->spriteId], 0x16); eventObject->inanimate = 1; - EventObjectSetHeldMovement(eventObject, 0x48); + EventObjectSetHeldMovement(eventObject, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT); if (task->data[15] & 0x08) { DestroySprite(&gSprites[eventObject->fieldEffectSpriteId]); @@ -3285,7 +3399,7 @@ void sub_80B9390(struct Task *task) } } -void sub_80B9418(struct Task *task) +static void sub_80B9418(struct Task *task) { struct EventObject *eventObject; if ((++task->data[2]) >= 10) @@ -3300,7 +3414,7 @@ void sub_80B9418(struct Task *task) } } -void sub_80B9474(struct Task *task) +static void sub_80B9474(struct Task *task) { if (sub_80B9508(task->data[1])) { @@ -3309,7 +3423,7 @@ void sub_80B9474(struct Task *task) } } -void sub_80B9494(struct Task *task) +static void sub_80B9494(struct Task *task) { if (!gPaletteFade.active) { @@ -3318,7 +3432,7 @@ void sub_80B9494(struct Task *task) } } -u8 sub_80B94C4(void) +static u8 sub_80B94C4(void) { u8 spriteId; struct Sprite *sprite; @@ -3330,12 +3444,12 @@ u8 sub_80B94C4(void) return spriteId; } -u8 sub_80B9508(u8 spriteId) +static u8 sub_80B9508(u8 spriteId) { return gSprites[spriteId].data[7]; } -void sub_80B9524(u8 spriteId) +static void sub_80B9524(u8 spriteId) { struct Sprite *sprite; sprite = &gSprites[spriteId]; @@ -3348,7 +3462,7 @@ void sub_80B9524(u8 spriteId) sprite->data[6] = 0x40; } -void sub_80B9560(u8 a0, u8 a1) +static void sub_80B9560(u8 a0, u8 a1) { gSprites[a0].data[6] = a1; } @@ -3370,7 +3484,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_0855C548[] = { SpriteAffineAnim_855C530 }; -void sub_80B957C(struct Sprite *sprite) +static void sub_80B957C(struct Sprite *sprite) { if (sprite->data[7] == 0) { @@ -3403,7 +3517,7 @@ void sub_80B957C(struct Sprite *sprite) } } -void sub_80B963C(struct Sprite *sprite) +static void sub_80B963C(struct Sprite *sprite) { struct Sprite *sprite1; sprite->pos2.x = Cos(sprite->data[2], 0x8c); @@ -3474,8 +3588,6 @@ void sub_80B9794(u8 spriteId) gSprites[spriteId].callback = sub_80B96B0; } -void sub_80B97D4(u8); - u8 FldEff_FlyIn(void) { CreateTask(sub_80B97D4, 0xfe); @@ -3492,12 +3604,12 @@ void (*const gUnknown_0855C550[])(struct Task *) = { sub_80B9A60, }; -void sub_80B97D4(u8 taskId) +static void sub_80B97D4(u8 taskId) { gUnknown_0855C550[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80B9804(struct Task *task) +static void sub_80B9804(struct Task *task) { struct EventObject *eventObject; eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -3523,7 +3635,7 @@ void sub_80B9804(struct Task *task) } } -void sub_80B98B8(struct Task *task) +static void sub_80B98B8(struct Task *task) { struct EventObject *eventObject; struct Sprite *sprite; @@ -3541,7 +3653,7 @@ void sub_80B98B8(struct Task *task) } } -void sub_80B9924(struct Task *task) +static void sub_80B9924(struct Task *task) { s16 unknown_0855C56C[18] = { -2, @@ -3571,7 +3683,7 @@ void sub_80B9924(struct Task *task) } } -void sub_80B9978(struct Task *task) +static void sub_80B9978(struct Task *task) { struct EventObject *eventObject; struct Sprite *sprite; @@ -3585,12 +3697,12 @@ void sub_80B9978(struct Task *task) sprite->pos2.y = 0; sprite->coordOffsetEnabled = 1; sub_808C114(); - EventObjectSetHeldMovement(eventObject, 0x39); + EventObjectSetHeldMovement(eventObject, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; } } -void sub_80B99F0(struct Task *task) +static void sub_80B99F0(struct Task *task) { if (EventObjectClearHeldMovementIfFinished(&gEventObjects[gPlayerAvatar.eventObjectId])) { @@ -3599,7 +3711,7 @@ void sub_80B99F0(struct Task *task) } } -void sub_80B9A28(struct Task *task) +static void sub_80B9A28(struct Task *task) { if (sub_80B9508(task->data[1])) { @@ -3609,7 +3721,7 @@ void sub_80B9A28(struct Task *task) } } -void sub_80B9A60(struct Task *task) +static void sub_80B9A60(struct Task *task) { u8 state; struct EventObject *eventObject; @@ -3631,8 +3743,6 @@ void sub_80B9A60(struct Task *task) } } -void sub_80B9BE8(u8 taskId); - bool8 sub_80B9ADC(void) { u8 taskId; @@ -3697,7 +3807,7 @@ void (*const gUnknown_0855C590[])(s16*, u8) = { sub_80B9CDC, }; -void sub_80B9BE8(u8 taskId) +static void sub_80B9BE8(u8 taskId) { s16 *data = gTasks[taskId].data; InstallCameraPanAheadCallback(); @@ -3742,8 +3852,6 @@ void sub_80B9CDC(s16* a0, u8 taskId) } } -void sub_80B9DB8(struct Sprite* sprite); - const struct SpriteFrameImage gSpriteImageTable_855C59C[] = { obj_frame_tiles(gUnknown_0855C170), obj_frame_tiles(gUnknown_0855C190), @@ -3791,8 +3899,8 @@ const struct SpriteTemplate gUnknown_0855C5EC = { void sub_80B9D24(struct Sprite* sprite) { int i; - int xPos = (s16)gUnknown_03005DEC + sprite->pos1.x + sprite->pos2.x; - int yPos = (s16)gUnknown_03005DE8 + sprite->pos1.y + sprite->pos2.y - 4; + int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; + int yPos = (s16)gTotalCameraPixelOffsetY + sprite->pos1.y + sprite->pos2.y - 4; for (i = 0; i < 4; i++) { @@ -3806,7 +3914,7 @@ void sub_80B9D24(struct Sprite* sprite) } } -void sub_80B9DB8(struct Sprite* sprite) +static void sub_80B9DB8(struct Sprite* sprite) { switch (sprite->data[0]) { @@ -3831,8 +3939,6 @@ void sub_80B9DB8(struct Sprite* sprite) DestroySprite(sprite); } -void sub_80B9EDC(u8 taskId); - bool8 sub_80B9E28(struct Sprite* sprite) { u8 eventObjectIdBuffer; @@ -3857,7 +3963,7 @@ bool8 sub_80B9E28(struct Sprite* sprite) return FALSE; } -void sub_80B9EDC(u8 taskId) +static void sub_80B9EDC(u8 taskId) { // BUG: Possible divide by zero s16 *data = gTasks[taskId].data; diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3534e0a71..856f7d5ef 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -10,26 +10,27 @@ #include "sound.h" #include "sprite.h" #include "trig.h" +#include "constants/field_effects.h" #include "constants/songs.h" #define EVENT_OBJ_PAL_TAG_NONE 0x11FF // duplicate of define in event_object_movement.c -void UpdateObjectReflectionSprite(struct Sprite *); -void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite); -void LoadObjectHighBridgeReflectionPalette(struct EventObject *, u8); -void LoadObjectRegularReflectionPalette(struct EventObject *, u8); -void sub_81561FC(struct Sprite *, u8, u8); -void FadeFootprintsTireTracks_Step0(struct Sprite *); -void FadeFootprintsTireTracks_Step1(struct Sprite *); -void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *); -void UpdateAshFieldEffect_Step0(struct Sprite *); -void UpdateAshFieldEffect_Step1(struct Sprite *); -void UpdateAshFieldEffect_Step2(struct Sprite *); -void sub_81556B0(struct EventObject *, struct Sprite *); -void sub_81556E8(struct EventObject *, struct Sprite *); -void sub_815577C(struct EventObject *, struct Sprite *, struct Sprite *); -void sub_8155850(struct Sprite *); -u32 ShowDisguiseFieldEffect(u8, u8, u8); +static void UpdateObjectReflectionSprite(struct Sprite *); +static void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite); +static void LoadObjectHighBridgeReflectionPalette(struct EventObject *, u8); +static void LoadObjectRegularReflectionPalette(struct EventObject *, u8); +static void sub_81561FC(struct Sprite *, u8, u8); +static void FadeFootprintsTireTracks_Step0(struct Sprite *); +static void FadeFootprintsTireTracks_Step1(struct Sprite *); +static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *); +static void UpdateAshFieldEffect_Step0(struct Sprite *); +static void UpdateAshFieldEffect_Step1(struct Sprite *); +static void UpdateAshFieldEffect_Step2(struct Sprite *); +static void SynchroniseSurfAnim(struct EventObject *, struct Sprite *); +static void sub_81556E8(struct EventObject *, struct Sprite *); +static void CreateBobbingEffect(struct EventObject *, struct Sprite *, struct Sprite *); +static void sub_8155850(struct Sprite *); +static u32 ShowDisguiseFieldEffect(u8, u8, u8); void SetUpReflection(struct EventObject *eventObject, struct Sprite *sprite, bool8 stillReflection) { @@ -59,12 +60,12 @@ static s16 GetReflectionVerticalOffset(struct EventObject *eventObject) return GetEventObjectGraphicsInfo(eventObject->graphicsId)->height - 2; } -void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite) +static void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite) { u8 bridgeType; u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 }; sprite->data[2] = 0; - if (!GetEventObjectGraphicsInfo(eventObject->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeSth(eventObject->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeSth(eventObject->currentMetatileBehavior)))) + if (!GetEventObjectGraphicsInfo(eventObject->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeType(eventObject->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(eventObject->currentMetatileBehavior)))) { sprite->data[2] = bridgeReflectionVerticalOffsets[bridgeType - 1]; LoadObjectHighBridgeReflectionPalette(eventObject, sprite->oam.paletteNum); @@ -75,7 +76,7 @@ void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite } } -void LoadObjectRegularReflectionPalette(struct EventObject *eventObject, u8 paletteIndex) +static void LoadObjectRegularReflectionPalette(struct EventObject *eventObject, u8 paletteIndex) { const struct EventObjectGraphicsInfo *graphicsInfo; @@ -100,7 +101,7 @@ void LoadObjectRegularReflectionPalette(struct EventObject *eventObject, u8 pale // When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color. // This is so the sprite blends in with the dark water metatile underneath the bridge. -void LoadObjectHighBridgeReflectionPalette(struct EventObject *eventObject, u8 paletteNum) +static void LoadObjectHighBridgeReflectionPalette(struct EventObject *eventObject, u8 paletteNum) { const struct EventObjectGraphicsInfo *graphicsInfo; @@ -112,7 +113,7 @@ void LoadObjectHighBridgeReflectionPalette(struct EventObject *eventObject, u8 p } } -void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) +static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) { struct EventObject *eventObject; struct Sprite *mainSprite; @@ -579,7 +580,7 @@ void UpdateFootprintsTireTracksFieldEffect(struct Sprite *sprite) gFadeFootprintsTireTracksFuncs[sprite->data[0]](sprite); } -void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) +static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) { // Wait 40 frames before the flickering starts. if (++sprite->data[1] > 40) @@ -588,7 +589,7 @@ void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) UpdateEventObjectSpriteVisibility(sprite, FALSE); } -void FadeFootprintsTireTracks_Step1(struct Sprite *sprite) +static void FadeFootprintsTireTracks_Step1(struct Sprite *sprite) { sprite->invisible ^= 1; sprite->data[1]++; @@ -708,7 +709,7 @@ u32 FldEff_FeetInFlowingWater(void) return 0; } -void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite) +static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite) { u8 eventObjectId; struct Sprite *linkedSprite; @@ -913,7 +914,7 @@ void UpdateAshFieldEffect(struct Sprite *sprite) gAshFieldEffectFuncs[sprite->data[0]](sprite); } -void UpdateAshFieldEffect_Step0(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step0(struct Sprite *sprite) { sprite->invisible = TRUE; sprite->animPaused = TRUE; @@ -921,7 +922,7 @@ void UpdateAshFieldEffect_Step0(struct Sprite *sprite) sprite->data[0] = 1; } -void UpdateAshFieldEffect_Step1(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step1(struct Sprite *sprite) { sprite->invisible = FALSE; sprite->animPaused = FALSE; @@ -931,7 +932,7 @@ void UpdateAshFieldEffect_Step1(struct Sprite *sprite) sprite->data[0] = 2; } -void UpdateAshFieldEffect_Step2(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step2(struct Sprite *sprite) { UpdateEventObjectSpriteVisibility(sprite, FALSE); if (sprite->animEnded) @@ -975,17 +976,17 @@ void sub_8155604(u8 spriteId, u8 value, s16 data1) gSprites[spriteId].data[1] = data1; } -u8 sub_8155638(struct Sprite *sprite) +static u8 sub_8155638(struct Sprite *sprite) { return sprite->data[0] & 0xF; } -u8 sub_8155640(struct Sprite *sprite) +static u8 sub_8155640(struct Sprite *sprite) { return (sprite->data[0] & 0xF0) >> 4; } -u8 sub_815564C(struct Sprite *sprite) +static u8 sub_815564C(struct Sprite *sprite) { return (sprite->data[0] & 0xF00) >> 8; } @@ -997,13 +998,13 @@ void UpdateSurfBlobFieldEffect(struct Sprite *sprite) eventObject = &gEventObjects[sprite->data[2]]; linkedSprite = &gSprites[eventObject->spriteId]; - sub_81556B0(eventObject, sprite); + SynchroniseSurfAnim(eventObject, sprite); sub_81556E8(eventObject, sprite); - sub_815577C(eventObject, linkedSprite, sprite); + CreateBobbingEffect(eventObject, linkedSprite, sprite); sprite->oam.priority = linkedSprite->oam.priority; } -void sub_81556B0(struct EventObject *eventObject, struct Sprite *sprite) +static void SynchroniseSurfAnim(struct EventObject *eventObject, struct Sprite *sprite) { u8 surfBlobDirectionAnims[] = { 0, // DIR_NONE @@ -1126,7 +1127,7 @@ _08155770:\n\ } #endif -void sub_815577C(struct EventObject *eventObject, struct Sprite *linkedSprite, struct Sprite *sprite) +static void CreateBobbingEffect(struct EventObject *eventObject, struct Sprite *linkedSprite, struct Sprite *sprite) { u16 unk_085CDC6A[] = {3, 7}; u8 v0 = sub_8155638(sprite); @@ -1166,7 +1167,7 @@ u8 sub_8155800(u8 oldSpriteId) return spriteId; } -void sub_8155850(struct Sprite *sprite) +static void sub_8155850(struct Sprite *sprite) { struct Sprite *oldSprite; @@ -1320,7 +1321,7 @@ u32 ShowSandDisguiseFieldEffect(void) return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2); } -u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) +static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) { u8 spriteId; struct Sprite *sprite; @@ -1619,7 +1620,7 @@ void sub_8156194(struct Sprite *sprite) } } -void sub_81561D0(struct Sprite *sprite) +void WaitFieldEffectSpriteAnim(struct Sprite *sprite) { if (sprite->animEnded) FieldEffectStop(sprite, sprite->data[0]); @@ -1628,7 +1629,7 @@ void sub_81561D0(struct Sprite *sprite) } #ifdef NONMATCHING -void sub_81561FC(struct Sprite *sprite /*r6*/, u8 z, u8 offset) +static void sub_81561FC(struct Sprite *sprite /*r6*/, u8 z, u8 offset) { u8 i; s16 xlo; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index cb2beacee..f0a8da7d7 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -4,11 +4,10 @@ #include "event_data.h" #include "event_object_movement.h" #include "field_camera.h" -#include "field_player_avatar.h" #include "field_effect.h" #include "field_effect_helpers.h" +#include "field_player_avatar.h" #include "fieldmap.h" -#include "global.fieldmap.h" #include "menu.h" #include "metatile_behavior.h" #include "overworld.h" @@ -25,6 +24,7 @@ #include "constants/abilities.h" #include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" +#include "constants/field_effects.h" #include "constants/flags.h" #include "constants/maps.h" #include "constants/moves.h" @@ -32,42 +32,18 @@ #include "constants/species.h" static EWRAM_DATA u8 gUnknown_0203734C = 0; -EWRAM_DATA struct EventObject gEventObjects[NUM_EVENT_OBJECTS] = {}; +EWRAM_DATA struct EventObject gEventObjects[EVENT_OBJECTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; -static void StartStrengthAnim(u8, u8); -static bool8 ShouldJumpLedge(s16, s16, u8); -static bool8 sub_808B1BC(s16, s16, u8); -static u8 sub_808B164(struct EventObject *, s16, s16, u8, u8); -static u8 sub_808B238(s16, s16, u8); -static void check_acro_bike_metatile(s16, s16, u8, u8 *); -static void PlayerNotOnBikeCollide(u8); -static void PlayCollisionSoundIfNotFacingWarp(u8 a); -static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8); -static void PlayerRun(u8); -static void MovePlayerNotOnBike(u8, u16); -static u8 CheckMovementInputNotOnBike(u8); -static void DoPlayerMatSpin(void); -static void DoPlayerMatJump(void); -static u8 CheckForPlayerAvatarCollision(u8); +// static declarations + static u8 EventObjectCB2_NoMovement2(); -static void sub_808C280(struct EventObject *); static bool8 TryInterruptEventObjectSpecialAnim(struct EventObject *, u8); static void npc_clear_strange_bits(struct EventObject *); -static void DoPlayerAvatarTransition(void); -static bool8 player_is_anim_in_certain_ranges(void); -static bool8 sub_808B618(void); -static bool8 PlayerIsAnimActive(void); -static bool8 PlayerCheckIfAnimFinishedOrInactive(void); -static bool8 TryDoMetatileBehaviorForcedMovement(); static void MovePlayerAvatarUsingKeypadInput(u8, u16, u16); static void PlayerAllowForcedMovementIfMovingSameDirection(); -static u8 sub_808B028(u8); +static bool8 TryDoMetatileBehaviorForcedMovement(); static u8 GetForcedMovementByMetatileBehavior(); -static void PlayerNotOnBikeNotMoving(u8, u16); -static void PlayerNotOnBikeTurningInPlace(u8, u16); -static void PlayerNotOnBikeMoving(u8, u16); -static void sub_808C750(u8); static bool8 ForcedMovement_None(void); static bool8 ForcedMovement_Slip(void); @@ -87,25 +63,63 @@ static bool8 ForcedMovement_0xBB(void); static bool8 ForcedMovement_0xBC(void); static bool8 ForcedMovement_MuddySlope(void); +static void MovePlayerNotOnBike(u8, u16); +static u8 CheckMovementInputNotOnBike(u8); +static void PlayerNotOnBikeNotMoving(u8, u16); +static void PlayerNotOnBikeTurningInPlace(u8, u16); +static void PlayerNotOnBikeMoving(u8, u16); +static u8 CheckForPlayerAvatarCollision(u8); +static u8 sub_808B028(u8); +static u8 sub_808B164(struct EventObject *, s16, s16, u8, u8); +static bool8 sub_808B1BC(s16, s16, u8); +static bool8 ShouldJumpLedge(s16, s16, u8); +static u8 sub_808B238(s16, s16, u8); +static void check_acro_bike_metatile(s16, s16, u8, u8 *); + +static void DoPlayerAvatarTransition(void); +static void PlayerAvatarTransition_Dummy(struct EventObject *a); static void PlayerAvatarTransition_Normal(struct EventObject *a); static void PlayerAvatarTransition_MachBike(struct EventObject *a); static void PlayerAvatarTransition_AcroBike(struct EventObject *a); static void PlayerAvatarTransition_Surfing(struct EventObject *a); static void PlayerAvatarTransition_Underwater(struct EventObject *a); static void PlayerAvatarTransition_ReturnToField(struct EventObject *a); -static void PlayerAvatarTransition_Dummy(struct EventObject *a); +static bool8 player_is_anim_in_certain_ranges(void); +static bool8 sub_808B618(void); +static bool8 PlayerIsAnimActive(void); +static bool8 PlayerCheckIfAnimFinishedOrInactive(void); + +static void PlayerRun(u8); +static void PlayerNotOnBikeCollide(u8); +static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8); + +static void PlayCollisionSoundIfNotFacingWarp(u8 a); + +static void sub_808C280(struct EventObject *); + +static void StartStrengthAnim(u8, u8); +static void Task_BumpBoulder(u8 taskId); static u8 sub_808C3A4(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject); static u8 do_boulder_dust(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject); static u8 sub_808C484(struct Task *task, struct EventObject *playerObject, struct EventObject *strengthObject); +static void DoPlayerMatJump(void); +static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct EventObject *eventObject); +static void DoPlayerMatSpin(void); +static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId); static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct EventObject *eventObject); static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct EventObject *eventObject); static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct EventObject *eventObject); static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct EventObject *eventObject); +static void sub_808C750(u8); +static void taskFF_0805D1D4(u8 taskId); +static void sub_808C814(u8 taskId); + +static void Task_Fishing(u8 taskId); static u8 Fishing1(struct Task *task); static u8 Fishing2(struct Task *task); static u8 Fishing3(struct Task *task); @@ -122,8 +136,13 @@ static u8 Fishing13(struct Task *task); static u8 Fishing14(struct Task *task); static u8 Fishing15(struct Task *task); static u8 Fishing16(struct Task *task); +static void AlignFishingAnimationFrames(void); -static bool8 (*const gUnknown_084973FC[])(u8) = +static u8 sub_808D38C(struct EventObject *object, s16 *a1); + +// .rodata + +static bool8 (*const sForcedMovementTestFuncs[])(u8) = { MetatileBehavior_IsTrickHouseSlipperyFloor, MetatileBehavior_IsIce_2, @@ -145,7 +164,7 @@ static bool8 (*const gUnknown_084973FC[])(u8) = MetatileBehavior_IsMuddySlope, }; -static bool8 (*const gUnknown_08497444[])(void) = +static bool8 (*const sForcedMovementFuncs[])(void) = { ForcedMovement_None, ForcedMovement_Slip, @@ -283,14 +302,15 @@ static bool8 (*const sPlayerAvatarSecretBaseMatSpin[])(struct Task *, struct Eve }; // .text + void MovementType_Player(struct Sprite *sprite) { - UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, EventObjectCB2_NoMovement2); + UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, EventObjectCB2_NoMovement2); } static u8 EventObjectCB2_NoMovement2(void) { - return 0; + return 0; } void player_step(u8 direction, u16 newKeys, u16 heldKeys) @@ -380,7 +400,7 @@ static void PlayerAllowForcedMovementIfMovingSameDirection(void) static bool8 TryDoMetatileBehaviorForcedMovement(void) { - return gUnknown_08497444[GetForcedMovementByMetatileBehavior()](); + return sForcedMovementFuncs[GetForcedMovementByMetatileBehavior()](); } static u8 GetForcedMovementByMetatileBehavior(void) @@ -393,7 +413,7 @@ static u8 GetForcedMovementByMetatileBehavior(void) for (i = 0; i < 18; i++) { - if (gUnknown_084973FC[i](metatileBehavior)) + if (sForcedMovementTestFuncs[i](metatileBehavior)) return i + 1; } } @@ -622,7 +642,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { - // speed 2 is fast, same speed as running + // speed 2 is fast, same speed as running PlayerGoSpeed2(direction); return; } @@ -728,18 +748,18 @@ static u8 sub_808B238(s16 x, s16 y, u8 direction) { u8 eventObjectId = GetEventObjectIdByXY(x, y); - if (eventObjectId != 16 && gEventObjects[eventObjectId].graphicsId == 0x57) + if (eventObjectId != 16 && gEventObjects[eventObjectId].graphicsId == EVENT_OBJ_GFX_PUSHABLE_BOULDER) + { + x = gEventObjects[eventObjectId].currentCoords.x; + y = gEventObjects[eventObjectId].currentCoords.y; + MoveCoords(direction, &x, &y); + if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == 0 + && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0) { - x = gEventObjects[eventObjectId].currentCoords.x; - y = gEventObjects[eventObjectId].currentCoords.y; - MoveCoords(direction, &x, &y); - if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == 0 - && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0) - { - StartStrengthAnim(eventObjectId, direction); - return 1; - } + StartStrengthAnim(eventObjectId, direction); + return 1; } + } } return 0; } @@ -981,7 +1001,7 @@ void PlayerGoSpeed4(u8 a) PlayerSetAnimId(GetWalkFastestMovementAction(a), 2); } -void PlayerRun(u8 a) +static void PlayerRun(u8 a) { PlayerSetAnimId(GetPlayerRunMovementAction(a), 2); } @@ -997,13 +1017,13 @@ void PlayerOnBikeCollideWithFarawayIslandMew(u8 a) PlayerSetAnimId(GetWalkInPlaceNormalMovementAction(a), 2); } -void PlayerNotOnBikeCollide(u8 a) +static void PlayerNotOnBikeCollide(u8 a) { PlayCollisionSoundIfNotFacingWarp(a); PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(a), 2); } -void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 a) +static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8 a) { PlayerSetAnimId(GetWalkInPlaceSlowMovementAction(a), 2); } @@ -1450,8 +1470,6 @@ static void sub_808C280(struct EventObject *eventObject) /* Strength */ -static void Task_BumpBoulder(u8 taskId); - static void StartStrengthAnim(u8 a, u8 b) { u8 taskId = CreateTask(Task_BumpBoulder, 0xFF); @@ -1523,8 +1541,6 @@ static bool8 sub_808C484(struct Task *task, struct EventObject *playerObject, st /* Some field effect */ -static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); - static void DoPlayerMatJump(void) { DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF)); @@ -1557,8 +1573,6 @@ static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct EventObject /* Some field effect */ -static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId); - static void DoPlayerMatSpin(void) { u8 taskId = CreateTask(PlayerAvatar_DoSecretBaseMatSpin, 0xFF); @@ -1632,9 +1646,6 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Event /* Some Field effect */ -static void taskFF_0805D1D4(u8 taskId); -static void sub_808C814(u8 taskId); - static void sub_808C750(u8 a) { u8 taskId; @@ -1699,9 +1710,6 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) = Fishing16, }; -static void Task_Fishing(u8 taskId); -static void sub_808CF78(void); - #define tStep data[0] #define tFrameCounter data[1] #define tNumDots data[2] @@ -1759,7 +1767,7 @@ static bool8 Fishing2(struct Task *task) static bool8 Fishing3(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); // Wait one second task->tFrameCounter++; @@ -1791,7 +1799,7 @@ static bool8 Fishing5(struct Task *task) { const u8 dot[] = _("·"); - sub_808CF78(); + AlignFishingAnimationFrames(); task->tFrameCounter++; if (gMain.newKeys & A_BUTTON) { @@ -1827,7 +1835,7 @@ static bool8 Fishing6(struct Task *task) { bool8 bite; - sub_808CF78(); + AlignFishingAnimationFrames(); task->tStep++; bite = FALSE; @@ -1872,7 +1880,7 @@ static bool8 Fishing6(struct Task *task) // Oh! A Bite! static bool8 Fishing7(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); AddTextPrinterParameterized(0, 1, gText_OhABite, 0, 17, 0, NULL); task->tStep++; task->tFrameCounter = 0; @@ -1884,7 +1892,7 @@ static bool8 Fishing8(struct Task *task) { const s16 reelTimeouts[3] = {36, 33, 30}; - sub_808CF78(); + AlignFishingAnimationFrames(); task->tFrameCounter++; if (task->tFrameCounter >= reelTimeouts[task->tFishingRod]) task->tStep = FISHING_GOT_AWAY; @@ -1903,7 +1911,7 @@ static bool8 Fishing9(struct Task *task) {70, 30} }; - sub_808CF78(); + AlignFishingAnimationFrames(); task->tStep++; if (task->tRoundsPlayed < task->tMinRoundsRequired) { @@ -1922,7 +1930,7 @@ static bool8 Fishing9(struct Task *task) static bool8 Fishing10(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); FillWindowPixelBuffer(0, 0x11); AddTextPrinterParameterized2(0, 1, gText_PokemonOnHook, 1, 0, 2, 1, 3); task->tStep++; @@ -1933,7 +1941,7 @@ static bool8 Fishing10(struct Task *task) static bool8 Fishing11(struct Task *task) { if (task->tFrameCounter == 0) - sub_808CF78(); + AlignFishingAnimationFrames(); RunTextPrinters(); @@ -1969,7 +1977,7 @@ static bool8 Fishing11(struct Task *task) // Not even a nibble static bool8 Fishing12(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, 0x11); AddTextPrinterParameterized2(0, 1, gText_NotEvenANibble, 1, 0, 2, 1, 3); @@ -1980,7 +1988,7 @@ static bool8 Fishing12(struct Task *task) // It got away static bool8 Fishing13(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection())); FillWindowPixelBuffer(0, 0x11); AddTextPrinterParameterized2(0, 1, gText_ItGotAway, 1, 0, 2, 1, 3); @@ -1991,14 +1999,14 @@ static bool8 Fishing13(struct Task *task) // Wait one second static bool8 Fishing14(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); task->tStep++; return FALSE; } static bool8 Fishing15(struct Task *task) { - sub_808CF78(); + AlignFishingAnimationFrames(); if (gSprites[gPlayerAvatar.spriteId].animEnded) { struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -2033,7 +2041,7 @@ static bool8 Fishing16(struct Task *task) #undef tFrameCounter #undef tFishingRod -static void sub_808CF78(void) +static void AlignFishingAnimationFrames(void) { struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; u8 animCmdIndex; @@ -2082,8 +2090,6 @@ static u8 sub_808D080(void) return gUnknown_0203734C; } -static u8 sub_808D38C(struct EventObject *object, s16 *a1); - static void sub_808D094(u8 taskId) { struct EventObject *object = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -2114,7 +2120,7 @@ static void sub_808D094(u8 taskId) data[3] -= data[2]; data[2] += 3; sprite->pos1.y = data[3] >> 4; - if (sprite->pos1.y + (s16)gUnknown_03005DE8 < -32) + if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32) { data[0]++; } diff --git a/src/field_poison.c b/src/field_poison.c index e2fd994fc..02f37f69f 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -1,22 +1,21 @@ #include "global.h" -#include "string_util.h" -#include "party_menu.h" -#include "constants/species.h" -#include "task.h" +#include "battle.h" +#include "battle_pike.h" +#include "event_data.h" #include "field_message_box.h" -#include "strings.h" -#include "rom_818CFC8.h" +#include "field_poison.h" +#include "fldeff_80F9BCC.h" #include "frontier_util.h" +#include "party_menu.h" #include "pokenav.h" -#include "event_data.h" +#include "rom_818CFC8.h" #include "script.h" -#include "battle.h" -#include "fldeff_80F9BCC.h" -#include "field_poison.h" - -extern bool8 InBattlePike(void); +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "constants/species.h" -static bool32 sub_80F9568(struct Pokemon *pokemon) +static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); if (species == SPECIES_NONE || species == SPECIES_EGG) @@ -26,14 +25,14 @@ static bool32 sub_80F9568(struct Pokemon *pokemon) return TRUE; } -static bool32 sub_80F958C(void) +static bool32 AllMonsFainted(void) { int i; - struct Pokemon *pokemon; + struct Pokemon *pokemon = gPlayerParty; - for (pokemon = gPlayerParty, i = 0; i < PARTY_SIZE; i++, pokemon++) + for (i = 0; i < PARTY_SIZE; i++, pokemon++) { - if (sub_80F9568(pokemon) && GetMonData(pokemon, MON_DATA_HP) != 0) + if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) != 0) { return FALSE; } @@ -41,27 +40,28 @@ static bool32 sub_80F958C(void) return TRUE; } -static void sub_80F95C0(u8 partyIdx) +static void FaintFromFieldPoison(u8 partyIdx) { struct Pokemon *pokemon = gPlayerParty + partyIdx; - unsigned int status = STATUS1_NONE; + u32 status = STATUS1_NONE; + AdjustFriendship(pokemon, 0x07); SetMonData(pokemon, MON_DATA_STATUS, &status); GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1); StringGetEnd10(gStringVar1); } -static bool32 sub_80F960C(u8 partyIdx) +static bool32 MonFaintedFromPoison(u8 partyIdx) { struct Pokemon *pokemon = gPlayerParty + partyIdx; - if (sub_80F9568(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) + if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) { return TRUE; } return FALSE; } -static void sub_80F9654(u8 taskId) +static void Task_WhiteOut(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) @@ -69,9 +69,9 @@ static void sub_80F9654(u8 taskId) case 0: for (; data[1] < PARTY_SIZE; data[1]++) { - if (sub_80F960C(data[1])) + if (MonFaintedFromPoison(data[1])) { - sub_80F95C0(data[1]); + FaintFromFieldPoison(data[1]); ShowFieldMessage(gText_PkmnFainted3); data[0]++; return; @@ -86,7 +86,7 @@ static void sub_80F9654(u8 taskId) } break; case 2: - if (sub_80F958C()) + if (AllMonsFainted()) { if (InBattlePyramid() | InBattlePike() || sub_81D5C18()) { @@ -107,19 +107,19 @@ static void sub_80F9654(u8 taskId) } } -void sub_80F972C(void) +void ExecuteWhiteOut(void) { - CreateTask(sub_80F9654, 80); + CreateTask(Task_WhiteOut, 80); ScriptContext1_Stop(); } -int DoPoisonFieldEffect(void) +s32 DoPoisonFieldEffect(void) { int i; - unsigned int hp; + u32 hp; struct Pokemon *pokemon = gPlayerParty; - unsigned int numPoisoned = 0; - unsigned int numFainted = 0; + u32 numPoisoned = 0; + u32 numFainted = 0; for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(pokemon, MON_DATA_SANITY_BIT2) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) @@ -136,7 +136,7 @@ int DoPoisonFieldEffect(void) } if (numFainted != 0 || numPoisoned != 0) { - overworld_poison_effect(); + FldeffPoison_Start(); } if (numFainted != 0) { diff --git a/src/field_region_map.c b/src/field_region_map.c index c15959afc..40f48e668 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -1,18 +1,16 @@ - -// Includes #include "global.h" +#include "bg.h" +#include "gpu_regs.h" +#include "international_string_util.h" #include "main.h" #include "malloc.h" -#include "gpu_regs.h" -#include "bg.h" -#include "text.h" -#include "window.h" -#include "text_window.h" -#include "palette.h" #include "menu.h" -#include "strings.h" -#include "international_string_util.h" +#include "palette.h" #include "region_map.h" +#include "strings.h" +#include "text.h" +#include "text_window.h" +#include "window.h" // Static type declarations diff --git a/src/field_specials.c b/src/field_specials.c index 522cbdf94..113f46922 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1,5 +1,4 @@ #include "global.h" -#include "main.h" #include "battle.h" #include "battle_tower.h" #include "cable_club.h" @@ -13,7 +12,6 @@ #include "field_effect.h" #include "field_message_box.h" #include "field_player_avatar.h" -#include "field_region_map.h" #include "field_screen.h" #include "field_specials.h" #include "field_weather.h" @@ -21,6 +19,7 @@ #include "item_icon.h" #include "link.h" #include "list_menu.h" +#include "main.h" #include "malloc.h" #include "match_call.h" #include "menu.h" @@ -46,6 +45,7 @@ #include "wallclock.h" #include "window.h" #include "constants/event_objects.h" +#include "constants/field_effects.h" #include "constants/items.h" #include "constants/maps.h" #include "constants/songs.h" @@ -80,6 +80,7 @@ extern const u16 gEventObjectPalette34[]; extern void LoadPalette(const void *src, u32 offset, u16 size); // incorrect signature, needed to match extern void BlendPalettes(u32, u8, u16); +extern void FieldInitRegionMap(MainCallback callback); void UpdateMovedLilycoveFanClubMembers(void); void sub_813BF60(void); @@ -595,7 +596,7 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent graphicsId == EVENT_OBJ_GFX_RIVAL_MAY_NORMAL) { u8 obj = GetEventObjectIdByLocalIdAndMap(localEventId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - if (obj != NUM_EVENT_OBJECTS) + if (obj != EVENT_OBJECTS_COUNT) { u8 spriteId = gEventObjects[obj].spriteId; struct Sprite *sprite = &gSprites[spriteId]; @@ -1513,7 +1514,7 @@ bool8 FoundBlackGlasses(void) void SetRoute119Weather(void) { - if (is_map_type_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) + if (is_map_type_1_2_3_5_or_6(GetLastUsedWarpMapType()) != TRUE) { SetSav1Weather(20); } @@ -1521,7 +1522,7 @@ void SetRoute119Weather(void) void SetRoute123Weather(void) { - if (is_map_type_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) + if (is_map_type_1_2_3_5_or_6(GetLastUsedWarpMapType()) != TRUE) { SetSav1Weather(21); } diff --git a/src/field_tasks.c b/src/field_tasks.c index 5fb23f536..7a7f49120 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -1,24 +1,24 @@ #include "global.h" -#include "task.h" -#include "main.h" -#include "constants/vars.h" #include "bike.h" -#include "item.h" -#include "constants/items.h" +#include "clock.h" #include "event_data.h" +#include "field_camera.h" +#include "field_effect_helpers.h" +#include "field_player_avatar.h" +#include "field_special_scene.h" +#include "field_tasks.h" +#include "fieldmap.h" +#include "item.h" +#include "main.h" +#include "metatile_behavior.h" #include "overworld.h" -#include "clock.h" #include "script.h" -#include "field_special_scene.h" -#include "field_effect_helpers.h" #include "secret_base.h" -#include "metatile_behavior.h" -#include "fieldmap.h" -#include "field_player_avatar.h" -#include "field_camera.h" -#include "constants/songs.h" #include "sound.h" -#include "field_tasks.h" +#include "task.h" +#include "constants/items.h" +#include "constants/songs.h" +#include "constants/vars.h" struct MetatileOffset { diff --git a/src/fieldmap.c b/src/fieldmap.c index 5019b5dc7..0d8a706b1 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -1,18 +1,18 @@ #include "global.h" -#include "overworld.h" #include "bg.h" -#include "frontier_util.h" -#include "constants/rgb.h" #include "fieldmap.h" #include "fldeff_80F9BCC.h" #include "fldeff_cut.h" #include "fldeff_groundshake.h" +#include "frontier_util.h" #include "menu.h" +#include "overworld.h" #include "palette.h" #include "pokenav.h" #include "script.h" #include "secret_base.h" #include "tv.h" +#include "constants/rgb.h" extern void sub_81AA078(u16*, u8); diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 5a9181789..230a95e0b 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -18,6 +18,7 @@ #include "trig.h" #include "constants/abilities.h" #include "constants/event_objects.h" +#include "constants/field_effects.h" #include "constants/songs.h" extern void ScriptUnfreezeEventObjects(void); diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index b906225da..7d3e07123 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -1,8 +1,8 @@ #include "global.h" -#include "task.h" -#include "fieldmap.h" #include "field_camera.h" #include "field_player_avatar.h" +#include "fieldmap.h" +#include "task.h" static EWRAM_DATA u8 sEscalatorAnim_TaskId = 0; diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 0c6fdd8b8..9771232f2 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -1,20 +1,19 @@ #include "global.h" -#include "constants/songs.h" #include "braille_puzzles.h" #include "event_data.h" #include "event_scripts.h" #include "field_effect.h" #include "gpu_regs.h" -#include "gba/io_reg.h" #include "main.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" -#include "overworld.h" #include "rom6.h" #include "script.h" #include "sound.h" #include "sprite.h" #include "task.h" +#include "constants/songs.h" // structures struct FlashStruct @@ -156,7 +155,7 @@ void c2_change_map(void) static bool8 sub_8137304(void) { u8 i; - u8 v0 = get_map_light_from_warp0(); + u8 v0 = GetLastUsedWarpMapType(); u8 v1 = Overworld_GetMapTypeOfSaveblockLocation(); for (i = 0; gUnknown_085B27C8[i].unk0; i++) diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index 60b078982..e9a46bb86 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -1,10 +1,7 @@ #include "global.h" -#include "global.fieldmap.h" -#include "constants/flags.h" -#include "constants/songs.h" #include "event_data.h" -#include "field_camera.h" #include "event_object_movement.h" +#include "field_camera.h" #include "malloc.h" #include "random.h" #include "roulette_util.h" @@ -12,6 +9,8 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "constants/flags.h" +#include "constants/songs.h" // structures struct Struct203CF18 { diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index d0a40a9a9..471a83c61 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -2,12 +2,12 @@ #include "menu.h" #include "party_menu.h" #include "pokemon.h" -#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" #include "strings.h" #include "task.h" +#include "constants/songs.h" static void sub_816166C(u8 taskId); static void sub_81616C0(u8 taskId); diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 74eb100bc..c9b91f97f 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -7,6 +7,7 @@ #include "script.h" #include "task.h" #include "constants/event_objects.h" +#include "constants/field_effects.h" // static functions static void FldEff_UseStrength(void); diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index f592ed532..9951fe581 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -1,6 +1,4 @@ #include "global.h" -#include "constants/rgb.h" -#include "constants/songs.h" #include "event_data.h" #include "event_scripts.h" #include "field_effect.h" @@ -14,22 +12,25 @@ #include "sprite.h" #include "task.h" #include "wild_encounter.h" +#include "constants/field_effects.h" +#include "constants/rgb.h" +#include "constants/songs.h" -void hm2_sweet_scent(void); -void sub_8159F5C(void); -void sub_8159FEC(u8 taskId); -void sub_815A090(u8 taskId); +static void FieldCallback_SweetScent(void); +static void StartSweetScentFieldEffect(void); +static void TrySweetScentEncounter(u8 taskId); +static void FailSweetScentEncounter(u8 taskId); void sub_81BE6B8(void); void sub_81BE72C(void); bool8 SetUpFieldMove_SweetScent(void) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = hm2_sweet_scent; + gPostMenuFieldCallback = FieldCallback_SweetScent; return TRUE; } -void hm2_sweet_scent(void) +static void FieldCallback_SweetScent(void) { FieldEffectStart(FLDEFF_SWEET_SCENT); gFieldEffectArguments[0] = GetCursorSelectionMonId(); @@ -41,12 +42,12 @@ bool8 FldEff_SweetScent(void) sub_80AC3D0(); taskId = oei_task_add(); - gTasks[taskId].data[8] = (u32)sub_8159F5C >> 16; - gTasks[taskId].data[9] = (u32)sub_8159F5C; + gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16; + gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect; return FALSE; } -void sub_8159F5C(void) +static void StartSweetScentFieldEffect(void) { u8 taskId; @@ -54,12 +55,12 @@ void sub_8159F5C(void) CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100); CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100); BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED); - taskId = CreateTask(sub_8159FEC, 0); + taskId = CreateTask(TrySweetScentEncounter, 0); gTasks[taskId].data[0] = 0; FieldEffectActiveListRemove(FLDEFF_SWEET_SCENT); } -void sub_8159FEC(u8 taskId) +static void TrySweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { @@ -74,7 +75,7 @@ void sub_8159FEC(u8 taskId) } else { - gTasks[taskId].func = sub_815A090; + gTasks[taskId].func = FailSweetScentEncounter; BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, RGB_RED); sub_81BE6B8(); } @@ -86,7 +87,7 @@ void sub_8159FEC(u8 taskId) } } -void sub_815A090(u8 taskId) +static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index e82a26cd1..8562908bd 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -1,24 +1,27 @@ #include "global.h" -#include "fldeff_teleport.h" #include "field_effect.h" #include "field_player_avatar.h" #include "party_menu.h" #include "overworld.h" #include "rom6.h" #include "task.h" +#include "constants/field_effects.h" + +static void FieldCallback_Teleport(void); +static void StartTeleportFieldEffect(void); bool8 SetUpFieldMove_Teleport(void) { if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = hm_teleport_run_dp02scr; + gPostMenuFieldCallback = FieldCallback_Teleport; return TRUE; } return FALSE; } -void hm_teleport_run_dp02scr(void) +static void FieldCallback_Teleport(void) { Overworld_ResetStateAfterTeleport(); FieldEffectStart(FLDEFF_USE_TELEPORT); @@ -28,16 +31,14 @@ void hm_teleport_run_dp02scr(void) bool8 FldEff_UseTeleport(void) { u8 taskId = oei_task_add(); - gTasks[taskId].data[8] = (u32)sub_817C94C >> 16; - gTasks[taskId].data[9] = (u32)sub_817C94C; - SetPlayerAvatarTransitionFlags(1); + gTasks[taskId].data[8] = (u32)StartTeleportFieldEffect >> 16; + gTasks[taskId].data[9] = (u32)StartTeleportFieldEffect; + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); return FALSE; } -void sub_817C94C(void) +static void StartTeleportFieldEffect(void) { FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT); CreateTeleportFieldEffectTask(); } - - diff --git a/src/frontier_util.c b/src/frontier_util.c index 39f472a60..a65d14784 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -336,7 +336,8 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] = }, [FRONTIER_FACILITY_FACTORY] = { - // Silver Symbol. + // Because Factory's pokemon are random, this facility's Brain also uses random pokemon. + // What is interesting, this team is actually the one Steven uses in the multi tag battle alongside the player. { { .species = SPECIES_METANG, @@ -363,7 +364,6 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] = .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, }, }, - // Gold Symbol. { { .species = SPECIES_METANG, diff --git a/src/hof_pc.c b/src/hof_pc.c index 44b929337..2cea5540a 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -7,8 +7,6 @@ #include "script_menu.h" #include "task.h" -extern void (*gUnknown_0300485C)(void); - extern void Overworld_PlaySpecialMapMusic(void); extern bool16 ScrSpecial_CreatePCMenu(void); extern void ScriptMenu_DisplayPCStartupPrompt(void); diff --git a/src/item_menu.c b/src/item_menu.c index 2c0ac09ef..1744a1bfa 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -47,8 +47,7 @@ #include "menu_helpers.h" #include "window.h" #include "apprentice.h" - -extern bool8 InBattlePike(void); +#include "battle_pike.h" void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); void CB2_Bag(void); diff --git a/src/item_use.c b/src/item_use.c index 2a1c7883c..4ab9f6e23 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -58,7 +58,7 @@ extern void sub_81C5924(void); extern void sub_81C59BC(void); extern void sub_81AB9A8(u8); extern void sub_81ABA88(u8); -extern void sub_80B7CC8(void); +extern void StartEscapeRopeFieldEffect(void); extern u8* sub_806CF78(u16); extern void sub_81B89F0(void); extern u8 GetItemEffectType(u16); @@ -890,7 +890,7 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) void task08_080A1C44(u8 taskId) { ResetInitialPlayerAvatarState(); - sub_80B7CC8(); + StartEscapeRopeFieldEffect(); DestroyTask(taskId); } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index dd594f075..2bae89ecf 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -897,7 +897,7 @@ bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) return FALSE; } -u8 MetatileBehavior_GetBridgeSth(u8 metatileBehavior) +u8 MetatileBehavior_GetBridgeType(u8 metatileBehavior) { u8 result = metatileBehavior - MB_WARP_OR_BRIDGE; if (result < 4) diff --git a/src/overworld.c b/src/overworld.c index 4787a4344..69ac9c822 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -585,7 +585,7 @@ void set_warp2_warp3_to_neg_1(void) gFixedHoleWarp = sDummyWarpData; } -void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { warp->mapGroup = mapGroup; warp->mapNum = mapNum; @@ -594,7 +594,7 @@ void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, warp->y = y; } -bool32 IsDummyWarp(struct WarpData *warp) +static bool32 IsDummyWarp(struct WarpData *warp) { if (warp->mapGroup != -1) return FALSE; @@ -620,7 +620,7 @@ struct MapHeader const *const GetDestinationWarpMapHeader(void) return Overworld_GetMapHeaderByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum); } -void LoadCurrentMapData(void) +static void LoadCurrentMapData(void) { sLastMapSectionId = gMapHeader.regionMapSectionId; gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); @@ -628,13 +628,13 @@ void LoadCurrentMapData(void) gMapHeader.mapLayout = GetMapLayout(); } -void LoadSaveblockMapHeader(void) +static void LoadSaveblockMapHeader(void) { gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); gMapHeader.mapLayout = GetMapLayout(); } -void SetPlayerCoordsFromWarp(void) +static void SetPlayerCoordsFromWarp(void) { if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount) { @@ -729,7 +729,7 @@ void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y); } -void SetFixedDiveWarpAsDestination(void) +static void SetFixedDiveWarpAsDestination(void) { sWarpDestination = gFixedDiveWarp; } @@ -785,7 +785,7 @@ const struct MapConnection *GetMapConnection(u8 dir) return NULL; } -bool8 SetDiveWarp(u8 dir, u16 x, u16 y) +static bool8 SetDiveWarp(u8 dir, u16 x, u16 y) { const struct MapConnection *connection = GetMapConnection(dir); @@ -905,8 +905,8 @@ static void mli0_load_map(u32 a1) void ResetInitialPlayerAvatarState(void) { - gInitialPlayerAvatarState.direction = 1; - gInitialPlayerAvatarState.transitionFlags = 1; + gInitialPlayerAvatarState.direction = DIR_SOUTH; + gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT; } void StoreInitialPlayerAvatarState(void) @@ -914,15 +914,15 @@ void StoreInitialPlayerAvatarState(void) gInitialPlayerAvatarState.direction = GetPlayerFacingDirection(); if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) - gInitialPlayerAvatarState.transitionFlags = 2; + gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE)) - gInitialPlayerAvatarState.transitionFlags = 4; + gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - gInitialPlayerAvatarState.transitionFlags = 8; + gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER)) - gInitialPlayerAvatarState.transitionFlags = 16; + gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER; else - gInitialPlayerAvatarState.transitionFlags = 1; + gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT; } static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void) @@ -940,44 +940,44 @@ static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void) static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType) { if (mapType != MAP_TYPE_INDOOR && FlagGet(FLAG_SYS_CRUISE_MODE)) - return 1; + return PLAYER_AVATAR_FLAG_ON_FOOT; else if (mapType == MAP_TYPE_UNDERWATER) - return 16; + return PLAYER_AVATAR_FLAG_UNDERWATER; else if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE) - return 8; + return PLAYER_AVATAR_FLAG_SURFING; else if (Overworld_IsBikingAllowed() != TRUE) - return 1; - else if (playerStruct->transitionFlags == 2) - return 2; - else if (playerStruct->transitionFlags != 4) - return 1; + return PLAYER_AVATAR_FLAG_ON_FOOT; + else if (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_MACH_BIKE) + return PLAYER_AVATAR_FLAG_MACH_BIKE; + else if (playerStruct->transitionFlags != PLAYER_AVATAR_FLAG_ACRO_BIKE) + return PLAYER_AVATAR_FLAG_ON_FOOT; else - return 4; + return PLAYER_AVATAR_FLAG_ACRO_BIKE; } static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType) { if (FlagGet(FLAG_SYS_CRUISE_MODE) && mapType == MAP_TYPE_6) - return 4; + return DIR_EAST; else if (MetatileBehavior_IsDeepSouthWarp(metatileBehavior) == TRUE) - return 2; + return DIR_NORTH; else if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE || MetatileBehavior_IsDoor(metatileBehavior) == TRUE) - return 1; + return DIR_SOUTH; else if (MetatileBehavior_IsSouthArrowWarp(metatileBehavior) == TRUE) - return 2; + return DIR_NORTH; else if (MetatileBehavior_IsNorthArrowWarp(metatileBehavior) == TRUE) - return 1; + return DIR_SOUTH; else if (MetatileBehavior_IsWestArrowWarp(metatileBehavior) == TRUE) - return 4; + return DIR_EAST; else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE) - return 3; - else if ((playerStruct->transitionFlags == 16 && transitionFlags == 8) - || (playerStruct->transitionFlags == 8 && transitionFlags == 16)) + return DIR_WEST; + else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING) + || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER )) return playerStruct->direction; else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE) return playerStruct->direction; else - return 1; + return DIR_SOUTH; } static u16 GetCenterScreenMetatileBehavior(void) @@ -1357,7 +1357,7 @@ u8 Overworld_GetMapTypeOfSaveblockLocation(void) return GetMapTypeByWarpData(&gSaveBlock1Ptr->location); } -u8 get_map_light_from_warp0(void) +u8 GetLastUsedWarpMapType(void) { return GetMapTypeByWarpData(&gLastUsedWarp); } @@ -1458,7 +1458,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); if (!ScriptContext2_IsEnabled()) { - if (sub_809C014(&inputStruct) == 1) + if (ProcessPlayerFieldInput(&inputStruct) == 1) { ScriptContext2_Enable(); HideMapNamePopUpWindow(); @@ -2166,9 +2166,9 @@ static void sub_8086988(u32 a1) static void sub_80869DC(void) { - gUnknown_03005DEC = 0; - gUnknown_03005DE8 = 0; - sub_808D438(); + gTotalCameraPixelOffsetX = 0; + gTotalCameraPixelOffsetY = 0; + ResetEventObjects(); TrySpawnEventObjects(0, 0); mapheader_run_first_tag4_script_list_match(); } @@ -2178,9 +2178,9 @@ static void mli4_mapscripts_and_other(void) s16 x, y; struct InitialPlayerAvatarState *player; - gUnknown_03005DEC = 0; - gUnknown_03005DE8 = 0; - sub_808D438(); + gTotalCameraPixelOffsetX = 0; + gTotalCameraPixelOffsetY = 0; + ResetEventObjects(); sav1_camera_get_focus_coords(&x, &y); player = GetInitialPlayerAvatarState(); InitPlayerAvatar(x, y, player->direction, gSaveBlock2Ptr->playerGender); diff --git a/src/pokeball.c b/src/pokeball.c index bb02a02ba..09e7ac639 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1,19 +1,19 @@ #include "global.h" -#include "pokemon.h" -#include "sprite.h" -#include "pokeball.h" #include "battle.h" #include "battle_anim.h" -#include "task.h" -#include "sound.h" -#include "constants/songs.h" -#include "trig.h" +#include "decompress.h" +#include "graphics.h" #include "main.h" #include "m4a.h" -#include "decompress.h" -#include "constants/species.h" +#include "pokeball.h" +#include "pokemon.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" #include "util.h" -#include "graphics.h" +#include "constants/songs.h" +#include "constants/species.h" extern struct MusicPlayerInfo gMPlayInfo_BGM; diff --git a/src/pokeblock.c b/src/pokeblock.c index c8f2c67ed..01343c6eb 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -1,35 +1,35 @@ #include "global.h" -#include "pokeblock.h" -#include "bg.h" -#include "strings.h" -#include "text.h" -#include "text_window.h" -#include "menu.h" -#include "task.h" -#include "menu_helpers.h" -#include "pokemon.h" -#include "graphics.h" -#include "malloc.h" -#include "main.h" #include "battle.h" #include "battle_controllers.h" -#include "palette.h" -#include "scanline_effect.h" -#include "list_menu.h" -#include "gpu_regs.h" +#include "battle_message.h" +#include "berry.h" +#include "bg.h" #include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" #include "international_string_util.h" #include "item.h" -#include "constants/items.h" -#include "string_util.h" -#include "constants/songs.h" -#include "sound.h" -#include "berry.h" -#include "event_data.h" -#include "battle_message.h" -#include "safari_zone.h" #include "lilycove_lady.h" +#include "list_menu.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" #include "overworld.h" +#include "palette.h" +#include "pokeblock.h" +#include "pokemon.h" +#include "safari_zone.h" +#include "scanline_effect.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "constants/items.h" +#include "constants/songs.h" #define POKEBLOCK_MAX_FEEL 99 #define FIELD_E75_COUNT 7 diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 6978f0715..0a8f1b8c2 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -1,28 +1,28 @@ #include "global.h" -#include "pokeblock.h" -#include "sprite.h" -#include "task.h" -#include "palette.h" -#include "menu.h" -#include "malloc.h" -#include "pokemon.h" -#include "util.h" -#include "main.h" -#include "menu_helpers.h" +#include "battle.h" // to get rid of once gMonSpritesGfxPtr is put elsewhere #include "bg.h" -#include "gpu_regs.h" #include "data2.h" #include "decompress.h" #include "event_data.h" -#include "strings.h" -#include "string_util.h" -#include "party_menu.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" #include "m4a.h" +#include "palette.h" +#include "party_menu.h" +#include "pokeblock.h" +#include "pokemon.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" #include "sound.h" -#include "trig.h" -#include "graphics.h" +#include "task.h" #include "text_window.h" -#include "battle.h" // to get rid of once gMonSpritesGfxPtr is put elsewhere +#include "trig.h" +#include "util.h" struct PokeblockFeedStruct { diff --git a/src/pokedex.c b/src/pokedex.c index 48bf64338..93ff06876 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1,34 +1,33 @@ #include "global.h" -#include "gba/m4a_internal.h" -#include "pokedex.h" -#include "sprite.h" -#include "graphics.h" -#include "decompress.h" #include "bg.h" -#include "window.h" +#include "data2.h" +#include "decompress.h" #include "event_data.h" -#include "palette.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "international_string_util.h" #include "main.h" -#include "sound.h" -#include "task.h" -#include "trainer_pokemon_sprites.h" -#include "scanline_effect.h" #include "malloc.h" -#include "gpu_regs.h" -#include "constants/songs.h" -#include "constants/species.h" -#include "constants/rgb.h" -#include "overworld.h" #include "menu.h" -#include "text_window.h" -#include "data2.h" -#include "string_util.h" -#include "trig.h" +#include "m4a.h" +#include "overworld.h" +#include "palette.h" +#include "pokedex.h" #include "pokedex_area_screen.h" #include "pokedex_cry_screen.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" #include "strings.h" -#include "m4a.h" -#include "international_string_util.h" +#include "task.h" +#include "text_window.h" +#include "trainer_pokemon_sprites.h" +#include "trig.h" +#include "window.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/species.h" static EWRAM_DATA struct PokedexView *gUnknown_02039B4C = NULL; static EWRAM_DATA u16 gUnknown_02039B50 = 0; diff --git a/src/pokemon.c b/src/pokemon.c index b858ee925..47c4f9217 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1,41 +1,42 @@ #include "global.h" -#include "pokemon.h" +#include "apprentice.h" #include "battle.h" -#include "battle_setup.h" -#include "battle_message.h" -#include "random.h" -#include "main.h" -#include "constants/species.h" -#include "constants/abilities.h" -#include "constants/items.h" -#include "constants/trainers.h" -#include "constants/moves.h" -#include "constants/hold_effects.h" -#include "constants/battle_move_effects.h" -#include "constants/songs.h" -#include "constants/battle_frontier.h" -#include "string_util.h" -#include "text.h" -#include "link.h" -#include "event_data.h" -#include "item.h" #include "battle_controllers.h" #include "battle_message.h" +#include "battle_pike.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "event_data.h" #include "evolution_scene.h" -#include "pokemon_animation.h" +#include "item.h" +#include "link.h" +#include "main.h" +#include "malloc.h" +#include "m4a.h" #include "pokedex.h" #include "pokeblock.h" +#include "pokemon.h" +#include "pokemon_animation.h" +#include "pokemon_storage_system.h" +#include "pokenav.h" +#include "random.h" +#include "recorded_battle.h" +#include "rtc.h" #include "sound.h" +#include "string_util.h" +#include "strings.h" #include "task.h" -#include "rtc.h" -#include "m4a.h" -#include "malloc.h" +#include "text.h" #include "util.h" -#include "strings.h" -#include "pokenav.h" -#include "pokemon_storage_system.h" -#include "recorded_battle.h" -#include "apprentice.h" +#include "constants/abilities.h" +#include "constants/battle_frontier.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/trainers.h" struct SpeciesItem { @@ -80,14 +81,10 @@ extern u8 StorageGetCurrentBox(void); extern void set_unknown_box_id(u8); extern void sub_803FA70(u8 battlerId); extern u8 sav1_map_get_name(void); -extern u8 GetFrontierEnemyMonLevel(u8); extern bool8 InBattlePyramid(void); -extern bool8 InBattlePike(void); extern bool8 sub_806F104(void); extern u8 GetTrainerEncounterMusicIdInBattlePyramind(u16 trainerOpponentId); extern u8 sub_81D63C8(u16 trainerOpponentId); -extern u8 GetFrontierOpponentClass(u16 trainerId); -extern void GetFrontierTrainerName(u8* dest, u16 trainerId); extern void SummaryScreen_SetUnknownTaskId(u8); // this file's functions @@ -2904,7 +2901,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m CalculateMonStats(mon); } -void CreateMonWithEVSpreadPersonalityOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId) +void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId) { s32 i; s32 statCount = 0; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 90bba702e..989bce37d 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -1,12 +1,12 @@ #include "global.h" #include "pokemon.h" -#include "sprite.h" #include "pokemon_animation.h" -#include "trig.h" +#include "sprite.h" #include "task.h" +#include "trig.h" #include "util.h" -#include "constants/rgb.h" #include "constants/battle_anim.h" +#include "constants/rgb.h" #include "constants/species.h" struct UnkAnimStruct diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index e3b54058d..994cc520e 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1,10 +1,10 @@ #include "global.h" -#include "sprite.h" -#include "mail.h" #include "graphics.h" -#include "constants/species.h" +#include "mail.h" #include "palette.h" #include "pokemon_icon.h" +#include "sprite.h" +#include "constants/species.h" #define POKE_ICON_BASE_PAL_TAG 56000 diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index fe3b3e8dd..473bbee03 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -1,10 +1,10 @@ #include "global.h" -#include "pokemon_size_record.h" #include "event_data.h" -#include "constants/species.h" +#include "pokemon.h" +#include "pokemon_size_record.h" #include "string_util.h" #include "text.h" -#include "pokemon.h" +#include "constants/species.h" #define DEFAULT_MAX_SIZE 0x8000 // was 0x8100 in Ruby/Sapphire diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index c102b570a..465b97da2 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1,25 +1,25 @@ #include "global.h" -#include "pokemon_storage_system.h" -#include "pokemon.h" -#include "constants/species.h" -#include "event_data.h" -#include "string_util.h" -#include "text.h" -#include "strings.h" -#include "window.h" -#include "menu.h" #include "bg.h" -#include "main.h" -#include "palette.h" -#include "overworld.h" +#include "event_data.h" #include "field_screen.h" #include "field_weather.h" -#include "script.h" +#include "gpu_regs.h" #include "international_string_util.h" -#include "walda_phrase.h" +#include "main.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "pokemon.h" +#include "pokemon_storage_system.h" +#include "script.h" #include "sound.h" -#include "gpu_regs.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "walda_phrase.h" +#include "window.h" #include "constants/songs.h" +#include "constants/species.h" IWRAM_DATA u8 gUnknown_03000F78[0x188]; diff --git a/src/rom6.c b/src/rom6.c index cc146fc94..8043730d2 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -1,21 +1,23 @@ #include "global.h" -#include "constants/event_objects.h" -#include "constants/songs.h" -#include "rom6.h" #include "braille_puzzles.h" #include "event_data.h" +#include "event_object_movement.h" #include "event_scripts.h" #include "field_effect.h" -#include "event_object_movement.h" #include "field_player_avatar.h" #include "item_use.h" -#include "party_menu.h" #include "overworld.h" +#include "party_menu.h" +#include "rom6.h" #include "script.h" #include "sound.h" #include "sprite.h" #include "task.h" +#include "constants/event_object_movement_constants.h" +#include "constants/event_objects.h" +#include "constants/field_effects.h" #include "constants/map_types.h" +#include "constants/songs.h" // static functions static void task08_080C9820(u8 taskId); @@ -31,14 +33,14 @@ static void sub_8135780(void); extern struct MapPosition gPlayerFacingPosition; // text -bool8 CheckObjectGraphicsInFrontOfPlayer(u8 a) +bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) { u8 eventObjId; GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); gPlayerFacingPosition.height = PlayerGetZCoord(); eventObjId = GetEventObjectIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height); - if (gEventObjects[eventObjId].graphicsId != a) + if (gEventObjects[eventObjId].graphicsId != graphicsId) { return FALSE; } @@ -73,7 +75,7 @@ static void task08_080C9820(u8 taskId) else { sub_808C114(); - EventObjectSetHeldMovement(&gEventObjects[eventObjId], 0x39); + EventObjectSetHeldMovement(&gEventObjects[eventObjId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); gTasks[taskId].func = sub_813552C; } } @@ -90,7 +92,7 @@ static void sub_813552C(u8 taskId) static void sub_8135578(u8 taskId) { - if (!FieldEffectActiveListContains(6)) + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { gFieldEffectArguments[1] = GetPlayerFacingDirection(); if (gFieldEffectArguments[1] == 1) @@ -189,7 +191,7 @@ bool8 FldEff_UseDig(void) gTasks[taskId].data[8] = (u32)sub_8135780 >> 16; gTasks[taskId].data[9] = (u32)sub_8135780; if (!ShouldDoBrailleDigEffect()) - SetPlayerAvatarTransitionFlags(1); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); return FALSE; } diff --git a/src/start_menu.c b/src/start_menu.c index 217d7be6a..173d0a79f 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -34,8 +34,7 @@ #include "constants/songs.h" #include "field_player_avatar.h" #include "battle_pyramid_bag.h" - -extern bool8 InBattlePike(void); +#include "battle_pike.h" // Menu actions enum diff --git a/src/time_events.c b/src/time_events.c index 1f46e7705..9702d321f 100644 --- a/src/time_events.c +++ b/src/time_events.c @@ -81,7 +81,7 @@ void UpdateShoalTideFlag(void) 1, // 23 }; - if (is_map_type_1_2_3_5_or_6(get_map_light_from_warp0())) + if (is_map_type_1_2_3_5_or_6(GetLastUsedWarpMapType())) { RtcCalcLocalTime(); if (tide[gLocalTime.hours]) diff --git a/src/trainer_see.c b/src/trainer_see.c index f5e9c300e..726d89847 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -1,17 +1,18 @@ #include "global.h" -#include "trainer_see.h" #include "battle_setup.h" -#include "pokemon.h" -#include "sprite.h" -#include "field_effect.h" +#include "event_data.h" #include "event_object_movement.h" +#include "field_effect.h" #include "field_player_avatar.h" +#include "pokemon.h" #include "pokenav.h" -#include "task.h" -#include "util.h" #include "script.h" -#include "event_data.h" #include "script_movement.h" +#include "sprite.h" +#include "task.h" +#include "trainer_see.h" +#include "util.h" +#include "constants/field_effects.h" extern bool8 InBattlePyramid(void); extern bool32 InTrainerHill(void); diff --git a/src/wallclock.c b/src/wallclock.c index 60a5fae07..e2e03ecba 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -1,37 +1,24 @@ #include "global.h" -#include "main.h" -#include "palette.h" -#include "gpu_regs.h" #include "bg.h" -#include "rtc.h" #include "clock.h" -#include "wallclock.h" +#include "decompress.h" #include "event_data.h" +#include "gpu_regs.h" #include "graphics.h" -#include "text.h" -#include "window.h" -#include "text_window.h" +#include "main.h" #include "menu.h" +#include "palette.h" +#include "rtc.h" #include "scanline_effect.h" -#include "task.h" -#include "strings.h" #include "sound.h" -#include "constants/songs.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" #include "trig.h" -#include "decompress.h" - -// static types - -#define tMinuteHandAngle data[0] -#define tHourHandAngle data[1] -#define tHours data[2] -#define tMinutes data[3] -#define tMvmtDir data[4] -#define tPeriod data[5] -#define tMvmtSpeed data[6] - -#define TAG_GFX_WALL_CLOCK_HAND 0x1000 -#define TAG_PAL_WALL_CLOCK_HAND 0x1000 +#include "wallclock.h" +#include "window.h" +#include "constants/songs.h" // static declarations @@ -46,15 +33,39 @@ static void Task_ViewClock1(u8 taskId); static void Task_ViewClock2(u8 taskId); static void Task_ViewClock3(u8 taskId); static void Task_ViewClock4(u8 taskId); -static u16 CalcNewMinHandAngle(u16 a0, u8 command, u8 a2); -static bool32 AdvanceClock(u8 taskId, u8 command); -static void UpdateClockPeriod(u8 taskId, u8 command); +static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed); +static bool32 AdvanceClock(u8 taskId, u8 direction); +static void UpdateClockPeriod(u8 taskId, u8 direction); static void InitClockWithRtc(u8 taskId); static void SpriteCB_MinuteHand(struct Sprite *sprite); static void SpriteCB_HourHand(struct Sprite *sprite); static void SpriteCB_AMIndicator(struct Sprite *sprite); static void SpriteCB_PMIndicator(struct Sprite *sprite); +#define tMinuteHandAngle data[0] +#define tHourHandAngle data[1] +#define tHours data[2] +#define tMinutes data[3] +#define tMvmtDir data[4] +#define tPeriod data[5] +#define tMvmtSpeed data[6] + +#define TAG_GFX_WALL_CLOCK_HAND 0x1000 +#define TAG_PAL_WALL_CLOCK_HAND 0x1000 + +enum +{ + PERIOD_AM, + PERIOD_PM, +}; + +enum +{ + MVMT_NONE, + MVMT_BACKWARD, + MVMT_FORWARD, +}; + // rodata static const u32 sUnknown_085B1F58[] = INCBIN_U32("graphics/wallclock/graphics_85b1f58.4bpp.lz"); @@ -122,17 +133,17 @@ static const struct SpritePalette gUnknown_085B2218[] = { {} }; static const struct OamData Unknown_085B2230 = { - .y = 0xa0, + .y = 160, .size = 3, - .priority = 1 + .priority = 1, }; static const union AnimCmd Unknown_085B2238[] = { ANIMCMD_FRAME(0, 30), - ANIMCMD_END + ANIMCMD_END, }; static const union AnimCmd Unknown_085B2240[] = { ANIMCMD_FRAME(64, 30), - ANIMCMD_END + ANIMCMD_END, }; static const union AnimCmd *const gUnknown_085B2248[] = { Unknown_085B2238 @@ -148,7 +159,7 @@ static const struct SpriteTemplate gUnknown_085B2250 = .anims = gUnknown_085B2248, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_MinuteHand + .callback = SpriteCB_MinuteHand, }; static const struct SpriteTemplate gUnknown_085B2268 = { @@ -158,20 +169,20 @@ static const struct SpriteTemplate gUnknown_085B2268 = .anims = gUnknown_085B224C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_HourHand + .callback = SpriteCB_HourHand, }; static const struct OamData Unknown_085B2280 = { - .y = 0xa0, + .y = 160, .size = 1, - .priority = 3 + .priority = 3, }; static const union AnimCmd Unknown_085B2288[] = { - ANIMCMD_FRAME(0x84, 30), - ANIMCMD_END + ANIMCMD_FRAME(132, 30), + ANIMCMD_END, }; static const union AnimCmd Unknown_085B2290[] = { - ANIMCMD_FRAME(0x80, 30), - ANIMCMD_END + ANIMCMD_FRAME(128, 30), + ANIMCMD_END, }; static const union AnimCmd *const gUnknown_085B2298[] = { Unknown_085B2288 @@ -648,21 +659,21 @@ void CB2_StartWallClock(void) gTasks[taskId].tMinuteHandAngle = 0; gTasks[taskId].tHourHandAngle = 300; - spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); + spriteId = CreateSprite(&gUnknown_085B2250, 120, 80, 1); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; - spriteId = CreateSprite(&gUnknown_085B2268, 0x78, 0x50, 0); + spriteId = CreateSprite(&gUnknown_085B2268, 120, 80, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; - spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); + spriteId = CreateSprite(&gUnknown_085B22A0, 120, 80, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 45; - spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); + spriteId = CreateSprite(&gUnknown_085B22B8, 120, 80, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 90; @@ -696,21 +707,21 @@ void CB2_ViewWallClock(void) angle2 = 135; } - spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); + spriteId = CreateSprite(&gUnknown_085B2250, 120, 80, 1); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; - spriteId = CreateSprite(&gUnknown_085B2268, 0x78, 0x50, 0); + spriteId = CreateSprite(&gUnknown_085B2268, 120, 80, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; - spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); + spriteId = CreateSprite(&gUnknown_085B22A0, 120, 80, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = angle1; - spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); + spriteId = CreateSprite(&gUnknown_085B22B8, 120, 80, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = angle2; @@ -757,11 +768,11 @@ static void Task_SetClock2(u8 taskId) gTasks[taskId].tMvmtDir = 0; if (gMain.heldKeys & DPAD_LEFT) { - gTasks[taskId].tMvmtDir = 1; + gTasks[taskId].tMvmtDir = MVMT_BACKWARD; } if (gMain.heldKeys & DPAD_RIGHT) { - gTasks[taskId].tMvmtDir = 2; + gTasks[taskId].tMvmtDir = MVMT_FORWARD; } if (gTasks[taskId].tMvmtDir != 0) { @@ -794,12 +805,12 @@ static void Task_SetClock4(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: + case 0: //YES PlaySE(SE_SELECT); gTasks[taskId].func = Task_SetClock5; break; - case 1: - case -1: + case 1: //B button + case -1: //NO PlaySE(SE_SELECT); sub_8198070(0, FALSE); ClearWindowTilemap(0); @@ -855,45 +866,49 @@ static void Task_ViewClock4(u8 taskId) } } -static u8 CalcMinHandDelta(u16 a0) +static u8 CalcMinHandDelta(u16 speed) { - if (a0 > 60) + if (speed > 60) { return 6; } - if (a0 > 30) + if (speed > 30) { return 3; } - if (a0 > 10) + if (speed > 10) { return 2; } return 1; } -static u16 CalcNewMinHandAngle(u16 a0, u8 command, u8 a2) +static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed) { - u8 r1 = CalcMinHandDelta(a2); - switch (command) + u8 delta = CalcMinHandDelta(speed); + switch (direction) { - case 1: - if (a0) a0 -= r1; - else a0 = 360 - r1; + case MVMT_BACKWARD: + if (angle) + angle -= delta ; + else + angle = 360 - delta ; break; - case 2: - if (a0 < 360 - r1) a0 += r1; - else a0 = 0; + case MVMT_FORWARD: + if (angle < 360 - delta ) + angle += delta ; + else + angle = 0; break; } - return a0; + return angle; } -static bool32 AdvanceClock(u8 taskId, u8 command) +static bool32 AdvanceClock(u8 taskId, u8 direction) { - switch (command) + switch (direction) { - case 1: + case MVMT_BACKWARD: if (gTasks[taskId].tMinutes > 0) { gTasks[taskId].tMinutes--; @@ -909,10 +924,10 @@ static bool32 AdvanceClock(u8 taskId, u8 command) { gTasks[taskId].tHours = 23; } - UpdateClockPeriod(taskId, command); + UpdateClockPeriod(taskId, direction); } break; - case 2: + case MVMT_FORWARD: if (gTasks[taskId].tMinutes < 59) { gTasks[taskId].tMinutes++; @@ -928,37 +943,37 @@ static bool32 AdvanceClock(u8 taskId, u8 command) { gTasks[taskId].tHours = 0; } - UpdateClockPeriod(taskId, command); + UpdateClockPeriod(taskId, direction); } break; } return FALSE; } -static void UpdateClockPeriod(u8 taskId, u8 command) +static void UpdateClockPeriod(u8 taskId, u8 direction) { u8 hours = gTasks[taskId].tHours; - switch (command) + switch (direction) { - case 1: + case MVMT_BACKWARD: switch (hours) { case 11: - gTasks[taskId].tPeriod = FALSE; + gTasks[taskId].tPeriod = PERIOD_AM; break; case 23: - gTasks[taskId].tPeriod = TRUE; + gTasks[taskId].tPeriod = PERIOD_PM; break; } break; - case 2: + case MVMT_FORWARD: switch (hours) { case 0: - gTasks[taskId].tPeriod = FALSE; + gTasks[taskId].tPeriod = PERIOD_AM; break; case 12: - gTasks[taskId].tPeriod = TRUE; + gTasks[taskId].tPeriod = PERIOD_PM; break; } break; @@ -974,11 +989,11 @@ static void InitClockWithRtc(u8 taskId) gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; if (gLocalTime.hours < 12) { - gTasks[taskId].tPeriod = FALSE; + gTasks[taskId].tPeriod = PERIOD_AM; } else { - gTasks[taskId].tPeriod = TRUE; + gTasks[taskId].tPeriod = PERIOD_PM; } } @@ -987,8 +1002,7 @@ static void SpriteCB_MinuteHand(struct Sprite *sprite) u16 angle = gTasks[sprite->data[0]].tMinuteHandAngle; s16 sin = Sin2(angle) / 16; s16 cos = Cos2(angle) / 16; - u16 xhat; - u16 yhat; + u16 xhat, yhat; SetOamMatrix(0, cos, sin, -sin, cos); xhat = sClockHandCoords[angle][0]; @@ -1011,8 +1025,7 @@ static void SpriteCB_HourHand(struct Sprite *sprite) u16 angle = gTasks[sprite->data[0]].tHourHandAngle; s16 sin = Sin2(angle) / 16; s16 cos = Cos2(angle) / 16; - u16 xhat; - u16 yhat; + u16 xhat, yhat; SetOamMatrix(1, cos, sin, -sin, cos); xhat = sClockHandCoords[angle][0]; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index ec69ad2b5..52dbdf65e 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -18,6 +18,7 @@ #include "tv.h" #include "link.h" #include "script.h" +#include "battle_pike.h" #include "constants/items.h" #include "constants/maps.h" @@ -25,10 +26,7 @@ extern const u8 EventScript_RepelWoreOff[]; #define NUM_FEEBAS_SPOTS 6 -extern u8 GetBattlePikeWildMonHeaderId(void); -extern bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate); extern void GenerateBattlePyramidWildMon(void); -extern bool8 InBattlePike(void); extern bool8 InBattlePyramid(void); // this file's functions diff --git a/sym_bss.txt b/sym_bss.txt index 9561418c0..0b0d31b69 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -70,26 +70,9 @@ gUnknown_03001204: @ 3001204 .include "src/battle_transition.o" .include "src/pokemon_animation.o" .include "src/recorded_battle.o" + .include "src/battle_factory_screen.o" .include "src/battle_factory.o" - -gUnknown_03001288: @ 3001288 - .space 0x4 - -gUnknown_0300128C: @ 300128C - .space 0x1 - -gUnknown_0300128D: @ 300128D - .space 0x1 - -gUnknown_0300128E: @ 300128E - .space 0x2 - -gUnknown_03001290: @ 3001290 - .space 0x4 - -gUnknown_03001294: @ 3001294 - .space 0x4 - + .include "src/battle_pike.o" .include "src/battle_tent.o" .include "src/multiboot.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 85028bc54..484f52d05 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -493,7 +493,7 @@ gUnknown_0203CD88: @ 203CD88 .space 0x4 .include "src/menu.o" - .include "src/battle_factory.o" + .include "src/battle_factory_screen.o" gUnknown_0203CE50: @ 203CE50 .space 0x4 |