mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Merge branch 'master' into mail
This commit is contained in:
commit
e24f3808f4
1
.gitignore
vendored
1
.gitignore
vendored
@ -23,5 +23,6 @@ tools/*
|
||||
*.dump
|
||||
*.sa*
|
||||
Thumbs.db
|
||||
build/
|
||||
.DS_Store
|
||||
*.ddump
|
||||
|
104
Makefile
104
Makefile
@ -1,5 +1,19 @@
|
||||
SHELL := /bin/bash -o pipefail
|
||||
|
||||
ROM := pokeemerald.gba
|
||||
OBJ_DIR := build/emerald
|
||||
|
||||
ELF = $(ROM:.gba=.elf)
|
||||
MAP = $(ROM:.gba=.map)
|
||||
|
||||
C_SUBDIR = src
|
||||
ASM_SUBDIR = asm
|
||||
DATA_ASM_SUBDIR = data
|
||||
|
||||
C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR)
|
||||
ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR)
|
||||
DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
|
||||
|
||||
AS := $(DEVKITARM)/bin/arm-none-eabi-as
|
||||
ASFLAGS := -mcpu=arm7tdmi
|
||||
|
||||
@ -10,7 +24,7 @@ CPP := $(DEVKITARM)/bin/arm-none-eabi-cpp
|
||||
CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
|
||||
|
||||
LD := $(DEVKITARM)/bin/arm-none-eabi-ld
|
||||
LDFLAGS := -T ld_script.ld -Map pokeemerald.map
|
||||
LDFLAGS = -Map $(MAP)
|
||||
|
||||
OBJCOPY := $(DEVKITARM)/bin/arm-none-eabi-objcopy
|
||||
|
||||
@ -20,7 +34,7 @@ SHA1 := sha1sum -c
|
||||
|
||||
GFX := tools/gbagfx/gbagfx
|
||||
AIF := tools/aif2pcm/aif2pcm
|
||||
MID := tools/mid2agb/mid2agb
|
||||
MID := $(abspath tools/mid2agb/mid2agb)
|
||||
SCANINC := tools/scaninc/scaninc
|
||||
PREPROC := tools/preproc/preproc
|
||||
RAMSCRGEN := tools/ramscrgen/ramscrgen
|
||||
@ -35,19 +49,19 @@ RAMSCRGEN := tools/ramscrgen/ramscrgen
|
||||
|
||||
.PHONY: rom clean compare tidy
|
||||
|
||||
C_SRCS := $(wildcard src/*.c)
|
||||
C_OBJS := $(C_SRCS:%.c=%.o)
|
||||
$(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR))
|
||||
|
||||
ASM_SRCS := $(wildcard asm/*.s)
|
||||
ASM_OBJS := $(ASM_SRCS:%.s=%.o)
|
||||
C_SRCS := $(wildcard $(C_SUBDIR)/*.c)
|
||||
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
|
||||
|
||||
DATA_ASM_SRCS := $(wildcard data/*.s)
|
||||
DATA_ASM_OBJS := $(DATA_ASM_SRCS:%.s=%.o)
|
||||
ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
|
||||
ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS))
|
||||
|
||||
DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s)
|
||||
DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS))
|
||||
|
||||
OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS)
|
||||
|
||||
ROM := pokeemerald.gba
|
||||
ELF := $(ROM:.gba=.elf)
|
||||
OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
|
||||
|
||||
rom: $(ROM)
|
||||
|
||||
@ -59,8 +73,8 @@ clean: tidy
|
||||
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
|
||||
|
||||
tidy:
|
||||
rm -f ld_script.ld sym_bss.ld sym_common.ld sym_ewram.ld
|
||||
rm -f $(ROM) $(ELF) $(OBJS) $(C_SRCS:%.c=%.i) pokeemerald.map
|
||||
rm -f $(ROM) $(ELF) $(MAP)
|
||||
rm -r build/*
|
||||
|
||||
include graphics_file_rules.mk
|
||||
|
||||
@ -75,56 +89,62 @@ include graphics_file_rules.mk
|
||||
%.lz: % ; $(GFX) $< $@
|
||||
%.rl: % ; $(GFX) $< $@
|
||||
|
||||
src/libc.o: CC1 := tools/agbcc/bin/old_agbcc
|
||||
src/libc.o: CFLAGS := -O2
|
||||
$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc
|
||||
$(C_BUILDDIR)/libc.o: CFLAGS := -O2
|
||||
|
||||
src/siirtc.o: CFLAGS := -mthumb-interwork
|
||||
$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork
|
||||
|
||||
src/agb_flash.o: CFLAGS := -O -mthumb-interwork
|
||||
src/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork
|
||||
src/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork
|
||||
$(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork
|
||||
$(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork
|
||||
$(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork
|
||||
|
||||
src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc
|
||||
src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc
|
||||
$(C_BUILDDIR)/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc
|
||||
$(C_BUILDDIR)/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc
|
||||
|
||||
ifeq ($(NODEP),)
|
||||
%.o: c_dep = $(shell $(SCANINC) $*.c)
|
||||
$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) $(C_SUBDIR)/$*.c)
|
||||
else
|
||||
%.o: c_dep :=
|
||||
$(C_BUILDDIR)/%.o: c_dep :=
|
||||
endif
|
||||
|
||||
$(C_OBJS): %.o : %.c $$(c_dep)
|
||||
@$(CPP) $(CPPFLAGS) $< -o $*.i
|
||||
@$(PREPROC) $*.i charmap.txt | $(CC1) $(CFLAGS) -o $*.s
|
||||
@echo -e ".text\n\t.align\t2, 0\n" >> $*.s
|
||||
$(AS) $(ASFLAGS) -o $@ $*.s
|
||||
$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
|
||||
@$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
|
||||
@$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s
|
||||
@echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
|
||||
$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
|
||||
|
||||
ifeq ($(NODEP),)
|
||||
%.o: asm_dep = $(shell $(SCANINC) $*.s)
|
||||
$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s)
|
||||
else
|
||||
%.o: asm_dep :=
|
||||
$(ASM_BUILDDIR)/%.o: asm_dep :=
|
||||
endif
|
||||
|
||||
$(ASM_OBJS): %.o: %.s $$(asm_dep)
|
||||
$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
|
||||
$(AS) $(ASFLAGS) -o $@ $<
|
||||
|
||||
$(DATA_ASM_OBJS): %.o: %.s $$(asm_dep)
|
||||
ifeq ($(NODEP),)
|
||||
$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s)
|
||||
else
|
||||
$(DATA_ASM_BUILDDIR)/%.o: data_dep :=
|
||||
endif
|
||||
|
||||
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep)
|
||||
$(PREPROC) $< charmap.txt | $(AS) $(ASFLAGS) -o $@
|
||||
|
||||
sym_bss.ld: sym_bss.txt
|
||||
$(RAMSCRGEN) .bss sym_bss.txt ENGLISH >$@
|
||||
$(OBJ_DIR)/sym_bss.ld: sym_bss.txt
|
||||
$(RAMSCRGEN) .bss $< ENGLISH > $@
|
||||
|
||||
sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
|
||||
$(RAMSCRGEN) COMMON sym_common.txt ENGLISH -c src,common_syms >$@
|
||||
$(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
|
||||
$(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@
|
||||
|
||||
sym_ewram.ld: sym_ewram.txt
|
||||
$(RAMSCRGEN) ewram_data sym_ewram.txt ENGLISH >$@
|
||||
$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
|
||||
$(RAMSCRGEN) ewram_data $< ENGLISH > $@
|
||||
|
||||
ld_script.ld: ld_script.txt sym_bss.ld sym_common.ld sym_ewram.ld
|
||||
sed -f ld_script.sed ld_script.txt >ld_script.ld
|
||||
$(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
|
||||
cd $(OBJ_DIR) && sed -f ../../ld_script.sed ../../$< | sed "s#tools/#../../tools/#g" | sed "s#sound/#../../sound/#g" > ld_script.ld
|
||||
|
||||
$(ELF): ld_script.ld $(OBJS)
|
||||
$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBGCC)
|
||||
$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
|
||||
cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) ../../$(LIBGCC)
|
||||
|
||||
$(ROM): $(ELF)
|
||||
$(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@
|
||||
|
2847
asm/battle_9.s
2847
asm/battle_9.s
File diff suppressed because it is too large
Load Diff
@ -5212,7 +5212,7 @@ sub_8061F90: @ 8061F90
|
||||
thumb_func_start sub_8061F9C
|
||||
sub_8061F9C: @ 8061F9C
|
||||
push {lr}
|
||||
bl sub_8063880
|
||||
bl AI_TrySwitchOrUseItem
|
||||
bl OpponentBufferExecCompleted
|
||||
pop {r0}
|
||||
bx r0
|
||||
@ -5243,7 +5243,7 @@ sub_8061FB8: @ 8061FB8
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
_08061FD6:
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_08061FDA:
|
||||
bl OpponentBufferExecCompleted
|
||||
b _08062156
|
||||
@ -5347,7 +5347,7 @@ _0806209C:
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
adds r2, r4, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _08061FDA
|
||||
.pool
|
||||
_080620C4:
|
||||
@ -5378,7 +5378,7 @@ _080620C6:
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
adds r2, r4, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _08062152
|
||||
.pool
|
||||
_08062108:
|
||||
@ -5401,7 +5401,7 @@ _08062108:
|
||||
orrs r2, r4
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _08062152
|
||||
.pool
|
||||
_0806213C:
|
||||
@ -5413,7 +5413,7 @@ _0806213C:
|
||||
orrs r2, r4
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_08062152:
|
||||
bl OpponentBufferExecCompleted
|
||||
_08062156:
|
||||
@ -5456,7 +5456,7 @@ sub_8062188: @ 8062188
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0x6
|
||||
bne _08062254
|
||||
bl sub_8063A90
|
||||
bl GetMostSuitableMonToSwitchInto
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0x6
|
||||
|
@ -226,7 +226,7 @@ _0805764C:
|
||||
movs r0, 0x1
|
||||
movs r1, 0x3
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _080577C2
|
||||
_08057658:
|
||||
movs r0, 0x20
|
||||
@ -393,7 +393,7 @@ _080577B2:
|
||||
movs r1, 0xC
|
||||
_080577BC:
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_080577C2:
|
||||
bl PlayerBufferExecCompleted
|
||||
b _080577E8
|
||||
@ -518,7 +518,7 @@ _080578A0:
|
||||
orrs r2, r0
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
ldrb r0, [r4]
|
||||
movs r1, 0x1
|
||||
bl dp11b_obj_free
|
||||
@ -1086,7 +1086,7 @@ _08057E14:
|
||||
_08057E1C:
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl PlayerBufferExecCompleted
|
||||
b _08057F9E
|
||||
.pool
|
||||
@ -3413,7 +3413,7 @@ _080591FE:
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xB
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
strb r5, [r4]
|
||||
bl battle_type_is_double
|
||||
lsls r0, 24
|
||||
@ -3686,7 +3686,7 @@ _08059430:
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xB
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
strb r5, [r4]
|
||||
ldr r0, =sub_8059544
|
||||
str r0, [r6]
|
||||
@ -4291,14 +4291,14 @@ _08059A2C:
|
||||
movs r0, 0x1
|
||||
movs r1, 0xE
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _08059A76
|
||||
.pool
|
||||
_08059A6C:
|
||||
movs r0, 0x1
|
||||
movs r1, 0xD
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_08059A76:
|
||||
bl PlayerBufferExecCompleted
|
||||
_08059A7A:
|
||||
@ -8658,7 +8658,7 @@ sub_805C158: @ 805C158
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl PlayerBufferExecCompleted
|
||||
_0805C194:
|
||||
pop {r0}
|
||||
@ -9378,7 +9378,7 @@ sub_805C80C: @ 805C80C
|
||||
movs r0, 0x1
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl PlayerBufferExecCompleted
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
@ -645,7 +645,7 @@ _081BB2E2:
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xB
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
strb r5, [r4]
|
||||
bl battle_type_is_double
|
||||
lsls r0, 24
|
||||
@ -918,7 +918,7 @@ _081BB514:
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xB
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
strb r5, [r4]
|
||||
ldr r0, =sub_81BB628
|
||||
str r0, [r6]
|
||||
@ -4990,7 +4990,7 @@ sub_81BDAA0: @ 81BDAA0
|
||||
thumb_func_start sub_81BDAAC
|
||||
sub_81BDAAC: @ 81BDAAC
|
||||
push {lr}
|
||||
bl sub_8063880
|
||||
bl AI_TrySwitchOrUseItem
|
||||
bl PlayerPartnerBufferExecCompleted
|
||||
pop {r0}
|
||||
bx r0
|
||||
@ -5068,7 +5068,7 @@ _081BDB3C:
|
||||
orrs r2, r5
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl PlayerPartnerBufferExecCompleted
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
@ -5087,7 +5087,7 @@ sub_81BDB70: @ 81BDB70
|
||||
thumb_func_start sub_81BDB7C
|
||||
sub_81BDB7C: @ 81BDB7C
|
||||
push {r4-r6,lr}
|
||||
bl sub_8063A90
|
||||
bl GetMostSuitableMonToSwitchInto
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0x6
|
||||
|
@ -4754,7 +4754,7 @@ sub_8188EF0: @ 8188EF0
|
||||
lsrs r1, 24
|
||||
movs r0, 0x1
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl RecordedOpponentBufferExecCompleted
|
||||
pop {r0}
|
||||
bx r0
|
||||
@ -4785,7 +4785,7 @@ sub_8188F20: @ 8188F20
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _08188F6C
|
||||
.pool
|
||||
_08188F48:
|
||||
@ -4803,7 +4803,7 @@ _08188F48:
|
||||
orrs r2, r4
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_08188F6C:
|
||||
bl RecordedOpponentBufferExecCompleted
|
||||
pop {r4,r5}
|
||||
|
@ -4861,7 +4861,7 @@ sub_818C49C: @ 818C49C
|
||||
lsrs r1, 24
|
||||
movs r0, 0x1
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl RecordedPlayerBufferExecCompleted
|
||||
_0818C4C6:
|
||||
pop {r0}
|
||||
@ -4897,7 +4897,7 @@ _0818C508:
|
||||
lsrs r1, 24
|
||||
movs r0, 0x1
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl RecordedPlayerBufferExecCompleted
|
||||
_0818C522:
|
||||
pop {r0}
|
||||
@ -4929,7 +4929,7 @@ sub_818C538: @ 818C538
|
||||
lsrs r2, 16
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _0818C584
|
||||
.pool
|
||||
_0818C560:
|
||||
@ -4947,7 +4947,7 @@ _0818C560:
|
||||
orrs r2, r4
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_0818C584:
|
||||
bl RecordedPlayerBufferExecCompleted
|
||||
pop {r4,r5}
|
||||
|
@ -103,13 +103,13 @@ _0815942A:
|
||||
movs r1, 0x7
|
||||
_0815942E:
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
b _08159440
|
||||
_08159436:
|
||||
movs r0, 0x1
|
||||
movs r1, 0x8
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
_08159440:
|
||||
bl SafariBufferExecCompleted
|
||||
b _0815954E
|
||||
|
@ -153,7 +153,7 @@ _081684CE:
|
||||
movs r1, 0x9
|
||||
_081684E4:
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl WallyBufferExecCompleted
|
||||
ldr r1, [r4]
|
||||
adds r1, 0x94
|
||||
@ -208,7 +208,7 @@ _08168540:
|
||||
movs r0, 0x1
|
||||
movs r1, 0x1
|
||||
movs r2, 0
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl WallyBufferExecCompleted
|
||||
_08168564:
|
||||
pop {r4,r5}
|
||||
@ -3777,7 +3777,7 @@ _0816A550:
|
||||
lsls r2, 1
|
||||
movs r0, 0x1
|
||||
movs r1, 0xA
|
||||
bl dp01_build_cmdbuf_x21_a_bb
|
||||
bl EmitCmd_x21
|
||||
bl WallyBufferExecCompleted
|
||||
_0816A574:
|
||||
pop {r4}
|
||||
|
@ -12935,7 +12935,7 @@ _081A1118:
|
||||
adds r1, r0, 0
|
||||
mov r0, sp
|
||||
movs r2, 0x2
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
adds r0, r5, 0
|
||||
mov r1, sp
|
||||
bl StringCopy
|
||||
@ -18997,7 +18997,7 @@ sub_81A4594: @ 81A4594
|
||||
adds r1, r6, 0x6
|
||||
ldrb r2, [r6, 0xE]
|
||||
add r0, sp, 0xC
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
ldr r1, =gUnknown_0203AB74
|
||||
ldrb r0, [r1]
|
||||
mov r3, r8
|
||||
@ -19111,7 +19111,7 @@ sub_81A4684: @ 81A4684
|
||||
adds r1, 0xA
|
||||
ldrb r2, [r5, 0x1A]
|
||||
add r0, sp, 0xC
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
ldr r1, =gUnknown_0203AB74
|
||||
ldrb r0, [r1]
|
||||
adds r3, r7, 0x2
|
||||
@ -19133,13 +19133,13 @@ sub_81A4684: @ 81A4684
|
||||
adds r4, r5, 0
|
||||
adds r4, 0x12
|
||||
adds r0, r4, 0
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _081A4734
|
||||
add r0, sp, 0xC
|
||||
adds r1, r4, 0
|
||||
movs r2, 0x1
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
b _081A473C
|
||||
.pool
|
||||
_081A4734:
|
||||
@ -28660,7 +28660,7 @@ _081A95EE:
|
||||
lsls r0, r7, 2
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
add sp, 0x8
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
|
@ -3193,7 +3193,7 @@ _0817E63A:
|
||||
adds r1, r4, 0
|
||||
ldr r2, [sp]
|
||||
ldr r3, [sp, 0x4]
|
||||
bl sub_80ECB00
|
||||
bl PutBattleUpdateOnTheAir
|
||||
b _0817E670
|
||||
.pool
|
||||
_0817E65C:
|
||||
@ -3205,7 +3205,7 @@ _0817E65C:
|
||||
adds r1, r4, 0
|
||||
ldr r2, [sp]
|
||||
ldr r3, [sp, 0x4]
|
||||
bl sub_80ECB00
|
||||
bl PutBattleUpdateOnTheAir
|
||||
_0817E670:
|
||||
add sp, 0x20
|
||||
pop {r3-r5}
|
||||
|
@ -2407,7 +2407,7 @@ _080B1AD8:
|
||||
.pool
|
||||
_080B1AEC:
|
||||
bl sub_80B1C7C
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
_080B1AF4:
|
||||
pop {r0}
|
||||
bx r0
|
||||
@ -2468,7 +2468,7 @@ _080B1B56:
|
||||
special_trainer_unable_to_battle: @ 80B1B60
|
||||
push {lr}
|
||||
bl sub_80B1D18
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end special_trainer_unable_to_battle
|
||||
|
@ -1795,7 +1795,7 @@ _08162ED8:
|
||||
adds r0, 0xE4
|
||||
ldrb r2, [r0]
|
||||
adds r0, r6, 0
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
b _08162F62
|
||||
.pool
|
||||
_08162F00:
|
||||
@ -1835,7 +1835,7 @@ _08162F3E:
|
||||
adds r1, r0, 0
|
||||
adds r0, r6, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
b _08162F62
|
||||
.pool
|
||||
_08162F5C:
|
||||
@ -5016,7 +5016,7 @@ _08164B04:
|
||||
lsls r0, 2
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
b _08164B54
|
||||
.pool
|
||||
_08164B28:
|
||||
@ -5040,7 +5040,7 @@ _08164B28:
|
||||
lsls r1, 2
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
_08164B54:
|
||||
add sp, 0x8
|
||||
pop {r3-r5}
|
||||
@ -5673,7 +5673,7 @@ _0816508C:
|
||||
bl SetMonData
|
||||
ldr r0, [r7]
|
||||
adds r0, r4
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
strb r0, [r5, 0x1]
|
||||
_081650D4:
|
||||
adds r5, 0x4
|
||||
|
@ -1275,7 +1275,7 @@ _080802AC:
|
||||
strh r0, [r1]
|
||||
adds r5, 0x1
|
||||
_080802D4:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -1295,7 +1295,7 @@ _080802EC:
|
||||
bl sub_807FD90
|
||||
b _08080336
|
||||
_08080302:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
ldr r2, =gUnknown_020322A4
|
||||
ldr r1, [r2]
|
||||
adds r1, 0x7C
|
||||
@ -6091,7 +6091,7 @@ _08082BEE:
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
_08082BF4:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -6104,7 +6104,7 @@ _08082C0C:
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
_08082C12:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -6118,7 +6118,7 @@ _08082C12:
|
||||
cmp r0, 0
|
||||
bne _08082C0C
|
||||
_08082C2E:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -6132,7 +6132,7 @@ _08082C48:
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
_08082C4E:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -6149,7 +6149,7 @@ _08082C6A:
|
||||
ldr r4, =gUnknown_03003110
|
||||
adds r0, r4, 0
|
||||
bl sub_8081F94
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -8568,7 +8568,7 @@ sub_8083F94: @ 8083F94
|
||||
ldrb r0, [r5, 0x12]
|
||||
str r0, [sp]
|
||||
adds r0, r7, 0
|
||||
bl sub_80ECC04
|
||||
bl Put3CheersForPokeblocksOnTheAir
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080840BA
|
||||
@ -8617,7 +8617,7 @@ _08084058:
|
||||
ldrb r0, [r5, 0x12]
|
||||
str r0, [sp]
|
||||
adds r0, r7, 0
|
||||
bl sub_80ECC04
|
||||
bl Put3CheersForPokeblocksOnTheAir
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080840C4
|
||||
|
@ -1059,7 +1059,7 @@ _080B2C5C:
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
_080B2C7E:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
@ -1361,7 +1361,7 @@ _080B2F0C:
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
mov r9, r0
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
movs r4, 0
|
||||
@ -1984,7 +1984,7 @@ _080B3474:
|
||||
adds r5, 0x1C
|
||||
adds r4, 0x1
|
||||
_080B349A:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
@ -2080,7 +2080,7 @@ _080B3574:
|
||||
beq _080B35F8
|
||||
b _080B35FE
|
||||
_080B357A:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r3, r0, 24
|
||||
movs r4, 0
|
||||
@ -2297,7 +2297,7 @@ _080B3750:
|
||||
b _080B37CC
|
||||
_080B375A:
|
||||
ldr r0, =gUnknown_08278091
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
movs r0, 0x1
|
||||
strh r0, [r5, 0x8]
|
||||
b _080B37CC
|
||||
|
@ -1525,7 +1525,7 @@ sub_80D8490: @ 80D8490
|
||||
movs r6, 0
|
||||
ldr r0, =gUnknown_02039F25
|
||||
mov r8, r0
|
||||
ldr r2, =gUnknown_02039E1E
|
||||
ldr r2, =gUnknown_02039E00 + 30
|
||||
mov r10, r2
|
||||
ldr r7, =gUnknown_02039F34
|
||||
_080D84B8:
|
||||
@ -2624,7 +2624,7 @@ _080D8EF2:
|
||||
bl sub_80DB89C
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
mov r2, r9
|
||||
@ -3562,7 +3562,7 @@ _080D96D4:
|
||||
bl sub_80DB89C
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r4, =gStringVar4
|
||||
@ -3671,7 +3671,7 @@ _080D97DC:
|
||||
bl sub_80DB89C
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r4, =gStringVar4
|
||||
@ -3809,7 +3809,7 @@ _080D9904:
|
||||
bl sub_80DB89C
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r4, =gStringVar4
|
||||
@ -4010,7 +4010,7 @@ _080D9AD2:
|
||||
bl sub_80DB89C
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r4, =gUnknown_02039F34
|
||||
@ -4381,7 +4381,7 @@ _080D9DD4:
|
||||
lsls r1, 20
|
||||
lsrs r1, 29
|
||||
lsls r1, 6
|
||||
ldr r4, =gUnknown_02039E02
|
||||
ldr r4, =gUnknown_02039E00 + 2
|
||||
adds r1, r4
|
||||
bl StringCopy
|
||||
ldr r0, =gStringVar1
|
||||
@ -4476,7 +4476,7 @@ _080D9EDC:
|
||||
bl sub_80DC9B4
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r0, =gStringVar2
|
||||
@ -4626,7 +4626,7 @@ _080DA038:
|
||||
bl sub_80DB89C
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r6, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r4, =gStringVar4
|
||||
@ -5096,7 +5096,7 @@ sub_80DA3CC: @ 80DA3CC
|
||||
ldr r0, =gStringVar1
|
||||
ldrb r1, [r5]
|
||||
lsls r1, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r5, =gStringVar4
|
||||
@ -5360,7 +5360,7 @@ _080DA600:
|
||||
lsls r0, 2
|
||||
adds r0, r2
|
||||
ldrh r0, [r0, 0x8]
|
||||
bl sub_80ED03C
|
||||
bl BravoTrainerPokemonProfile_BeforeInterview1
|
||||
b _080DA668
|
||||
.pool
|
||||
_080DA65C:
|
||||
@ -5667,7 +5667,7 @@ _080DA8F2:
|
||||
ldr r5, =gUnknown_02039F25
|
||||
ldrb r0, [r5]
|
||||
lsls r0, 6
|
||||
ldr r4, =gUnknown_02039E0D
|
||||
ldr r4, =gUnknown_02039E00 + 13
|
||||
adds r0, r4
|
||||
mov r1, sp
|
||||
movs r2, 0x8
|
||||
@ -6451,7 +6451,7 @@ sub_80DAF1C: @ 80DAF1C
|
||||
add r0, sp, 0x4
|
||||
bl StringCopy
|
||||
lsls r1, r5, 6
|
||||
ldr r0, =gUnknown_02039E0D
|
||||
ldr r0, =gUnknown_02039E00 + 13
|
||||
adds r1, r0
|
||||
add r0, sp, 0x4
|
||||
bl StringAppend
|
||||
@ -6508,7 +6508,7 @@ sub_80DAFA0: @ 80DAFA0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
lsls r0, r4, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r0, r2
|
||||
bl sub_80DAED4
|
||||
ldr r0, =gUnknown_02039F26
|
||||
@ -11173,7 +11173,7 @@ sub_80DD45C: @ 80DD45C
|
||||
lsrs r6, r1, 24
|
||||
ldr r0, =gStringVar1
|
||||
lsls r1, r4, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldr r0, =gStringVar2
|
||||
@ -15385,21 +15385,21 @@ _080DF6AE:
|
||||
beq _080DF6AE
|
||||
_080DF6C4:
|
||||
mov r0, r9
|
||||
bl sub_80ECDA4
|
||||
bl ContestLiveUpdates_BeforeInterview_1
|
||||
mov r0, r10
|
||||
bl sub_80ECDF4
|
||||
bl ContestLiveUpdates_BeforeInterview_2
|
||||
ldr r5, [sp, 0x4]
|
||||
lsrs r0, r5, 24
|
||||
bl sub_80ECE34
|
||||
bl ContestLiveUpdates_BeforeInterview_3
|
||||
ldr r0, =gUnknown_02039F34
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, 0x1C]
|
||||
add r0, r8
|
||||
ldrh r0, [r0, 0xA]
|
||||
bl sub_80ECE74
|
||||
bl ContestLiveUpdates_BeforeInterview_4
|
||||
adds r0, r4, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_80ECEB4
|
||||
bl ContestLiveUpdates_BeforeInterview_5
|
||||
_080DF6EE:
|
||||
add sp, 0xC
|
||||
pop {r3-r5}
|
||||
|
@ -144,7 +144,7 @@ sub_81563B0: @ 81563B0
|
||||
beq _081564A0
|
||||
adds r7, r5, 0
|
||||
ldr r6, =gAIScriptPtr
|
||||
ldr r0, =gUnknown_02039E1E
|
||||
ldr r0, =gUnknown_02039E00 + 30
|
||||
mov r8, r0
|
||||
_081563CC:
|
||||
ldr r0, [r7]
|
||||
@ -5030,7 +5030,7 @@ sub_8158948: @ 8158948
|
||||
push {r4-r6,lr}
|
||||
movs r5, 0
|
||||
movs r4, 0
|
||||
ldr r6, =gUnknown_02039E1E
|
||||
ldr r6, =gUnknown_02039E00 + 30
|
||||
_08158950:
|
||||
lsls r1, r4, 1
|
||||
ldr r0, =gUnknown_02039F34
|
||||
|
@ -1239,7 +1239,7 @@ _080F6334:
|
||||
ldr r1, =gUnknown_02039F20
|
||||
ldrb r0, [r1]
|
||||
ldr r7, =gStringVar1
|
||||
ldr r2, =gUnknown_02039E0D
|
||||
ldr r2, =gUnknown_02039E00 + 13
|
||||
mov r8, r2
|
||||
cmp r0, 0
|
||||
beq _080F636E
|
||||
@ -1750,7 +1750,7 @@ task_repel: @ 80F67C4
|
||||
ldrb r0, [r0]
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
bl sub_80ED090
|
||||
bl BravoTrainerPokemonProfile_BeforeInterview2
|
||||
_080F67E6:
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
@ -4785,7 +4785,7 @@ _080F8074:
|
||||
ldrb r0, [r6]
|
||||
muls r0, r5
|
||||
adds r0, r4
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -4834,7 +4834,7 @@ _080F80E2:
|
||||
ldrb r0, [r7]
|
||||
muls r0, r6
|
||||
adds r0, r5
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -4883,7 +4883,7 @@ _080F814E:
|
||||
ldrb r0, [r7]
|
||||
muls r0, r6
|
||||
adds r0, r5
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -4926,7 +4926,7 @@ _080F8190:
|
||||
ldrb r0, [r7]
|
||||
muls r0, r6
|
||||
adds r0, r5
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -4969,7 +4969,7 @@ _080F81F8:
|
||||
ldrb r0, [r7]
|
||||
muls r0, r6
|
||||
adds r0, r5
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -4994,7 +4994,7 @@ sub_80F8264: @ 80F8264
|
||||
ldr r0, =gSpecialVar_0x8006
|
||||
ldrh r1, [r0]
|
||||
lsls r1, 6
|
||||
ldr r0, =gUnknown_02039E0D
|
||||
ldr r0, =gUnknown_02039E00 + 13
|
||||
adds r1, r0
|
||||
adds r0, r4, 0
|
||||
bl StringCopy
|
||||
@ -5013,7 +5013,7 @@ sub_80F8290: @ 80F8290
|
||||
ldr r1, =gSpecialVar_0x8006
|
||||
ldrh r1, [r1]
|
||||
lsls r1, 6
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
pop {r0}
|
||||
@ -5104,7 +5104,7 @@ sub_80F834C: @ 80F834C
|
||||
ldr r2, =gUnknown_02039F20
|
||||
ldrb r0, [r2]
|
||||
ldr r4, =gStringVar3
|
||||
ldr r3, =gUnknown_02039E0D
|
||||
ldr r3, =gUnknown_02039E00 + 13
|
||||
cmp r0, 0
|
||||
beq _080F836E
|
||||
_080F835C:
|
||||
@ -5137,7 +5137,7 @@ sub_80F8390: @ 80F8390
|
||||
ldr r2, =gUnknown_02039F20
|
||||
ldrb r0, [r2]
|
||||
ldr r4, =gStringVar1
|
||||
ldr r3, =gUnknown_02039E02
|
||||
ldr r3, =gUnknown_02039E00 + 2
|
||||
cmp r0, 0
|
||||
beq _080F83B2
|
||||
_080F83A0:
|
||||
@ -5578,7 +5578,7 @@ sub_80F8714: @ 80F8714
|
||||
b _080F877E
|
||||
.pool
|
||||
_080F8748:
|
||||
ldr r5, =gUnknown_02039E02
|
||||
ldr r5, =gUnknown_02039E00 + 2
|
||||
movs r4, 0x3
|
||||
_080F874C:
|
||||
adds r0, r5, 0
|
||||
|
@ -141,7 +141,7 @@ sub_80FC5DC: @ 80FC5DC
|
||||
bl GetMultiplayerId
|
||||
ldr r1, =gUnknown_02039F25
|
||||
strb r0, [r1]
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
ldr r4, =gUnknown_02039F30
|
||||
strb r0, [r4]
|
||||
ldr r1, =gUnknown_02039F2A
|
||||
|
@ -492,7 +492,7 @@ sub_812287C: @ 812287C
|
||||
bl Free
|
||||
b _08122980
|
||||
_081228B0:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r9, r0
|
||||
|
@ -565,7 +565,7 @@ _0811A72C:
|
||||
ldr r4, =gStringVar3
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x2
|
||||
bl sub_811F88C
|
||||
bl InitializeEasyChatWordArray
|
||||
b _0811A7C2
|
||||
.pool
|
||||
_0811A73C:
|
||||
@ -3704,7 +3704,7 @@ sub_811BDF0: @ 811BDF0
|
||||
ldrb r2, [r0]
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
bl sub_81DB5E8
|
||||
bl TVShowConvertInternationalString
|
||||
movs r0, 0
|
||||
mov r1, sp
|
||||
bl sub_81AFC0C
|
||||
@ -11109,8 +11109,8 @@ _0811F886:
|
||||
bx r1
|
||||
thumb_func_end sub_811F860
|
||||
|
||||
thumb_func_start sub_811F88C
|
||||
sub_811F88C: @ 811F88C
|
||||
thumb_func_start InitializeEasyChatWordArray
|
||||
InitializeEasyChatWordArray: @ 811F88C
|
||||
push {lr}
|
||||
adds r2, r0, 0
|
||||
lsls r1, 16
|
||||
@ -11133,7 +11133,7 @@ _0811F8AE:
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_811F88C
|
||||
thumb_func_end InitializeEasyChatWordArray
|
||||
|
||||
thumb_func_start sub_811F8BC
|
||||
sub_811F8BC: @ 811F8BC
|
||||
|
@ -108,8 +108,8 @@ _080981E4:
|
||||
.pool
|
||||
thumb_func_end task_del_textbox
|
||||
|
||||
thumb_func_start box_related_two__2
|
||||
box_related_two__2: @ 80981EC
|
||||
thumb_func_start ShowFieldMessage
|
||||
ShowFieldMessage: @ 80981EC
|
||||
push {r4,lr}
|
||||
adds r1, r0, 0
|
||||
ldr r4, =gUnknown_020375BC
|
||||
@ -130,7 +130,7 @@ _0809820E:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end box_related_two__2
|
||||
thumb_func_end ShowFieldMessage
|
||||
|
||||
thumb_func_start sub_8098214
|
||||
sub_8098214: @ 8098214
|
||||
|
@ -217,7 +217,7 @@ _080F96FC:
|
||||
ldrb r0, [r4, 0x2]
|
||||
bl sub_80F95C0
|
||||
ldr r0, =gText_PkmnFainted3
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
ldrh r0, [r4]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4]
|
||||
|
@ -389,8 +389,8 @@ _081DB5E4:
|
||||
bx r0
|
||||
thumb_func_end sub_81DB5AC
|
||||
|
||||
thumb_func_start sub_81DB5E8
|
||||
sub_81DB5E8: @ 81DB5E8
|
||||
thumb_func_start TVShowConvertInternationalString
|
||||
TVShowConvertInternationalString: @ 81DB5E8
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r2, 0
|
||||
@ -403,7 +403,7 @@ sub_81DB5E8: @ 81DB5E8
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_81DB5E8
|
||||
thumb_func_end TVShowConvertInternationalString
|
||||
|
||||
thumb_func_start sub_81DB604
|
||||
sub_81DB604: @ 81DB604
|
||||
|
70
asm/link.s
70
asm/link.s
@ -1371,8 +1371,8 @@ _08009FC4:
|
||||
.pool
|
||||
thumb_func_end sub_8009FAC
|
||||
|
||||
thumb_func_start sub_8009FCC
|
||||
sub_8009FCC: @ 8009FCC
|
||||
thumb_func_start GetLinkPlayerCount
|
||||
GetLinkPlayerCount: @ 8009FCC
|
||||
push {lr}
|
||||
ldr r0, =gLinkVSyncDisabled
|
||||
ldrb r0, [r0]
|
||||
@ -1392,14 +1392,14 @@ _08009FEC:
|
||||
_08009FF4:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8009FCC
|
||||
thumb_func_end GetLinkPlayerCount
|
||||
|
||||
thumb_func_start sub_8009FF8
|
||||
sub_8009FF8: @ 8009FF8
|
||||
push {r4-r7,lr}
|
||||
adds r6, r0, 0
|
||||
adds r5, r1, 0
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
movs r2, 0
|
||||
@ -1442,7 +1442,7 @@ sub_800A03C: @ 800A03C
|
||||
thumb_func_start sub_800A040
|
||||
sub_800A040: @ 800A040
|
||||
push {lr}
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -1546,7 +1546,7 @@ _0800A0EA:
|
||||
b _0800A22E
|
||||
.pool
|
||||
_0800A0FC:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0800A10E
|
||||
@ -1572,12 +1572,12 @@ _0800A130:
|
||||
adds r5, 0x1C
|
||||
adds r6, 0x1
|
||||
_0800A134:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r6, r0
|
||||
blt _0800A120
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r7, r0
|
||||
@ -1714,12 +1714,12 @@ _0800A266:
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
_0800A26C:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
bcc _0800A24C
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r6, r0
|
||||
@ -1742,8 +1742,8 @@ _0800A298:
|
||||
.pool
|
||||
thumb_func_end sub_800A23C
|
||||
|
||||
thumb_func_start sub_800A2A4
|
||||
sub_800A2A4: @ 800A2A4
|
||||
thumb_func_start GetLinkPlayerTrainerId
|
||||
GetLinkPlayerTrainerId: @ 800A2A4
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r2, =gLinkPlayers
|
||||
@ -1755,7 +1755,7 @@ sub_800A2A4: @ 800A2A4
|
||||
ldr r0, [r1]
|
||||
bx lr
|
||||
.pool
|
||||
thumb_func_end sub_800A2A4
|
||||
thumb_func_end GetLinkPlayerTrainerId
|
||||
|
||||
thumb_func_start sub_800A2BC
|
||||
sub_800A2BC: @ 800A2BC
|
||||
@ -2697,7 +2697,7 @@ _0800A9E2:
|
||||
lsrs r4, r0, 24
|
||||
adds r5, 0x1
|
||||
_0800A9EE:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -3044,7 +3044,7 @@ _0800AC96:
|
||||
thumb_func_start sub_800ACAC
|
||||
sub_800ACAC: @ 800ACAC
|
||||
push {r4,lr}
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
movs r3, 0
|
||||
@ -3142,7 +3142,7 @@ _0800AD72:
|
||||
thumb_func_start sub_800AD88
|
||||
sub_800AD88: @ 800AD88
|
||||
push {r4,r5,lr}
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r3, r0, 24
|
||||
movs r1, 0
|
||||
@ -3239,7 +3239,7 @@ _0800AE46:
|
||||
thumb_func_start sub_800AE5C
|
||||
sub_800AE5C: @ 800AE5C
|
||||
push {r4,lr}
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
movs r1, 0
|
||||
@ -9671,7 +9671,7 @@ _0800E1C8:
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
_0800E1E6:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
subs r0, 0x1
|
||||
@ -9965,7 +9965,7 @@ _0800E428:
|
||||
ble _0800E3FC
|
||||
mov r4, r9
|
||||
_0800E434:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
@ -10019,7 +10019,7 @@ _0800E4A6:
|
||||
adds r5, 0x1C
|
||||
adds r4, 0x1
|
||||
_0800E4AC:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
@ -13627,7 +13627,7 @@ sub_80102B8: @ 80102B8
|
||||
bl sub_800FD14
|
||||
strh r4, [r5]
|
||||
_080102E6:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
movs r1, 0
|
||||
@ -13734,7 +13734,7 @@ sub_8010390: @ 8010390
|
||||
b _0801041C
|
||||
.pool
|
||||
_080103CC:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
movs r1, 0x1
|
||||
@ -15290,7 +15290,7 @@ _08011048:
|
||||
strb r0, [r1, 0x3]
|
||||
adds r4, 0x1
|
||||
_08011054:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
@ -20950,12 +20950,12 @@ _08014138:
|
||||
adds r5, 0x1C
|
||||
adds r4, 0x1
|
||||
_08014152:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
blt _08014138
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x2
|
||||
@ -21159,7 +21159,7 @@ sub_8014304: @ 8014304
|
||||
strh r1, [r0]
|
||||
ldr r0, =0x00004087
|
||||
bl VarSet
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
ldr r1, =gUnknown_03005DB8
|
||||
strb r0, [r1]
|
||||
bl GetMultiplayerId
|
||||
@ -39697,7 +39697,7 @@ sub_801DDD0: @ 801DDD0
|
||||
strb r5, [r4, 0x16]
|
||||
movs r0, 0xFF
|
||||
strb r0, [r4, 0x1A]
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
strb r0, [r4, 0xD]
|
||||
bl GetMultiplayerId
|
||||
strb r0, [r4, 0x13]
|
||||
@ -42285,7 +42285,7 @@ _0801F30A:
|
||||
movs r0, 0x1
|
||||
strh r0, [r4]
|
||||
_0801F30E:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
adds r2, r0, 0
|
||||
@ -42446,7 +42446,7 @@ _0801F448:
|
||||
ldrsh r0, [r4, r3]
|
||||
cmp r0, 0
|
||||
beq _0801F47C
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x2
|
||||
@ -45504,7 +45504,7 @@ _08020C8E:
|
||||
b _08020CF8
|
||||
.pool
|
||||
_08020CAC:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r8, r0
|
||||
@ -53271,7 +53271,7 @@ _08024B2C:
|
||||
_08024B6A:
|
||||
ldr r0, [sp, 0x10]
|
||||
strb r1, [r0]
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
mov r1, r8
|
||||
strb r0, [r1]
|
||||
bl GetMultiplayerId
|
||||
@ -57700,7 +57700,7 @@ _08026EF6:
|
||||
adds r4, 0xC
|
||||
adds r5, 0x1
|
||||
_08026EFE:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -59511,7 +59511,7 @@ _08027C76:
|
||||
thumb_func_start sub_8027D20
|
||||
sub_8027D20: @ 8027D20
|
||||
push {lr}
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
ldr r1, =gUnknown_02022C98
|
||||
ldr r1, [r1]
|
||||
adds r1, 0x24
|
||||
@ -64891,7 +64891,7 @@ sub_802AA48: @ 802AA48
|
||||
sub_802AA60: @ 802AA60
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
movs r2, 0
|
||||
strb r0, [r4, 0x5]
|
||||
adds r1, r4, 0
|
||||
@ -68775,7 +68775,7 @@ _0802C8A4:
|
||||
thumb_func_start sub_802C8AC
|
||||
sub_802C8AC: @ 802C8AC
|
||||
push {lr}
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
pop {r1}
|
||||
|
@ -1392,7 +1392,7 @@ _08120BB0:
|
||||
movs r0, 0xFF
|
||||
strb r0, [r7, 0x7]
|
||||
mov r0, sp
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _08120BF8
|
||||
mov r0, sp
|
||||
@ -1458,7 +1458,7 @@ _08120C48:
|
||||
muls r0, r5
|
||||
adds r0, 0x5
|
||||
adds r0, r6, r0
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _08120C5E
|
||||
mov r0, r8
|
||||
@ -1480,7 +1480,7 @@ _08120C6A:
|
||||
movs r5, 0x3
|
||||
_08120C74:
|
||||
adds r0, r6, 0
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _08120C84
|
||||
mov r1, r8
|
||||
@ -1569,7 +1569,7 @@ _08120CF2:
|
||||
mov r1, r8
|
||||
strb r0, [r1, 0x7]
|
||||
mov r0, sp
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _08120D1A
|
||||
movs r0, 0x1
|
||||
@ -2205,7 +2205,7 @@ sub_8121178: @ 8121178
|
||||
bl ConvertInternationalString
|
||||
mov r0, r8
|
||||
bl sub_8120EC0
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r6}
|
||||
|
@ -6514,7 +6514,7 @@ sub_81C3220: @ 81C3220
|
||||
b _081C3282
|
||||
.pool
|
||||
_081C326C:
|
||||
bl sub_80F0020
|
||||
bl GetPlayerIDAsU32
|
||||
adds r4, r0, 0
|
||||
ldr r0, =0x0000ffff
|
||||
ands r4, r0
|
||||
|
@ -1162,7 +1162,7 @@ _080E7714:
|
||||
lsrs r0, 24
|
||||
mov r8, r0
|
||||
_080E771C:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r8, r0
|
||||
@ -1179,7 +1179,7 @@ _080E771C:
|
||||
adds r1, 0x1
|
||||
strh r1, [r0, 0x8]
|
||||
_080E773E:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r4, [sp, 0x8]
|
||||
@ -1312,7 +1312,7 @@ sub_80E7820: @ 80E7820
|
||||
sub_80E7830: @ 80E7830
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x3
|
||||
@ -1341,7 +1341,7 @@ _080E7856:
|
||||
.pool
|
||||
_080E7868:
|
||||
movs r0, 0
|
||||
bl sub_800A2A4
|
||||
bl GetLinkPlayerTrainerId
|
||||
adds r2, r0, 0
|
||||
movs r0, 0x1
|
||||
ands r2, r0
|
||||
@ -1362,7 +1362,7 @@ _080E7880:
|
||||
.pool
|
||||
_080E7894:
|
||||
movs r0, 0
|
||||
bl sub_800A2A4
|
||||
bl GetLinkPlayerTrainerId
|
||||
movs r1, 0x9
|
||||
bl __umodsi3
|
||||
adds r2, r0, 0
|
||||
@ -1523,7 +1523,7 @@ _080E79CE:
|
||||
adds r4, r1, 0
|
||||
adds r4, 0x20
|
||||
adds r0, r4, 0
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _080E79F2
|
||||
adds r0, r4, 0
|
||||
@ -1738,7 +1738,7 @@ sub_80E7B60: @ 80E7B60
|
||||
ldr r0, =gLinkPlayers
|
||||
ldrh r0, [r0, 0x4]
|
||||
bl SeedRng2
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
movs r0, 0
|
||||
@ -1878,7 +1878,7 @@ _080E7C9A:
|
||||
bne _080E7CEE
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x24
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _080E7CBA
|
||||
adds r0, r5, 0
|
||||
@ -1901,7 +1901,7 @@ _080E7CC6:
|
||||
adds r4, r0, 0
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x2C
|
||||
bl sub_8009228
|
||||
bl IsStringJapanese
|
||||
cmp r0, 0
|
||||
beq _080E7CE2
|
||||
ldrb r0, [r4]
|
||||
@ -1931,7 +1931,7 @@ _080E7CFA:
|
||||
lsrs r0, 16
|
||||
mov r8, r0
|
||||
_080E7D04:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r8, r0
|
||||
@ -3557,7 +3557,7 @@ sub_80E89AC: @ 80E89AC
|
||||
adds r6, r0, 0
|
||||
mov r8, r1
|
||||
mov r9, r2
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
adds r4, r0, 0
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
|
@ -125,7 +125,7 @@ _08184EAC:
|
||||
bl GetMultiplayerId
|
||||
ldr r1, =gUnknown_0203C7B4
|
||||
strb r0, [r1]
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r10, r0
|
||||
@ -505,7 +505,7 @@ _081851D0:
|
||||
adds r4, 0x1C
|
||||
adds r5, 0x1
|
||||
_081851DA:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
|
@ -1963,7 +1963,7 @@ _08033726:
|
||||
lsls r0, r1, 24
|
||||
lsrs r4, r0, 24
|
||||
_0803372C:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r4, r0
|
||||
@ -3259,8 +3259,8 @@ _0803413E:
|
||||
.pool
|
||||
thumb_func_end sub_8034110
|
||||
|
||||
thumb_func_start dp01_build_cmdbuf_x21_a_bb
|
||||
dp01_build_cmdbuf_x21_a_bb: @ 8034158
|
||||
thumb_func_start EmitCmd_x21
|
||||
EmitCmd_x21: @ 8034158
|
||||
push {r4,lr}
|
||||
adds r4, r1, 0
|
||||
lsls r0, 24
|
||||
@ -3280,7 +3280,7 @@ dp01_build_cmdbuf_x21_a_bb: @ 8034158
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end dp01_build_cmdbuf_x21_a_bb
|
||||
thumb_func_end EmitCmd_x21
|
||||
|
||||
thumb_func_start dp01_build_cmdbuf_x22_a_three_bytes
|
||||
dp01_build_cmdbuf_x22_a_three_bytes: @ 8034184
|
||||
|
48
asm/rom6.s
48
asm/rom6.s
@ -4121,7 +4121,7 @@ _081377BC:
|
||||
add r2, sp, 0x18
|
||||
bl SetMonData
|
||||
adds r0, r4, 0
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
strb r0, [r5, 0x1]
|
||||
movs r7, 0x1
|
||||
_0813780A:
|
||||
@ -4629,7 +4629,7 @@ sub_8137C10: @ 8137C10
|
||||
ldr r0, =gSpecialVar_0x8004
|
||||
ldrh r0, [r0]
|
||||
bl sub_8137A98
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
@ -5399,13 +5399,13 @@ sub_8138240: @ 8138240
|
||||
bl GetMultiplayerId
|
||||
lsls r0, 24
|
||||
lsrs r7, r0, 24
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
movs r4, 0
|
||||
cmp r4, r5
|
||||
bcs _0813828A
|
||||
ldr r0, =gUnknown_0858D144
|
||||
ldr r0, =gTVStringVarPtrs
|
||||
mov r8, r0
|
||||
_08138262:
|
||||
cmp r7, r4
|
||||
@ -6378,7 +6378,7 @@ sub_8138AA4: @ 8138AA4
|
||||
sub_8138AC0: @ 8138AC0
|
||||
push {lr}
|
||||
ldr r0, =gStringVar4
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
@ -6537,7 +6537,7 @@ _08138BF6:
|
||||
thumb_func_start sub_8138C04
|
||||
sub_8138C04: @ 8138C04
|
||||
push {r4,lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7060,7 +7060,7 @@ sub_8138FEC: @ 8138FEC
|
||||
thumb_func_start sub_8139004
|
||||
sub_8139004: @ 8139004
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7084,7 +7084,7 @@ _0813902A:
|
||||
thumb_func_start sub_8139030
|
||||
sub_8139030: @ 8139030
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7108,7 +7108,7 @@ _08139056:
|
||||
thumb_func_start sub_813905C
|
||||
sub_813905C: @ 813905C
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7132,7 +7132,7 @@ _08139082:
|
||||
thumb_func_start sub_8139088
|
||||
sub_8139088: @ 8139088
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7156,7 +7156,7 @@ _081390AE:
|
||||
thumb_func_start sub_81390B4
|
||||
sub_81390B4: @ 81390B4
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7295,7 +7295,7 @@ RemoveScriptFieldObject: @ 81391AC
|
||||
thumb_func_start sub_81391D0
|
||||
sub_81391D0: @ 81391D0
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7479,7 +7479,7 @@ _08139342:
|
||||
thumb_func_start sub_8139348
|
||||
sub_8139348: @ 8139348
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7507,7 +7507,7 @@ sub_8139370: @ 8139370
|
||||
movs r1, 0x1
|
||||
mov r0, sp
|
||||
strb r1, [r0]
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7519,7 +7519,7 @@ sub_8139370: @ 8139370
|
||||
mov r2, sp
|
||||
bl SetMonData
|
||||
adds r0, r4, 0
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
@ -7538,7 +7538,7 @@ _081393B6:
|
||||
thumb_func_start sub_81393C8
|
||||
sub_81393C8: @ 81393C8
|
||||
push {lr}
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
@ -7882,8 +7882,8 @@ _08139684:
|
||||
bx r0
|
||||
thumb_func_end sub_8139668
|
||||
|
||||
thumb_func_start sub_8139688
|
||||
sub_8139688: @ 8139688
|
||||
thumb_func_start GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
GetIdxOfFirstPartyMemberThatIsNotAnEgg: @ 8139688
|
||||
push {r4-r6,lr}
|
||||
bl CalculatePlayerPartyCount
|
||||
lsls r0, 24
|
||||
@ -7926,7 +7926,7 @@ _081396D8:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8139688
|
||||
thumb_func_end GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
|
||||
thumb_func_start sub_81396E0
|
||||
sub_81396E0: @ 81396E0
|
||||
@ -8050,7 +8050,7 @@ sub_81397C4: @ 81397C4
|
||||
cmp r1, r0
|
||||
bls _081397E0
|
||||
movs r0, 0
|
||||
bl sub_80EF340
|
||||
bl TV_PrintIntToStringVar
|
||||
b _08139862
|
||||
.pool
|
||||
_081397E0:
|
||||
@ -9094,7 +9094,7 @@ _0813A062:
|
||||
lsls r0, 2
|
||||
adds r0, r7
|
||||
ldr r0, [r0]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
@ -9996,7 +9996,7 @@ _0813A7C6:
|
||||
lsrs r0, 22
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
@ -10036,7 +10036,7 @@ sub_813A820: @ 813A820
|
||||
lsls r0, r4, 2
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
ldr r0, =0x00004031
|
||||
adds r1, r4, 0
|
||||
bl VarSet
|
||||
@ -10056,7 +10056,7 @@ sub_813A854: @ 813A854
|
||||
lsrs r0, 14
|
||||
adds r0, r4
|
||||
ldr r0, [r0]
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
@ -3267,7 +3267,7 @@ s67_execute_box: @ 809ABD4
|
||||
bne _0809ABE2
|
||||
ldr r0, [r4, 0x64]
|
||||
_0809ABE2:
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
movs r0, 0
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
@ -3793,7 +3793,7 @@ sBD_virtual_message: @ 809AFA0
|
||||
ldr r1, =gUnknown_020375C4
|
||||
ldr r1, [r1]
|
||||
subs r0, r1
|
||||
bl box_related_two__2
|
||||
bl ShowFieldMessage
|
||||
movs r0, 0
|
||||
pop {r1}
|
||||
bx r1
|
||||
@ -3841,7 +3841,7 @@ s7E_load_first_pokenames: @ 809AFFC
|
||||
lsls r2, 2
|
||||
adds r2, r0
|
||||
ldr r4, [r2]
|
||||
bl sub_8139688
|
||||
bl GetIdxOfFirstPartyMemberThatIsNotAnEgg
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r1, 0x64
|
||||
|
@ -222,7 +222,7 @@ sub_80F8970: @ 80F8970
|
||||
mov r12, r0
|
||||
ldr r1, =gSpecialVar_0x8006
|
||||
mov r9, r1
|
||||
ldr r2, =gUnknown_02039E02
|
||||
ldr r2, =gUnknown_02039E00 + 2
|
||||
mov r10, r2
|
||||
mov r2, r12
|
||||
mov r1, sp
|
||||
@ -625,7 +625,7 @@ sub_80F8C7C: @ 80F8C7C
|
||||
ldrb r0, [r6]
|
||||
muls r0, r5
|
||||
adds r0, r4
|
||||
bl sub_80EE5A4
|
||||
bl GetRibbonCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
|
@ -4494,7 +4494,7 @@ sub_80EAF80: @ 80EAF80
|
||||
bne _080EAF9A
|
||||
b _080EB16A
|
||||
_080EAF9A:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x2
|
||||
|
@ -6603,7 +6603,7 @@ _0807A97C:
|
||||
adds r4, 0x1C
|
||||
adds r5, 0x1
|
||||
_0807A980:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
@ -6632,7 +6632,7 @@ _0807A9B0:
|
||||
adds r4, 0x1C
|
||||
adds r5, 0x1
|
||||
_0807A9B4:
|
||||
bl sub_8009FCC
|
||||
bl GetLinkPlayerCount
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r5, r0
|
||||
|
4
common_syms/tv.txt
Normal file
4
common_syms/tv.txt
Normal file
@ -0,0 +1,4 @@
|
||||
sCurTVShowSlot
|
||||
sTV_SecretBaseVisitMovesTemp
|
||||
sTV_DecorationsBuffer
|
||||
sTV_SecretBaseVisitMonsTemp
|
@ -822,7 +822,15 @@ gUnknown_0827EE09:: @ 27EE09
|
||||
.incbin "baserom.gba", 0x27ee09, 0x2
|
||||
|
||||
gUnknown_0827EE0B:: @ 827EE0B
|
||||
.incbin "baserom.gba", 0x27ee0b, 0x118fa
|
||||
.incbin "baserom.gba", 0x27ee0b, 0x46a
|
||||
|
||||
.include "data/text/tv.inc"
|
||||
|
||||
.incbin "baserom.gba", 0x0028c7e9, 0x90f
|
||||
|
||||
.include "data/text/pokemon_news.inc"
|
||||
|
||||
.incbin "baserom.gba", 0x28e066, 0x269f
|
||||
|
||||
gUnknown_08290705:: @ 8290705
|
||||
.incbin "baserom.gba", 0x290705, 0xeb
|
||||
|
165
data/text/pokemon_news.inc
Normal file
165
data/text/pokemon_news.inc
Normal file
@ -0,0 +1,165 @@
|
||||
|
||||
gPokeNewsTextSlateport_Upcoming:: @ 0828D0F8
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "SLATEPORT’s most popular kind of guy,\n"
|
||||
.string "the ENERGY GURU, is in the news again!\p"
|
||||
.string "He promises to, “Stupendously go for\n"
|
||||
.string "it in just this many days: {STR_VAR_1}!”\p"
|
||||
.string "While he refused to elaborate on what\n"
|
||||
.string "he will stupendously go for, the\l"
|
||||
.string "ENERGY GURU advised, “Save up your\l"
|
||||
.string "money. That’ll be good…”\p"
|
||||
.string "It sounds like a trip to SLATEPORT\n"
|
||||
.string "would be well worth your while that day.\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextSlateport_Ongoing:: @ 0828D2A1
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "This is the news you’ve all been\n"
|
||||
.string "waiting for!\p"
|
||||
.string "SLATEPORT’S ENERGY GURU is going\n"
|
||||
.string "for it stupendously in the MARKET!\p"
|
||||
.string "He promises unbeatable bargain\n"
|
||||
.string "prices on CALCIUM and PROTEIN!\p"
|
||||
.string "A trip to SLATEPORT CITY sounds\n"
|
||||
.string "worthwhile. Why not visit and shop\l"
|
||||
.string "to your heart’s content?\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextSlateport_Ending:: @ 0828D3F5
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "This is the news you’ve all been\n"
|
||||
.string "waiting for!\p"
|
||||
.string "SLATEPORT’S ENERGY GURU is going\n"
|
||||
.string "for it stupendously in the MARKET!\p"
|
||||
.string "He promises unbeatable bargain\n"
|
||||
.string "prices on CALCIUM and PROTEIN!\p"
|
||||
.string "According to the ENERGY GURU, he\n"
|
||||
.string "still has ample merchandise left.\p"
|
||||
.string "Why not visit SLATEPORT CITY for\n"
|
||||
.string "a most enjoyable shopping trip?\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextGameCorner_Upcoming:: @ 0828D571
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "It’s approaching!\n"
|
||||
.string "It’s finally coming!\p"
|
||||
.string "The GAME CORNER’s service day will be\n"
|
||||
.string "here in just this many days: {STR_VAR_1}!\p"
|
||||
.string "Even those who are usually unlucky\n"
|
||||
.string "may be lucky on this particular day!\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextGameCorner_Ongoing:: @ 0828D66F
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "It’s here!\n"
|
||||
.string "It’s finally arrived!\p"
|
||||
.string "GAME CORNER’s service day has finally\n"
|
||||
.string "arrived!\p"
|
||||
.string "Could you be lucky at the SLOTS \n"
|
||||
.string "and ROULETTE?\p"
|
||||
.string "The location is MAUVILLE CITY.\n"
|
||||
.string "This is the place!\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextGameCorner_Ending:: @ 0828D768
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "It’s here!\n"
|
||||
.string "It’s finally arrived!\p"
|
||||
.string "GAME CORNER’s service day has finally\n"
|
||||
.string "arrived!\p"
|
||||
.string "Could you be lucky at the SLOTS\n"
|
||||
.string "and ROULETTE?\p"
|
||||
.string "Time is limited and has almost run out.\n"
|
||||
.string "The location is MAUVILLE CITY.\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextLilycove_Upcoming:: @ 0828D875
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "We’ve just received wonderful news\n"
|
||||
.string "from LILYCOVE DEPARTMENT STORE.\p"
|
||||
.string "The DEPARTMENT STORE’s clear-out sale\n"
|
||||
.string "will be in just this many days: {STR_VAR_1}!\p"
|
||||
.string "That thingamajig or that doodad that\n"
|
||||
.string "you’ve always wanted could be yours!\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextLilycove_Ongoing:: @ 0828D994
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "This is the news you’ve all been\n"
|
||||
.string "waiting for!\p"
|
||||
.string "LILYCOVE DEPARTMENT STORE’s clear-out\n"
|
||||
.string "sale has finally arrived!\p"
|
||||
.string "All the thingamajigs and doodads that\n"
|
||||
.string "you’ve always dreamt about…\p"
|
||||
.string "You may be in for fateful encounters\n"
|
||||
.string "with them all!\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextLilycove_Ending:: @ 0828DAC0
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "This is the news you’ve all been\n"
|
||||
.string "waiting for!\p"
|
||||
.string "LILYCOVE DEPARTMENT STORE’s clear-out\n"
|
||||
.string "sale has finally arrived!\p"
|
||||
.string "All the thingamajigs and doodads that\n"
|
||||
.string "you’ve always dreamt about…\p"
|
||||
.string "You may be in for fateful encounters\n"
|
||||
.string "with them all!\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextBlendMaster_Upcoming:: @ 0828DBEC
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "We have big news for everyone\n"
|
||||
.string "involved in the making of {POKEBLOCK}S.\p"
|
||||
.string "The legendary BLEND MASTER will be\n"
|
||||
.string "appearing in LILYCOVE CITY with just\l"
|
||||
.string "a mere {STR_VAR_1}-day wait to go!\p"
|
||||
.string "The BLEND MASTER is said to be\n"
|
||||
.string "the best in all HOENN when it comes to\l"
|
||||
.string "spinning a BERRY BLENDER.\p"
|
||||
.string "Those people who want to make great\n"
|
||||
.string "{POKEBLOCK}S or see the MASTER in action\l"
|
||||
.string "are urged to save their BERRIES.\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextBlendMaster_Ongoing:: @ 0828DD9E
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "We have big news for everyone\n"
|
||||
.string "involved in the making of {POKEBLOCK}S.\p"
|
||||
.string "The legendary BLEND MASTER has\n"
|
||||
.string "finally appeared!\p"
|
||||
.string "The BLEND MASTER is spinning\n"
|
||||
.string "the BERRY BLENDER at the LILYCOVE\l"
|
||||
.string "CONTEST HALL.\p"
|
||||
.string "Those people who want to make great\n"
|
||||
.string "{POKEBLOCK}S or see the MASTER in action\l"
|
||||
.string "should hurry to LILYCOVE.\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
||||
|
||||
gPokeNewsTextBlendMaster_Ending:: @ 0828DF05
|
||||
.string "Greetings!\n"
|
||||
.string "It’s time for POKéMON NEWS.\p"
|
||||
.string "It’s incredible!\n"
|
||||
.string "Too incredible, even!\p"
|
||||
.string "The BERRY BLENDER is spinning at\n"
|
||||
.string "a dizzying pace!\p"
|
||||
.string "The BLEND MASTER has lived up to\n"
|
||||
.string "his reputation!\p"
|
||||
.string "The BLEND MASTER will soon be\n"
|
||||
.string "leaving LILYCOVE.\p"
|
||||
.string "If you haven’t seen the MASTER in\n"
|
||||
.string "action, don’t waste this chance!\l"
|
||||
.string "Head to LILYCOVE right now!\p"
|
||||
.string "That’s the news on POKéMON NEWS.$"
|
2891
data/text/tv.inc
Normal file
2891
data/text/tv.inc
Normal file
File diff suppressed because it is too large
Load Diff
128
data/tv.s
128
data/tv.s
@ -1,128 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2, 0
|
||||
|
||||
gUnknown_0858D094:: @ 858D094
|
||||
.incbin "baserom.gba", 0x58d094, 0x3c
|
||||
|
||||
gUnknown_0858D0D0:: @ 858D0D0
|
||||
.incbin "baserom.gba", 0x58d0d0, 0xe
|
||||
|
||||
gUnknown_0858D0DE:: @ 858D0DE
|
||||
.incbin "baserom.gba", 0x58d0de, 0xe
|
||||
|
||||
gUnknown_0858D0EC:: @ 858D0EC
|
||||
.incbin "baserom.gba", 0x58d0ec, 0x1c
|
||||
|
||||
gUnknown_0858D108:: @ 858D108
|
||||
.incbin "baserom.gba", 0x58d108, 0x14
|
||||
|
||||
gUnknown_0858D11C:: @ 858D11C
|
||||
.incbin "baserom.gba", 0x58d11c, 0x14
|
||||
|
||||
gUnknown_0858D130:: @ 858D130
|
||||
.incbin "baserom.gba", 0x58d130, 0x14
|
||||
|
||||
gUnknown_0858D144:: @ 858D144
|
||||
.incbin "baserom.gba", 0x58d144, 0xc
|
||||
|
||||
gUnknown_0858D150:: @ 858D150
|
||||
.incbin "baserom.gba", 0x58d150, 0x20
|
||||
|
||||
gUnknown_0858D170:: @ 858D170
|
||||
.incbin "baserom.gba", 0x58d170, 0x18
|
||||
|
||||
gUnknown_0858D188:: @ 858D188
|
||||
.incbin "baserom.gba", 0x58d188, 0x14
|
||||
|
||||
gUnknown_0858D19C:: @ 858D19C
|
||||
.incbin "baserom.gba", 0x58d19c, 0x4
|
||||
|
||||
gUnknown_0858D1A0:: @ 858D1A0
|
||||
.incbin "baserom.gba", 0x58d1a0, 0x30
|
||||
|
||||
gUnknown_0858D1D0:: @ 858D1D0
|
||||
.incbin "baserom.gba", 0x58d1d0, 0x34
|
||||
|
||||
gUnknown_0858D204:: @ 858D204
|
||||
.incbin "baserom.gba", 0x58d204, 0x24
|
||||
|
||||
gUnknown_0858D228:: @ 858D228
|
||||
.incbin "baserom.gba", 0x58d228, 0x18
|
||||
|
||||
gUnknown_0858D240:: @ 858D240
|
||||
.incbin "baserom.gba", 0x58d240, 0x3c
|
||||
|
||||
gUnknown_0858D27C:: @ 858D27C
|
||||
.incbin "baserom.gba", 0x58d27c, 0x84
|
||||
|
||||
gUnknown_0858D300:: @ 858D300
|
||||
.incbin "baserom.gba", 0x58d300, 0x20
|
||||
|
||||
gUnknown_0858D320:: @ 858D320
|
||||
.incbin "baserom.gba", 0x58d320, 0x18
|
||||
|
||||
gUnknown_0858D338:: @ 858D338
|
||||
.incbin "baserom.gba", 0x58d338, 0x4c
|
||||
|
||||
gUnknown_0858D384:: @ 858D384
|
||||
.incbin "baserom.gba", 0x58d384, 0x10
|
||||
|
||||
gUnknown_0858D394:: @ 858D394
|
||||
.incbin "baserom.gba", 0x58d394, 0x1c
|
||||
|
||||
gUnknown_0858D3B0:: @ 858D3B0
|
||||
.incbin "baserom.gba", 0x58d3b0, 0x8
|
||||
|
||||
gUnknown_0858D3B8:: @ 858D3B8
|
||||
.incbin "baserom.gba", 0x58d3b8, 0xc
|
||||
|
||||
gUnknown_0858D3C4:: @ 858D3C4
|
||||
.incbin "baserom.gba", 0x58d3c4, 0x2c
|
||||
|
||||
gUnknown_0858D3F0:: @ 858D3F0
|
||||
.incbin "baserom.gba", 0x58d3f0, 0x1c
|
||||
|
||||
gUnknown_0858D40C:: @ 858D40C
|
||||
.incbin "baserom.gba", 0x58d40c, 0xc
|
||||
|
||||
gUnknown_0858D418:: @ 858D418
|
||||
.incbin "baserom.gba", 0x58d418, 0x10
|
||||
|
||||
gUnknown_0858D428:: @ 858D428
|
||||
.incbin "baserom.gba", 0x58d428, 0x34
|
||||
|
||||
gUnknown_0858D45C:: @ 858D45C
|
||||
.incbin "baserom.gba", 0x58d45c, 0x38
|
||||
|
||||
gUnknown_0858D494:: @ 858D494
|
||||
.incbin "baserom.gba", 0x58d494, 0x4
|
||||
|
||||
gUnknown_0858D498:: @ 858D498
|
||||
.incbin "baserom.gba", 0x58d498, 0x1c
|
||||
|
||||
gUnknown_0858D4B4:: @ 858D4B4
|
||||
.incbin "baserom.gba", 0x58d4b4, 0x30
|
||||
|
||||
gUnknown_0858D4E4:: @ 858D4E4
|
||||
.incbin "baserom.gba", 0x58d4e4, 0x40
|
||||
|
||||
gUnknown_0858D524:: @ 858D524
|
||||
.incbin "baserom.gba", 0x58d524, 0x4c
|
||||
|
||||
gUnknown_0858D570:: @ 858D570
|
||||
.incbin "baserom.gba", 0x58d570, 0x24
|
||||
|
||||
gUnknown_0858D594:: @ 858D594
|
||||
.incbin "baserom.gba", 0x58d594, 0xac
|
||||
|
||||
gUnknown_0858D640:: @ 858D640
|
||||
.incbin "baserom.gba", 0x58d640, 0x2c
|
||||
|
||||
gUnknown_0858D66C:: @ 858D66C
|
||||
.incbin "baserom.gba", 0x58d66c, 0x24
|
||||
|
||||
gUnknown_0858D690:: @ 858D690
|
||||
.incbin "baserom.gba", 0x58d690, 0x20
|
@ -5,6 +5,7 @@
|
||||
#include "battle_util.h"
|
||||
#include "battle_script_commands.h"
|
||||
#include "battle_2.h"
|
||||
#include "battle_ai_switch_items.h"
|
||||
|
||||
/*
|
||||
Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
|
||||
@ -77,6 +78,7 @@
|
||||
#define BATTLE_PLAYER_TELEPORTED 0x5
|
||||
#define BATTLE_POKE_FLED 0x6
|
||||
#define BATTLE_CAUGHT 0x7
|
||||
#define BATTLE_SAFARI_OUT_OF_BALLS 0x8
|
||||
#define BATTLE_FORFEITED 0x9
|
||||
#define BATTLE_OPPONENT_TELEPORTED 0xA
|
||||
|
||||
@ -476,7 +478,7 @@ struct BattleHistory
|
||||
struct UsedMoves usedMoves[BATTLE_BANKS_COUNT];
|
||||
u8 abilities[BATTLE_BANKS_COUNT];
|
||||
u8 itemEffects[BATTLE_BANKS_COUNT];
|
||||
u16 TrainerItems[BATTLE_BANKS_COUNT];
|
||||
u16 trainerItems[BATTLE_BANKS_COUNT];
|
||||
u8 itemsNo;
|
||||
};
|
||||
|
||||
@ -527,11 +529,11 @@ struct BattleResults
|
||||
u8 playerSwitchesCounter; // 0x2
|
||||
u8 unk3; // 0x3
|
||||
u8 unk4; // 0x4
|
||||
u8 unk5_0:1; // 0x5 , 0x1
|
||||
u8 unk5_1:1; // 0x5 , 0x2
|
||||
u8 caughtMonBall:4; // 0x5 , 0x4/0x8/0x10/0x20
|
||||
u8 unk5_6:1; // 0x5 , 0x40
|
||||
u8 unk5_7:1; // 0x5 , 0x80
|
||||
u8 unk5_0:1; // 0x5
|
||||
u8 usedMasterBall:1; // 0x5
|
||||
u8 caughtMonBall:4; // 0x5
|
||||
u8 unk5_6:1; // 0x5
|
||||
u8 unk5_7:1; // 0x5
|
||||
u16 playerMon1Species; // 0x6
|
||||
u8 playerMon1Name[11]; // 0x8
|
||||
u8 battleTurnCounter; // 0x13
|
||||
@ -544,7 +546,7 @@ struct BattleResults
|
||||
u16 caughtMonSpecies; // 0x28
|
||||
u8 caughtMonNick[10]; // 0x2A
|
||||
u8 filler34[2];
|
||||
u8 catchAttempts[12]; // 0x36
|
||||
u8 catchAttempts[11]; // 0x36
|
||||
};
|
||||
|
||||
extern struct BattleResults gBattleResults;
|
||||
@ -632,8 +634,8 @@ struct BattleStruct
|
||||
void (*savedCallback)(void);
|
||||
u16 usedHeldItems[BATTLE_BANKS_COUNT];
|
||||
u8 field_C0[4];
|
||||
u8 field_C4[2];
|
||||
u8 field_C6[2];
|
||||
u8 AI_itemType[2];
|
||||
u8 AI_itemFlags[2];
|
||||
u16 choicedMove[BATTLE_BANKS_COUNT];
|
||||
u16 changedItems[BATTLE_BANKS_COUNT];
|
||||
u8 intimidateBank;
|
||||
@ -901,6 +903,10 @@ struct MonSpritesGfx
|
||||
struct SpriteTemplate templates[4];
|
||||
};
|
||||
|
||||
extern struct BattleSpritesGfx* gMonSpritesGfx;
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gLastUsedItem;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern struct MonSpritesGfx* gMonSpritesGfxPtr;
|
||||
|
||||
#endif // GUARD_BATTLE_H
|
||||
|
17
include/battle_ai_switch_items.h
Normal file
17
include/battle_ai_switch_items.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef GUARD_BATTLE_AI_SWITCH_ITEMS_H
|
||||
#define GUARD_BATTLE_AI_SWITCH_ITEMS_H
|
||||
|
||||
enum
|
||||
{
|
||||
AI_ITEM_FULL_RESTORE = 1,
|
||||
AI_ITEM_HEAL_HP,
|
||||
AI_ITEM_CURE_CONDITION,
|
||||
AI_ITEM_X_STAT,
|
||||
AI_ITEM_GUARD_SPECS,
|
||||
AI_ITEM_NOT_RECOGNIZABLE
|
||||
};
|
||||
|
||||
void AI_TrySwitchOrUseItem(void);
|
||||
u8 GetMostSuitableMonToSwitchInto(void);
|
||||
|
||||
#endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H
|
@ -84,5 +84,6 @@ void Emit_x32(u8 bufferId);
|
||||
void EmitPrintString(u8 bufferId, u16 stringId);
|
||||
void EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
|
||||
void EmitBallThrow(u8 bufferId, u8 caseId);
|
||||
void EmitCmd_x21(u8 bufferId, u8 arg1, u16 arg2);
|
||||
|
||||
#endif // GUARD_BATTLE_CONTROLLERS_H
|
||||
|
@ -43,7 +43,7 @@
|
||||
|
||||
void AI_CalcDmg(u8 bankAtk, u8 bankDef);
|
||||
u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
|
||||
u8 AI_TypeCalc(u16 move, u16 species, u8 ability);
|
||||
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
|
||||
u8 BankGetTurnOrder(u8 bank);
|
||||
void SetMoveEffect(bool8 primary, u8 certain);
|
||||
void BattleDestroyCursorAt(u8 cursorPosition);
|
||||
|
6
include/battle_tower.h
Normal file
6
include/battle_tower.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef GUARD_BATTLE_TOWER_H
|
||||
#define GUARD_BATTLE_TOWER_H
|
||||
|
||||
u16 sub_8164FCC(u8, u8);
|
||||
|
||||
#endif //GUARD_BATTLE_TOWER_H
|
18
include/contest.h
Normal file
18
include/contest.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef GUARD_CONTEST_H
|
||||
#define GUARD_CONTEST_H
|
||||
|
||||
struct ContestStruct_02039E00 {
|
||||
u16 unk_00;
|
||||
u8 unk_02[11];
|
||||
u8 unk_0d[8];
|
||||
u8 filler_15[9];
|
||||
u8 filler_1E[34];
|
||||
};
|
||||
|
||||
extern struct ContestStruct_02039E00 gUnknown_02039E00[4];
|
||||
extern u8 gUnknown_02039F24;
|
||||
extern EWRAM_DATA u16 gUnknown_02039F2C;
|
||||
extern EWRAM_DATA u8 gUnknown_02039F2E;
|
||||
extern EWRAM_DATA u8 gUnknown_02039F30;
|
||||
|
||||
#endif //GUARD_CONTEST_H
|
147
include/decoration.h
Normal file
147
include/decoration.h
Normal file
@ -0,0 +1,147 @@
|
||||
#ifndef GUARD_DECORATION_H
|
||||
#define GUARD_DECORATION_H
|
||||
|
||||
enum DecoId {
|
||||
/*000*/ DECOR_NONE,
|
||||
/*001*/ DECOR_SMALL_DESK,
|
||||
/*002*/ DECOR_POKEMON_DESK,
|
||||
/*003*/ DECOR_HEAVY_DESK,
|
||||
/*004*/ DECOR_RAGGED_DESK,
|
||||
/*005*/ DECOR_COMFORT_DESK,
|
||||
/*006*/ DECOR_PRETTY_DESK,
|
||||
/*007*/ DECOR_BRICK_DESK,
|
||||
/*008*/ DECOR_CAMP_DESK,
|
||||
/*009*/ DECOR_HARD_DESK,
|
||||
/*010*/ DECOR_SMALL_CHAIR,
|
||||
/*011*/ DECOR_POKEMON_CHAIR,
|
||||
/*012*/ DECOR_HEAVY_CHAIR,
|
||||
/*013*/ DECOR_PRETTY_CHAIR,
|
||||
/*014*/ DECOR_COMFORT_CHAIR,
|
||||
/*015*/ DECOR_RAGGED_CHAIR,
|
||||
/*016*/ DECOR_BRICK_CHAIR,
|
||||
/*017*/ DECOR_CAMP_CHAIR,
|
||||
/*018*/ DECOR_HARD_CHAIR,
|
||||
/*019*/ DECOR_RED_PLANT,
|
||||
/*020*/ DECOR_TROPICAL_PLANT,
|
||||
/*021*/ DECOR_PRETTY_FLOWERS,
|
||||
/*022*/ DECOR_COLORFUL_PLANT,
|
||||
/*023*/ DECOR_BIG_PLANT,
|
||||
/*024*/ DECOR_GORGEOUS_PLANT,
|
||||
/*025*/ DECOR_RED_BRICK,
|
||||
/*026*/ DECOR_YELLOW_BRICK,
|
||||
/*027*/ DECOR_BLUE_BRICK,
|
||||
/*028*/ DECOR_RED_BALLOON,
|
||||
/*029*/ DECOR_BLUE_BALLOON,
|
||||
/*030*/ DECOR_YELLOW_BALLOON,
|
||||
/*031*/ DECOR_RED_TENT,
|
||||
/*032*/ DECOR_BLUE_TENT,
|
||||
/*033*/ DECOR_SOLID_BOARD,
|
||||
/*034*/ DECOR_SLIDE,
|
||||
/*035*/ DECOR_FENCE_LENGTH,
|
||||
/*036*/ DECOR_FENCE_WIDTH,
|
||||
/*037*/ DECOR_TIRE,
|
||||
/*038*/ DECOR_STAND,
|
||||
/*039*/ DECOR_MUD_BALL,
|
||||
/*040*/ DECOR_BREAKABLE_DOOR,
|
||||
/*041*/ DECOR_SAND_ORNAMENT,
|
||||
/*042*/ DECOR_SILVER_SHIELD,
|
||||
/*043*/ DECOR_GOLD_SHIELD,
|
||||
/*044*/ DECOR_GLASS_ORNAMENT,
|
||||
/*045*/ DECOR_TV,
|
||||
/*046*/ DECOR_ROUND_TV,
|
||||
/*047*/ DECOR_CUTE_TV,
|
||||
/*048*/ DECOR_GLITTER_MAT,
|
||||
/*049*/ DECOR_JUMP_MAT,
|
||||
/*050*/ DECOR_SPIN_MAT,
|
||||
/*051*/ DECOR_C_LOW_NOTE_MAT,
|
||||
/*052*/ DECOR_D_NOTE_MAT,
|
||||
/*053*/ DECOR_E_NOTE_MAT,
|
||||
/*054*/ DECOR_F_NOTE_MAT,
|
||||
/*055*/ DECOR_G_NOTE_MAT,
|
||||
/*056*/ DECOR_A_NOTE_MAT,
|
||||
/*057*/ DECOR_B_NOTE_MAT,
|
||||
/*058*/ DECOR_C_HIGH_NOTE_MAT,
|
||||
/*059*/ DECOR_SURF_MAT,
|
||||
/*060*/ DECOR_THUNDER_MAT,
|
||||
/*061*/ DECOR_FIRE_BLAST_MAT,
|
||||
/*062*/ DECOR_POWDER_SNOW_MAT,
|
||||
/*063*/ DECOR_ATTRACT_MAT,
|
||||
/*064*/ DECOR_FISSURE_MAT,
|
||||
/*065*/ DECOR_SPIKES_MAT,
|
||||
/*066*/ DECOR_BALL_POSTER,
|
||||
/*067*/ DECOR_GREEN_POSTER,
|
||||
/*068*/ DECOR_RED_POSTER,
|
||||
/*069*/ DECOR_BLUE_POSTER,
|
||||
/*070*/ DECOR_CUTE_POSTER,
|
||||
/*071*/ DECOR_PIKA_POSTER,
|
||||
/*072*/ DECOR_LONG_POSTER,
|
||||
/*073*/ DECOR_SEA_POSTER,
|
||||
/*074*/ DECOR_SKY_POSTER,
|
||||
/*075*/ DECOR_KISS_POSTER,
|
||||
/*076*/ DECOR_PICHU_DOLL,
|
||||
/*077*/ DECOR_PIKACHU_DOLL,
|
||||
/*078*/ DECOR_MARILL_DOLL,
|
||||
/*079*/ DECOR_TOGEPI_DOLL,
|
||||
/*080*/ DECOR_CYNDAQUIL_DOLL,
|
||||
/*081*/ DECOR_CHIKORITA_DOLL,
|
||||
/*082*/ DECOR_TOTODILE_DOLL,
|
||||
/*083*/ DECOR_JIGGLYPUFF_DOLL,
|
||||
/*084*/ DECOR_MEOWTH_DOLL,
|
||||
/*085*/ DECOR_CLEFAIRY_DOLL,
|
||||
/*086*/ DECOR_DITTO_DOLL,
|
||||
/*087*/ DECOR_SMOOCHUM_DOLL,
|
||||
/*088*/ DECOR_TREECKO_DOLL,
|
||||
/*089*/ DECOR_TORCHIC_DOLL,
|
||||
/*090*/ DECOR_MUDKIP_DOLL,
|
||||
/*091*/ DECOR_DUSKULL_DOLL,
|
||||
/*092*/ DECOR_WYNAUT_DOLL,
|
||||
/*093*/ DECOR_BALTOY_DOLL,
|
||||
/*094*/ DECOR_KECLEON_DOLL,
|
||||
/*095*/ DECOR_AZURILL_DOLL,
|
||||
/*096*/ DECOR_SKITTY_DOLL,
|
||||
/*097*/ DECOR_SWABLU_DOLL,
|
||||
/*098*/ DECOR_GULPIN_DOLL,
|
||||
/*099*/ DECOR_LOTAD_DOLL,
|
||||
/*100*/ DECOR_SEEDOT_DOLL,
|
||||
/*101*/ DECOR_PIKA_CUSHION,
|
||||
/*102*/ DECOR_ROUND_CUSHION,
|
||||
/*103*/ DECOR_KISS_CUSHION,
|
||||
/*104*/ DECOR_ZIGZAG_CUSHION,
|
||||
/*105*/ DECOR_SPIN_CUSHION,
|
||||
/*106*/ DECOR_DIAMOND_CUSHION,
|
||||
/*107*/ DECOR_BALL_CUSHION,
|
||||
/*108*/ DECOR_GRASS_CUSHION,
|
||||
/*109*/ DECOR_FIRE_CUSHION,
|
||||
/*110*/ DECOR_WATER_CUSHION,
|
||||
/*111*/ DECOR_SNORLAX_DOLL,
|
||||
/*112*/ DECOR_RHYDON_DOLL,
|
||||
/*113*/ DECOR_LAPRAS_DOLL,
|
||||
/*114*/ DECOR_VENUSAUR_DOLL,
|
||||
/*115*/ DECOR_CHARIZARD_DOLL,
|
||||
/*116*/ DECOR_BLASTOISE_DOLL,
|
||||
/*117*/ DECOR_WAILMER_DOLL,
|
||||
/*118*/ DECOR_REGIROCK_DOLL,
|
||||
/*119*/ DECOR_REGICE_DOLL,
|
||||
/*120*/ DECOR_REGISTEEL_DOLL
|
||||
};
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
struct Decoration
|
||||
{
|
||||
/*0x00*/ u8 id;
|
||||
/*0x01*/ u8 name[16];
|
||||
/*0x11*/ u8 permission;
|
||||
/*0x12*/ u8 shape;
|
||||
/*0x13*/ u8 category;
|
||||
/*0x14*/ u16 price;
|
||||
/*0x18*/ const u8 *description;
|
||||
/*0x1c*/ const u16 *tiles;
|
||||
};
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
extern const struct Decoration gDecorations[];
|
||||
|
||||
#endif //GUARD_DECORATION_H
|
6
include/diploma.h
Normal file
6
include/diploma.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef GUARD_DIPLOMA_H
|
||||
#define GUARD_DIPLOMA_H
|
||||
|
||||
void CB2_ShowDiploma(void);
|
||||
|
||||
#endif // GUARD_DIPLOMA_H
|
@ -31,7 +31,8 @@ enum
|
||||
void InitEasyChatPhrases(void);
|
||||
void easy_chat_input_maybe(void);
|
||||
void CopyEasyChatWord(u8 *dest, u16 word);
|
||||
bool32 sub_811F8D8(u16 word);
|
||||
void InitializeEasyChatWordArray(u16 *words, u16 length);
|
||||
void ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2);
|
||||
bool32 sub_811F8D8(u16);
|
||||
|
||||
#endif // GUARD_EASYCHAT_H
|
||||
|
@ -8,4 +8,353 @@
|
||||
extern const u8 gUnknown_082766A2[];
|
||||
extern const u8 gUnknown_082766A6[];
|
||||
|
||||
extern const u8 gTVBravoTrainerText00[];
|
||||
extern const u8 gTVBravoTrainerText01[];
|
||||
extern const u8 gTVBravoTrainerText02[];
|
||||
extern const u8 gTVBravoTrainerText03[];
|
||||
extern const u8 gTVBravoTrainerText04[];
|
||||
extern const u8 gTVBravoTrainerText05[];
|
||||
extern const u8 gTVBravoTrainerText06[];
|
||||
extern const u8 gTVBravoTrainerText07[];
|
||||
extern const u8 gTVBravoTrainerText08[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText00[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText01[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText02[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText03[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText04[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText05[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText06[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText07[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText08[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText09[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText10[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText11[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText12[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText13[];
|
||||
extern const u8 gTVBravoTrainerBattleTowerText14[];
|
||||
extern const u8 gTVFanClubOpinionsText00[];
|
||||
extern const u8 gTVFanClubOpinionsText01[];
|
||||
extern const u8 gTVFanClubOpinionsText02[];
|
||||
extern const u8 gTVFanClubOpinionsText03[];
|
||||
extern const u8 gTVFanClubOpinionsText04[];
|
||||
extern const u8 gTVFanClubText00[];
|
||||
extern const u8 gTVFanClubText01[];
|
||||
extern const u8 gTVFanClubText02[];
|
||||
extern const u8 gTVFanClubText03[];
|
||||
extern const u8 gTVFanClubText04[];
|
||||
extern const u8 gTVFanClubText05[];
|
||||
extern const u8 gTVFanClubText06[];
|
||||
extern const u8 gTVFanClubText07[];
|
||||
extern const u8 gTVRecentHappeningsText00[];
|
||||
extern const u8 gTVRecentHappeningsText01[];
|
||||
extern const u8 gTVRecentHappeningsText02[];
|
||||
extern const u8 gTVRecentHappeningsText03[];
|
||||
extern const u8 gTVRecentHappeningsText04[];
|
||||
extern const u8 gTVRecentHappeningsText05[];
|
||||
extern const u8 gTVMassOutbreakText00[];
|
||||
extern const u8 gTV3CheersForPokeblocksText00[];
|
||||
extern const u8 gTV3CheersForPokeblocksText01[];
|
||||
extern const u8 gTV3CheersForPokeblocksText02[];
|
||||
extern const u8 gTV3CheersForPokeblocksText03[];
|
||||
extern const u8 gTV3CheersForPokeblocksText04[];
|
||||
extern const u8 gTV3CheersForPokeblocksText05[];
|
||||
extern const u8 gTVTrainerFanClubSpecialText00[];
|
||||
extern const u8 gTVTrainerFanClubSpecialText01[];
|
||||
extern const u8 gTVTrainerFanClubSpecialText02[];
|
||||
extern const u8 gTVTrainerFanClubSpecialText03[];
|
||||
extern const u8 gTVTrainerFanClubSpecialText04[];
|
||||
extern const u8 gTVTrainerFanClubSpecialText05[];
|
||||
extern const u8 gTVNameRaterText00[];
|
||||
extern const u8 gTVNameRaterText01[];
|
||||
extern const u8 gTVNameRaterText02[];
|
||||
extern const u8 gTVNameRaterText03[];
|
||||
extern const u8 gTVNameRaterText04[];
|
||||
extern const u8 gTVNameRaterText05[];
|
||||
extern const u8 gTVNameRaterText06[];
|
||||
extern const u8 gTVNameRaterText07[];
|
||||
extern const u8 gTVNameRaterText08[];
|
||||
extern const u8 gTVNameRaterText09[];
|
||||
extern const u8 gTVNameRaterText10[];
|
||||
extern const u8 gTVNameRaterText11[];
|
||||
extern const u8 gTVNameRaterText12[];
|
||||
extern const u8 gTVNameRaterText13[];
|
||||
extern const u8 gTVNameRaterText14[];
|
||||
extern const u8 gTVNameRaterText15[];
|
||||
extern const u8 gTVNameRaterText16[];
|
||||
extern const u8 gTVNameRaterText17[];
|
||||
extern const u8 gTVNameRaterText18[];
|
||||
extern const u8 gTVPokemonAnglerText00[];
|
||||
extern const u8 gTVPokemonAnglerText01[];
|
||||
extern const u8 gTVPokemonTodayFailedText00[];
|
||||
extern const u8 gTVPokemonTodayFailedText01[];
|
||||
extern const u8 gTVPokemonTodayFailedText02[];
|
||||
extern const u8 gTVPokemonTodayFailedText03[];
|
||||
extern const u8 gTVPokemonTodayFailedText04[];
|
||||
extern const u8 gTVPokemonTodayFailedText05[];
|
||||
extern const u8 gTVPokemonTodayFailedText06[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText00[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText01[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText02[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText03[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText04[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText05[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText06[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText07[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText08[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText09[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText10[];
|
||||
extern const u8 gTVPokemonTodaySuccessfulText11[];
|
||||
extern const u8 gTVTodaysSmartShopperText00[];
|
||||
extern const u8 gTVTodaysSmartShopperText01[];
|
||||
extern const u8 gTVTodaysSmartShopperText02[];
|
||||
extern const u8 gTVTodaysSmartShopperText03[];
|
||||
extern const u8 gTVTodaysSmartShopperText04[];
|
||||
extern const u8 gTVTodaysSmartShopperText05[];
|
||||
extern const u8 gTVTodaysSmartShopperText06[];
|
||||
extern const u8 gTVTodaysSmartShopperText07[];
|
||||
extern const u8 gTVTodaysSmartShopperText08[];
|
||||
extern const u8 gTVTodaysSmartShopperText09[];
|
||||
extern const u8 gTVTodaysSmartShopperText10[];
|
||||
extern const u8 gTVTodaysSmartShopperText11[];
|
||||
extern const u8 gTVTodaysSmartShopperText12[];
|
||||
extern const u8 gTVWorldOfMastersText00[];
|
||||
extern const u8 gTVWorldOfMastersText01[];
|
||||
extern const u8 gTVWorldOfMastersText02[];
|
||||
extern const u8 gTVTodaysRivalTrainerText00[];
|
||||
extern const u8 gTVTodaysRivalTrainerText07[];
|
||||
extern const u8 gTVTodaysRivalTrainerText08[];
|
||||
extern const u8 gTVTodaysRivalTrainerText09[];
|
||||
extern const u8 gTVTodaysRivalTrainerText10[];
|
||||
extern const u8 gTVTodaysRivalTrainerText01[];
|
||||
extern const u8 gTVTodaysRivalTrainerText02[];
|
||||
extern const u8 gTVTodaysRivalTrainerText03[];
|
||||
extern const u8 gTVTodaysRivalTrainerText04[];
|
||||
extern const u8 gTVTodaysRivalTrainerText05[];
|
||||
extern const u8 gTVTodaysRivalTrainerText06[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText00[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText01[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText02[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText03[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText04[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText05[];
|
||||
extern const u8 gTVDewfordTrendWatcherNetworkText06[];
|
||||
extern const u8 gTVHoennTreasureInvestigatorsText00[];
|
||||
extern const u8 gTVHoennTreasureInvestigatorsText01[];
|
||||
extern const u8 gTVHoennTreasureInvestigatorsText02[];
|
||||
extern const u8 gTVFindThatGamerText00[];
|
||||
extern const u8 gTVFindThatGamerText01[];
|
||||
extern const u8 gTVFindThatGamerText02[];
|
||||
extern const u8 gTVFindThatGamerText03[];
|
||||
extern const u8 gTVBreakingNewsText00[];
|
||||
extern const u8 gTVBreakingNewsText01[];
|
||||
extern const u8 gTVBreakingNewsText02[];
|
||||
extern const u8 gTVBreakingNewsText03[];
|
||||
extern const u8 gTVBreakingNewsText04[];
|
||||
extern const u8 gTVBreakingNewsText05[];
|
||||
extern const u8 gTVBreakingNewsText06[];
|
||||
extern const u8 gTVBreakingNewsText07[];
|
||||
extern const u8 gTVBreakingNewsText12[];
|
||||
extern const u8 gTVBreakingNewsText08[];
|
||||
extern const u8 gTVBreakingNewsText09[];
|
||||
extern const u8 gTVBreakingNewsText10[];
|
||||
extern const u8 gTVBreakingNewsText11[];
|
||||
extern const u8 gTVSecretBaseVisitText00[];
|
||||
extern const u8 gTVSecretBaseVisitText01[];
|
||||
extern const u8 gTVSecretBaseVisitText02[];
|
||||
extern const u8 gTVSecretBaseVisitText03[];
|
||||
extern const u8 gTVSecretBaseVisitText04[];
|
||||
extern const u8 gTVSecretBaseVisitText05[];
|
||||
extern const u8 gTVSecretBaseVisitText06[];
|
||||
extern const u8 gTVSecretBaseVisitText07[];
|
||||
extern const u8 gTVSecretBaseVisitText08[];
|
||||
extern const u8 gTVSecretBaseVisitText09[];
|
||||
extern const u8 gTVSecretBaseVisitText10[];
|
||||
extern const u8 gTVSecretBaseVisitText11[];
|
||||
extern const u8 gTVSecretBaseVisitText12[];
|
||||
extern const u8 gTVSecretBaseVisitText13[];
|
||||
extern const u8 gTVPokemonLotteryWinnerFlashReportText00[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText00[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText01[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText02[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText03[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText04[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText05[];
|
||||
extern const u8 gTVThePokemonBattleSeminarText06[];
|
||||
extern const u8 gTVTrainerFanClubText00[];
|
||||
extern const u8 gTVTrainerFanClubText01[];
|
||||
extern const u8 gTVTrainerFanClubText02[];
|
||||
extern const u8 gTVTrainerFanClubText03[];
|
||||
extern const u8 gTVTrainerFanClubText04[];
|
||||
extern const u8 gTVTrainerFanClubText05[];
|
||||
extern const u8 gTVTrainerFanClubText06[];
|
||||
extern const u8 gTVTrainerFanClubText07[];
|
||||
extern const u8 gTVTrainerFanClubText08[];
|
||||
extern const u8 gTVTrainerFanClubText09[];
|
||||
extern const u8 gTVTrainerFanClubText10[];
|
||||
extern const u8 gTVTrainerFanClubText11[];
|
||||
extern const u8 gTVCutiesText00[];
|
||||
extern const u8 gTVCutiesText01[];
|
||||
extern const u8 gTVCutiesText02[];
|
||||
extern const u8 gTVCutiesText03[];
|
||||
extern const u8 gTVCutiesText04[];
|
||||
extern const u8 gTVCutiesText05[];
|
||||
extern const u8 gTVCutiesText06[];
|
||||
extern const u8 gTVCutiesText07[];
|
||||
extern const u8 gTVCutiesText08[];
|
||||
extern const u8 gTVCutiesText09[];
|
||||
extern const u8 gTVCutiesText10[];
|
||||
extern const u8 gTVCutiesText11[];
|
||||
extern const u8 gTVCutiesText12[];
|
||||
extern const u8 gTVCutiesText13[];
|
||||
extern const u8 gTVCutiesText14[];
|
||||
extern const u8 gTVCutiesText15[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText00[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText01[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText02[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText03[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText04[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText05[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText06[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText07[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText08[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText09[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText10[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText11[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText12[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText13[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText14[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText15[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText16[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText17[];
|
||||
extern const u8 gTVPokemonNewsBattleFrontierText18[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText00[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText01[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText02[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText03[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText04[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText05[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText06[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText07[];
|
||||
extern const u8 gTVWhatsNo1InHoennTodayText08[];
|
||||
extern const u8 gTVSecretBaseSecretsText00[];
|
||||
extern const u8 gTVSecretBaseSecretsText01[];
|
||||
extern const u8 gTVSecretBaseSecretsText02[];
|
||||
extern const u8 gTVSecretBaseSecretsText03[];
|
||||
extern const u8 gTVSecretBaseSecretsText04[];
|
||||
extern const u8 gTVSecretBaseSecretsText05[];
|
||||
extern const u8 gTVSecretBaseSecretsText06[];
|
||||
extern const u8 gTVSecretBaseSecretsText07[];
|
||||
extern const u8 gTVSecretBaseSecretsText08[];
|
||||
extern const u8 gTVSecretBaseSecretsText09[];
|
||||
extern const u8 gTVSecretBaseSecretsText10[];
|
||||
extern const u8 gTVSecretBaseSecretsText11[];
|
||||
extern const u8 gTVSecretBaseSecretsText12[];
|
||||
extern const u8 gTVSecretBaseSecretsText13[];
|
||||
extern const u8 gTVSecretBaseSecretsText14[];
|
||||
extern const u8 gTVSecretBaseSecretsText15[];
|
||||
extern const u8 gTVSecretBaseSecretsText16[];
|
||||
extern const u8 gTVSecretBaseSecretsText17[];
|
||||
extern const u8 gTVSecretBaseSecretsText18[];
|
||||
extern const u8 gTVSecretBaseSecretsText19[];
|
||||
extern const u8 gTVSecretBaseSecretsText20[];
|
||||
extern const u8 gTVSecretBaseSecretsText21[];
|
||||
extern const u8 gTVSecretBaseSecretsText22[];
|
||||
extern const u8 gTVSecretBaseSecretsText23[];
|
||||
extern const u8 gTVSecretBaseSecretsText24[];
|
||||
extern const u8 gTVSecretBaseSecretsText25[];
|
||||
extern const u8 gTVSecretBaseSecretsText26[];
|
||||
extern const u8 gTVSecretBaseSecretsText27[];
|
||||
extern const u8 gTVSecretBaseSecretsText28[];
|
||||
extern const u8 gTVSecretBaseSecretsText29[];
|
||||
extern const u8 gTVSecretBaseSecretsText30[];
|
||||
extern const u8 gTVSecretBaseSecretsText31[];
|
||||
extern const u8 gTVSecretBaseSecretsText32[];
|
||||
extern const u8 gTVSecretBaseSecretsText33[];
|
||||
extern const u8 gTVSecretBaseSecretsText34[];
|
||||
extern const u8 gTVSecretBaseSecretsText35[];
|
||||
extern const u8 gTVSecretBaseSecretsText36[];
|
||||
extern const u8 gTVSecretBaseSecretsText37[];
|
||||
extern const u8 gTVSecretBaseSecretsText38[];
|
||||
extern const u8 gTVSecretBaseSecretsText39[];
|
||||
extern const u8 gTVSecretBaseSecretsText40[];
|
||||
extern const u8 gTVSecretBaseSecretsText41[];
|
||||
extern const u8 gTVSecretBaseSecretsText42[];
|
||||
extern const u8 gTVSafariFanClubText00[];
|
||||
extern const u8 gTVSafariFanClubText01[];
|
||||
extern const u8 gTVSafariFanClubText02[];
|
||||
extern const u8 gTVSafariFanClubText03[];
|
||||
extern const u8 gTVSafariFanClubText04[];
|
||||
extern const u8 gTVSafariFanClubText05[];
|
||||
extern const u8 gTVSafariFanClubText06[];
|
||||
extern const u8 gTVSafariFanClubText07[];
|
||||
extern const u8 gTVSafariFanClubText08[];
|
||||
extern const u8 gTVSafariFanClubText09[];
|
||||
extern const u8 gTVSafariFanClubText10[];
|
||||
extern const u8 gTVContestLiveUpdatesText00[];
|
||||
extern const u8 gTVContestLiveUpdatesText01[];
|
||||
extern const u8 gTVContestLiveUpdatesText02[];
|
||||
extern const u8 gTVContestLiveUpdatesText03[];
|
||||
extern const u8 gTVContestLiveUpdatesText04[];
|
||||
extern const u8 gTVContestLiveUpdatesText05[];
|
||||
extern const u8 gTVContestLiveUpdatesText06[];
|
||||
extern const u8 gTVContestLiveUpdatesText07[];
|
||||
extern const u8 gTVContestLiveUpdatesText08[];
|
||||
extern const u8 gTVContestLiveUpdatesText09[];
|
||||
extern const u8 gTVContestLiveUpdatesText10[];
|
||||
extern const u8 gTVContestLiveUpdatesText11[];
|
||||
extern const u8 gTVContestLiveUpdatesText12[];
|
||||
extern const u8 gTVContestLiveUpdatesText13[];
|
||||
extern const u8 gTVContestLiveUpdatesText14[];
|
||||
extern const u8 gTVContestLiveUpdatesText15[];
|
||||
extern const u8 gTVContestLiveUpdatesText16[];
|
||||
extern const u8 gTVContestLiveUpdatesText17[];
|
||||
extern const u8 gTVContestLiveUpdatesText18[];
|
||||
extern const u8 gTVContestLiveUpdatesText19[];
|
||||
extern const u8 gTVContestLiveUpdatesText20[];
|
||||
extern const u8 gTVContestLiveUpdatesText21[];
|
||||
extern const u8 gTVContestLiveUpdatesText22[];
|
||||
extern const u8 gTVContestLiveUpdatesText23[];
|
||||
extern const u8 gTVContestLiveUpdatesText24[];
|
||||
extern const u8 gTVContestLiveUpdatesText25[];
|
||||
extern const u8 gTVContestLiveUpdatesText26[];
|
||||
extern const u8 gTVContestLiveUpdatesText27[];
|
||||
extern const u8 gTVContestLiveUpdatesText28[];
|
||||
extern const u8 gTVContestLiveUpdatesText29[];
|
||||
extern const u8 gTVContestLiveUpdatesText30[];
|
||||
extern const u8 gTVContestLiveUpdatesText31[];
|
||||
extern const u8 gTVContestLiveUpdatesText32[];
|
||||
extern const u8 gTVPokemonBattleUpdateText00[];
|
||||
extern const u8 gTVPokemonBattleUpdateText01[];
|
||||
extern const u8 gTVPokemonBattleUpdateText02[];
|
||||
extern const u8 gTVPokemonBattleUpdateText03[];
|
||||
extern const u8 gTVPokemonBattleUpdateText04[];
|
||||
extern const u8 gTVPokemonBattleUpdateText05[];
|
||||
extern const u8 gTVPokemonBattleUpdateText06[];
|
||||
extern const u8 gTVPokemonBattleUpdateText07[];
|
||||
extern const u8 gTVInSearchOfTrainersText00[];
|
||||
extern const u8 gTVInSearchOfTrainersText01[];
|
||||
extern const u8 gTVInSearchOfTrainersText02[];
|
||||
extern const u8 gTVInSearchOfTrainersText03[];
|
||||
extern const u8 gTVInSearchOfTrainersText04[];
|
||||
extern const u8 gTVInSearchOfTrainersText05[];
|
||||
extern const u8 gTVInSearchOfTrainersText06[];
|
||||
extern const u8 gTVInSearchOfTrainersText07[];
|
||||
extern const u8 gTVInSearchOfTrainersText08[];
|
||||
extern const u8 gTVPokemonContestLiveUpdates2Text00[];
|
||||
extern const u8 gTVPokemonContestLiveUpdates2Text01[];
|
||||
extern const u8 gTVPokemonContestLiveUpdates2Text02[];
|
||||
extern const u8 gTVPokemonContestLiveUpdates2Text03[];
|
||||
extern const u8 gPokeNewsTextSlateport_Upcoming[];
|
||||
extern const u8 gPokeNewsTextSlateport_Ongoing[];
|
||||
extern const u8 gPokeNewsTextSlateport_Ending[];
|
||||
extern const u8 gPokeNewsTextGameCorner_Upcoming[];
|
||||
extern const u8 gPokeNewsTextGameCorner_Ongoing[];
|
||||
extern const u8 gPokeNewsTextGameCorner_Ending[];
|
||||
extern const u8 gPokeNewsTextLilycove_Upcoming[];
|
||||
extern const u8 gPokeNewsTextLilycove_Ongoing[];
|
||||
extern const u8 gPokeNewsTextLilycove_Ending[];
|
||||
extern const u8 gPokeNewsTextBlendMaster_Upcoming[];
|
||||
extern const u8 gPokeNewsTextBlendMaster_Ongoing[];
|
||||
extern const u8 gPokeNewsTextBlendMaster_Ending[];
|
||||
|
||||
#endif //GUARD_EVENT_SCRIPTS_H
|
||||
|
@ -22,4 +22,6 @@ extern u16 gUnknown_03005DE8;
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
void DrawWholeMapView(void);
|
||||
|
||||
#endif //GUARD_FIELD_CAMERA_H
|
||||
|
12
include/field_message_box.h
Normal file
12
include/field_message_box.h
Normal file
@ -0,0 +1,12 @@
|
||||
#ifndef GUARD_field_message_box_H
|
||||
#define GUARD_field_message_box_H
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
void ShowFieldMessage(const u8 *);
|
||||
|
||||
#endif //GUARD_field_message_box_H
|
@ -8,9 +8,14 @@
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
extern struct MapCoords {
|
||||
int width;
|
||||
int height;
|
||||
} gUnknown_03005DC0;
|
||||
|
||||
// Exported ROM declarations
|
||||
u8 MapGridGetMetatileBehaviorAt(s16, s16);
|
||||
u32 MapGridGetMetatileBehaviorAt(int, int);
|
||||
void MapGridSetMetatileIdAt(int, int, u16);
|
||||
void GetCameraCoords(u16*, u16*);
|
||||
bool8 MapGridIsImpassableAt(s16, s16);
|
||||
s32 GetMapBorderIdAt(s16, s16);
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#define TRAINER_FLAG_START 0x500
|
||||
#define TRAINERS_FLAG_NO 0x356
|
||||
#define CODE_FLAGS (TRAINER_FLAG_START + TRAINERS_FLAG_NO + 0xA)
|
||||
#define CODE_FLAGS (TRAINER_FLAG_START + TRAINERS_FLAG_NO + 0xA) // 0x860
|
||||
|
||||
// SYSTEM FLAGS
|
||||
|
||||
@ -84,6 +84,20 @@
|
||||
#define SYS_CTRL_OBJ_DELETE CODE_FLAGS + 0x61
|
||||
#define SYS_RESET_RTC_ENABLE CODE_FLAGS + 0x62
|
||||
|
||||
#define SYS_TOWER_SILVER CODE_FLAGS + 0x64
|
||||
#define SYS_TOWER_GOLD CODE_FLAGS + 0x65
|
||||
#define SYS_DOME_SILVER CODE_FLAGS + 0x66
|
||||
#define SYS_DOME_GOLD CODE_FLAGS + 0x67
|
||||
#define SYS_PALACE_SILVER CODE_FLAGS + 0x68
|
||||
#define SYS_PALACE_GOLD CODE_FLAGS + 0x69
|
||||
#define SYS_ARENA_SILVER CODE_FLAGS + 0x6A
|
||||
#define SYS_ARENA_GOLD CODE_FLAGS + 0x6B
|
||||
#define SYS_FACTORY_SILVER CODE_FLAGS + 0x6C
|
||||
#define SYS_FACTORY_GOLD CODE_FLAGS + 0x6D
|
||||
#define SYS_PIKE_SILVER CODE_FLAGS + 0x6E
|
||||
#define SYS_PIKE_GOLD CODE_FLAGS + 0x6F
|
||||
#define SYS_PYRAMID_SILVER CODE_FLAGS + 0x70
|
||||
#define SYS_PYRAMID_GOLD CODE_FLAGS + 0x71
|
||||
#define SYS_FRONTIER_PASS CODE_FLAGS + 0x72
|
||||
|
||||
#define SYS_STORAGE_UNKNOWN_FLAG CODE_FLAGS + 0x77
|
||||
|
@ -56,4 +56,7 @@
|
||||
|
||||
#define NUM_GAME_STATS 64
|
||||
|
||||
void IncrementGameStat(u8);
|
||||
u32 GetGameStat(u8);
|
||||
|
||||
#endif // GUARD_GAME_STAT_H
|
||||
|
324
include/global.h
324
include/global.h
@ -197,7 +197,13 @@ struct SaveBlock2
|
||||
|
||||
// All below could be a one giant struct
|
||||
|
||||
/*0x64C*/ u8 field_64C[1629];
|
||||
/*0x64C*/ u8 field_64C[0x588];
|
||||
/*0xBD4*/ u16 field_BD4;
|
||||
/*0xBD6*/ u16 field_BD6;
|
||||
/*0xBD8*/ u8 field_BD8[11];
|
||||
/*0xBE3*/ u8 filler_BE3[8];
|
||||
/*0xBEB*/ u8 field_BEB;
|
||||
/*0xBE3*/ u8 filler_BEC[189];
|
||||
/*0xCA9*/ u8 frontierChosenLvl : 2; // 0x1, 0x2 -> 0x3
|
||||
/*0xCA9*/ u8 field_CA9_a : 1; // 0x4
|
||||
/*0xCA9*/ u8 field_CA9_b : 1; // 0x8
|
||||
@ -205,7 +211,10 @@ struct SaveBlock2
|
||||
/*0xCA9*/ u8 field_CA9_d : 1; // 0x20
|
||||
/*0xCA9*/ u8 field_CA9_e : 1; // 0x40
|
||||
/*0xCA9*/ u8 field_CA9_f : 1; // 0x80
|
||||
/*0xCAA*/ u8 field_CAA[368];
|
||||
/*0xCAA*/ u16 field_CAA[0x2e];
|
||||
/*0xD06*/ u8 field_D06;
|
||||
/*0xD07*/ u8 field_D07;
|
||||
/*0xd08*/ u8 filler_D08[0x112];
|
||||
/*0xE1A*/ u16 battlePyramidFloor; // possibly?
|
||||
/*0xE1C*/ u8 field_E1C[16];
|
||||
/*0xE2C*/ struct PyramidBag pyramidBag;
|
||||
@ -225,30 +234,31 @@ extern struct SaveBlock2 *gSaveBlock2Ptr;
|
||||
|
||||
struct SecretBaseRecord
|
||||
{
|
||||
u8 sbr_field_0;
|
||||
u8 sbr_field_1_0:4;
|
||||
u8 gender:1;
|
||||
u8 sbr_field_1_5:1;
|
||||
u8 sbr_field_1_6:2;
|
||||
u8 trainerName[7];
|
||||
u8 trainerId[4]; // byte 0 is used for determining trainer class
|
||||
u8 language;
|
||||
u16 sbr_field_e;
|
||||
u8 sbr_field_10;
|
||||
u8 sbr_field_11;
|
||||
u8 decorations[16];
|
||||
u8 decorationPos[16];
|
||||
u32 partyPersonality[6];
|
||||
u16 partyMoves[6 * 4];
|
||||
u16 partySpecies[6];
|
||||
u16 partyHeldItems[6];
|
||||
u8 partyLevels[6];
|
||||
u8 partyEVs[6];
|
||||
/*ID?*/ /*0x1A9C*/ u8 sbr_field_0;
|
||||
/*0x1A9D*/ u8 sbr_field_1_0:4;
|
||||
/*0x1A9D*/ u8 gender:1;
|
||||
/*0x1A9D*/ u8 sbr_field_1_5:1;
|
||||
/*0x1A9D*/ u8 sbr_field_1_6:2;
|
||||
/*0x1A9E*/ u8 trainerName[7]; // 0xFF bytes?
|
||||
/*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
|
||||
/*0x1AA9*/ u8 language;
|
||||
/*0x1AAA*/ u16 sbr_field_e;
|
||||
/*0x1AAC*/ u8 sbr_field_10;
|
||||
/*0x1AAD*/ u8 sbr_field_11;
|
||||
/*0x1AAE*/ u8 decorations[16];
|
||||
/*0x1ABE*/ u8 decorationPos[16];
|
||||
/*0x1ACE*/ u32 partyPersonality[6];
|
||||
/*0x1AE6*/ u16 partyMoves[6 * 4];
|
||||
/*0x1B16*/ u16 partySpecies[6];
|
||||
/*0x1B22*/ u16 partyHeldItems[6];
|
||||
/*0x1B2E*/ u8 partyLevels[6];
|
||||
/*0x1B34*/ u8 partyEVs[6];
|
||||
};
|
||||
|
||||
#include "game_stat.h"
|
||||
#include "global.fieldmap.h"
|
||||
#include "global.berry.h"
|
||||
#include "global.tv.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
struct WarpData
|
||||
@ -317,218 +327,6 @@ struct EasyChatPair
|
||||
u16 words[2];
|
||||
}; /*size = 0x8*/
|
||||
|
||||
struct TVShowCommon
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 pad02[20];
|
||||
/*0x16*/ u16 var16[3];
|
||||
/*0x1C*/ u8 srcTrainerId3Lo;
|
||||
/*0x1D*/ u8 srcTrainerId3Hi;
|
||||
/*0x1E*/ u8 srcTrainerId2Lo;
|
||||
/*0x1F*/ u8 srcTrainerId2Hi;
|
||||
/*0x20*/ u8 srcTrainerIdLo;
|
||||
/*0x21*/ u8 srcTrainerIdHi;
|
||||
/*0x22*/ u8 trainerIdLo;
|
||||
/*0x23*/ u8 trainerIdHi;
|
||||
};
|
||||
|
||||
struct TVShowFanClubLetter
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u16 pad04[6];
|
||||
/*0x10*/ u8 playerName[8];
|
||||
/*0x18*/ u8 language;
|
||||
};
|
||||
|
||||
struct TVShowRecentHappenings
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u16 var02;
|
||||
/*0x04*/ u16 var04[6];
|
||||
/*0x10*/ u8 playerName[8];
|
||||
/*0x18*/ u8 language;
|
||||
/*0x19*/ u8 pad19[10];
|
||||
};
|
||||
|
||||
struct TVShowFanclubOpinions
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u16 var02;
|
||||
/*0x04*/ u8 var04A:4;
|
||||
/*0x04*/ u8 var04B:4;
|
||||
/*0x05*/ u8 playerName[8];
|
||||
/*0x0D*/ u8 language;
|
||||
/*0x0E*/ u8 var0E;
|
||||
/*0x0F*/ u8 var0F;
|
||||
/*0x10*/ u8 var10[8];
|
||||
/*0x18*/ u16 var18[2];
|
||||
/*0x1C*/ u16 var1C[4];
|
||||
};
|
||||
|
||||
struct TVShowUnknownType04
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 pad02[4];
|
||||
/*0x06*/ u16 var06;
|
||||
};
|
||||
|
||||
struct TVShowNameRaterShow
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u8 pokemonName[11];
|
||||
/*0x0F*/ u8 trainerName[11];
|
||||
/*0x1A*/ u8 random;
|
||||
/*0x1B*/ u8 random2;
|
||||
/*0x1C*/ u16 var1C;
|
||||
/*0x1E*/ u8 language;
|
||||
/*0x1F*/ u8 pokemonNameLanguage;
|
||||
};
|
||||
|
||||
struct TVShowBravoTrainerPokemonProfiles
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u16 var04[2];
|
||||
/*0x08*/ u8 pokemonNickname[11];
|
||||
/*0x13*/ u8 contestCategory:3;
|
||||
/*0x13*/ u8 contestRank:2;
|
||||
/*0x13*/ u8 contestResult:2;
|
||||
/*0x13*/ u8 var13_7:1;
|
||||
/*0x14*/ u16 var14;
|
||||
/*0x16*/ u8 playerName[8];
|
||||
/*0x1E*/ u8 language;
|
||||
/*0x1F*/ u8 var1f;
|
||||
};
|
||||
|
||||
struct TVShowBravoTrainerBattleTowerSpotlight
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 trainerName[8];
|
||||
/*0x0A*/ u16 species;
|
||||
/*0x0C*/ u8 pokemonName[8];
|
||||
/*0x14*/ u16 defeatedSpecies;
|
||||
/*0x16*/ u16 var16;
|
||||
/*0x18*/ u16 var18[1];
|
||||
/*0x1A*/ u8 btLevel;
|
||||
/*0x1B*/ u8 var1b;
|
||||
/*0x1C*/ u8 var1c;
|
||||
/*0x1D*/ u8 language;
|
||||
};
|
||||
|
||||
struct TVShowPokemonToday
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 language;
|
||||
/*0x03*/ u8 language2;
|
||||
/*0x04*/ u8 nickname[11];
|
||||
/*0x0F*/ u8 ball;
|
||||
/*0x10*/ u16 species;
|
||||
/*0x12*/ u8 var12;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
};
|
||||
|
||||
struct TVShowSmartShopper
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 priceReduced;
|
||||
/*0x03*/ u8 language;
|
||||
/*0x04*/ u8 pad04[2];
|
||||
/*0x06*/ u16 itemIds[3];
|
||||
/*0x0C*/ u16 itemAmounts[3];
|
||||
/*0x12*/ u8 shopLocation;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
};
|
||||
|
||||
struct TVShowPokemonTodayFailed
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 language;
|
||||
/*0x03*/ u8 pad03[9];
|
||||
/*0x0c*/ u16 species;
|
||||
/*0x0e*/ u16 species2;
|
||||
/*0x10*/ u8 var10;
|
||||
/*0x11*/ u8 var11;
|
||||
/*0x12*/ u8 var12;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
};
|
||||
|
||||
struct TVShowPokemonAngler
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 var02;
|
||||
/*0x03*/ u8 var03;
|
||||
/*0x04*/ u16 var04;
|
||||
/*0x06*/ u8 language;
|
||||
u8 pad07[12];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
};
|
||||
|
||||
struct TVShowWorldOfMasters
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u16 var02;
|
||||
/*0x04*/ u16 var04;
|
||||
/*0x06*/ u16 var06;
|
||||
/*0x08*/ u16 var08;
|
||||
/*0x0a*/ u8 var0a;
|
||||
/*0x0b*/ u8 language;
|
||||
u8 pad0c[7];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
};
|
||||
|
||||
struct TVShowMassOutbreak
|
||||
{
|
||||
/*0x00*/ u8 var00;
|
||||
/*0x01*/ u8 var01;
|
||||
/*0x02*/ u8 var02;
|
||||
/*0x03*/ u8 var03;
|
||||
/*0x04*/ u16 moves[4];
|
||||
/*0x0C*/ u16 species;
|
||||
/*0x0E*/ u16 var0E;
|
||||
/*0x10*/ u8 locationMapNum;
|
||||
/*0x11*/ u8 locationMapGroup;
|
||||
/*0x12*/ u8 var12;
|
||||
/*0x13*/ u8 probability;
|
||||
/*0x14*/ u8 level;
|
||||
/*0x15*/ u8 var15;
|
||||
/*0x16*/ u16 var16;
|
||||
/*0x18*/ u8 language;
|
||||
u8 pad19[11];
|
||||
};
|
||||
|
||||
typedef union TVShow
|
||||
{
|
||||
struct TVShowCommon common;
|
||||
struct TVShowFanClubLetter fanclubLetter;
|
||||
struct TVShowRecentHappenings recentHappenings;
|
||||
struct TVShowFanclubOpinions fanclubOpinions;
|
||||
struct TVShowUnknownType04 unkShow04;
|
||||
struct TVShowNameRaterShow nameRaterShow;
|
||||
struct TVShowBravoTrainerPokemonProfiles bravoTrainer;
|
||||
struct TVShowBravoTrainerBattleTowerSpotlight bravoTrainerTower;
|
||||
struct TVShowPokemonToday pokemonToday;
|
||||
struct TVShowSmartShopper smartshopperShow;
|
||||
struct TVShowPokemonTodayFailed pokemonTodayFailed;
|
||||
struct TVShowPokemonAngler pokemonAngler;
|
||||
struct TVShowWorldOfMasters worldOfMasters;
|
||||
struct TVShowMassOutbreak massOutbreak;
|
||||
} TVShow;
|
||||
|
||||
struct MailStruct
|
||||
{
|
||||
/*0x00*/ u16 words[9];
|
||||
@ -576,35 +374,6 @@ typedef union OldMan
|
||||
u8 filler[0x40];
|
||||
} OldMan;
|
||||
|
||||
struct UnknownSaveStruct2ABC
|
||||
{
|
||||
u8 val0;
|
||||
u8 val1;
|
||||
u16 val2;
|
||||
};
|
||||
|
||||
struct GabbyAndTyData
|
||||
{
|
||||
/*2b10*/ u16 mon1;
|
||||
/*2b12*/ u16 mon2;
|
||||
/*2b14*/ u16 lastMove;
|
||||
/*2b16*/ u16 quote;
|
||||
/*2b18*/ u8 mapnum;
|
||||
/*2b19*/ u8 battleNum;
|
||||
/*2b1a*/ u8 valA_0:1;
|
||||
/*2b1a*/ u8 valA_1:1;
|
||||
/*2b1a*/ u8 valA_2:1;
|
||||
/*2b1a*/ u8 valA_3:1;
|
||||
/*2b1a*/ u8 valA_4:1;
|
||||
/*2b1a*/ u8 valA_5:3;
|
||||
/*2b1b*/ u8 valB_0:1;
|
||||
/*2b1b*/ u8 valB_1:1;
|
||||
/*2b1b*/ u8 valB_2:1;
|
||||
/*2b1b*/ u8 valB_3:1;
|
||||
/*2b1b*/ u8 valB_4:1;
|
||||
/*2b1b*/ u8 valB_5:3;
|
||||
};
|
||||
|
||||
struct RecordMixing_UnknownStructSub
|
||||
{
|
||||
u32 unk0;
|
||||
@ -781,22 +550,22 @@ struct SaveBlock1
|
||||
/*0x????*/ u8 decorCushion[10];
|
||||
/*0x27CA*/ u8 padding_27CA[2];
|
||||
/*0x27CC*/ TVShow tvShows[25];
|
||||
/*0x2B50*/ struct UnknownSaveStruct2ABC pokeNews[16];
|
||||
/*0x2B50*/ PokeNews pokeNews[16];
|
||||
/*0x2B90*/ u16 outbreakPokemonSpecies;
|
||||
/*0x????*/ u8 outbreakLocationMapNum;
|
||||
/*0x????*/ u8 outbreakLocationMapGroup;
|
||||
/*0x????*/ u8 outbreakPokemonLevel;
|
||||
/*0x????*/ u8 outbreakUnk1;
|
||||
/*0x????*/ u16 outbreakUnk2;
|
||||
/*0x????*/ u16 outbreakPokemonMoves[4];
|
||||
/*0x????*/ u8 outbreakUnk4;
|
||||
/*0x????*/ u8 outbreakPokemonProbability;
|
||||
/*0x????*/ u16 outbreakUnk5;
|
||||
/*0x2B92*/ u8 outbreakLocationMapNum;
|
||||
/*0x2B93*/ u8 outbreakLocationMapGroup;
|
||||
/*0x2B94*/ u8 outbreakPokemonLevel;
|
||||
/*0x2B95*/ u8 outbreakUnk1;
|
||||
/*0x2B96*/ u16 outbreakUnk2;
|
||||
/*0x2B98*/ u16 outbreakPokemonMoves[4];
|
||||
/*0x2BA0*/ u8 outbreakUnk4;
|
||||
/*0x2BA1*/ u8 outbreakPokemonProbability;
|
||||
/*0x2BA2*/ u16 outbreakDaysLeft;
|
||||
/*0x2BA4*/ struct GabbyAndTyData gabbyAndTyData;
|
||||
/*0x????*/ u16 unk2B1C[6];
|
||||
/*0x????*/ u16 unk2B28[6];
|
||||
/*0x????*/ u16 unk2B34[6];
|
||||
/*0x????*/ u16 unk2B3A[3];
|
||||
/*0x2BB0*/ u16 unk2BB0[6];
|
||||
/*0x2BBC*/ u16 unk2BBC[6];
|
||||
/*0x2BC8*/ u16 unk2BC8[6];
|
||||
/*0x2BD4*/ u16 unk2BD4[3];
|
||||
/*0x2BE0*/ struct MailStruct mail[16];
|
||||
/*0x2E20*/ u8 additionalPhrases[5]; // bitfield for 33 additional phrases in easy chat system
|
||||
/*0x2E25*/ u8 unk2E25[3]; // possibly padding?
|
||||
@ -806,7 +575,8 @@ struct SaveBlock1
|
||||
/*0x2e90*/ struct ContestWinner contestWinners[13]; // 0 - 5 used in contest hall, 6 - 7 unused?, 8 - 12 museum
|
||||
/*0x3030*/ struct DaycareData daycare;
|
||||
/*0x3150*/ struct LinkBattleRecord linkBattleRecords[5];
|
||||
/*0x31A0*/ u8 filler_31A0[8];
|
||||
/*0x31A0*/ u8 unk_31A0;
|
||||
/*0x31A1*/ u8 filler_31A1[7];
|
||||
/*0x31A8*/ u8 giftRibbons[52];
|
||||
/*0x31DC*/ struct Roamer roamer;
|
||||
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
|
||||
|
535
include/global.tv.h
Normal file
535
include/global.tv.h
Normal file
@ -0,0 +1,535 @@
|
||||
#ifndef GUARD_GLOBAL_TV_H
|
||||
#define GUARD_GLOBAL_TV_H
|
||||
|
||||
enum
|
||||
{
|
||||
TVSHOW_OFF_AIR,
|
||||
|
||||
TVSHOW_FAN_CLUB_LETTER = 1,
|
||||
TVSHOW_RECENT_HAPPENINGS,
|
||||
TVSHOW_PKMN_FAN_CLUB_OPINIONS,
|
||||
TVSHOW_UNKN_SHOWTYPE_04,
|
||||
TVSHOW_NAME_RATER_SHOW,
|
||||
TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE,
|
||||
TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE,
|
||||
TVSHOW_CONTEST_LIVE_UPDATES,
|
||||
TVSHOW_3_CHEERS_FOR_POKEBLOCKS,
|
||||
TVSHOW_BATTLE_UPDATE,
|
||||
TVSHOW_FAN_CLUB_SPECIAL,
|
||||
TVSHOW_CONTEST_LIVE_UPDATES_2,
|
||||
|
||||
TVSHOW_POKEMON_TODAY_CAUGHT = 21,
|
||||
TVSHOW_SMART_SHOPPER,
|
||||
TVSHOW_POKEMON_TODAY_FAILED,
|
||||
TVSHOW_FISHING_ADVICE,
|
||||
TVSHOW_WORLD_OF_MASTERS,
|
||||
TVSHOW_TODAYS_RIVAL_TRAINER,
|
||||
TVSHOW_TREND_WATCHER,
|
||||
TVSHOW_TREASURE_INVESTIGATORS,
|
||||
TVSHOW_FIND_THAT_GAMER,
|
||||
TVSHOW_BREAKING_NEWS,
|
||||
TVSHOW_SECRET_BASE_VISIT,
|
||||
TVSHOW_LOTTO_WINNER,
|
||||
TVSHOW_BATTLE_SEMINAR,
|
||||
TVSHOW_TRAINER_FAN_CLUB,
|
||||
TVSHOW_CUTIES,
|
||||
TVSHOW_FRONTIER,
|
||||
TVSHOW_NUMBER_ONE,
|
||||
TVSHOW_SECRET_BASE_SECRETS,
|
||||
TVSHOW_SAFARI_FAN_CLUB,
|
||||
|
||||
TVSHOW_MASS_OUTBREAK = 41,
|
||||
};
|
||||
|
||||
typedef union // size = 0x24
|
||||
{
|
||||
// Common
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 pad02[26];
|
||||
/*0x1C*/ u8 srcTrainerId3Lo;
|
||||
/*0x1D*/ u8 srcTrainerId3Hi;
|
||||
/*0x1E*/ u8 srcTrainerId2Lo;
|
||||
/*0x1F*/ u8 srcTrainerId2Hi;
|
||||
/*0x20*/ u8 srcTrainerIdLo;
|
||||
/*0x21*/ u8 srcTrainerIdHi;
|
||||
/*0x22*/ u8 trainerIdLo;
|
||||
/*0x23*/ u8 trainerIdHi;
|
||||
} common;
|
||||
|
||||
// Local shows
|
||||
// TVSHOW_FAN_CLUB_LETTER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u16 words[6];
|
||||
/*0x10*/ u8 playerName[8];
|
||||
/*0x18*/ u8 language;
|
||||
} fanclubLetter;
|
||||
|
||||
// TVSHOW_RECENT_HAPPENINGS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 var02;
|
||||
/*0x04*/ u16 words[6];
|
||||
/*0x10*/ u8 playerName[8];
|
||||
/*0x18*/ u8 language;
|
||||
} recentHappenings;
|
||||
|
||||
// TVSHOW_PKMN_FAN_CLUB_OPINIONS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u8 friendshipHighNybble:4;
|
||||
/*0x04*/ u8 questionAsked:4;
|
||||
/*0x05*/ u8 playerName[8];
|
||||
/*0x0D*/ u8 language;
|
||||
/*0x0E*/ u8 pokemonNameLanguage;
|
||||
/*0x0F*/ u8 filler_0F[1];
|
||||
/*0x10*/ u8 nickname[8];
|
||||
/*0x18*/ u8 filler_18[4];
|
||||
/*0x1C*/ u16 words[4];
|
||||
} fanclubOpinions;
|
||||
|
||||
// TVSHOW_UNKN_SHOWTYPE_04 (dummied out)
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 pad02[4];
|
||||
/*0x06*/ u16 var06;
|
||||
/*0x08*/ u8 pad_08[3];
|
||||
/*0x0b*/ u8 string_0b[12];
|
||||
/*0x17*/ u8 language;
|
||||
} unkShow04;
|
||||
|
||||
// TVSHOW_NAME_RATER_SHOW
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u8 pokemonName[11];
|
||||
/*0x0F*/ u8 trainerName[11];
|
||||
/*0x1A*/ u8 random;
|
||||
/*0x1B*/ u8 random2;
|
||||
/*0x1C*/ u16 randomSpecies;
|
||||
/*0x1E*/ u8 language;
|
||||
/*0x1F*/ u8 pokemonNameLanguage;
|
||||
} nameRaterShow;
|
||||
|
||||
// TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE (contest)
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u16 words[2];
|
||||
/*0x08*/ u8 pokemonNickname[11];
|
||||
/*0x13*/ u8 contestCategory:3;
|
||||
/*0x13*/ u8 contestRank:2;
|
||||
/*0x13*/ u8 contestResult:2;
|
||||
/*0x14*/ u16 move;
|
||||
/*0x16*/ u8 playerName[8];
|
||||
/*0x1E*/ u8 language;
|
||||
/*0x1F*/ u8 pokemonNameLanguage;
|
||||
} bravoTrainer;
|
||||
|
||||
// TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 trainerName[8];
|
||||
/*0x0A*/ u16 species;
|
||||
/*0x0C*/ u8 pokemonName[8];
|
||||
/*0x14*/ u16 defeatedSpecies;
|
||||
/*0x16*/ u16 numFights;
|
||||
/*0x18*/ u16 words[1];
|
||||
/*0x1A*/ u8 btLevel;
|
||||
/*0x1B*/ u8 interviewResponse;
|
||||
/*0x1C*/ bool8 wonTheChallenge;
|
||||
/*0x1D*/ u8 language;
|
||||
/*0x1E*/ u8 pokemonNameLanguage;
|
||||
} bravoTrainerTower;
|
||||
|
||||
// TVSHOW_CONTEST_LIVE_UPDATES
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 winningSpecies;
|
||||
/*0x04*/ u8 winningTrainerName[8];
|
||||
/*0x0C*/ u8 appealFlags2;
|
||||
/*0x0D*/ u8 round1Rank;
|
||||
/*0x0e*/ u8 round2Rank;
|
||||
/*0x0f*/ u8 appealFlags1;
|
||||
/*0x10*/ u16 move;
|
||||
/*0x12*/ u16 species;
|
||||
/*0x14*/ u8 playerName[8];
|
||||
/*0x1C*/ u8 category;
|
||||
/*0x1D*/ u8 language;
|
||||
/*0x1E*/ u8 winningTrainerLanguage;
|
||||
} contestLiveUpdates;
|
||||
|
||||
// TVSHOW_3_CHEERS_FOR_POKEBLOCKS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 sheen;
|
||||
/*0x03*/ u8 flavor:3;
|
||||
/*0x03*/ u8 unk_03_3:2;
|
||||
/*0x04*/ u8 worstBlenderName[8];
|
||||
/*0x0C*/ u8 playerName[8];
|
||||
/*0x14*/ u8 language;
|
||||
/*0x15*/ u8 worstBlenderLanguage;
|
||||
} threeCheers;
|
||||
|
||||
// TVSHOW_BATTLE_UPDATE
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x04*/ u8 playerName[8];
|
||||
/*0x0C*/ u8 linkOpponentName[8];
|
||||
/*0x14*/ u16 move;
|
||||
/*0x16*/ u16 species2;
|
||||
/*0x18*/ u8 battleType;
|
||||
/*0x19*/ u8 language;
|
||||
/*0x1A*/ u8 linkOpponentLanguage;
|
||||
} battleUpdate;
|
||||
|
||||
// TVSHOW_FAN_CLUB_SPECIAL
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 playerName[8];
|
||||
/*0x0a*/ u8 idLo;
|
||||
/*0x0b*/ u8 idHi;
|
||||
/*0x0c*/ u8 idolName[8];
|
||||
/*0x14*/ u16 words[1];
|
||||
/*0x16*/ u8 score;
|
||||
/*0x17*/ u8 language;
|
||||
/*0x18*/ u8 idolNameLanguage;
|
||||
} fanClubSpecial;
|
||||
|
||||
// TVSHOW_CONTEST_LIVE_UPDATES_2
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 playerName[8];
|
||||
/*0x0a*/ u8 contestCategory;
|
||||
/*0x0b*/ u8 nickname[11];
|
||||
/*0x16*/ u8 pokeblockState;
|
||||
/*0x17*/ u8 language;
|
||||
/*0x18*/ u8 pokemonNameLanguage;
|
||||
} contestLiveUpdates2;
|
||||
|
||||
// Record Mixing Shows
|
||||
// TVSHOW_POKEMON_TODAY_CAUGHT
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 language;
|
||||
/*0x03*/ u8 language2;
|
||||
/*0x04*/ u8 nickname[11];
|
||||
/*0x0F*/ u8 ball;
|
||||
/*0x10*/ u16 species;
|
||||
/*0x12*/ u8 nBallsUsed;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} pokemonToday;
|
||||
|
||||
// TVSHOW_SMART_SHOPPER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 priceReduced;
|
||||
/*0x03*/ u8 language;
|
||||
/*0x04*/ u8 pad04[2];
|
||||
/*0x06*/ u16 itemIds[3];
|
||||
/*0x0C*/ u16 itemAmounts[3];
|
||||
/*0x12*/ u8 shopLocation;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} smartshopperShow;
|
||||
|
||||
// TVSHOW_POKEMON_TODAY_FAILED
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 language;
|
||||
/*0x03*/ u8 pad03[9];
|
||||
/*0x0c*/ u16 species;
|
||||
/*0x0e*/ u16 species2;
|
||||
/*0x10*/ u8 nBallsUsed;
|
||||
/*0x11*/ u8 outcome;
|
||||
/*0x12*/ u8 location;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} pokemonTodayFailed;
|
||||
|
||||
// TVSHOW_FISHING_ADVICE
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 nBites;
|
||||
/*0x03*/ u8 nFails;
|
||||
/*0x04*/ u16 species;
|
||||
/*0x06*/ u8 language;
|
||||
/*0x07*/ u8 pad07[12];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} pokemonAngler;
|
||||
|
||||
// TVSHOW_WORLD_OF_MASTERS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 numPokeCaught;
|
||||
/*0x04*/ u16 caughtPoke;
|
||||
/*0x06*/ u16 steps;
|
||||
/*0x08*/ u16 species;
|
||||
/*0x0a*/ u8 location;
|
||||
/*0x0b*/ u8 language;
|
||||
/*0x0c*/ u8 pad0c[7];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} worldOfMasters;
|
||||
|
||||
// TVSHOW_TODAYS_RIVAL_TRAINER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 dexCount;
|
||||
/*0x04*/ u8 badgeCount;
|
||||
/*0x05*/ u8 nSilverSymbols;
|
||||
/*0x06*/ u8 nGoldSymbols;
|
||||
/*0x07*/ u8 location;
|
||||
/*0x08*/ u16 battlePoints;
|
||||
/*0x0a*/ u16 mapDataId;
|
||||
/*0x0c*/ u8 language;
|
||||
/*0x0d*/ u8 filler_0d[6];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} rivalTrainer;
|
||||
|
||||
// TVSHOW_TREND_WATCHER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 filler_02[2];
|
||||
/*0x04*/ u16 words[2];
|
||||
/*0x08*/ u8 gender;
|
||||
/*0x09*/ u8 language;
|
||||
/*0x0a*/ u8 filler_0a[9];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} trendWatcher;
|
||||
|
||||
// TVSHOW_TREASURE_INVESTIGATORS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 item;
|
||||
/*0x04*/ u8 location;
|
||||
/*0x05*/ u8 language;
|
||||
/*0x06*/ u16 mapDataId;
|
||||
/*0x08*/ u8 filler_08[11];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} treasureInvestigators;
|
||||
|
||||
// TVSHOW_FIND_THAT_GAMER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 won;
|
||||
/*0x03*/ u8 whichGame;
|
||||
/*0x04*/ u16 nCoins;
|
||||
/*0x06*/ u8 filler_06[2];
|
||||
/*0x08*/ u8 language;
|
||||
/*0x09*/ u8 filler_09[10];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} findThatGamer;
|
||||
|
||||
// TVSHOW_BREAKING_NEWS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 lastOpponentSpecies;
|
||||
/*0x04*/ u8 location;
|
||||
/*0x05*/ u8 outcome;
|
||||
/*0x06*/ u16 caughtMonBall;
|
||||
/*0x08*/ u16 balls;
|
||||
/*0x0a*/ u16 poke1Species;
|
||||
/*0x0c*/ u16 lastUsedMove;
|
||||
/*0x0e*/ u8 language;
|
||||
/*0x0f*/ u8 filler_0f[4];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} breakingNews;
|
||||
|
||||
// TVSHOW_SECRET_BASE_VISIT
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 avgLevel;
|
||||
/*0x03*/ u8 nDecorations;
|
||||
/*0x04*/ u8 decorations[4];
|
||||
/*0x08*/ u16 species;
|
||||
/*0x0a*/ u16 move;
|
||||
/*0x0c*/ u8 language;
|
||||
/*0x0d*/ u8 filler_0d[6];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} secretBaseVisit;
|
||||
|
||||
// TVSHOW_LOTTO_WINNER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 item;
|
||||
/*0x04*/ u8 whichPrize;
|
||||
/*0x05*/ u8 language;
|
||||
/*0x06*/ u8 filler_06[13];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} lottoWinner;
|
||||
|
||||
// TVSHOW_BATTLE_SEMINAR
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 move;
|
||||
/*0x04*/ u16 foeSpecies;
|
||||
/*0x06*/ u16 species;
|
||||
/*0x08*/ u16 otherMoves[3];
|
||||
/*0x0e*/ u16 betterMove;
|
||||
/*0x10*/ u8 nOtherMoves;
|
||||
/*0x11*/ u8 language;
|
||||
/*0x12*/ u8 filler_12[1];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} battleSeminar;
|
||||
|
||||
// TVSHOW_TRAINER_FAN_CLUB
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 filler_02[2];
|
||||
/*0x04*/ u16 words[2];
|
||||
/*0x08*/ u8 language;
|
||||
/*0x09*/ u8 filler_09[10];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} trainerFanClub;
|
||||
|
||||
// TVSHOW_CUTIES
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 nRibbons;
|
||||
/*0x03*/ u8 selectedRibbon;
|
||||
/*0x04*/ u8 nickname[11];
|
||||
/*0x0f*/ u8 language;
|
||||
/*0x10*/ u8 pokemonNameLanguage;
|
||||
/*0x11*/ u8 filler_12[2];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} cuties;
|
||||
|
||||
// TVSHOW_FRONTIER
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 winStreak;
|
||||
/*0x04*/ u16 species1;
|
||||
/*0x06*/ u16 species2;
|
||||
/*0x08*/ u16 species3;
|
||||
/*0x0a*/ u16 species4;
|
||||
/*0x0c*/ u8 language;
|
||||
/*0x0d*/ u8 facility;
|
||||
/*0x0e*/ u8 filler_0e[5];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} frontier;
|
||||
|
||||
// TVSHOW_NUMBER_ONE
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 count;
|
||||
/*0x04*/ u8 actionIdx;
|
||||
/*0x05*/ u8 language;
|
||||
/*0x06*/ u8 filler_06[13];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} numberOne;
|
||||
|
||||
// TVSHOW_SECRET_BASE_SECRETS
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 stepsInBase;
|
||||
/*0x04*/ u8 baseOwnersName[8];
|
||||
/*0x0c*/ u32 flags;
|
||||
/*0x10*/ u16 item;
|
||||
/*0x12*/ u8 savedState;
|
||||
/*0x13*/ u8 playerName[8];
|
||||
/*0x1b*/ u8 language;
|
||||
/*0x1c*/ u8 baseOwnersNameLanguage;
|
||||
} secretBaseSecrets;
|
||||
|
||||
// TVSHOW_SAFARI_FAN_CLUB
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 nMonsCaught;
|
||||
/*0x03*/ u8 nPkblkUsed;
|
||||
/*0x04*/ u8 language;
|
||||
/*0x05*/ u8 filler_05[14];
|
||||
/*0x13*/ u8 playerName[8];
|
||||
} safariFanClub;
|
||||
|
||||
// Mass Outbreak
|
||||
// TVSHOW_MASS_OUTBREAK
|
||||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 var02;
|
||||
/*0x03*/ u8 var03;
|
||||
/*0x04*/ u16 moves[4];
|
||||
/*0x0C*/ u16 species;
|
||||
/*0x0E*/ u16 var0E;
|
||||
/*0x10*/ u8 locationMapNum;
|
||||
/*0x11*/ u8 locationMapGroup;
|
||||
/*0x12*/ u8 var12;
|
||||
/*0x13*/ u8 probability;
|
||||
/*0x14*/ u8 level;
|
||||
/*0x15*/ u8 var15;
|
||||
/*0x16*/ u16 daysLeft;
|
||||
/*0x18*/ u8 language;
|
||||
} massOutbreak;
|
||||
} TVShow;
|
||||
|
||||
enum {
|
||||
POKENEWS_NONE,
|
||||
POKENEWS_SLATEPORT,
|
||||
POKENEWS_GAME_CORNER,
|
||||
POKENEWS_LILYCOVE,
|
||||
POKENEWS_BLENDMASTER
|
||||
};
|
||||
|
||||
typedef struct // 2b50
|
||||
{
|
||||
u8 kind;
|
||||
u8 state;
|
||||
u16 days;
|
||||
} PokeNews;
|
||||
|
||||
struct GabbyAndTyData
|
||||
{
|
||||
/*2ba4*/ u16 mon1;
|
||||
/*2ba6*/ u16 mon2;
|
||||
/*2ba8*/ u16 lastMove;
|
||||
/*2baa*/ u16 quote[1];
|
||||
/*2bac*/ u8 mapnum;
|
||||
/*2bad*/ u8 battleNum;
|
||||
/*2bae*/ u8 battleTookMoreThanOneTurn:1;
|
||||
/*2bae*/ u8 playerLostAMon:1;
|
||||
/*2bae*/ u8 playerUsedAnItem:1;
|
||||
/*2bae*/ u8 playerThrewABall:1;
|
||||
/*2bae*/ u8 onAir:1;
|
||||
/*2bae*/ u8 valA_5:3;
|
||||
/*2baf*/ u8 battleTookMoreThanOneTurn2:1;
|
||||
/*2baf*/ u8 playerLostAMon2:1;
|
||||
/*2baf*/ u8 playerUsedAnItem2:1;
|
||||
/*2baf*/ u8 playerThrewABall2:1;
|
||||
/*2baf*/ u8 valB_4:4;
|
||||
};
|
||||
|
||||
#endif //GUARD_GLOBAL_TV_H
|
@ -6,6 +6,9 @@
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
void sub_81DB52C(const u8 *src);
|
||||
void TVShowConvertInternationalString(void *dest, const void *src, u8 language);
|
||||
u32 sub_81DB604(const u8 *);
|
||||
|
||||
#endif //GUARD_INTERNATIONAL_STRING_UTIL_H
|
||||
|
@ -58,5 +58,6 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
|
||||
u8 ItemId_GetBattleUsage(u16 itemId);
|
||||
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
|
||||
u8 ItemId_GetSecondaryId(u16 itemId);
|
||||
u16 itemid_get_market_price(u16 itemId);
|
||||
|
||||
#endif // ITEM_H
|
||||
|
@ -177,12 +177,12 @@ u32 LinkMain1(u8 *, u16 *, u16[CMD_LENGTH][MAX_LINK_PLAYERS]);
|
||||
void LinkVSync(void);
|
||||
void Timer3Intr(void);
|
||||
void SerialCB(void);
|
||||
u8 GetLinkPlayerCount(void);
|
||||
|
||||
void sub_800E0E8(void);
|
||||
bool8 sub_800A520(void);
|
||||
bool8 sub_8010500(void);
|
||||
void sub_800DFB4(u8, u8);
|
||||
void sub_800ADF8(void);
|
||||
u8 sub_8009FCC(void);
|
||||
|
||||
#endif // GUARD_LINK_H
|
||||
|
@ -359,6 +359,7 @@ enum
|
||||
MOVE_DOOM_DESIRE,
|
||||
MOVE_PSYCHO_BOOST,
|
||||
};
|
||||
extern const u8 gMoveNames[][13];
|
||||
|
||||
#define LAST_MOVE_INDEX MOVE_PSYCHO_BOOST
|
||||
|
||||
|
@ -16,6 +16,8 @@ enum
|
||||
FLAG_SET_CAUGHT
|
||||
};
|
||||
|
||||
u8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
|
||||
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
|
||||
u16 pokedex_count(u8);
|
||||
u16 sub_80C0844(u8);
|
||||
|
||||
#endif // GUARD_POKEDEX_H
|
||||
|
@ -642,6 +642,7 @@ void UpdatePartyPokerusTime(u16 days);
|
||||
void PartySpreadPokerus(struct Pokemon *party);
|
||||
s8 GetMonFlavourRelation(struct Pokemon *mon, u8 a2);
|
||||
s8 GetFlavourRelationByPersonality(u32 personality, u8 a2);
|
||||
u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
|
||||
|
||||
#include "sprite.h"
|
||||
|
||||
|
@ -3,6 +3,60 @@
|
||||
|
||||
#include "pokemon.h"
|
||||
|
||||
// TODO once pokemon item effects is decompiled
|
||||
/*
|
||||
struct PokemonItemEffect
|
||||
{
|
||||
//field 0
|
||||
u8 xAtk : 4; // x1, x2, x4, x8 = xF
|
||||
u8 field_0_x10 : 1; // x10
|
||||
u8 critRatioUp : 1; // x20
|
||||
u8 field_0_x40 : 1; // x40
|
||||
u8 cureInfatuation : 1; // x80
|
||||
|
||||
/*field 1
|
||||
u8 xSpeed : 4; // x1, x2, x4, x8 = xF
|
||||
u8 xDefense : 4; // x10, x20, x40, xF0
|
||||
|
||||
/*field 2
|
||||
u8 xSpAtk : 4; // x1, x2, x4, x8 = xF
|
||||
u8 xAccuracy : 4; // x10, x20, x40, xF0
|
||||
|
||||
/*field 3
|
||||
u8 cureConfusion : 1; // x1
|
||||
u8 cureParalysis : 1; // x2
|
||||
u8 cureFreeze : 1; // x4
|
||||
u8 cureBurn : 1; // x8
|
||||
u8 curePoison : 1; // x10
|
||||
u8 cureSleep : 1; // x20
|
||||
u8 field_3_x40 : 1; // x40
|
||||
u8 cantLowerStats : 1; // x80
|
||||
|
||||
/*field 4
|
||||
u8 hpEv : 1; // x1
|
||||
u8 attackEv : 1; // x2
|
||||
u8 healHp : 1; // x4
|
||||
u8 field_4_x8 : 1; // x8
|
||||
u8 field_4_x10 : 1; // x10
|
||||
u8 ppUp : 1; // x20
|
||||
u8 levelUp : 1; // x40
|
||||
u8 evolutionStone : 1; // x80
|
||||
|
||||
/*field 5
|
||||
u8 defEv: 1; // x1
|
||||
u8 speedEv : 1; // x2
|
||||
u8 spDefEv : 1; // x4
|
||||
u8 spAtkEv : 1; // x8
|
||||
u8 ppMax : 1; // x10
|
||||
u8 field_5_x20 : 1; // x20
|
||||
u8 field_5_x40 : 1; // x40
|
||||
u8 field_5_x80 : 1; // x80
|
||||
|
||||
/*field 6
|
||||
u8 value;
|
||||
};
|
||||
*/
|
||||
|
||||
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 itemId, u8 partyId, u8 monMoveIndex, u8 a5);
|
||||
|
||||
#endif // GUARD_POKEMON_ITEM_EFFECTS
|
||||
|
@ -2,5 +2,7 @@
|
||||
#define GUARD_POKEMON_STORAGE_SYSTEM_H
|
||||
|
||||
u8* GetBoxNamePtr(u8 boxNumber);
|
||||
struct BoxPokemon *GetBoxedMonPtr(u8, u8);
|
||||
void SetBoxMonNickFromAnyBox(u8, u8, u8 *);
|
||||
|
||||
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
|
||||
|
227
include/region_map.h
Normal file
227
include/region_map.h
Normal file
@ -0,0 +1,227 @@
|
||||
#ifndef GUARD_REGION_MAP_H
|
||||
#define GUARD_REGION_MAP_H
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
enum {
|
||||
REGION_MAP_LITTLEROOT_TOWN,
|
||||
REGION_MAP_OLDALE_TOWN,
|
||||
REGION_MAP_DEWFORD_TOWN,
|
||||
REGION_MAP_LAVARIDGE_TOWN,
|
||||
REGION_MAP_FALLARBOR_TOWN,
|
||||
REGION_MAP_VERDANTURF_TOWN,
|
||||
REGION_MAP_PACIFIDLOG_TOWN,
|
||||
REGION_MAP_PETALBURG_CITY,
|
||||
REGION_MAP_SLATEPORT_CITY,
|
||||
REGION_MAP_MAUVILLE_CITY,
|
||||
REGION_MAP_RUSTBORO_CITY,
|
||||
REGION_MAP_FORTREE_CITY,
|
||||
REGION_MAP_LILYCOVE_CITY,
|
||||
REGION_MAP_MOSSDEEP_CITY,
|
||||
REGION_MAP_SOOTOPOLIS_CITY,
|
||||
REGION_MAP_EVER_GRANDE_CITY,
|
||||
REGION_MAP_ROUTE_101,
|
||||
REGION_MAP_ROUTE_102,
|
||||
REGION_MAP_ROUTE_103,
|
||||
REGION_MAP_ROUTE_104,
|
||||
REGION_MAP_ROUTE_105,
|
||||
REGION_MAP_ROUTE_106,
|
||||
REGION_MAP_ROUTE_107,
|
||||
REGION_MAP_ROUTE_108,
|
||||
REGION_MAP_ROUTE_109,
|
||||
REGION_MAP_ROUTE_110,
|
||||
REGION_MAP_ROUTE_111,
|
||||
REGION_MAP_ROUTE_112,
|
||||
REGION_MAP_ROUTE_113,
|
||||
REGION_MAP_ROUTE_114,
|
||||
REGION_MAP_ROUTE_115,
|
||||
REGION_MAP_ROUTE_116,
|
||||
REGION_MAP_ROUTE_117,
|
||||
REGION_MAP_ROUTE_118,
|
||||
REGION_MAP_ROUTE_119,
|
||||
REGION_MAP_ROUTE_120,
|
||||
REGION_MAP_ROUTE_121,
|
||||
REGION_MAP_ROUTE_122,
|
||||
REGION_MAP_ROUTE_123,
|
||||
REGION_MAP_ROUTE_124,
|
||||
REGION_MAP_ROUTE_125,
|
||||
REGION_MAP_ROUTE_126,
|
||||
REGION_MAP_ROUTE_127,
|
||||
REGION_MAP_ROUTE_128,
|
||||
REGION_MAP_ROUTE_129,
|
||||
REGION_MAP_ROUTE_130,
|
||||
REGION_MAP_ROUTE_131,
|
||||
REGION_MAP_ROUTE_132,
|
||||
REGION_MAP_ROUTE_133,
|
||||
REGION_MAP_ROUTE_134,
|
||||
REGION_MAP_UNDERWATER_124,
|
||||
REGION_MAP_UNDERWATER_125,
|
||||
REGION_MAP_UNDERWATER_126,
|
||||
REGION_MAP_UNDERWATER_127,
|
||||
REGION_MAP_UNDERWATER_128,
|
||||
REGION_MAP_GRANITE_CAVE,
|
||||
REGION_MAP_MT_CHIMNEY,
|
||||
REGION_MAP_SAFARI_ZONE,
|
||||
REGION_MAP_BATTLE_FRONTIER,
|
||||
REGION_MAP_PETALBURG_WOODS,
|
||||
REGION_MAP_RUSTURF_TUNNEL,
|
||||
REGION_MAP_ABANDONED_SHIP,
|
||||
REGION_MAP_NEW_MAUVILLE,
|
||||
REGION_MAP_METEOR_FALLS,
|
||||
REGION_MAP_METEOR_FALLS2,
|
||||
REGION_MAP_MT_PYRE,
|
||||
REGION_MAP_AQUA_HIDEOUT_OLD,
|
||||
REGION_MAP_SHOAL_CAVE,
|
||||
REGION_MAP_SEAFLOOR_CAVERN,
|
||||
REGION_MAP_UNDERWATER,
|
||||
REGION_MAP_VICTORY_ROAD,
|
||||
REGION_MAP_MIRAGE_ISLAND,
|
||||
REGION_MAP_CAVE_OF_ORIGIN,
|
||||
REGION_MAP_SOUTHERN_ISLAND,
|
||||
REGION_MAP_FIERY_PATH,
|
||||
REGION_MAP_FIERY_PATH2,
|
||||
REGION_MAP_JAGGED_PASS,
|
||||
REGION_MAP_JAGGED_PASS2,
|
||||
REGION_MAP_SEALED_CHAMBER,
|
||||
REGION_MAP_UNDERWATER_SEALED_CHAMBER,
|
||||
REGION_MAP_SCORCHED_SLAB,
|
||||
REGION_MAP_ISLAND_CAVE,
|
||||
REGION_MAP_DESERT_RUINS,
|
||||
REGION_MAP_ANCIENT_TOMB,
|
||||
REGION_MAP_INSIDE_OF_TRUCK,
|
||||
REGION_MAP_SKY_PILLAR,
|
||||
REGION_MAP_SECRET_BASE,
|
||||
REGION_MAP_NONE,
|
||||
REGION_MAP_PALLET_TOWN,
|
||||
REGION_MAP_VIRIDIAN_CITY,
|
||||
REGION_MAP_PEWTER_CITY,
|
||||
REGION_MAP_CERULEAN_CITY,
|
||||
REGION_MAP_LAVENDER_TOWN,
|
||||
REGION_MAP_VERMILION_CITY,
|
||||
REGION_MAP_CELADON_CITY,
|
||||
REGION_MAP_FUCHSIA_CITY,
|
||||
REGION_MAP_CINNABAR_ISLAND,
|
||||
REGION_MAP_INDIGO_PLATEAU,
|
||||
REGION_MAP_SAFFRON_CITY,
|
||||
REGION_MAP_ROUTE_4,
|
||||
REGION_MAP_ROUTE_10,
|
||||
REGION_MAP_ROUTE_1,
|
||||
REGION_MAP_ROUTE_2,
|
||||
REGION_MAP_ROUTE_3,
|
||||
REGION_MAP_ROUTE_4_2,
|
||||
REGION_MAP_ROUTE_5,
|
||||
REGION_MAP_ROUTE_6,
|
||||
REGION_MAP_ROUTE_7,
|
||||
REGION_MAP_ROUTE_8,
|
||||
REGION_MAP_ROUTE_9,
|
||||
REGION_MAP_ROUTE_10_2,
|
||||
REGION_MAP_ROUTE_11,
|
||||
REGION_MAP_ROUTE_12,
|
||||
REGION_MAP_ROUTE_13,
|
||||
REGION_MAP_ROUTE_14,
|
||||
REGION_MAP_ROUTE_15,
|
||||
REGION_MAP_ROUTE_16,
|
||||
REGION_MAP_ROUTE_17,
|
||||
REGION_MAP_ROUTE_18,
|
||||
REGION_MAP_ROUTE_19,
|
||||
REGION_MAP_ROUTE_20,
|
||||
REGION_MAP_ROUTE_21,
|
||||
REGION_MAP_ROUTE_22,
|
||||
REGION_MAP_ROUTE_23,
|
||||
REGION_MAP_ROUTE_24,
|
||||
REGION_MAP_ROUTE_25,
|
||||
REGION_MAP_VIRIDIAN_FOREST,
|
||||
REGION_MAP_MT_MOON,
|
||||
REGION_MAP_S_S_ANNE,
|
||||
REGION_MAP_UNDERGROUND_PATH,
|
||||
REGION_MAP_UNDERGROUND_PATH_2,
|
||||
REGION_MAP_DIGLETTS_CAVE,
|
||||
REGION_MAP_KANTO_VICTORY_ROAD,
|
||||
REGION_MAP_ROCKET_HIDEOUT,
|
||||
REGION_MAP_SILPH_CO,
|
||||
REGION_MAP_POKEMON_MANSION,
|
||||
REGION_MAP_KANTO_SAFARI_ZONE,
|
||||
REGION_MAP_POKEMON_LEAGUE,
|
||||
REGION_MAP_ROCK_TUNNEL,
|
||||
REGION_MAP_SEAFOAM_ISLANDS,
|
||||
REGION_MAP_POKEMON_TOWER,
|
||||
REGION_MAP_CERULEAN_CAVE,
|
||||
REGION_MAP_POWER_PLANT,
|
||||
REGION_MAP_ONE_ISLAND,
|
||||
REGION_MAP_TWO_ISLAND,
|
||||
REGION_MAP_THREE_ISLAND,
|
||||
REGION_MAP_FOUR_ISLAND,
|
||||
REGION_MAP_FIVE_ISLAND,
|
||||
REGION_MAP_SEVEN_ISLAND,
|
||||
REGION_MAP_SIX_ISLAND,
|
||||
REGION_MAP_KINDLE_ROAD,
|
||||
REGION_MAP_TREASURE_BEACH,
|
||||
REGION_MAP_CAPE_BRINK,
|
||||
REGION_MAP_BOND_BRIDGE,
|
||||
REGION_MAP_THREE_ISLE_PORT,
|
||||
REGION_MAP_SEVII_ISLE_6,
|
||||
REGION_MAP_SEVII_ISLE_7,
|
||||
REGION_MAP_SEVII_ISLE_8,
|
||||
REGION_MAP_SEVII_ISLE_9,
|
||||
REGION_MAP_RESORT_GORGEOUS,
|
||||
REGION_MAP_WATER_LABYRINTH,
|
||||
REGION_MAP_FIVE_ISLE_MEADOW,
|
||||
REGION_MAP_MEMORIAL_PILLAR,
|
||||
REGION_MAP_OUTCAST_ISLAND,
|
||||
REGION_MAP_GREEN_PATH,
|
||||
REGION_MAP_WATER_PATH,
|
||||
REGION_MAP_RUIN_VALLEY,
|
||||
REGION_MAP_TRAINER_TOWER,
|
||||
REGION_MAP_CANYON_ENTRANCE,
|
||||
REGION_MAP_SEVAULT_CANYON,
|
||||
REGION_MAP_TANOBY_RUINS,
|
||||
REGION_MAP_SEVII_ISLE_22,
|
||||
REGION_MAP_SEVII_ISLE_23,
|
||||
REGION_MAP_SEVII_ISLE_24,
|
||||
REGION_MAP_NAVEL_ROCK,
|
||||
REGION_MAP_MT_EMBER,
|
||||
REGION_MAP_BERRY_FOREST,
|
||||
REGION_MAP_ICEFALL_CAVE,
|
||||
REGION_MAP_ROCKET_WAREHOUSE,
|
||||
REGION_MAP_TRAINER_TOWER_2,
|
||||
REGION_MAP_DOTTED_HOLE,
|
||||
REGION_MAP_LOST_CAVE,
|
||||
REGION_MAP_PATTERN_BUSH,
|
||||
REGION_MAP_ALTERING_CAVE,
|
||||
REGION_MAP_TANOBY_CHAMBERS,
|
||||
REGION_MAP_THREE_ISLE_PATH,
|
||||
REGION_MAP_TANOBY_KEY,
|
||||
REGION_MAP_BIRTH_ISLAND,
|
||||
REGION_MAP_MONEAN_CHAMBER,
|
||||
REGION_MAP_LIPTOO_CHAMBER,
|
||||
REGION_MAP_WEEPTH_CHAMBER,
|
||||
REGION_MAP_DILFORD_CHAMBER,
|
||||
REGION_MAP_SCUFIB_CHAMBER,
|
||||
REGION_MAP_RIXY_CHAMBER,
|
||||
REGION_MAP_VIAPOIS_CHAMBER,
|
||||
REGION_MAP_EMBER_SPA,
|
||||
REGION_MAP_SPECIAL_AREA,
|
||||
REGION_MAP_AQUA_HIDEOUT,
|
||||
REGION_MAP_MAGMA_HIDEOUT,
|
||||
REGION_MAP_MIRAGE_TOWER,
|
||||
REGION_MAP_BIRTH_ISLAND_2,
|
||||
REGION_MAP_FARAWAY_ISLAND,
|
||||
REGION_MAP_ARTISAN_CAVE,
|
||||
REGION_MAP_MARINE_CAVE,
|
||||
REGION_MAP_UNDERWATER_MARINE_CAVE,
|
||||
REGION_MAP_TERRA_CAVE,
|
||||
REGION_MAP_UNDERWATER_TERRA_CAVE,
|
||||
REGION_MAP_UNDERWATER_UNK1,
|
||||
REGION_MAP_UNDERWATER_UNK2,
|
||||
REGION_MAP_DESERT_UNDERPASS,
|
||||
REGION_MAP_ALTERING_CAVE_2,
|
||||
REGION_MAP_NAVEL_ROCK2,
|
||||
REGION_MAP_TRAINER_HILL
|
||||
};
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
void GetMapName(u8 *, u16, u16);
|
||||
|
||||
#endif //GUARD_REGION_MAP_H
|
@ -30,5 +30,6 @@ void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *);
|
||||
void sub_8086230(void);
|
||||
void c2_exit_to_overworld_2_switch(void);
|
||||
bool32 sub_8087598(void);
|
||||
void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
|
||||
|
||||
#endif //GUARD_ROM4_H
|
||||
|
@ -2,5 +2,6 @@
|
||||
#define GUARD_ROM6_H
|
||||
|
||||
void sub_81357FC(u8, void(void));
|
||||
u8 GetIdxOfFirstPartyMemberThatIsNotAnEgg(void);
|
||||
|
||||
#endif //GUARD_ROM6_H
|
||||
|
11
include/script_menu.h
Normal file
11
include/script_menu.h
Normal file
@ -0,0 +1,11 @@
|
||||
#ifndef GUARD_SCRIPT_MENU_H
|
||||
#define GUARD_SCRIPT_MENU_H
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
extern const u8 *const gUnknown_0858BAF0[9];
|
||||
|
||||
#endif //GUARD_SCRIPT_MENU_H
|
11
include/secret_base.h
Normal file
11
include/secret_base.h
Normal file
@ -0,0 +1,11 @@
|
||||
#ifndef GUARD_SECRET_BASE_H
|
||||
#define GUARD_SECRET_BASE_H
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
void sub_80E980C(void);
|
||||
|
||||
#endif //GUARD_SECRET_BASE_H
|
12
include/shop.h
Normal file
12
include/shop.h
Normal file
@ -0,0 +1,12 @@
|
||||
#ifndef GUARD_SHOP_H
|
||||
#define GUARD_SHOP_H
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3];
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
#endif //GUARD_SHOP_H
|
@ -449,5 +449,6 @@ enum
|
||||
};
|
||||
|
||||
#define NUM_SPECIES SPECIES_EGG
|
||||
extern const u8 gSpeciesNames[][11];
|
||||
|
||||
#endif // GUARD_SPECIES_H
|
||||
|
@ -31,7 +31,7 @@ u8 *StringFillWithTerminator(u8 *dest, u16 n);
|
||||
u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n);
|
||||
u32 StringLength_Multibyte(u8 *str);
|
||||
u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color);
|
||||
bool32 sub_8009228(u8 *str);
|
||||
bool32 IsStringJapanese(u8 *str);
|
||||
bool32 sub_800924C(u8 *str, s32 n);
|
||||
u8 GetExtCtrlCodeLength(u8 code);
|
||||
static const u8 *SkipExtCtrlCode(const u8 *s);
|
||||
|
@ -8,5 +8,33 @@
|
||||
// Exported ROM declarations
|
||||
|
||||
extern const u8 gText_FromSpace[];
|
||||
extern const u8 gText_Lv50[];
|
||||
extern const u8 gText_OpenLevel[];
|
||||
extern const u8 gText_Mom[];
|
||||
extern const u8 gText_Dad[];
|
||||
extern const u8 gText_Cool[];
|
||||
extern const u8 gText_Beauty[];
|
||||
extern const u8 gText_Cute[];
|
||||
extern const u8 gText_Smart[];
|
||||
extern const u8 gText_Tough[];
|
||||
extern const u8 gText_Single[];
|
||||
extern const u8 gText_Double[];
|
||||
extern const u8 gText_Spicy2[];
|
||||
extern const u8 gText_Dry2[];
|
||||
extern const u8 gText_Sweet2[];
|
||||
extern const u8 gText_Bitter2[];
|
||||
extern const u8 gText_Sour2[];
|
||||
extern const u8 gText_Excellent[];
|
||||
extern const u8 gText_VeryGood[];
|
||||
extern const u8 gText_Good[];
|
||||
extern const u8 gText_SoSo[];
|
||||
extern const u8 gText_Bad[];
|
||||
extern const u8 gText_TheWorst[];
|
||||
extern const u8 gText_Slots[];
|
||||
extern const u8 gText_Roulette[];
|
||||
extern const u8 gText_Jackpot[];
|
||||
extern const u8 gText_First[];
|
||||
extern const u8 gText_Second[];
|
||||
extern const u8 gText_Third[];
|
||||
|
||||
#endif //GUARD_STRINGS_H
|
||||
|
21
include/tv.h
Normal file
21
include/tv.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef GUARD_TV_H
|
||||
#define GUARD_TV_H
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
extern u8 *const gTVStringVarPtrs[3];
|
||||
|
||||
void ClearTVShowData(void);
|
||||
void PutPokemonTodayCaughtOnAir(void);
|
||||
u32 GetPlayerIDAsU32(void);
|
||||
bool8 GetPriceReduction(u8 newsKind);
|
||||
u8 GetRibbonCount(struct Pokemon *pokemon);
|
||||
void sub_80EE184(void);
|
||||
void sub_80F14F8(TVShow *shows);
|
||||
int sub_80EF370(int value);
|
||||
|
||||
#endif //GUARD_TV_H
|
@ -53,4 +53,14 @@
|
||||
#define VAR_0x40BC 0x40BC
|
||||
#define VAR_0x40C2 0x40C2
|
||||
|
||||
#define VAR_FRONTIER_FACILITY 0x40CF
|
||||
|
||||
#define VAR_DAILY_SLOTS 0x40E6
|
||||
#define VAR_DAILY_WILDS 0x40E7
|
||||
#define VAR_DAILY_BLENDER 0x40E8
|
||||
#define VAR_DAILY_PLANTED_BERRIES 0x40E9
|
||||
#define VAR_DAILY_PICKED_BERRIES 0x40EA
|
||||
#define VAR_DAILY_ROULETTE 0x40EB
|
||||
#define VAR_DAILY_BP 0x40F1
|
||||
|
||||
#endif // GUARD_VARS_H
|
||||
|
@ -64,7 +64,7 @@ SECTIONS {
|
||||
asm/battle_controller_player.o(.text);
|
||||
asm/battle_7.o(.text);
|
||||
asm/battle_controller_opponent.o(.text);
|
||||
asm/battle_9.o(.text);
|
||||
src/battle_ai_switch_items.o(.text);
|
||||
asm/battle_controller_linkopponent.o(.text);
|
||||
src/pokemon_1.o(.text);
|
||||
asm/pokemon_1.o(.text);
|
||||
@ -148,7 +148,7 @@ SECTIONS {
|
||||
asm/contest_effect.o(.text);
|
||||
asm/record_mixing.o(.text);
|
||||
asm/secret_base.o(.text);
|
||||
asm/tv.o(.text);
|
||||
src/tv.o(.text);
|
||||
asm/contest_link_80F57C4.o(.text);
|
||||
asm/script_pokemon_util_80F87D8.o(.text);
|
||||
asm/field_poison.o(.text);
|
||||
@ -388,7 +388,7 @@ SECTIONS {
|
||||
data/contest_effect.o(.rodata);
|
||||
data/record_mixing.o(.rodata);
|
||||
data/secret_base.o(.rodata);
|
||||
data/tv.o(.rodata);
|
||||
src/tv.o(.rodata);
|
||||
data/contest_link_80F57C4.o(.rodata);
|
||||
data/script_pokemon_util_80F87D8.o(.rodata);
|
||||
src/pokemon_size_record.o(.rodata)
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "trainer_classes.h"
|
||||
#include "evolution_scene.h"
|
||||
#include "roamer.h"
|
||||
#include "tv.h"
|
||||
#include "safari_zone.h"
|
||||
#include "battle_string_ids.h"
|
||||
|
||||
@ -64,7 +65,6 @@ struct UnknownPokemonStruct2
|
||||
/*0x1D*/ u8 language;
|
||||
};
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gBattleTerrain;
|
||||
extern u16 gBattle_BG0_X;
|
||||
@ -88,7 +88,6 @@ extern void (*gBattleMainFunc)(void);
|
||||
extern void (*gUnknown_030061E8)(void);
|
||||
extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for?
|
||||
extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for?
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gUnknown_02039B28[]; // possibly a struct?
|
||||
extern struct UnknownStruct6 gUnknown_02038C28; // todo: identify & document
|
||||
extern struct MusicPlayerInfo gMPlay_SE1;
|
||||
@ -139,7 +138,6 @@ extern u8 gActionForBanks[BATTLE_BANKS_COUNT];
|
||||
extern u16 gChosenMovesByBanks[BATTLE_BANKS_COUNT];
|
||||
extern u8 gCurrentActionFuncId;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern const u8* gBattlescriptPtrsForSelection[BATTLE_BANKS_COUNT];
|
||||
extern const u8* gBattlescriptCurrInstr;
|
||||
@ -152,7 +150,6 @@ extern u8 gCurrMovePos;
|
||||
extern u8 gUnknown_020241E9;
|
||||
extern u16 gLastUsedMove;
|
||||
|
||||
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u16 gUnknown_08C004E0[]; // battle textbox palette
|
||||
extern const struct BgTemplate gUnknown_0831AA08[];
|
||||
@ -226,8 +223,6 @@ extern u8 sub_81A9E28(void); // battle frontier 2
|
||||
extern void sub_81A56E8(u8 bank); // battle frontier 2
|
||||
extern void sub_81B8FB0(u8, u8); // party menu
|
||||
extern u8 pokemon_order_func(u8); // party menu
|
||||
extern void sub_80EC728(void); // tv
|
||||
extern void sub_80EE184(void); // tv
|
||||
extern bool8 InBattlePyramid(void);
|
||||
|
||||
// this file's functions
|
||||
@ -859,7 +854,7 @@ static void CB2_HandleStartBattle(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 2 && (gLinkPlayers[i].version & 0xFF) == 3; i++);
|
||||
for (i = 0; i < 2 && (gLinkPlayers[i].version & 0xFF) == VERSION_EMERALD; i++);
|
||||
|
||||
if (i == 2)
|
||||
gBattleCommunication[MULTIUSE_STATE] = 16;
|
||||
@ -2073,7 +2068,7 @@ static void sub_8038F34(void)
|
||||
else
|
||||
monsCount = 2;
|
||||
|
||||
for (i = 0; i < monsCount && (gLinkPlayers[i].version & 0xFF) == 3; i++);
|
||||
for (i = 0; i < monsCount && (gLinkPlayers[i].version & 0xFF) == VERSION_EMERALD; i++);
|
||||
|
||||
if (!gSaveBlock2Ptr->field_CA9_b && i == monsCount)
|
||||
{
|
||||
@ -4927,7 +4922,7 @@ static void HandleEndTurn_FinishBattle(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
sub_80EC728();
|
||||
PutPokemonTodayCaughtOnAir();
|
||||
}
|
||||
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
|
||||
@ -5324,30 +5319,30 @@ static void HandleAction_UseItem(void)
|
||||
{
|
||||
gBattleScripting.bank = gBankAttacker;
|
||||
|
||||
switch (*(gBattleStruct->field_C4 + (gBankAttacker >> 1)))
|
||||
switch (*(gBattleStruct->AI_itemType + (gBankAttacker >> 1)))
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
case AI_ITEM_FULL_RESTORE:
|
||||
case AI_ITEM_HEAL_HP:
|
||||
break;
|
||||
case 3:
|
||||
case AI_ITEM_CURE_CONDITION:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
if (*(gBattleStruct->field_C6 + gBankAttacker / 2) & 1)
|
||||
if (*(gBattleStruct->AI_itemFlags + gBankAttacker / 2) & 1)
|
||||
{
|
||||
if (*(gBattleStruct->field_C6 + gBankAttacker / 2) & 0x3E)
|
||||
if (*(gBattleStruct->AI_itemFlags + gBankAttacker / 2) & 0x3E)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (!(*(gBattleStruct->field_C6 + gBankAttacker / 2) & 1))
|
||||
while (!(*(gBattleStruct->AI_itemFlags + gBankAttacker / 2) & 1))
|
||||
{
|
||||
*(gBattleStruct->field_C6 + gBankAttacker / 2) >>= 1;
|
||||
*(gBattleStruct->AI_itemFlags + gBankAttacker / 2) >>= 1;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER]++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case AI_ITEM_X_STAT:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 4;
|
||||
if (*(gBattleStruct->field_C6 + (gBankAttacker >> 1)) & 0x80)
|
||||
if (*(gBattleStruct->AI_itemFlags + (gBankAttacker >> 1)) & 0x80)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 5;
|
||||
}
|
||||
@ -5356,9 +5351,9 @@ static void HandleAction_UseItem(void)
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK)
|
||||
PREPARE_STRING_BUFFER(gBattleTextBuff2, 0xD2)
|
||||
|
||||
while (!((*(gBattleStruct->field_C6 + (gBankAttacker >> 1))) & 1))
|
||||
while (!((*(gBattleStruct->AI_itemFlags + (gBankAttacker >> 1))) & 1))
|
||||
{
|
||||
*(gBattleStruct->field_C6 + gBankAttacker / 2) >>= 1;
|
||||
*(gBattleStruct->AI_itemFlags + gBankAttacker / 2) >>= 1;
|
||||
gBattleTextBuff1[2]++;
|
||||
}
|
||||
|
||||
@ -5366,7 +5361,7 @@ static void HandleAction_UseItem(void)
|
||||
gBattleScripting.animArg2 = 0;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case AI_ITEM_GUARD_SPECS:
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||
else
|
||||
@ -5374,7 +5369,7 @@ static void HandleAction_UseItem(void)
|
||||
break;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr = gUnknown_082DBD3C[*(gBattleStruct->field_C4 + gBankAttacker / 2)];
|
||||
gBattlescriptCurrInstr = gUnknown_082DBD3C[*(gBattleStruct->AI_itemType + gBankAttacker / 2)];
|
||||
}
|
||||
gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT;
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves)
|
||||
{
|
||||
if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0)
|
||||
{
|
||||
gBattleResources->battleHistory->TrainerItems[gBattleResources->battleHistory->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i];
|
||||
gBattleResources->battleHistory->trainerItems[gBattleResources->battleHistory->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i];
|
||||
gBattleResources->battleHistory->itemsNo++;
|
||||
}
|
||||
}
|
||||
|
951
src/battle_ai_switch_items.c
Normal file
951
src/battle_ai_switch_items.c
Normal file
@ -0,0 +1,951 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "abilities.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon.h"
|
||||
#include "species.h"
|
||||
#include "rng.h"
|
||||
#include "util.h"
|
||||
#include "items.h"
|
||||
#include "pokemon_item_effects.h"
|
||||
|
||||
extern u8 gActiveBank;
|
||||
extern u8 gAbsentBankFlags;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u32 gStatuses3[BATTLE_BANKS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
|
||||
extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
|
||||
extern u16 gUnknown_02024250[BATTLE_BANKS_COUNT];
|
||||
extern u8 gUnknown_02024270[BATTLE_BANKS_COUNT];
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gBattleMoveFlags;
|
||||
extern u8 gCritMultiplier;
|
||||
extern s32 gBattleMoveDamage;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const struct BaseStats gBaseStats[];
|
||||
extern const u8 gTypeEffectiveness[];
|
||||
extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
|
||||
|
||||
// this file's functions
|
||||
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng);
|
||||
static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent);
|
||||
static bool8 ShouldUseItem(void);
|
||||
|
||||
static bool8 ShouldSwitchIfPerishSong(void)
|
||||
{
|
||||
if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG
|
||||
&& gDisableStructs[gActiveBank].perishSong1 == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 ShouldSwitchIfWonderGuard(void)
|
||||
{
|
||||
u8 opposingIdentity;
|
||||
u8 opposingBank;
|
||||
u8 moveFlags;
|
||||
s32 i, j;
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
struct Pokemon *party = NULL;
|
||||
u16 move;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
return FALSE;
|
||||
|
||||
opposingIdentity = GetBankIdentity(gActiveBank) ^ BIT_SIDE;
|
||||
|
||||
if (gBattleMons[GetBankByIdentity(opposingIdentity)].ability != ABILITY_WONDER_GUARD)
|
||||
return FALSE;
|
||||
|
||||
// check if pokemon has a super effective move
|
||||
for (opposingBank = GetBankByIdentity(opposingIdentity), i = 0; i < 4; i++)
|
||||
{
|
||||
move = gBattleMons[gActiveBank].moves[i];
|
||||
if (move == MOVE_NONE)
|
||||
continue;
|
||||
|
||||
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// get party information
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
|
||||
{
|
||||
if ((gActiveBank & BIT_MON) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
}
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
// find a pokemon in the party that has a super effective move
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
|
||||
continue;
|
||||
if (i == gBattlePartyID[gActiveBank])
|
||||
continue;
|
||||
|
||||
GetMonData(&party[i], MON_DATA_SPECIES); // unused return value
|
||||
GetMonData(&party[i], MON_DATA_ALT_ABILITY); // unused return value
|
||||
|
||||
for (opposingBank = GetBankByIdentity(opposingIdentity), j = 0; j < 4; j++)
|
||||
{
|
||||
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
|
||||
if (move == MOVE_NONE)
|
||||
continue;
|
||||
|
||||
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % 3 < 2)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE; // at this point there is not a single pokemon in the party that has a super effective move against a pokemon with wonder guard
|
||||
}
|
||||
|
||||
static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
{
|
||||
u8 bankIn1, bankIn2;
|
||||
u8 absorbingTypeAbility;
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
struct Pokemon *party;
|
||||
s32 i;
|
||||
|
||||
if (HasSuperEffectiveMoveAgainstOpponents(TRUE) && Random() % 3 != 0)
|
||||
return FALSE;
|
||||
if (gUnknown_02024250[gActiveBank] == 0)
|
||||
return FALSE;
|
||||
if (gUnknown_02024250[gActiveBank] == 0xFFFF)
|
||||
return FALSE;
|
||||
if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0)
|
||||
return FALSE;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
bankIn1 = gActiveBank;
|
||||
if (gAbsentBankFlags & gBitTable[GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON)])
|
||||
bankIn2 = gActiveBank;
|
||||
else
|
||||
bankIn2 = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON);
|
||||
}
|
||||
else
|
||||
{
|
||||
bankIn1 = gActiveBank;
|
||||
bankIn2 = gActiveBank;
|
||||
}
|
||||
|
||||
if (gBattleMoves[gUnknown_02024250[gActiveBank]].type == TYPE_FIRE)
|
||||
absorbingTypeAbility = ABILITY_FLASH_FIRE;
|
||||
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].type == TYPE_WATER)
|
||||
absorbingTypeAbility = ABILITY_WATER_ABSORB;
|
||||
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].type == TYPE_ELECTRIC)
|
||||
absorbingTypeAbility = ABILITY_VOLT_ABSORB;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
if (gBattleMons[gActiveBank].ability == absorbingTypeAbility)
|
||||
return FALSE;
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
|
||||
{
|
||||
if ((gActiveBank & BIT_MON) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
}
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
u16 species;
|
||||
u8 monAbility;
|
||||
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn1])
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
continue;
|
||||
|
||||
species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
if (GetMonData(&party[i], MON_DATA_ALT_ABILITY) != 0)
|
||||
monAbility = gBaseStats[species].ability2;
|
||||
else
|
||||
monAbility = gBaseStats[species].ability1;
|
||||
|
||||
if (absorbingTypeAbility == monAbility && Random() & 1)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
{
|
||||
if (!(gBattleMons[gActiveBank].status1 & STATUS_SLEEP))
|
||||
return FALSE;
|
||||
if (gBattleMons[gActiveBank].ability != ABILITY_NATURAL_CURE)
|
||||
return FALSE;
|
||||
if (gBattleMons[gActiveBank].hp < gBattleMons[gActiveBank].maxHP / 2)
|
||||
return FALSE;
|
||||
|
||||
if ((gUnknown_02024250[gActiveBank] == 0 || gUnknown_02024250[gActiveBank] == 0xFFFF) && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0 && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (FindMonWithFlagsAndSuperEffective(MOVESTATUS_NOTAFFECTED, 1))
|
||||
return TRUE;
|
||||
if (FindMonWithFlagsAndSuperEffective(MOVESTATUS_NOTVERYEFFECTIVE, 1))
|
||||
return TRUE;
|
||||
if (Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
|
||||
{
|
||||
u8 opposingIdentity;
|
||||
u8 opposingBank;
|
||||
s32 i;
|
||||
u8 moveFlags;
|
||||
u16 move;
|
||||
|
||||
opposingIdentity = GetBankIdentity(gActiveBank) ^ BIT_SIDE;
|
||||
opposingBank = GetBankByIdentity(opposingIdentity);
|
||||
|
||||
if (!(gAbsentBankFlags & gBitTable[opposingBank]))
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
move = gBattleMons[gActiveBank].moves[i];
|
||||
if (move == MOVE_NONE)
|
||||
continue;
|
||||
|
||||
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE)
|
||||
{
|
||||
if (noRng)
|
||||
return TRUE;
|
||||
if (Random() % 10 != 0)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
|
||||
return FALSE;
|
||||
|
||||
opposingBank = GetBankByIdentity(opposingIdentity ^ BIT_MON);
|
||||
|
||||
if (!(gAbsentBankFlags & gBitTable[opposingBank]))
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
move = gBattleMons[gActiveBank].moves[i];
|
||||
if (move == MOVE_NONE)
|
||||
continue;
|
||||
|
||||
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE)
|
||||
{
|
||||
if (noRng)
|
||||
return TRUE;
|
||||
if (Random() % 10 != 0)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 AreStatsRaised(void)
|
||||
{
|
||||
u8 buffedStatsValue = 0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < BATTLE_STATS_NO; i++)
|
||||
{
|
||||
if (gBattleMons[gActiveBank].statStages[i] > 6)
|
||||
buffedStatsValue += gBattleMons[gActiveBank].statStages[i] - 6;
|
||||
}
|
||||
|
||||
return (buffedStatsValue > 3);
|
||||
}
|
||||
|
||||
static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
{
|
||||
u8 bankIn1, bankIn2;
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
struct Pokemon *party;
|
||||
s32 i, j;
|
||||
u16 move;
|
||||
u8 moveFlags;
|
||||
|
||||
if (gUnknown_02024250[gActiveBank] == 0)
|
||||
return FALSE;
|
||||
if (gUnknown_02024250[gActiveBank] == 0xFFFF)
|
||||
return FALSE;
|
||||
if (gUnknown_02024270[gActiveBank] == 0xFF)
|
||||
return FALSE;
|
||||
if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0)
|
||||
return FALSE;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
bankIn1 = gActiveBank;
|
||||
if (gAbsentBankFlags & gBitTable[GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON)])
|
||||
bankIn2 = gActiveBank;
|
||||
else
|
||||
bankIn2 = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON);
|
||||
}
|
||||
else
|
||||
{
|
||||
bankIn1 = gActiveBank;
|
||||
bankIn2 = gActiveBank;
|
||||
}
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
|
||||
{
|
||||
if ((gActiveBank & BIT_MON) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
}
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
u16 species;
|
||||
u8 monAbility;
|
||||
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn1])
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
continue;
|
||||
|
||||
species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
if (GetMonData(&party[i], MON_DATA_ALT_ABILITY) != 0)
|
||||
monAbility = gBaseStats[species].ability2;
|
||||
else
|
||||
monAbility = gBaseStats[species].ability1;
|
||||
|
||||
moveFlags = AI_TypeCalc(gUnknown_02024250[gActiveBank], species, monAbility);
|
||||
if (moveFlags & flags)
|
||||
{
|
||||
bankIn1 = gUnknown_02024270[gActiveBank];
|
||||
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
|
||||
if (move == 0)
|
||||
continue;
|
||||
|
||||
moveFlags = AI_TypeCalc(move, gBattleMons[bankIn1].species, gBattleMons[bankIn1].ability);
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % moduloPercent == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd_x21(1, 2, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 ShouldSwitch(void)
|
||||
{
|
||||
u8 bankIn1, bankIn2;
|
||||
u8 *activeBankPtr; // needed to match
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
struct Pokemon *party;
|
||||
s32 i;
|
||||
s32 availableToSwitch;
|
||||
|
||||
if (gBattleMons[*(activeBankPtr = &gActiveBank)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
|
||||
return FALSE;
|
||||
if (gStatuses3[gActiveBank] & STATUS3_ROOTED)
|
||||
return FALSE;
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBank, ABILITY_SHADOW_TAG, 0, 0))
|
||||
return FALSE;
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBank, ABILITY_ARENA_TRAP, 0, 0))
|
||||
return FALSE; // misses the flying or levitate check
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MAGNET_PULL, 0, 0))
|
||||
{
|
||||
if (gBattleMons[gActiveBank].type1 == TYPE_STEEL)
|
||||
return FALSE;
|
||||
if (gBattleMons[gActiveBank].type2 == TYPE_STEEL)
|
||||
return FALSE;
|
||||
}
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
return FALSE;
|
||||
|
||||
availableToSwitch = 0;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
bankIn1 = *activeBankPtr;
|
||||
if (gAbsentBankFlags & gBitTable[GetBankByIdentity(GetBankIdentity(*activeBankPtr) ^ BIT_MON)])
|
||||
bankIn2 = *activeBankPtr;
|
||||
else
|
||||
bankIn2 = GetBankByIdentity(GetBankIdentity(*activeBankPtr) ^ BIT_MON);
|
||||
}
|
||||
else
|
||||
{
|
||||
bankIn1 = *activeBankPtr;
|
||||
bankIn2 = *activeBankPtr;
|
||||
}
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
|
||||
{
|
||||
if ((gActiveBank & BIT_MON) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
}
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn1])
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
continue;
|
||||
|
||||
availableToSwitch++;
|
||||
}
|
||||
|
||||
if (availableToSwitch == 0)
|
||||
return FALSE;
|
||||
if (ShouldSwitchIfPerishSong())
|
||||
return TRUE;
|
||||
if (ShouldSwitchIfWonderGuard())
|
||||
return TRUE;
|
||||
if (FindMonThatAbsorbsOpponentsMove())
|
||||
return TRUE;
|
||||
if (ShouldSwitchIfNaturalCure())
|
||||
return TRUE;
|
||||
if (HasSuperEffectiveMoveAgainstOpponents(FALSE))
|
||||
return FALSE;
|
||||
if (AreStatsRaised())
|
||||
return FALSE;
|
||||
if (FindMonWithFlagsAndSuperEffective(MOVESTATUS_NOTAFFECTED, 2)
|
||||
|| FindMonWithFlagsAndSuperEffective(MOVESTATUS_NOTVERYEFFECTIVE, 3))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void AI_TrySwitchOrUseItem(void)
|
||||
{
|
||||
struct Pokemon *party;
|
||||
u8 bankIn1, bankIn2;
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
u8 bankIdentity = GetBankIdentity(gActiveBank);
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
if (ShouldSwitch())
|
||||
{
|
||||
if (*(gBattleStruct->field_294 + gActiveBank) == 6)
|
||||
{
|
||||
s32 monToSwitchId = GetMostSuitableMonToSwitchInto();
|
||||
if (monToSwitchId == 6)
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
|
||||
{
|
||||
bankIn1 = GetBankByIdentity(bankIdentity);
|
||||
bankIn2 = bankIn1;
|
||||
}
|
||||
else
|
||||
{
|
||||
bankIn1 = GetBankByIdentity(bankIdentity);
|
||||
bankIn2 = GetBankByIdentity(bankIdentity ^ BIT_MON);
|
||||
}
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
|
||||
{
|
||||
if ((gActiveBank & BIT_MON) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
}
|
||||
|
||||
for (monToSwitchId = firstId; monToSwitchId < lastId; monToSwitchId++)
|
||||
{
|
||||
if (GetMonData(&party[monToSwitchId], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
if (monToSwitchId == gBattlePartyID[bankIn1])
|
||||
continue;
|
||||
if (monToSwitchId == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (monToSwitchId == *(gBattleStruct->field_5C + bankIn1))
|
||||
continue;
|
||||
if (monToSwitchId == *(gBattleStruct->field_5C + bankIn2))
|
||||
continue;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*(gBattleStruct->field_294 + gActiveBank) = monToSwitchId;
|
||||
}
|
||||
|
||||
*(gBattleStruct->field_5C + gActiveBank) = *(gBattleStruct->field_294 + gActiveBank);
|
||||
return;
|
||||
}
|
||||
else if (ShouldUseItem())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
EmitCmd_x21(1, 0, (gActiveBank ^ BIT_SIDE) << 8);
|
||||
}
|
||||
|
||||
#define TYPE_FORESIGHT 0xFE
|
||||
#define TYPE_ENDTABLE 0xFF
|
||||
|
||||
static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8 *var)
|
||||
{
|
||||
s32 i = 0;
|
||||
|
||||
while (gTypeEffectiveness[i] != TYPE_ENDTABLE)
|
||||
{
|
||||
if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
|
||||
{
|
||||
i += 3;
|
||||
continue;
|
||||
}
|
||||
else if (gTypeEffectiveness[i] == atkType)
|
||||
{
|
||||
// check type1
|
||||
if (gTypeEffectiveness[i + 1] == defType1)
|
||||
*var = (*var * gTypeEffectiveness[i + 2]) / 10;
|
||||
// check type2
|
||||
if (gTypeEffectiveness[i + 1] == defType2 && defType1 != defType2)
|
||||
*var = (*var * gTypeEffectiveness[i + 2]) / 10;
|
||||
}
|
||||
i += 3;
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetMostSuitableMonToSwitchInto(void)
|
||||
{
|
||||
u8 opposingBank;
|
||||
u8 bestDmg; // note : should be changed to u32 for obvious reasons
|
||||
u8 bestMonId;
|
||||
u8 bankIn1, bankIn2;
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
struct Pokemon *party;
|
||||
s32 i, j;
|
||||
u8 invalidMons;
|
||||
u16 move;
|
||||
|
||||
if (*(gBattleStruct->field_5C + gActiveBank) != 6)
|
||||
return *(gBattleStruct->field_5C + gActiveBank);
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
return gBattlePartyID[gActiveBank] + 1;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
bankIn1 = gActiveBank;
|
||||
if (gAbsentBankFlags & gBitTable[GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON)])
|
||||
bankIn2 = gActiveBank;
|
||||
else
|
||||
bankIn2 = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_MON);
|
||||
|
||||
// UB: It considers the opponent only player's side even though it can battle alongside player;
|
||||
opposingBank = Random() & BIT_MON;
|
||||
if (gAbsentBankFlags & gBitTable[opposingBank])
|
||||
opposingBank ^= BIT_MON;
|
||||
}
|
||||
else
|
||||
{
|
||||
opposingBank = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ BIT_SIDE);
|
||||
bankIn1 = gActiveBank;
|
||||
bankIn2 = gActiveBank;
|
||||
}
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
|
||||
{
|
||||
if ((gActiveBank & BIT_MON) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
}
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
invalidMons = 0;
|
||||
|
||||
while (invalidMons != 0x3F) // all mons are invalid
|
||||
{
|
||||
bestDmg = 0;
|
||||
bestMonId = 6;
|
||||
// find the mon which type is the most suitable offensively
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
if (species != SPECIES_NONE
|
||||
&& GetMonData(&party[i], MON_DATA_HP) != 0
|
||||
&& !(gBitTable[i] & invalidMons)
|
||||
&& gBattlePartyID[bankIn1] != i
|
||||
&& gBattlePartyID[bankIn2] != i
|
||||
&& i != *(gBattleStruct->field_5C + bankIn1)
|
||||
&& i != *(gBattleStruct->field_5C + bankIn2))
|
||||
{
|
||||
u8 type1 = gBaseStats[species].type1;
|
||||
u8 type2 = gBaseStats[species].type2;
|
||||
u8 typeDmg = 10;
|
||||
ModulateByTypeEffectiveness(gBattleMons[opposingBank].type1, type1, type2, &typeDmg);
|
||||
ModulateByTypeEffectiveness(gBattleMons[opposingBank].type2, type1, type2, &typeDmg);
|
||||
if (bestDmg < typeDmg)
|
||||
{
|
||||
bestDmg = typeDmg;
|
||||
bestMonId = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
invalidMons |= gBitTable[i];
|
||||
}
|
||||
}
|
||||
|
||||
// ok, we know the mon has the right typing but does it have at least one super effective move?
|
||||
if (bestMonId != 6)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i);
|
||||
if (move != MOVE_NONE && TypeCalc(move, gActiveBank, opposingBank) & MOVESTATUS_SUPEREFFECTIVE)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i != 4)
|
||||
return bestMonId; // has both the typing and at least one super effective move
|
||||
|
||||
invalidMons |= gBitTable[bestMonId]; // sorry buddy, we want something better
|
||||
}
|
||||
else
|
||||
{
|
||||
invalidMons = 0x3F; // no viable mon to switch
|
||||
}
|
||||
}
|
||||
|
||||
gDynamicBasePower = 0;
|
||||
gBattleStruct->dynamicMoveType = 0;
|
||||
gBattleScripting.dmgMultiplier = 1;
|
||||
gBattleMoveFlags = 0;
|
||||
gCritMultiplier = 1;
|
||||
bestDmg = 0;
|
||||
bestMonId = 6;
|
||||
|
||||
// if we couldn't find the best mon in terms of typing, find the one that deals most damage
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
if ((u16)(GetMonData(&party[i], MON_DATA_SPECIES)) == SPECIES_NONE)
|
||||
continue;
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
if (gBattlePartyID[bankIn1] == i)
|
||||
continue;
|
||||
if (gBattlePartyID[bankIn2] == i)
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
continue;
|
||||
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
|
||||
gBattleMoveDamage = 0;
|
||||
if (move != MOVE_NONE && gBattleMoves[move].power != 1)
|
||||
{
|
||||
AI_CalcDmg(gActiveBank, opposingBank);
|
||||
TypeCalc(move, gActiveBank, opposingBank);
|
||||
}
|
||||
if (bestDmg < gBattleMoveDamage)
|
||||
{
|
||||
bestDmg = gBattleMoveDamage;
|
||||
bestMonId = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bestMonId;
|
||||
}
|
||||
|
||||
// TODO: use PokemonItemEffect struct instead of u8 once it's documented
|
||||
static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument
|
||||
{
|
||||
if (itemId == ITEM_FULL_RESTORE)
|
||||
return AI_ITEM_FULL_RESTORE;
|
||||
if (itemEffect[4] & 4)
|
||||
return AI_ITEM_HEAL_HP;
|
||||
if (itemEffect[3] & 0x3F)
|
||||
return AI_ITEM_CURE_CONDITION;
|
||||
if (itemEffect[0] & 0x3F || itemEffect[1] != 0 || itemEffect[2] != 0)
|
||||
return AI_ITEM_X_STAT;
|
||||
if (itemEffect[3] & 0x80)
|
||||
return AI_ITEM_GUARD_SPECS;
|
||||
|
||||
return AI_ITEM_NOT_RECOGNIZABLE;
|
||||
}
|
||||
|
||||
static bool8 ShouldUseItem(void)
|
||||
{
|
||||
struct Pokemon *party;
|
||||
s32 i;
|
||||
u8 validMons = 0;
|
||||
bool8 shouldUse = FALSE;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBankIdentity(gActiveBank) == IDENTITY_PLAYER_MON2)
|
||||
return FALSE;
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
if (GetMonData(&party[i], MON_DATA_HP) != 0
|
||||
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
|
||||
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
|
||||
{
|
||||
validMons++;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
u16 item;
|
||||
const u8 *itemEffects;
|
||||
u8 paramOffset;
|
||||
u8 bankSide;
|
||||
|
||||
if (i != 0 && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1)
|
||||
continue;
|
||||
item = gBattleResources->battleHistory->trainerItems[i];
|
||||
if (item == ITEM_NONE)
|
||||
continue;
|
||||
if (gItemEffectTable[item - 13] == NULL)
|
||||
continue;
|
||||
|
||||
if (item == ITEM_ENIGMA_BERRY)
|
||||
itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect;
|
||||
else
|
||||
itemEffects = gItemEffectTable[item - 13];
|
||||
|
||||
*(gBattleStruct->AI_itemType + gActiveBank / 2) = GetAI_ItemType(item, itemEffects);
|
||||
|
||||
switch (*(gBattleStruct->AI_itemType + gActiveBank / 2))
|
||||
{
|
||||
case AI_ITEM_FULL_RESTORE:
|
||||
if (gBattleMons[gActiveBank].hp >= gBattleMons[gActiveBank].maxHP / 4)
|
||||
break;
|
||||
if (gBattleMons[gActiveBank].hp == 0)
|
||||
break;
|
||||
shouldUse = TRUE;
|
||||
break;
|
||||
case AI_ITEM_HEAL_HP:
|
||||
paramOffset = GetItemEffectParamOffset(item, 4, 4);
|
||||
if (paramOffset == 0)
|
||||
break;
|
||||
if (gBattleMons[gActiveBank].hp == 0)
|
||||
break;
|
||||
if (gBattleMons[gActiveBank].hp < gBattleMons[gActiveBank].maxHP / 4 || gBattleMons[gActiveBank].maxHP - gBattleMons[gActiveBank].hp > itemEffects[paramOffset])
|
||||
shouldUse = TRUE;
|
||||
break;
|
||||
case AI_ITEM_CURE_CONDITION:
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) = 0;
|
||||
if (itemEffects[3] & 0x20 && gBattleMons[gActiveBank].status1 & STATUS_SLEEP)
|
||||
{
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x20;
|
||||
shouldUse = TRUE;
|
||||
}
|
||||
if (itemEffects[3] & 0x10 && (gBattleMons[gActiveBank].status1 & STATUS_POISON || gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON))
|
||||
{
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x10;
|
||||
shouldUse = TRUE;
|
||||
}
|
||||
if (itemEffects[3] & 0x8 && gBattleMons[gActiveBank].status1 & STATUS_BURN)
|
||||
{
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x8;
|
||||
shouldUse = TRUE;
|
||||
}
|
||||
if (itemEffects[3] & 0x4 && gBattleMons[gActiveBank].status1 & STATUS_FREEZE)
|
||||
{
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x4;
|
||||
shouldUse = TRUE;
|
||||
}
|
||||
if (itemEffects[3] & 0x2 && gBattleMons[gActiveBank].status1 & STATUS_PARALYSIS)
|
||||
{
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x2;
|
||||
shouldUse = TRUE;
|
||||
}
|
||||
if (itemEffects[3] & 0x1 && gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION)
|
||||
{
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x1;
|
||||
shouldUse = TRUE;
|
||||
}
|
||||
break;
|
||||
case AI_ITEM_X_STAT:
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) = 0;
|
||||
if (gDisableStructs[gActiveBank].isFirstTurn == 0)
|
||||
break;
|
||||
if (itemEffects[0] & 0xF)
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x1;
|
||||
if (itemEffects[1] & 0xF0)
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x2;
|
||||
if (itemEffects[1] & 0xF)
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x4;
|
||||
if (itemEffects[2] & 0xF)
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x8;
|
||||
if (itemEffects[2] & 0xF0)
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x20;
|
||||
if (itemEffects[0] & 0x30)
|
||||
*(gBattleStruct->AI_itemFlags + gActiveBank / 2) |= 0x80;
|
||||
shouldUse = TRUE;
|
||||
break;
|
||||
case AI_ITEM_GUARD_SPECS:
|
||||
bankSide = GetBankSide(gActiveBank);
|
||||
if (gDisableStructs[gActiveBank].isFirstTurn != 0 && gSideTimers[bankSide].mistTimer == 0)
|
||||
shouldUse = TRUE;
|
||||
break;
|
||||
case AI_ITEM_NOT_RECOGNIZABLE:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (shouldUse)
|
||||
{
|
||||
EmitCmd_x21(1, 1, 0);
|
||||
*(gBattleStruct->field_C0 + (gActiveBank / 2) * 2) = item;
|
||||
gBattleResources->battleHistory->trainerItems[i] = 0;
|
||||
return shouldUse;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
@ -1772,11 +1772,11 @@ u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef)
|
||||
return flags;
|
||||
}
|
||||
|
||||
u8 AI_TypeCalc(u16 move, u16 species, u8 ability)
|
||||
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility)
|
||||
{
|
||||
s32 i = 0;
|
||||
u8 flags = 0;
|
||||
u8 type1 = gBaseStats[species].type1, type2 = gBaseStats[species].type2;
|
||||
u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2;
|
||||
u8 moveType;
|
||||
|
||||
if (move == MOVE_STRUGGLE)
|
||||
@ -1784,7 +1784,7 @@ u8 AI_TypeCalc(u16 move, u16 species, u8 ability)
|
||||
|
||||
moveType = gBattleMoves[move].type;
|
||||
|
||||
if (ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
|
||||
if (targetAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND)
|
||||
{
|
||||
flags = MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED;
|
||||
}
|
||||
@ -1809,7 +1809,7 @@ u8 AI_TypeCalc(u16 move, u16 species, u8 ability)
|
||||
i += 3;
|
||||
}
|
||||
}
|
||||
if (ability == ABILITY_WONDER_GUARD
|
||||
if (targetAbility == ABILITY_WONDER_GUARD
|
||||
&& (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)))
|
||||
&& gBattleMoves[move].power)
|
||||
flags |= MOVESTATUS_NOTAFFECTED;
|
||||
@ -11087,7 +11087,7 @@ static void atkEF_pokeball_catch_calculation(void)
|
||||
{
|
||||
if (gLastUsedItem == ITEM_MASTER_BALL)
|
||||
{
|
||||
gBattleResults.unk5_1 = 1;
|
||||
gBattleResults.usedMasterBall = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -353,7 +353,7 @@ void sub_803F850(u8 arg0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < sub_8009FCC(); i++)
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
gBattleExecBuffer |= gBitTable[arg0] << (i << 2);
|
||||
|
||||
gBattleExecBuffer &= ~(0x10000000 << arg0);
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "diploma.h"
|
||||
#include "palette.h"
|
||||
#include "main.h"
|
||||
#include "gpu_regs.h"
|
||||
@ -33,7 +34,7 @@ static void InitDiplomaBg(void);
|
||||
static void InitDiplomaWindow(void);
|
||||
static void PrintDiplomaText(u8 *, u8, u8);
|
||||
|
||||
EWRAM_DATA void **gDiplomaTilemapPtr = {NULL};
|
||||
EWRAM_DATA static void **sDiplomaTilemapPtr = {NULL};
|
||||
|
||||
static void VBlankCB(void)
|
||||
{
|
||||
@ -42,14 +43,14 @@ static void VBlankCB(void)
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
static const u16 gDiplomaPalettes[][16] =
|
||||
static const u16 sDiplomaPalettes[][16] =
|
||||
{
|
||||
INCBIN_U16("graphics/misc/diploma_national.gbapal"),
|
||||
INCBIN_U16("graphics/misc/diploma_hoenn.gbapal"),
|
||||
};
|
||||
|
||||
static const u8 gDiplomaTilemap[] = INCBIN_U8("graphics/misc/diploma_map.bin.lz");
|
||||
static const u8 gDiplomaTiles[] = INCBIN_U8("graphics/misc/diploma.4bpp.lz");
|
||||
static const u8 sDiplomaTilemap[] = INCBIN_U8("graphics/misc/diploma_map.bin.lz");
|
||||
static const u8 sDiplomaTiles[] = INCBIN_U8("graphics/misc/diploma.4bpp.lz");
|
||||
|
||||
void CB2_ShowDiploma(void)
|
||||
{
|
||||
@ -76,15 +77,15 @@ void CB2_ShowDiploma(void)
|
||||
ResetSpriteData();
|
||||
ResetPaletteFade();
|
||||
FreeAllSpritePalettes();
|
||||
LoadPalette(gDiplomaPalettes, 0, 64);
|
||||
gDiplomaTilemapPtr = malloc(0x1000);
|
||||
LoadPalette(sDiplomaPalettes, 0, 64);
|
||||
sDiplomaTilemapPtr = malloc(0x1000);
|
||||
InitDiplomaBg();
|
||||
InitDiplomaWindow();
|
||||
reset_temp_tile_data_buffers();
|
||||
decompress_and_copy_tile_data_to_vram(1, &gDiplomaTiles, 0, 0, 0);
|
||||
decompress_and_copy_tile_data_to_vram(1, &sDiplomaTiles, 0, 0, 0);
|
||||
while (free_temp_tile_data_buffers_if_possible())
|
||||
;
|
||||
LZDecompressWram(&gDiplomaTilemap, gDiplomaTilemapPtr);
|
||||
LZDecompressWram(&sDiplomaTilemap, sDiplomaTilemapPtr);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
DisplayDiplomaText();
|
||||
BlendPalettes(-1, 16, 0);
|
||||
@ -122,7 +123,7 @@ static void Task_DiplomaFadeOut(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
Free(gDiplomaTilemapPtr);
|
||||
Free(sDiplomaTilemapPtr);
|
||||
FreeAllWindowBuffers();
|
||||
DestroyTask(taskId);
|
||||
SetMainCallback2(sub_80861E8);
|
||||
@ -147,7 +148,7 @@ static void DisplayDiplomaText(void)
|
||||
CopyWindowToVram(0, 3);
|
||||
}
|
||||
|
||||
static const struct BgTemplate gDiplomaBgTemplates[2] =
|
||||
static const struct BgTemplate sDiplomaBgTemplates[2] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
@ -172,8 +173,8 @@ static const struct BgTemplate gDiplomaBgTemplates[2] =
|
||||
static void InitDiplomaBg(void)
|
||||
{
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gDiplomaBgTemplates, 2);
|
||||
SetBgTilemapBuffer(1, gDiplomaTilemapPtr);
|
||||
InitBgsFromTemplates(0, sDiplomaBgTemplates, 2);
|
||||
SetBgTilemapBuffer(1, sDiplomaTilemapPtr);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
ShowBg(0);
|
||||
ShowBg(1);
|
||||
@ -182,7 +183,7 @@ static void InitDiplomaBg(void)
|
||||
SetGpuReg(REG_OFFSET_BLDY, DISPCNT_MODE_0);
|
||||
}
|
||||
|
||||
static const struct WindowTemplate gDiplomaWinTemplates[2] =
|
||||
static const struct WindowTemplate sDiplomaWinTemplates[2] =
|
||||
{
|
||||
{
|
||||
.priority = 0,
|
||||
@ -198,7 +199,7 @@ static const struct WindowTemplate gDiplomaWinTemplates[2] =
|
||||
|
||||
static void InitDiplomaWindow(void)
|
||||
{
|
||||
InitWindows(gDiplomaWinTemplates);
|
||||
InitWindows(sDiplomaWinTemplates);
|
||||
DeactivateAllTextPrinters();
|
||||
LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
|
||||
FillWindowPixelBuffer(0, 0);
|
||||
|
@ -59,7 +59,7 @@ extern u8* GetMonNick(struct Pokemon* mon, u8* dst);
|
||||
extern u8* GetBoxMonNick(struct BoxPokemon* boxMon, u8* dst);
|
||||
extern u8 sav1_map_get_name(void);
|
||||
extern s8 sub_8198C58(void);
|
||||
extern void sub_81DB5E8(u8* str1, u8* str2, u8);
|
||||
extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern void fade_screen(u8, u8);
|
||||
extern void overworld_free_bg_tilemaps(void);
|
||||
@ -404,8 +404,8 @@ static bool8 sub_807158C(struct DaycareData* daycare, u8 daycareId)
|
||||
|| StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->OT_name) != 0))
|
||||
{
|
||||
StringCopy(gStringVar1, nick);
|
||||
sub_81DB5E8(gStringVar2, daycareMon->OT_name, daycareMon->language_maybe);
|
||||
sub_81DB5E8(gStringVar3, daycareMon->monName, daycareMon->unknown);
|
||||
TVShowConvertInternationalString(gStringVar2, daycareMon->OT_name, daycareMon->language_maybe);
|
||||
TVShowConvertInternationalString(gStringVar3, daycareMon->monName, daycareMon->unknown);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "easy_chat.h"
|
||||
#include "event_data.h"
|
||||
#include "money.h"
|
||||
#include "tv.h"
|
||||
#include "coins.h"
|
||||
#include "text.h"
|
||||
|
||||
@ -36,7 +37,6 @@ extern void sub_813624C(void); // clears something pokeblock related
|
||||
extern void ResetPokedex(void);
|
||||
extern void sub_8084400(void);
|
||||
extern void ClearMailData(void);
|
||||
extern void ClearTVShowData(void);
|
||||
extern void ResetGabbyAndTy(void);
|
||||
extern void ResetSecretBases(void);
|
||||
extern void ResetLinkContestBoolean(void);
|
||||
|
@ -114,7 +114,7 @@ void sub_80FC190(void)
|
||||
{
|
||||
SetMainCallback2(c2_exit_to_overworld_2_switch);
|
||||
}
|
||||
else if (gBattleOutcome == 8)
|
||||
else if (gBattleOutcome == BATTLE_SAFARI_OUT_OF_BALLS)
|
||||
{
|
||||
ScriptContext2_RunNewScript(gUnknown_082A4B4C);
|
||||
warp_in();
|
||||
|
@ -170,13 +170,13 @@ extern const u8 gText_BattlePyramidFloor[];
|
||||
void DisplayPyramidFloorWindow(void)
|
||||
{
|
||||
// TODO: fix location
|
||||
if (*(u16*)(&gSaveBlock2Ptr->field_CAA[8]) == 7)
|
||||
if (gSaveBlock2Ptr->field_CAA[4] == 7)
|
||||
sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_1);
|
||||
else
|
||||
sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_2);
|
||||
PutWindowTilemap(sBattlePyramidFloorWindowId);
|
||||
sub_81973FC(sBattlePyramidFloorWindowId, 0);
|
||||
StringCopy(gStringVar1, gUnknown_08510510[*(u16*)(&gSaveBlock2Ptr->field_CAA[8])]);
|
||||
StringCopy(gStringVar1, gUnknown_08510510[gSaveBlock2Ptr->field_CAA[4]]);
|
||||
StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor);
|
||||
PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
|
||||
CopyWindowToVram(sBattlePyramidFloorWindowId, 2);
|
||||
|
@ -625,7 +625,7 @@ u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color)
|
||||
return dest;
|
||||
}
|
||||
|
||||
bool32 sub_8009228(u8 *str)
|
||||
bool32 IsStringJapanese(u8 *str)
|
||||
{
|
||||
while (*str != EOS)
|
||||
{
|
||||
|
11
sym_bss.txt
11
sym_bss.txt
@ -25,16 +25,9 @@
|
||||
.include "src/fldeff_cut.o"
|
||||
.include "src/script_menu.o"
|
||||
.include "src/record_mixing.o"
|
||||
.include "src/tv.o"
|
||||
|
||||
gUnknown_03001174: @ 3001174
|
||||
.space 0x1
|
||||
|
||||
gUnknown_03001175: @ 3001175
|
||||
.space 0x1
|
||||
|
||||
gUnknown_03001176: @ 3001176
|
||||
.space 0x2
|
||||
|
||||
.space 1 @ TODO: define this u32 in mauville_old_man
|
||||
gUnknown_03001178: @ 3001178
|
||||
.space 0x4
|
||||
|
||||
|
@ -210,13 +210,7 @@ gBattleMainFunc: @ 3005D04
|
||||
.space 0xC
|
||||
|
||||
gBattleResults: @ 3005D10
|
||||
.space 0x2A
|
||||
|
||||
gUnknown_03005D3A: @ 3005D3A
|
||||
.space 0xC
|
||||
|
||||
gUnknown_03005D46: @ 3005D46
|
||||
.space 0xE
|
||||
.space 0x44
|
||||
|
||||
gLeveledUpInBattle: @ 3005D54
|
||||
.space 0xC
|
||||
@ -326,17 +320,7 @@ gUnknown_030060B4: @ 30060B4
|
||||
gUnknown_030060B8: @ 30060B8
|
||||
.space 0x4
|
||||
|
||||
gUnknown_030060BC: @ 30060BC
|
||||
.space 0x4
|
||||
|
||||
gUnknown_030060C0: @ 30060C0
|
||||
.space 0x10
|
||||
|
||||
gUnknown_030060D0: @ 30060D0
|
||||
.space 0x10
|
||||
|
||||
gUnknown_030060E0: @ 30060E0
|
||||
.space 0x50
|
||||
.include "tv.o"
|
||||
|
||||
gUnknown_03006130: @ 3006130
|
||||
.space 0x34
|
||||
@ -393,7 +377,7 @@ gUnknown_030061EC: @ 30061EC
|
||||
.space 0x4
|
||||
|
||||
.include"save.o"
|
||||
|
||||
|
||||
.space 0x8
|
||||
|
||||
gRamSaveSectionLocations: @ 3006220
|
||||
|
@ -1029,16 +1029,7 @@ gBagPockets: @ 2039DD8
|
||||
.space 0x28
|
||||
|
||||
gUnknown_02039E00: @ 2039E00
|
||||
.space 0x2
|
||||
|
||||
gUnknown_02039E02: @ 2039E02
|
||||
.space 0xB
|
||||
|
||||
gUnknown_02039E0D: @ 2039E0D
|
||||
.space 0x11
|
||||
|
||||
gUnknown_02039E1E: @ 2039E1E
|
||||
.space 0xE2
|
||||
.space 0x100
|
||||
|
||||
gUnknown_02039F00: @ 2039F00
|
||||
.space 0x8
|
||||
@ -1145,26 +1136,7 @@ gUnknown_0203A01D: @ 203A01D
|
||||
gUnknown_0203A020: @ 203A020
|
||||
.space 0x4
|
||||
|
||||
gUnknown_0203A024: @ 203A024
|
||||
.space 0x2
|
||||
|
||||
gUnknown_0203A026: @ 203A026
|
||||
.space 0x2
|
||||
|
||||
gUnknown_0203A028: @ 203A028
|
||||
.space 0x2
|
||||
|
||||
gUnknown_0203A02A: @ 203A02A
|
||||
.space 0x2
|
||||
|
||||
gUnknown_0203A02C: @ 203A02C
|
||||
.space 0x4
|
||||
|
||||
gUnknown_0203A030: @ 203A030
|
||||
.space 0x1
|
||||
|
||||
gUnknown_0203A031: @ 203A031
|
||||
.space 0x3
|
||||
.include "src/tv.o"
|
||||
|
||||
gUnknown_0203A034: @ 203A034
|
||||
.space 0x4
|
||||
|
Loading…
Reference in New Issue
Block a user